第二次作业
作业要求二
第一次PTA
题目6-7删除字符串中数字字符
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:重新定义一个指针变量*a,对*s中的字符进行遍历。
第四步:若s[]中的字符不在‘0’到‘9’中,则将字符储存在a[]中。
(2).流程图:
2.实验代码:
void delnum(char *s)
{ int i,j;
char *a=s;
for(i=0,j=0;s[i]!='\0';i++)
{
if(s[i]<'0'||s[i]>'9')
{
a[j]=s[i];
j++;
}
}
a[j]='\0' ;
}
3.本题调试过程碰到的问题和解决办法
错误信息:答案错误。
错误原因:在储存字符串结束后,没有加结束标志'\0';没有将指针*a指向s最后输出的还是原来的字符串。
改正方法:在循环结束后,加一个a[j]='\0';定义指针字符串时,让其指向s。
题目6-8统计子串在母串出现的次数
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:遍历一次母串,并且母串的遍历的每一个字符都要和字串的第一个字符比较,如果相等的话,这时候母串和字串开始同时遍历。
第四步:当满足一次子串能够遍历到结束符的时候,说明子串出现,num++;
2.实验代码:
int fun(char *str,char *substr)
{
int i,j,k,num;
for(i=0;str[i]!='\0';i++)
{
for(j=i,k=0;substr[k]==str[j];k++,j++)
{
if(substr[k+1]=='\0')
{
num++;
break;
}
}
}
return num;
}
3.本题调试过程碰到的问题和解决办法(无)
题目6-9字符串中除首尾字符外的其余字符按降序排列
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:从s中的第二个字符元素开始经行遍历,直到倒数第二个字符元素(也就是第一个和最后一个字符元素不进行判断)。
第三步:然后再让相邻的两个字符元素进行比较,若是s[i]>s[i-1],重新定义一个字符串,进行交换,否则i++,继续判断。
2.实验代码
int fun(char *s,int num)
{
int i=1,j=1;
int len;
strlen(len);
for(i=1;i<len-1;i++)
{
for(j=1;j<i;j++)
{
if(s[i]>s[j])
{
char *t;
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
}
3.本题调试过程碰到的问题和解决办法
错误信息:
错误原因:
改正方法:
题目7-1. 输出学生成绩
1.设计思路:
(1)描述算法:
第一步:输入人数n;
第二步:分别输入n个人的分数,并求和;
第三步:用一次循环,比较出n个人分数的最大值,最小值;
第四步:按题意输出。
2.实验代码:
#include <stdio.h>
int main()
{
int i,n,a[n];
float sum = 0,average = 0,max,min;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum = sum + a[i];
}
max = a[0];
min = a[0];
for(i=0;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
}
if(a[i]<min)
{
min=a[i];
}
}
printf("average = %.2f\nmax = %.2f\nmin = %.2f",sum/n,max,min);
return 0;
}
3.本题调试过程碰到的问题和解决办法
第二次PTA
题目7-1 计算职工工资
1.设计思路:
(1).描述算法:
第一步:定义结构类型。
第二步:输入人数n,再用一个for循环输入n个职员的信息。
第三步:for循环分别输出每位职员的实发工资。
2.实验代码:
#include <stdio.h>
struct staff
{
char name[1000];
float fixation;
float floating;
float outlay;
float salary;
}a[1000];
int main()
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%f%f%f",a[i].name,&a[i].fixation,&a[i].floating,&a[i].outlay);
a[i].salary=a[i].fixation+a[i].floating-a[i].outlay;
}
for(i=0;i<n;i++)
{
printf("%s %.2f\n",a[i].name,a[i].salary);
}
return 0;
}
3.本题调试过程碰到的问题和解决办法
错误信息:部分错误
错误原因:定义的数组过小
改正方法:将name[10],a[10]改为name[1000],a[1000].
题目7-2 计算平均成绩
1.设计思路:
(1).描述算法:
第一步:定义结构类型
第二步:输入人数n,再用一个for循环输入每个人的信息,并求出总的分数和。
第三步:在for循环中判断是否每个人的分数小于平均数,若小于则输出名字和学号。
(2).流程图:
2.实验代码:
#include <stdio.h>
struct student
{
char s[1000];
char name[1000];
int code;
};
int main()
{
int i,N,sum=0;
double average;
struct student a[1000];
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%s %s %d",a[i].s,a[i].name,&a[i].code);
sum = sum + a[i].code;
}
average=sum/N*1.0;
printf("%.2f\n",average);
for(i=0;i<N;i++)
{
if(a[i].code<average)
{
printf("%s %s\n",a[i].name,a[i].s);
}
}
return 0;
}
3.本题调试过程碰到的问题和解决办法
(1)错误信息:编译错误。
错误原因:sum定义成了结构类型。
改正原因:因为sum是所有人的分数和,所以不能定义成结构类型,应该定义成整型。
(2)错误信息:格式错误
错误原因:在输出后没有加‘\n’。
第三次PTA
题目6-1 按等级统计学生成绩
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:在for循环中,遍历每个学生的成绩,然后做判断。
第四步:根据判断,确定成绩等级。
(2).流程图:
2.实验代码:
int set_grade( struct student *p, int n )
{
int i;
int count = 0;
for(i=0;i<n;i++,p++)
{
if(p->score<60)
{
p->grade = 'D';
count++;
}else if(( p->score>=85)&&(p->score<=100))
{
p->grade = 'A';
}else if(( p->score>=70)&&(p->score<85))
{
p->grade = 'B';
}else
{
p->grade = 'C';
}
}
return count;
}
3.本题调试过程碰到的问题和解决办法:
错误信息:答案错误
错误原因:if做判断时,没有考虑到1-100内的所有数字。
改正方法:认真检查哪里需要加“=”号,哪里不需要。
题目6-2 结构体数组按总分排序
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:函数calc:使用一个for循环遍历每个学生的成绩,计算出每名学生的总分。
第四步:函数sort:使用冒泡排序法对学生总成绩按降序排序。
2.实验代码:
void calc(struct student *p,int n)
{
int i;
for(i=0;i<n;i++,p++)
{
p->sum=p->score[0]+p->score[1]+p->score[2];
}
}
void sort(struct student *p,int n)
{
int i,j;
struct student t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if((p+j)->sum<(p+j+1)->sum)
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
}
3.本题调试过程碰到的问题和解决办法
错误信息:编译错误
错误原因:
改正方法:
进行交换的是(p+i)和(p+i+1)的值,而不是地址。
作业要求三
1.总结。
(1).这两周主要学会了结构体:结构体的定义,结构体类型的定义,结构体变量的定义,结构体初始化以及结构体的引用。
(2).上两周学的指针在这几次作业中有应用,也比刚学的时候熟悉很多。
2.git托管平台。
https://github.com/Vinecy666/C-/tree/master