第三次作业
第一题:
删除字符串中数字字符
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你一个字符串,要你删除指针 s所指的字符串中的所有数字字符
3:解答:第一步:定义i=0,n,j=0,i位a[]下标,j为s[]下标,调用函数strlen(s),n用于记录字符串的长度
第二步:定义一个字符数组a[81],调用函数strcpy(a,s)
第三步:利用一个for循环,如果(a[i]>'9'或a[i]<'0'),则s[j]=a[i]; j++;
第四步:循环结束后,s[j]=‘\0’,表示字符串结束
流程图:
实验代码:
#include<string.h>
void delnum(char *s)
{
int i=0,n,j=0;
n=strlen(s);
char a[81];
strcpy(a,s);
for(i=0;i<n;i++)
{
if(a[i]<'0'||a[i]>'9')
{
s[j]=a[i];
j++;
}
}
s[j]='\0';
}
错误信息:
a[i]<'0'&&a[i]>'9'
改正方式:
a[i]<'0'||a[i]>'9'
第二题:
统计子串在母串出现的次数
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你两个字符串,一个是长度为3的字符串,要你统计一个长度为3的字符串在另一个字符串中出现的次数
3:解答:第一步:定义i=0,n,k=0;i为str[]的下标,k统计substr[]在str[]中出现的次数
第二步:调用函数strlen( str),利用n用于记录字符串的长度
第三步:利用for函数,如果(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])成立,k++
第四步:返回k
流程图:
实验代码:
int fun(char *str,char *substr)
{
int i=0,n,k=0;
n=strlen( str);
for(i=0;i<n;i++)
{
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
k++;
}
return k;
}
错误信息:
无
第三题:
字符串中除首尾字符外的其余字符按降序排列
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你一个字符串,要你对字符串中除首、尾字符外的其余字符按降序排列
3:解答:第一步:定义i=1,k,j=1,n=1;在冒泡循环中,i用于外层for循环,表示跑了第几轮了,j用于内层for循环,为s[]的下标,k为交换的中间量
第二步:在定义一个char max=s[1];暂时记录最大值
第三步:利用冒泡排序法,让字符串中除首尾字符外的其余字符按降序排列
流程图:
实验代码:
int fun(char *s,int num)
{
int i,k,j,n=1;
char max=s[1];
for(i=1;i<num-1;i++)
{
for(j=1;j<num-1-i;j++)
{
if(s[j]<s[j+1])
{
k=s[j];s[j]=s[j+1];s[j+1]=k;
}
}
}
}
错误信息:
int max=s[1];
改正方式:
char max=s[1];
第四题:
输出学生成绩
设计思路:
1:看题目:主函数,知道它要你干什么
2:理解与分析:给你N个学生的成绩,让你统计并输出学生的平均成绩、最高成绩和最低成绩
3:解答:第一步:定义整形n,i,*p;其中:n为学生个数,i用于表示*(p+i),*p表示p为指针
第二步:定义浮点型average,max=0,min=0,sum=0;分别表示平均成绩、最高成绩、最低成绩、所有成绩和
第三步:输入n,再利用动态内存分配
第四步:输入n个成绩,并将第一个元素赋值给max,min,再求和、找最大值及最小值,最后求average
第五步:输出学生的平均成绩、最高成绩和最低成绩
流程图:
实验代码:
#include<stdio.h>
int main()
{
int n,i=0,*p;
float average,max=0,min=0,sum=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);
if(i==0)
{
max=*(p+i);min=*(p+i);
}
sum=sum+*(p+i);
if(max<*(p+i))
max=*(p+i);
if(min>*(p+i))
min=*(p+i);
}
printf("average = %.2f\n",sum*1.0/n);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
free(p);
}
错误信息:
无
第五题:
计算职工工资
设计思路:
1:看题目:主函数,知道它要你干什么
2:构造结构:struct worker,并且在里面定义每个职工:姓名、基本工资、浮动工资和支出;名字为字符数组,其它都为float型;最后再用一个数组s[]记录这样的worker有多少
3:在主函数中:
第一步:定义N,i=0;N为有多少职工,i为s[]的下标;
第二步:输入N,在利用一个for循环,将s[i]中元素全都输入,再s[i].w=s[i].bgong+s[i].fgong-s[i].x;最后输出s[i].name,s[i].w;
流程图:
实验代码:
#include<stdio.h>
struct student{
char num[10],name[15];
int x;
}s[15];
int main()
{
int i,n,sum=0;
float average;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
sum=sum+s[i].x;
}
average=sum*1.0/n;
printf("%.2f\n",average);
for(i=0;i<n;i++)
{
if(s[i].x<average)
printf("%s %s\n",s[i].name,s[i].num);
}
}
错误信息:
第六题:
计算平均成绩
设计思路:
1:看题目:主函数,知道它要你干什么
2:构造结构:struct student,并在里面定义学号,姓名,成绩;其中学号与姓名为字符数组,成绩为整形;最后再用一个数组s[]记录有多少学生
3:在主函数中:
第一步:定义i=0,n,sum=0;average;其中整形:i为s[]的下标,n为有多少学生,sum为求和;浮点型:平均数average
第二步:输入n;再利用一个for循环,将s[]中元素全都输入scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);sum=sum+s[i].x;
第三步:求出平均数并输出它:average=sum*1.0/n;printf("%.2f\n",average);
第四步:再利用一个for循环,输出每位平均线以下的学生的姓名和学号:printf("%s %s\n",s[i].name,s[i].num);
流程图:
实验代码:
#include<stdio.h>
struct student{
char num[10],name[15];
int x;
}s[15];
int main()
{
int i,n,sum=0;
float average;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
sum=sum+s[i].x;
}
average=sum*1.0/n;
printf("%.2f\n",average);
for(i=0;i<n;i++)
{
if(s[i].x<average)
printf("%s %s\n",s[i].name,s[i].num);
}
}
错误信息:
第七题:
按等级统计学生成绩
设计思路:
1:看题目:主函数,知道它要你干什么——实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数
2在set_grade中:
第一步:定义i,count=0;其中i为p[]的下标,count用于记录不及格人数
第二步:利用一个for循环,判断p[i].score属于哪个范围,并赋值给相应的p[i].grade,最后在小于60分的条件中加入count++;
第三步:返回count—— return count;
流程图:
实验代码:
int set_grade( struct student *p, int n )
{
int i,count=0;
for(i=0;i<n;i++)
{
if((p[i].score)>=85)
{
p[i].grade='A';
}else if((p[i].score)>=70)
{
p[i].grade='B';
}else if((p[i].score)>=60)
{
p[i].grade='C';
}else
{
p[i].grade='D';
count++;
}
}
return count;
错误信息:
错误1:我将p[i].grade='A'写成了p[i].score=‘A’;其它也同理
改正方式:将它改回来
第八题:
结构体数组按总分排序
设计思路:
1:看题目:主函数,知道它要你干什么——编写函数calc求出每名学生的总分。 编写函数sort按每名学生的总分从高到低对这组数据进行排序
2在calc中:
第一步:定义i;它作为p[]的下标
第二步:利用一个for循环:求n个p[i].sum——p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
3在sort中:第一步:定义整形i,j;在定义一个struct student x;其中i用于内层for循环,j用于外层for循环,而x为交换的中间量
第二步:利用一个冒泡排序法,将它们按每名学生的总分从高到低对这组数据进行排序
流程图:
实验代码:
void calc(struct student *p,int n)
{
int i;
for(i=0;i<n;i++)
{
p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
}
}
void sort(struct student *p,int n)
{
int i,j;
struct student x;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(p[i].sum<p[i+1].sum)
{
x=p[i];p[i]=p[i+1];p[i+1]=x;
}
}
}
}
错误信息:
我的代码:
https://gitee.com/yuanzhong19990808/my_code/upload/master
我评论的人:
李新华:http://www.cnblogs.com/Lixinhua18/p/8671886.html
陈天胤:http://www.cnblogs.com/cty-1/
马钰娟:http://www.cnblogs.com/dfgfds/p/8662097.html
姜健:http://www.cnblogs.com/jj990519/
李伍壹:http://www.cnblogs.com/Lixinhua18/p/8671886.html
辛静瑶:http://www.cnblogs.com/X-JY/p/8652592.html
评论我的人:
陈天胤
邱冠华
姜健
李伍壹
辛静瑶
我的进度:
我的总结:
删除字符串中数字字符:调用函数解决问题,还有用for循环
统计子串在母串出现的次数:调用函数,再用一个简单条件判断解决问题
字符串中除首尾字符外的其余字符按降序排列:用冒泡排序法进行排序
输出学生成绩:要用两个for循环分别找最大值与最小值
计算职工工资:利用结构解决问题
计算平均成绩:利用结构解决问题
按等级统计学生成绩:利用结构解决问题,还有多个if的条件判断
结构体数组按总分排序:利用结构解决问题,还有排序