第二次作业
作业要求一
PS:提交答案正确后的再次提交是尝试不同的方法
作业要求二
题目1 删除字符串中数字字符
1. 设计思路
(1). 算法
第一步:定义一个新的字符数组a等于要修改的字符数组s
第二步:修改字符数组s,把a中不是数字的元素赋给s,完成字符串的删除。
(2). 流程图
无
2. 实验代码
void delnum(char *s)
{
int i;
char *a=s;
for(i=0;*(a+i)!='\0';i++)
{
if((*(a+i)<'0')||(*(a+i)>'9'))
{
*s=*(a+i);
s++;
}
}
*s='\0';
}
3. 本题调试过程碰到问题及解决办法
无
题目2 统计子串在母串出现的次数
1. 设计思路
(1). 算法
第一步:从母串第i个元素开始与字串比较,母串子串依次加一,如果存在不相等的,则flag=0,如果flag=1,则count++,
第二步:然后从母串第i=i+1个元素开始比较,直到满足*(str+i+j)=='\0'结束
第三步:返回count
这个题思路我不知道怎么描述好,可能描述的不是很清楚,不行就看看流程图吧
(2). 流程图
2. 实验代码
int fun(char *str,char *substr)
{
int count=0,i,j=0,flag=1;
for(i=0;*(str+i+j)!='\0';i++,flag=1)
{
for(j=0;*(substr+j)!='\0';j++)
{
if(*(str+i+j)!=*(substr+j))
{
flag=0;
}
}
if(flag==1)
{
count++;
}
}
return count;
}
3. 本题调试过程碰到问题及解决办法
第一次做的时候没有考虑到通用性的问题,只是根据题目要求做。
题目3 字符串中除首尾字符外的其余字符按降序排列
1. 设计思路
(1). 算法
第一步:把字符串的首尾字符排除,剩余的字符按照从大到小的顺序冒泡排列
第二步:思路就是这样啊,我不是把题目复述了一遍,具体操作看代码
(2). 流程图
2. 实验代码
int fun(char *s,int num)
{
int i,j,t;
for(i=1;i<num-1;i++)
{
for(j=1;j<num-i-1;j++)
{
if(s[j]<s[j+1])
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}
}
}
3. 本题调试过程碰到问题及解决办法
无
题目4 输出学生成绩
1. 设计思路
(1). 算法
第一步:输入数据并计算平均值
第二步:再求最大值和最小值
第三步:输出数据
(2). 流程图
无
2. 实验代码
#include<stdio.h>
int main()
{
int n,i;
int *p;
float max,min,average=0;
scanf("%d",&n);
if ((p = (int *) calloc (n, sizeof(int))) == NULL)
{
printf ("Not able to allocate memory. \n");
exit(1);
}
for(i=0;i<n;i++)
{
scanf("%d",p+i);
average=average+*(p+i);
}
average=average/n;
max=*p,min=*p;
for(i=0;i<n;i++)
{
if(max<*(p+i))
{
max=*(p+i);
}
if(min>*(p+i))
{
min=*(p+i);
}
}
printf("average = %.2f\n",average);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
}
3. 本题调试过程碰到问题及解决办法
无
题目5 计算职工工资
1. 设计思路
(1). 算法
第一步:创建结构
第二步:输入数据
第三步:计算职工工资
第四步:输出数据
(2). 流程图
2. 实验代码
#include<stdio.h>
struct message {
char name[10];
float jibengz;
float fudonggz;
float zhichu;
float sum;
};
int main()
{
int n;
scanf("%d",&n);
struct message m1;
while(n--)
{
scanf("%s%f%f%f",m1.name,&m1.jibengz,&m1.fudonggz,&m1.zhichu);
m1.sum=m1.jibengz+m1.fudonggz-m1.zhichu;
printf("%s %.2f\n",m1.name,m1.sum);
}
}
3. 本题调试过程碰到问题及解决办法
错误原因:结构定义时如果把变量类型定义为int型则会出现错误
改正:改成float或double型即可
题目6 计算平均成绩
1. 设计思路
(1). 算法
第一步:创建结构,输入数据
第二步:计算平均成绩并输出
第三步:如果学生成绩在平均成绩下,输出其信息
(2). 流程图
无
2. 实验代码
#include<stdio.h>
struct student{
char id[6];
char name[10];
int score;
};
int main()
{
int n;
int i;
float avg=0;
struct student s[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d",s[i].id,s[i].name,&s[i].score);
avg=avg+s[i].score;
}
avg=avg/n;
printf("%.2f\n",avg);
for(i=0;i<n;i++)
{
if(s[i].score<avg)
{
printf("%s %s\n",s[i].name,s[i].id);
}
}
}
3. 本题调试过程碰到问题及解决办法
错误原因:定义id时只给出5个空间,即char id[5]
改正:应为最后会有\0,只要定义空间为6以上即可
题目7 按等级统计学生成绩
1. 设计思路
(1). 算法
第一步:判断学生成绩的等级,并赋给结构里统计等级的变量
第二步:在判断等级时,如果等级为D,则count加1,最后返回count
(2). 流程图
2. 实验代码
int set_grade( struct student *p, int n )
{
int i;
int count=0;
for(i=0;i<n;i++)
{
if((p->score<=100)&&(p->score>=85))
{
p->grade='A' ;
}
else if((p->score<=84)&&(p->score>=70))
{
p->grade='B' ;
}
else if((p->score<=69)&&(p->score>=60))
{
p->grade='C' ;
}
else
{
p->grade='D' ;
count++;
}
p++;
}
return count;
}
3. 本题调试过程碰到问题及解决办法
无
题目8 结构体数组按总分排序
1. 设计思路
(1). 算法
第一步:计算学生的总成绩
第二步:用冒泡排序按成绩降序把学生排列
(2). 流程图
无
2. 实验代码
void calc(struct student *p,int n)
{
int i,j;
for(i=0;i<n;i++)
{
p->sum=0;
for(j=0;j<3;j++)
{
p->sum=p->sum+p->score[j];
}
p++;
}
}
void sort(struct student *p,int n)
{
int i,j;
struct student t;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(p[j].sum<p[j+1].sum)
{
t=p[j];p[j]=p[j+1];p[j+1]=t;
}
}
}
}
3. 本题调试过程碰到问题及解决办法
无
作业要求三
1. 知识的总结
复习了指针,学习了结构。
都学会了。
2. 代码管理
Git地址
3. 点评
辛静瑶
李伍壹
陈天胤
4. 图表
不想弄了