第二次作业
作业要求一
作业截图:
6-7:
6-8:
6-9:
7-1:
7-1:
6-1:
6-2:
作业要求二
作业要求二
题目6-7 删除字符串中数字字符
(1) 实验代码
void delnum(char *s)
{
char a[80];
int i=0,j=0;
for(j=0,j=0;*(s+i)!='\0';i++)
{
if(s[i]>'9'||s[i]<'0')
{
a[j]=s[i];
j++;
}
}
a[j]='\0';
strcpy(s,a);
}
(2) 设计思路
主要描述题目算法
第一步:本题的要求是删除给出的一行字符串中的数字字符,需要用数组遍历字符串,遇到数字,就删除,然后将之后的字符向前移动。
第二步:我的方法先定义两个变量ij然后用if循环遍历数组中元素判断数字字符并将其删除,之后将字符向前移动。
(3)本题调试过程中碰到的问题及解决方法
本题中的且的符号||最开始我用的并的符号&&,结果出现了这种情况,最后我发现只需要满足一组条件就能完成,不需要用并的符号。
题目6-8 统计子串在母串出现的次数
(1) 实验代码
int fun(char *str,char *substr)
{
int i=0,j=0;
for(j=0;str[j]!='\0';j++)
{
if(substr[0]==str[j]&&substr[1]==str[j+1]&&substr[2]==str[j+2])
{
i++;
}
}
return i;
}
(2) 设计思路
主要描述题目算法
第一步:运用if语句来遍历数组,找出子串在母串中出现的次数,逐一判断。
第二步:应该用子串中的每一个循环变量寻找,所以循环变量要逐一增加,而不是用子串寻找。
流程图
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。
题目6-9 字符串中除首尾字符外的其余字符按降序排列
(1) 实验代码
int fun(char *s,int num)
{
int i=0,j=0;
for(i=1;i<num-1;i++)
{
for(j=1;j<num-2;j++)
{
if(*(s+i)>*(s+j))
{
int t;
t=*(s+i);
*(s+i)=*(s+j);
*(s+j)=t;
}
}
}
}
(2) 设计思路
主要描述题目算法
第一步:跟前两道题的方法差不多,需要遍历数组,还需要加上冒泡法的方法。
第二步:开始定义循环变量,之后遍历数组,然后用冒泡方法对除了首尾字符的字符进行排序。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题
题目7-1 输出学生成绩
(1) 实验代码
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int a[n],i=0,sum=0,max=0,min=0;
float ave=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
ave=(float)(sum*1.0/n*1.0);
for(i=0;i<n;i++)
{
if(a[min]>a[i])
{
min=i;
}
}
for(i=0;i<n;i++)
{
if(a[max]<a[i])
{
max=i;
}
}
printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,(float)a[max],(float)a[min]);
}
(2) 设计思路
主要描述题目算法
第一步:
(3)本题调试过程中碰到的问题及解决方法
本题没有问题
题目7-1计算职工工资
(1) 实验代码
#include<stdio.h>
struct employer{
char name[10];
float a;
float b;
float c;
};
int main()
{
int N=0,i=0;
scanf("%d",&N);
struct employer e[N];
for(i=0;i<N;i++)
{
scanf("%s %f %f %f",e[i].name,&e[i].a,&e[i].b,&e[i].c);
}
for(i=0;i<N;i++)
{
printf("%s %.2f\n",e[i].name,e[i].a+e[i].b-e[i].c);
}
}
(2) 设计思路
第一步:首先定义一个结构体,在结构体中定义题目中的姓名、基本工资、浮动工资和支出,还应该注意题目中的精度要求;
第二步:在主函数里面输入正整数n,每一行输入职员的信息,再给相应的变量赋初值,在根据题目中的公式计算实发工资,最后输出。
流程图:
(3)本题调试过程中碰到的问题及解决方法
上课的时候老师讲的结构体定义,只是听懂了结构体定义这个知识点,如何运用还是不懂,然后看了一下下一节的结构体数组,再结合这道题就感觉用数组比较简单,最后没注意看结应该保留小数点后两位,结果导致答案错误如下图。
题目7-2 计算平均成绩
(1) 实验代码
#include<stdio.h>
struct student
{
char name[10];
char a[5];
int b;
};
int main()
{
int n=0,i=0,sum=0;
float average;
scanf("%d",&n);
struct student s[n];
for(i=0;i<n;i++)
{
scanf("%s %s %d",s[i].a,s[i].name,&s[i].b);
sum=sum+s[i].b;
}
average=(float)(sum*1.0/n*1.0);
printf("%.2f\n",average);
for(i=0;i<n;i++)
{
if((float)(s[i].b)<average)
{
printf("%s %s\n",s[i].name,s[i].a);
}
}
}
(2) 设计思路
第一步:首先定义一个结构体,里面定义学号(字符类型)、姓名和成绩,然后在主函数中定义几个变量n、i、sum、average;
第二步:在输入n行后,把每个学生的成绩进行求和,求和后就可以求出平均值;
第三不:最后进行遍历数组,进行比较,找出成绩在平均值以下的学生,输出结果,要注意平均值的精度范围。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。
题目6-1 按等级统计学生成绩
(1) 实验代码
int set_grade( struct student *p, int n )
{
int j,num=0;
for(j=0;j<n;j++)
{
if(((p+j)->score)>=85 && ((p+j)->score)<=100)
{
((p+j)->grade)='A';
}else if(((p+j)->score)>=70 && ((p+j)->score)<=84)
{
((p+j)->grade)='B';
}else if(((p+j)->score)>=60 && ((p+j)->score)<=69)
{
((p+j)->grade)='C';
}else if(((p+j)->score)>=0 && ((p+j)->score)<=59)
{
((p+j)->grade)='D';
num=num+1;
}
}
return num;
}
(2) 设计思路
第一步:首先定义循环变量j和用来统计不及格人数的num,在后面通过if循环条件判断不及格人数;
第二步:然后需要遍历这个数组,用if循环条件进行判断,给出每个学生相应的等级,并给grade赋值,最后进行不及格人数返回值的操作。
流程图:
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。
题目6-2 结构体数组按总分排序
(1) 实验代码
#include <stdio.h>
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,l=0;
struct student swap;
for(i=0;i<n;i++)
{
for(l=i+1;l<n;l++)
{
if(p[i].sum<p[l].sum)
{
swap=p[i];p[i]=p[l];p[l]=swap;
}
}
}
}
(1)设计思路
第一步:首先计算总分,先在定义的第一个函数里进行定义循环变量i,之后通过遍历数组来计算出总分;
第二步:在计算出总分之后,可以开始根据总成绩进行排名。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。
作业要求三学习总结和进度
1、总结两周里所学的知识点有哪些学会了?
本周主要学习了如何定义一个结构体,还有结构体数组和结构体指针,还有学习了字符串在结构体中的应用,较以前的知识更加繁琐,所以需要上课认真听讲,对于结构的应用自己不是很熟练,尤其是结构体指针的知识掌握的不娴熟,导致pta上指针的题做了很久还有通过同学的指点才做出来,以后应该多培养自己的思维能力。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址:
地址
截图:
3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业:
点评的同学:
张金禹
高立彬
班庆泽
邀请点评的同学:
丰大为
高立彬
班庆泽
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间
表格:
折线图: