第二次作业
C高级第二次PTA作业(1)
6-7 删除字符串中数字字符
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:遍历数组中的所有元素。
第四步:找到数组中小于0或大于9的元素,并重新输入到数组中。并将最后的元素定义为\0。
(2)流程图
2.实验代码
void delnum(char *s)
{
int i,j;
j=0;
while(*(s+i)!='\0')
{
if(('0'>*(s+i)) || ('9'<*(s+i)))
{
*(s+j)=*(s+i);
j++;
}
i++;
}
*(s+j)='\0';
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:将 j 初始化为0,将&&改为||,将数组中最后的元素定义为'\0'。
6-8 统计子串在母串出现的次数
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义count,初始化为0.
第四步:遍历数组中的元素,将数组中元素与另一个字符串一一对比,如果相同,则count加1。
第五步:返回count。
(2)流程图
2.实验代码
int fun(char *str,char *substr)
{
int i,j,count;
count=0;
for(i=0;*(str+i)!='\0';i++)
{
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
{
count++;
}
}
return(count);
}
3.本题调试过程中碰到的问题及解决办法
无
6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:遍历数组中从第二个至倒数第二个元素。
第四步:将后一个元素与前一个元素比较,如果后一个大于前一个,则交换这两个元素。
2.实验代码
int fun(char *s,int num)
{
int i,n,j;
for(i=1;i<num-1;i++)
{
for(n=1;n<i;n++)
{
if(*(s+i)>*(s+n))
{
j=*(s+i);*(s+i)=*(s+n);*(s+n)=j;
}
}
}
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:将n<num-1改为n<i, 将i=0改为i=1。
7-1 输出学生成绩
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:定义sum=0,average=0,max,min;。
第三步:输入学生个数,利用for循环记录成绩,并算出总合。
第四步:将a[0]赋给max,min。
第五步:遍历数组中元素,并与max和min比较。如果max<a[i],则将a[i]赋给max;如果a[i]<min,则将a[i]赋给min。
第六步:计算平均数。
第七部:输出平均数,最高成绩,最低成绩。
2.实验代码
#include <stdio.h>
int main()
{
int N,i;
float sum=0,average=0,max,min;
scanf("%d",&N);
int a[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(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
average=sum/N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
return 0;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:将sum,average由int类型改为float类,将average初始化为0,在%.2f后加\n换行。
C高级第二次PTA作业(2)
7-1 计算职工工资
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:定义结构体变量
第三步:输入信息,利用for循环记录。
第四步:利用for循环计算实资。
第五步:利用for循环输出名字和实资。
(2)流程图
2.实验代码
#include<stdio.h>
#include<stdlib.h>
struct xinxi
{
char name[10];
float jizi;
float fuzi;
float zhichu;
float shizi;
};
int main()
{
int N,i;
scanf("%d",&N);
struct xinxi a[N];
for(i=0;i<N;i++)
{
scanf("%s%f%f%f",a[i].name,&a[i].jizi,&a[i].fuzi,&a[i].zhichu);
}
for(i=0;i<N;i++)
{
a[i].shizi=a[i].jizi+a[i].fuzi-a[i].zhichu;
}
for(i=0;i<N;i++)
{
printf("%s %.2f\n",a[i].name,a[i].shizi);
}
system("pause");
return 0;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:删去a[i].name,前的&,将shizi由int类型改为float类型。
7-2 计算平均成绩
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:定义结构体变量。定义sum,average,N,i.sum=0。
第三步:将元素输入至结构变量。
第四步:计算平均成绩。
第五步:遍历结构变量中的成绩,并与平均成绩比较。如果成绩小于平均成绩,则输出信息。
2.实验代码
#include<stdio.h>
#include<stdlib.h>
struct students
{
char xuhao[6];
char name[11];
int chengji;
};
int main()
{
int N,i;
int sum;
sum=0;
float average;
scanf("%d",&N);
struct students s[N];
for(i=0;i<N;i++){
scanf("%s %s %d",s[i].xuhao,s[i].name,&s[i].chengji);
}
for(i=0;i<N;i++)
{
sum=sum+s[i].chengji;
}
average=sum/N;
printf("%.2f\n",average);
for(i=0;i<N;i++)
{
if(s[i].chengji<average)
{
printf("%s %s\n",s[i].name,s[i].xuhao);
}
}
system("pause");
return 0;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:将 printf("%.2f\n",average);放到for循环之上。
C高级第二次作业(3)
6-1 按等级统计学生成绩
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义count,i,并初始化为0;
第四步:遍历数组中所有元素。
第五步:如果分数在85-100为A,70-84为B,60-69为C,0-59为D。
第六步:返回count。
(2)流程图
2.实验代码
int set_grade( struct student *p, int n )
{
int count,i;
int A,B,C,D;
i=0;
count=0;
for(i=0;i<n;i++)
{
if((p[i].score)>=85 && (p[i].score<=100))
{
p[i].grade='A';
}
if((p[i].score)>=70 && (p[i].score<=84))
{
p[i].grade='B';
}
if((p[i].score)>=60 && (p[i].score<=69))
{
p[i].grade='C';
}
if((p[i].score)>=0 && (p[i].score<=59))
{
p[i].grade='D';
count++;
}
}
return count;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:ABCD分别加上单引号。
for循环后加return。
6-2 结构体数组按总分排序
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:遍历数组中所有元素,计算总成绩。
第四步:利用for循环,用冒泡排序法按从大到小排列。
2.实验代码
void calc(struct student *p,int n)
{
int i;
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,j;
i=0;
j=0;
struct student a ;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(p[j].sum<p[j+1].sum)
{
a = p[j];
p[j] =p[j+1];
p[j+1] = a;
}
}
}
}
3.本题调试过程中碰到的问题及解决办法
错误原因:
改正方法:j<n-1改为 j<n-1-i。
学习总结和进度
1.知识总结
最近两周学习了结构体变量的定义和引用,目前对结构体变量的应用掌握的还算可以。