第二次作业
1.作业要求1
注:在最近的两次PTA之中逐渐开始利用devcpp来先行测试,在复制之后经常出现字母复制不全导致的编译错误。
在此鸣谢王文博同学的指导与帮助
作业要求二
题目1 删除字符串中数字字符
1. 设计思路
(1). 算法
第一步:定义数字等于要修改的字符数组s
第二步:修改s,把非数字元素赋给s
(2).流程图
(3).代码
void delnum(char *s) { int i = 0,j = 0; while(s[i] != '\0') { if (!(s[i] >= '0' && s[i] <= '9')) { s[j++] = s[i]; } i++; } s[j] = '\0'; }
2. 本题调试过程碰到问题及解决办法
无。
题目2 统计子串在母串出现的次数
1.设计思路
(1).算法
第一步:定义fun函数,定义变量i。
第二步:运用for循环与if进行判断,
第三步:若字符相等则数字num加一,最后返回num。
(2).代码
int fun(char *str,char *substr) { int i=0; int j=0; int k=0; int num=0; for(i=0;str[i]!='\0';i++) { for(j=i,k=0;substr[k]==str[j];k++,j++) { if(substr[k+1]=='\0') { num++; } } } return num; }
2. 本题调试过程碰到问题及解决办法
在开始考虑时过于片面,未考虑全部情况。
题目3 字符串中除首尾字符外的其余字符按降序排列
1. 设计思路
(1).算法
首尾字符排除,剩余按照从大到小的顺序排列(冒泡排序法)
(2).流程图
(3).代码
int fun(char *s,int num) { int i,j,k; for(i=1;i<num-1;i++) { for(j=num-2;j>i;j--) { if(*(s+j)>*(s+j-1)) { char t; t=*(s+j),*(s+j)=*(s+j-1),*(s+j-1)=t; } } } }
2. 本题调试过程碰到问题及解决办法
无(先行由同学一起整理循环思路)
题目4 输出学生成绩
1. 设计思路
(1).算法
计算平均值,求出最大值和最小值,
输出数据。
(2).代码
#include <stdio.h> int main() { int N,grade,k,i=1; float average,max,min,sum=0.0; float maxy(float x,float y); float miny(float x,float y); scanf("%d",&N); for(k=0;k<N;k++) { scanf("%d",&grade); sum=sum+grade; if (i==1) { max=grade; min=grade; i--; } max=maxy(max,grade); min=miny(min,grade); } average=sum/N; printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min); return 0; } float maxy(float x,float y) { float z; if(x>y) z=x; else z=y; return(z); } float miny(float x,float y) { float z; if(x<y) z=x; else z=y; return(z); }
2. 本题调试过程碰到问题及解决办法
无
题目5 计算职工工资
1. 设计思路
(1). 算法
创建message结构,输入数据
计算工资并输出
(2).流程图
(3).代码
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); } }
2. 本题调试过程碰到问题及解决办法
(1).开始时未能及时发现定义int的错误,在其他题中也是习惯性地定义int,常常不能改正
(2).在当堂课学习时循环部分未能及时掌握,在开始的几次中折了几次跟头。
题目6 计算平均成绩
1. 设计思路
(1).算法
创建student结构,输入,计算平均成绩后输出
逐一对比,任意学生成绩在平均成绩下,则输出其信息
(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); } } }
2. 本题调试过程碰到问题及解决办法
错误原因:无
题目7 按等级统计学生成绩
1. 设计思路
(1). 算法
判断学生成绩的等级,并赋给变量
若为D,count++,最后返回count
(2).流程图
(3).代码
int set_grade( struct student *p, int n ) { int count = 0, i; for(i = 0;i<n;i++,p++) { if(p->score<60) { p->grade = 'D'; count++; } else if((p->score<70)&&(p->score>=60)) { p->grade = 'C'; } else if((p->score<85)&&(p->score>=70)) { p->grade = 'B'; } else { p->grade = 'A'; } } return count; }
2. 本题调试过程碰到问题及解决办法
else关系运用熟练度不够
题目8 结构体数组按总分排序
1. 设计思路
(1). 算法
计算学生的总成绩,并用按总成绩降序排列学生(冒泡排序法)
(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; } } } }
2.本题调试过程碰到问题及解决办法
无
作业要求三
1. 知识的总结
复习指针,学习结构(元素及数组)。自主复习while,if ,else等语句的使用
表格(空【懒了。。。。。。】)
2. 代码管理
未能及时完成
3. 点评
邓吃鱼(邓欣茹):http://www.cnblogs.com/dxfish/p/8747579.html
段策 :http://www.cnblogs.com/duance/p/8747911.html
张piuipiu(张琪):http://www.cnblogs.com/zhang03/p/8735481.html