第2次作业
作业要求一
请将pta作业编程题目的解题思路和调试过程记录在博客中,每道题目的具体格式如下:
6-7 删除字符串中数字字符
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:定义指针变量p并将s赋值
第二步:利用for循环遍历数组,if语句完成删除数字指令
第三步:当赋值为结束字符'\0'时,循环结束
(2)流程图
2.实验代码
void delnum(char *s) { char *p=s; for(;*s;s++) { if(*s>'9'||*s<'0') *p++=*s; } *p='\0'; }
3.本题调试过程碰到问题及解决办法
错误信息:
错误原因:字符数组元素未用单引号‘’括起。
改正方法:询问同学及查询课本后,进一步熟悉了字符数组的运用。
6-8 统计子串在母串出现的次数
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:定义i,n
第二步:创建一个for循环遍历数组,并在其中利用if语句判断前三个字符值
2.实验代码
int fun(char *str,char *substr) { int n=0,i; for(i=0;*(str+i)!='\0';i++){ if(*(str+i)=='a'&&*(str+i+1)=='s'&&*(str+i+2)=='d') { n++; } } return n; }
3.本题调试过程碰到问题及解决办法
错误信息:
错误原因:语句后缺少‘;’,并且返回值应该是n。
改正方法:低级错误,通过编译器提示发现并改正。
6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:定义整形变量i,j,字符型变量t
第二步:套用两个for循环进行排序
第三步:用if语句比较大小并进行交换
2.实验代码
int fun(char *s,int num) { int i,j; char t; for(j=0;j<num-3;j++) for(i=1;i<num-j-2;i++) if(s[i]<s[i+1]) { t=s[i]; s[i]=s[i+1]; s[i+1]=t; } }
3.本题调试过程碰到问题及解决办法
错误信息:无
7-1 输出学生成绩
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:定义所需变量并按要求执行输入指令
第二步:调用函数,将p中首地址赋最大最小值,之后判断大小并重新赋值,并用for循环进行数据计算
第三步:使用if语句进行比较大小并输出
2.实验代码
#include <stdio.h> int main() { int i,n; float sum=0,average,max,min; scanf("%d",&n); float *p=(float *)malloc(n); for(i=0;i<n;i++) { scanf("%f",(p+i)); sum+=*(p+i); } min=*(p+0); max=*(p+0); for(i=0;i<n;i++){ if(min>*(p+i)) { min=*(p+i); } if(max<*(p+i)) { max=*(p+i); } } printf("average = %.2f\n",sum/n); printf("max = %.2f\n",max); printf("min = %.2f\n",min); return 0; }
3.本题调试过程碰到问题及解决办法
错误信息:
错误原因:缺少函数定义 float *p=(float *)malloc(n);
改正方法:通过与同学交流并查询书籍得知
7-1 计算职工工资
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:使用结构来表示职员信息
第二步:使用嵌套的结构类型进行结构变量操作
(2)流程图
2.实验代码
# include <stdio.h> struct salary { int num; char name[10]; float a,b,c; double sum; }; int main(void) { int i, n; struct salary s1; scanf ("%d", &n); for (i = 1; i <= n; i++){ scanf ("%s %f %f %f",s1.name,&s1.a,&s1.b,&s1.c); s1.sum = s1.a + s1.b - s1.c; printf("%s %.2lf\n", s1.name,s1.sum); } return 0; }
3.本题调试过程碰到问题及解决办法
错误信息1:
错误原因:输出指令中sum格式不正确
改正方法:通过编译器输出框提示及观察改正
错误信息2:
错误原因:printf应在上一个括号内,未知错误导致输出结果错误
改正方法:同学帮助并指出
7-2 计算平均成绩
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:使用结构来表示学生基本信息
第二步:使用嵌套的结构类型进行结构变量操作
2.实验代码
#include<stdio.h> struct student{ char num[6]; char name[10]; int grade; }student1[10]; int main() { int n,i; double average=0,sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s %s %d",student1[i].num,student1[i].name,&student1[i].grade); sum=sum+student1[i].grade; }average=sum/n; printf("%.2f\n",average); for(i=0;i<n;i++) { if(student1[i].grade<average) printf("%s %s\n",student1[i].name,student1[i].num); } return 0; }
3.本题调试过程碰到问题及解决办法
错误信息:
错误原因:num定义时未设置字节长度
改正方法:对基本概念认知不清淅,询问室友了解
6-1 按等级统计学生成绩
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:用else-if条件句分类讨论,设定i,j=0进行人数计算
第二步:用指向运算符"->"访问指针指向的结构成员
(2)流程图
2.实验代码
int set_grade( struct student *p, int n ) { int i,j=0; for(i=0;i<n;i++,p++) { if(p->score <60) { j++; } if((p->score >=85)&&(p->score <=100)) { p->grade = 'A'; } else if((p->score >=70)&&(p->score <=84)) { p->grade = 'B'; } else if((p->score >=60)&&(p->score <=69)) { p->grade = 'C'; }else if((p->score >=0)&&(p->score <=59)) { p->grade = 'D'; } } return j; }
3.本题调试过程碰到问题及解决办法
错误信息1:
错误原因:字符未用 ' ' 括起无法编译
改正方法:通过Dev-c++编译器提示改正
错误信息2:
错误原因:if-else条件句不完整
改正方法:用else隔离每一个新的条件句使情况分离
6-2 结构体数组按总分排序
1.设计思路
(1)主要描述题目算法。可以用文字描述(不允许使用伪代码),
第一步:引用主函数中结构体,并用两个for循环和calc函数进行计算及输入输出
第二步:用冒泡法排序,并按大小顺序进行交换
2.实验代码
void calc(struct student *p,int n) { struct student sum; int i,j=0; for(i=0;i<n;i++) { for(j=0;j<3;j++) { (p+i)->sum =(p+i)->sum + (p+i)->score[j]; } } } void sort(struct student *p,int n) { int i,j,k; struct student t; for(i=0;i<n-1;i++) { k=i; for(j=i;j<n;j++) { if(((p+k)->sum)<((p+j)->sum)) { k=j; } } if(k!=i) { t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; } } }
3.本题调试过程碰到问题及解决办法
错误信息:定义t时用了int型发现无法编译
改正方法:改用结构体定义t
要求三、学习总结和进度
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
本章学习了结构、结构类型的一般定义以及如何嵌套使用,结构指针由于接触时间较短所以还并未完全熟练掌握,还需要再以后的作业及练习中继续努力。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
我的git链接: https://git.coding.net/Downager/180408.git
3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。
丰大为:https://home.cnblogs.com/u/DavidPark/
孙铭婧:http://www.cnblogs.com/sun031915/
吴晓明:https://home.cnblogs.com/u/gu-an-cheng-wxm/
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间