第二次作业(第二学期)
作业要求一 (20分)
完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里,一次PTA作业任选一道题目给出设计思路、流程图、源代码和错误记录,其他题目可只给出设计思路、源代码和错误记录:
1)C高级第一次PTA作业(1)
2)C高级第一次PTA作业(2)
3)C高级第一次PTA作业(3)
4)C高级第一次PTA作业(4)
作业要求二(65分)
题目6-7 删除字符串中数字字符
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:将所给字符串的每个字符的值进行比较,看其是否在0到9内。
第二步:如果不在0到9内则输入至另一字符数组,否则略过,比较下一字符。
第三步:将新数组的字符串复制到原数组。
(2)流程图(4分)
2.实验代码(2分)
void delnum(char *s)
{
int i,j;
char p[80];
for(i=0,j=0;;j++)
{if(*(s+j)=='\0')
{break;
}
if((*(s+j)<'0')||(*(s+j)>'9'))
{
p[i]=*(s+j);
i++;
}
}
p[i]='\0';
strcpy(s,p);
}
3.本题调试过程碰到问题及解决办法(4分)
无
题目6-8 统计子串在母串出现的次数
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:以每个字母为起点进行比较看其与其后的2个字符是否为asd。
第二步:如是,则count进行一次计数。
第三步:返回count的值。
(2)流程图(4分)
2.实验代码(2分)
int fun(char *str,char *substr)
{
int i;
int count=0;
for(i=0;;i++)
{
if(str[i]=='\0')
{break;
}
if(str[i]=='a')
{
if(str[i+1]=='s')
{if(str[i+2]=='d')
{count++;
}
}
}
}
return count;
}
3.本题调试过程碰到问题及解决办法(4分)
无
题目6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:在略过第一个字符和最后一个字符的基础上,利用选择排序的方法。
第二步:从第二个字符开始,每一轮选出最大值放在最前面。
第三步:之后每次循环略过已排好的字符,从还未排序的第一个字符进行如上排序操作。
(2)流程图(4分)
2.实验代码(2分)
int fun(char *s,int num)
{ char max,c;
int i,j,mark;
for(i=1;i<num-1;i++)
{max=*(s+i);
mark=i;
for(j=i;j<num-1;j++)
{
if(*(s+j)>max)
{ mark=j;
max=*(s+j);
}
}
c=max;
*(s+mark)=*(s+i);
*(s+i)=c;
}
}
3.本题调试过程碰到问题及解决办法(4分)
无
题目7-1 输出学生成绩
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:输入学生成绩数,并依次输出其成绩。
第二步:进行求和运算,求平均值运算,并选出其最值。
第三步:输出均值,最值。
(2)流程图(4分)
2.实验代码(2分)
#include<stdio.h>
#include<stdlib.h>
int main()
{int *p;
int n;
int i;
double ave=0,max=0,min=0,sum=0;
scanf("%d",&n);
p=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++)
{scanf("%d",(p+i));
}
min=*(p+0);
max=*(p+0);
for(i=0;i<n;i++)
{sum=sum+*(p+i);
if(*(p+i)<min)
{min=*(p+i);
}
if(*(p+i)>max)
{max=*(p+i);
}
}
ave=sum/n*1.0;
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",ave,max,min);
free(p);
return 0;
}
3.本题调试过程碰到问题及解决办法(4分)
错误原因:忽略了int除以double乘1.0的括号导致错误
提交列表
题目7-1 计算职工工资
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:涉及输入多种类型数据,故先定义结构体
第二步:输入人数,依次输入其各项数据,同时进行求和计算
第三步:按输入顺序 输出其姓名 及数据
(2)流程图(4分)
2.实验代码(2分)
#include<stdio.h>
struct human
{
char name[10];
float a;
float b;
float c;
};
int main()
{
int n;
int i;
scanf("%d",&n);
struct human s[n];
float sum[n];
for(i=0;i<n;i++)
{scanf("%s %f %f %f",s[i].name,&s[i].a,&s[i].b,&s[i].c);
sum[i]=s[i].a+s[i].b-s[i].c;
}
for(i=0;i<n;i++)
{
printf("%s %.2f\n",s[i].name,sum[i]);
}
return 0;
}
3.本题调试过程碰到问题及解决办法(4分)
无
7-2 计算平均成绩
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:涉及多个类型数据,定义结构体
第二步:输入人数,并依次输入各项数据,同时进行求和计算
第三步:求出均值,并将每组的great值与其比较,输出比其小的姓名及数值。
(2)流程图(4分)
2.实验代码(2分)
#include<stdio.h>
struct student
{
char num[5];
char name[10];
int great;
};
int main()
{
int n;
int i;
scanf("%d",&n);
struct student s[n];
float ave=0;
for(i=0;i<n;i++)
{scanf("%s %s %d",s[i].num,s[i].name,&s[i].great);
ave=ave+s[i].great;
}
ave=ave*1.0/n;
printf("%.2f\n",ave);
for(i=0;i<n;i++)
{
if(s[i].great<ave)
{printf("%s %.5s\n",s[i].name,s[i].num);
}
}
return 0;
}
3.本题调试过程碰到问题及解决办法(4分)
无
提交列表
6-1 按等级统计学生成绩
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:根据每个人分数,给低于60的计一次数。
第二步:根据每个人的分数所在层次给其grade赋值。
第三步:返回所计次数。
(2)流程图(4分)
2.实验代码(2分)
int set_grade( struct student *p, int n )
{
int m=0;
int i=0;
for(i=0;i<n;i++)
{if((p+i)->score<60)
{m=m+1;
}
if((p+i)->score>=0)
{ (p+i)->grade='D';
}
if((p+i)->score>59)
{(p+i)->grade='C';
}
if((p+i)->score>69)
{(p+i)->grade='B';
}
if((p+i)->score>84)
{(p+i)->grade='A';
}
}
return m;
}
3.本题调试过程碰到问题及解决办法(4分)
无
6-2 结构体数组按总分排序
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:根据每一个结构体内各数据求和。
第二步:根据其和的值按照选择排序法对结构体数组各元素排序。
第三步:输出结构体数组各元素。
(2)流程图(4分)
2.实验代码(2分)
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,mark;
float max;
struct student t;
for(i=0;i<n;i++)
{ mark=i;
max=(p+i)->sum;
for(j=i;j<n;j++)
{
if((p+j)->sum>max)
{
max=(p+j)->sum;
mark=j;
}
}
t=*(p+i);
*(p+i)=*(p+mark);
*(p+mark)=t;
}
}
3.本题调试过程碰到问题及解决办法(4分)
无
提交列表
要求三、学习总结和进度(15分)
1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
学会了:1.结构数组的使用
2.结构体作为函数参数
3.结构体的定义与初始化
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
地址:https://git.coding.net/Donahue_Xu/The-Second-Homework2.git
截图:
3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。(4分)
刘炜旗:http://www.cnblogs.com/ryo-/p/8746826.html
赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/8653086.html
史泽文:http://www.cnblogs.com/shilcz/p/8696341.html
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间(3分)
表格:
折线图: