第二次作业
一 .
6-7.
1.设计思路:
(1)第一步:定义数组初值,用for语句在数组中找出出大于0小于9的数字字符。
第二步:出现数字数组就将其后一项前移,代替数字数组,最终完成数字数组的删除。
(2)流程图
2.实验代码
void delnum(char *s) { int i,k=0; for(i=0;s[i]!='\0';) { if(s[i]>='0'&&s[i]<='9') { for(k=i;s[k]!=0;k++) s[k]=s[k+1]; } else i++; } }
3.错误提示
6-8
1.设计思路
(1)第一步:用for循环找出substr数组的字符串长度,并记作一个字符串。
第二步:再运用for循环在str数组中寻找substr数组出现的次数。
2.实验代码
int fun(char *str,char *substr) { int n=0,i=0,k=0,flag=0; for(i=0;str[i]!='\0';i++) { for(k=0;substr[k]!='\0';k++) { if(substr[k]==str[i+k]) flag=1; else flag=0; } if(flag==1) { n++; flag=0; } } return n; }
3.
错误信息1:
错误原因:在if语句中忽略了flag==1没法继续执行这一点。
改正方法:捋顺了一下,尝试了flag==0或1的结果,最终flag=1才能继续向下执行,并正确。
错误信息2:
错误原因:无意在i的旁边加了两个点...
改正方法:对着正确的图看了几遍才发现这个问题。
6-9
1.设计思路
(1)第一步:先定义几个数,并将min初始化(去掉首位)。
第二步:运用for循环将余下的字符进行比较,并将小的字符向后移动。
第三步:将每一个字符都与后面的进行比较并移动,最终输出正确的排序。
2.
int fun(char *s,int num) { int i,min=(num-2),k; for(i=1;i<=min;i++) { if(s[min]>s[i]) { k=s[min]; s[min]=s[i]; s[i]=k; } } if(num>0) { num--; fun(s,num); } }
3.
错误信息
错误原因:将排序的代码打成了取值的。
改正方法:检查一遍发现执行后的结果是取值的,并改了过来。
7-1
1.设计思路
(1)第一步:使用if语句来实行动态内存分配。
第二步:运用for语句将每一项进行比较并求出最大最小值
第三步:用总数求出平均值,最后输出这三项。
2
#include<stdio.h> #include<stdlib.h> int main() { double avg=0,max=0,min=0; int i=0,*s,n; scanf("%d",&n); if((s=(int *)malloc(n*sizeof(int)))==NULL) exit(1); for(i=0;i<n;i++) { scanf("%d",s+i); if(s[i]>max) max=s[i]; if(s[i]<min) min=s[i]; avg+=s[i]; } avg/=n; free(s); printf("average = %.2lf\n,max = %.2lf\n,min = %.2lf",avg,max,min); }
3.错误信息
错误原因:最小值的取值不能从0开始,否则无法循环查找真正的最小值。
改正方法:重复几次尝试发现最小值要递减,所以要赋一个较大的数。
二.
7-1
1.设计思路
(1)第一步:定义结构变量,定义职工信息,运用结构变量并输入员工信息。
第二步:运用for循环及给定公式输出他们的姓名及实发工资。
(2)流程图
2.实验代码
#include<stdio.h> struct people { char name[10]; float jbgz,fdgz,zc; float sfgz; }; int main() { int i=0,n; scanf("%d",&n); struct people s[n]; for(i=0;i<n;i++) { scanf("%s %f %f %f",&s[i].name,&s[i].jbgz,&s[i].fdgz,&s[i].zc); s[i].sfgz=(s[i].jbgz+s[i].fdgz-s[i].zc); } for(i=0;i<n;i++) { printf("%s %.2f\n",s[i].name,s[i].sfgz); } }
3.错误信息
错误原因:没有注意要在每位职员的姓名和实发工资中间隔一个空格。
改正方法:检查几次,试了几次,最终询问同学才知道问题,并将其改正。
7-2
1.设计思路
(1)第一步:定义结构变量,定义数组,定义学生信息。
第二步:使用结构变量,运用for循环输入其信息,算出成绩的和。
第三步:算出平均成绩并输出。再使用for循环找出低于平均线以下的名单并输出。
2.实验代码
#include<stdio.h> struct student { char num[6],name[10]; int s; }; int main() { int i=0,n; double avg=0; scanf("%d",&n); struct student s[n]; for(i=0;i<n;i++) { scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s); avg+=s[i].s; } avg/=n; printf("%.2lf\n",avg); for(i=0;i<n;i++) { if(s[i].s<avg) printf("%s %s\n",s[i].name,s[i].num); } }
3.
三.
6-1
1.设计思路
(1)第一步:定义结构变量。
第二步:在for语句中使用结构变量,再用if、else语句将各个分段区分评级。
(2)流程图
2.实验代码
int set_grade( struct student *p, int n ) { int count = 0, i; for(i = 0;i<n;i++,p++) { if((p->score>=85)&&(p->score<=100)) { p->grade = 'A'; } else if((p->score<85)&&(p->score>=70)) { p->grade = 'B'; } else if((p->score<70)&&(p->score>=60)) { p->grade = 'C'; } else { p->grade = 'D'; count++; } } return count; }
3.错误信息
错误原因:if、else的使用有些混乱,导致顺序不正确。无意间还落下了两个括号
改正方法:仔细读题分析,回想if、else的使用方法,调整用的顺序。加上括号。
6-2
1.设计思路
(1)第一步:定义结构变量,运用for语句将每个人的总分成绩计算出来。
第二步:应用结构变量,再运用for语句将每个人按照总成绩排序。
第三步:交换他们前边的排序,并按照原顺序输出。
2.实验代码
void calc(struct student *p,int n) { int i=0; 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=0,min=0; struct student m; for(i=0;i<n;i++) { if((p+i)->sum<(p+min)->sum) { min=i; } } m=*(p+min); *(p+min)=*(p+n-1); *(p+n-1)=m; if(n>1) { n--; sort(p,n); } }
3.错误信息
四.学习总结和进度。
1.这两周内主要还是学习了一下上几周学的东西,感觉之前不懂得也懂一些了。这两周新学习的结构变量感觉不是很难,就是对它的编写结构还有些生疏,对于哪步该写什么还不是很熟悉,我 觉得这部分还是需要我加强的。
2.git地址:https://git.coding.net/wangxinyu78/wang.git
3.史泽文:http://www.cnblogs.com/shilcz/p/8696341.html
王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html
张金禹:http://www.cnblogs.com/17-1/p/8687764.html
4.