第二次作业
pta第二次作业(1)题目6-7 删除字符串中数字字符
1.设计思路
(1)主要描述题目算法
第一步:通读题意,仔细理解
第二步:定义 i,j,指针变量b;
第三步:利用for循环遍历数组,直到出现空格为止
第四步:判断如果(s+i)是满足条件的就将该值赋给(b+j),直到(b+j)='\0'结束
(2)流程图
2.实验代码
void delnum(char *s)
{
int i,j=0;
char *b=s;
for(i=0;*(s+i)!='\0';i++){
if(*(s+i)<'0'||*(s+i)>'9'){
*(b+j)=*(s+i);
j++;
}
}
*(b+j)='\0';
}
3.错误及解决办法
错误信息:没有char b=s,因为题目最中返回的还是(s+i)
改正方法:初始将*b指向s
题目pta第二次作业(1)6-8 统计子串在母串出现的次数
1.设计思路
(1)主要描述题目算法
第一步:通读题目,理解题意
第二步:定义i,j=0,count;
第三步:利用for循环遍历数组,直到出现回车换行为止,如果str[i]substr[j]&&str[i+1]substr[j+1]&&str[i+2]==substr[j+2],则计数+1
第四步:返回count
(2)流程图
2.实验代码
int fun(char *str,char *substr)
{
int i,j=0,count=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==substr[j]&&str[i+1]==substr[j+1]&&str[i+2]==substr[j+2])
count++;
}
return count;
}
3.错误信息及改正方法
错误1:多加了一个关于j的for循环
改正:去掉这个for循环 ,因为j是有范围的
错误2:没有返回count
改正:返回
6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路
(1)主要描述题目算法
第一步:通读题目,理解题意
第二步:调用函数,定义整型i,j,t
第三步:利用for循环遍历数组,除去第一个和最后一个数
2.实验代码
int fun(char *s,int num)
{
int i,j,t;
for(i=1;i<num-1;i++)
{
for(j=num-2;j>i;j--)
{
if(*(s+j)>*(s+j-1))
{
t=*(s+j);*(s+j)=*(s+j-1);*(s+j-1)=t;
}
}
}
}
3.错误信息
没有错误
7-1 输出学生成绩
1.设计思路
(1).主要描述基本算法
第一步:通读题目,理解题意
第二步:定义整型i,n,p,float型 average,max,min,sum,读入n
第三步:动态分配数组
第四步:将p分别赋给最大值,最小值
第五步:利用for循环遍历数组,读入p+i,进行判断,找到数组中的最大值与最小值
第六步:输出平均值和最值,释放
2.实验代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i=0,*p;
float average,max,min,sum=0;
scanf("%d",&n);
if((p=(int*)calloc(n,sizeof(int)))==NULL){
printf("Not able to allocate memory.\n");
exit(1);
}
for(i=0;i<n;i++)
{
scanf("%d",p+i);
sum=sum+*(p+i);
}
max=*p;
min=*p;
for(i=0;i<n;i++)
{
if(max<*(p+i))
{
max=*(p+i);
}
if(min>*(p+i))
{
min=*(p+i);
}
}
printf("average = %.2f\n",sum*1.0/n);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
free(p);
}
3.错误信息及改正方法
错误信息:没有错误
pta第二次作业(2)7-1 计算职工工资
1.设计思路
(1)主要描述题目算法
第一步:通读题目,理解题意
第二步:定义一个结构体变量student ,里面定义char name[11],double c1,double c2,double c3
第三步:引用这个结构体,定义一个较大的数据1000,定义整型i,n,double 型p来表表示最终的工资,读入一个整数n
第四步:利用for循环遍历数组,读入姓名和c1,c2,c3,用p表示出最终基本工资的计算结果,输出这个结果,并使p重新归零
(2)流程图
2.实验代码
#include <stdio.h>
struct student {
char name[11];
double c1;
double c2;
double c3;
};
int main()
{
struct student s[1000];
int n,i;
double p;
scanf("%d\n",&n);
for(i=0;i<n;i++){
scanf("%s %lf %lf %lf",s[i].name,&s[i].c1,&s[i].c2,&s[i].c3);
p=s[i].c1+s[i].c2-s[i].c3;
printf ("%s %.2lf\n",s[i].name,p);
p=0;
}
return 0;
}
3.错误及解决办法
错误信息:没有错误
pta第二次作业(2)7-2 计算平均成绩
1.设计思路
(1)主要描述题目算法
第一步:通读全文,理解题意
第二步:定义一个结构体student里面包括的定义char num[6],char name[11],float grade
第三步:定义整型i,n,利用for循环遍历数组,输入结构体里的学号,姓名,成绩,并计算平均值并输出
第四步:利用for循环进行对比将小于平均值的信息输出
2.实验代码
#include <stdio.h>
struct student {
char num[6];
char name[11];
float grade;
};
int main()
{
struct student s[1000];
int N,i;
float grade;
float average=0;
scanf("%d\n",&N);
for(i=0;i<N;i++){
scanf("%s %s %f",s[i].num,s[i].name,&s[i].grade);
average=average+s[i].grade;
}
average=average/N*1.0;
printf("%.2f\n",average);
for(i=0;i<N;i++){
if(s[i].grade<average){
printf("%s %s\n",s[i].name,s[i].num);
}
}
}
3.错误信息及改正
错误信息:
改正方法:num是字符数组,用char定义,s[i].name即表示首地址吗,不用加&,注意字符数组里要包括一个\0结束符,多定义一个
pta第二次作业(3)6-1 按等级统计学生成绩
1.设计思路
(1).主要描述题目算法
第一步:通读题目,找到需要定义的变量,因为需要记录不及格人数故需要定义变量count,需要通过for循环找到不及格的人,所以定义变量i来遍历数组
第二步:利用if语句判断等级,进行划分
第三步:返回所求的变量
(2).流程图
2.实验代码
int set_grade( struct student *p, int n ){
int count = 0, i;
for(i = 0;i<n;i++,p++){
if(p->score<60){
p->grade = 'D';
count++;
}
else if((p->score<70)&&(p->score>=60)){
p->grade = 'C';
}
else if((p->score<85)&&(p->score>=70)){
p->grade = 'B';
}
else{
p->grade = 'A';
}
}
return count;
}
3.错误及改正方法
错误一:
改正方法:指针没有下移需要下移指针
pta第二次作业(3)6-2 结构体数组按总分排序
1.设计思路
(1).主要描述题目算法
第一步:通读题意,先调用一个计算总分函数,需要利用for循环来遍历数组,求出每个人的总分,所以定义变量i
第二步:调用第二个函数来排序,排序思路冒泡排序法
2.实验代码
void calc(struct student *p,int n)
{
int i;
for(i=0;i<n;i++){
p->sum=p->score[0]+p->score[1]+p->score[2];
p++;
}
}
void sort(struct student *p,int n)
{
struct student t;
int i,j;
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+1);*(p+j+1)=*(p+j);*(p+j)=t;
}
}
}
}
3.错误信息及改正方法
错误信息1:
改正方法:定义t为int型,它是不能和结构体类型进行交换的,应该定义为结构体类型
错误信息2:又定义了sum[]数组
改正方法:取消定义,根据指针的移动,变量也会移动,不需要通过再次定义数组来遍历
1.总结知识点
1>字符串的使用,指针与排序法的组合
2>结构体变量的应用
3>通过指针下移变量,函数与指针的组合,交换结构体里的变量要定义t为结构体变量