PTA 习题7-7 习题8-7 习题8-10
习题7-7
题目要求:
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换。A到Z换成Z到A。
代码如下:
#include<stdio.h>int main(void){char y[26]; //正 char z[26]; //逆 char c[80];int i,k;char j='A';for(i=0;i<26;i++){y[i]=j+i;}j='Z';for(i=0;i<26;i++){z[i]=j-i;}i=0;while((c[i]=getchar())!='\n'){if(c[i]>='A'&&c[i]<='Z'){k=c[i]-'A';c[i]=z[k]; }i++;}k=0;while(c[k]!='\0'&&k<80){printf("%c",c[k]);k++;}return 0;
}
代码中有一处问题,描述如下:
最长字符串,无空格,有全部大写字母
问题尚未解决,在自己测试过程中并没有发现这个错误。
本题思路:
1、使用了比较麻烦的方法,使用到3个字符串,一个存A到Z,一个存Z到A,最后一个存目标字符串。
2、在输入时判断是否是大写字母,如果是则对应到AZ串,k用来接收这个字母的位置,在ZA串相应位置找到并返回对应字母给目标串。
3、这个方法比较麻烦,有另一方法代码如下:
#include<stdio.h>int main(void){char y[26]; char c[80];int i,k;char j='A';for(i=0;i<26;i++){y[i]=j+i;}while((c[i]=getchar())!='\n'){if(c[i]>='A'&&c[i]<='Z'){for(k=0;k<26;k++){if(c[i]==y[k]){printf("%c",y[26-k-1]);}}}else{printf("%c",c[i]);}i++;} return 0;
}
这个代码的思路就比较简单,不对目标字符串做调整,直接输出需要更改的字母。并且这段代码并没有输出错误,是满分。
习题8-7
题目要求:
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
代码如下:
#include<stdio.h>
#include<string.h>
#define num 5
#define len 80int main(void){char str[num][len];char temp[len];int i,j;for(i=0;i<num;i++){scanf("%s",&str[i]);}for(i=0;i<num-1;i++){for(j=0;j<num-i;j++){if(strcmp(str[j],str[j+1])>0){strcpy(temp,str[j]);strcpy(str[j],str[j+1]);strcpy(str[j+1],temp);}} } printf("After sorted:\n");for(i=0;i<num;i++){printf("%s\n",str[i]);}return 0;
}
本题思路:
1、学习使用串库,包括声明#include<string.h>,strcpy(复制串,被复制串)。strcmp(串1,串2),如果串1>串2,返回值是>0,串1<串2,返回值<0,等于即相等。
2、思路类似于冒泡排序,i每加一,就有一项最大值被送入串末尾。
串的换位置类似于两数交换位置,也需要一个辅助串。并且思路都是一样的。
3、注意串的输入输出。%s可以直接输入输出一个串。
习题8-10(未解决完全)
题目要求:
本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
代码如下:
#include<stdio.h>
int max(int x,int y);
int min(int x,int y);int main(void){int n,i;float temp,sum,ave,ma=0.0,mi=101.0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%f",&temp);sum=sum+temp;ma=max(temp,ma);mi=min(temp,mi);}ave=sum/n;printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,ma,mi);return 0;
}
int max(int x,int y){if(x>y)return x;elsereturn y;
}int min(int x,int y){if(x>y)return y;elsereturn x;
}
**注意:**此段代码并未使用动态分配,待以后更新。
本题思路:
1、思路很简单,只是用到了两个函数需要自己写,其余就是动态分配的问题,待以后更新。
PTA 习题7-7 习题8-7 习题8-10
习题7-7
题目要求:
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换。A到Z换成Z到A。
代码如下:
#include<stdio.h>int main(void){char y[26]; //正 char z[26]; //逆 char c[80];int i,k;char j='A';for(i=0;i<26;i++){y[i]=j+i;}j='Z';for(i=0;i<26;i++){z[i]=j-i;}i=0;while((c[i]=getchar())!='\n'){if(c[i]>='A'&&c[i]<='Z'){k=c[i]-'A';c[i]=z[k]; }i++;}k=0;while(c[k]!='\0'&&k<80){printf("%c",c[k]);k++;}return 0;
}
代码中有一处问题,描述如下:
最长字符串,无空格,有全部大写字母
问题尚未解决,在自己测试过程中并没有发现这个错误。
本题思路:
1、使用了比较麻烦的方法,使用到3个字符串,一个存A到Z,一个存Z到A,最后一个存目标字符串。
2、在输入时判断是否是大写字母,如果是则对应到AZ串,k用来接收这个字母的位置,在ZA串相应位置找到并返回对应字母给目标串。
3、这个方法比较麻烦,有另一方法代码如下:
#include<stdio.h>int main(void){char y[26]; char c[80];int i,k;char j='A';for(i=0;i<26;i++){y[i]=j+i;}while((c[i]=getchar())!='\n'){if(c[i]>='A'&&c[i]<='Z'){for(k=0;k<26;k++){if(c[i]==y[k]){printf("%c",y[26-k-1]);}}}else{printf("%c",c[i]);}i++;} return 0;
}
这个代码的思路就比较简单,不对目标字符串做调整,直接输出需要更改的字母。并且这段代码并没有输出错误,是满分。
习题8-7
题目要求:
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
代码如下:
#include<stdio.h>
#include<string.h>
#define num 5
#define len 80int main(void){char str[num][len];char temp[len];int i,j;for(i=0;i<num;i++){scanf("%s",&str[i]);}for(i=0;i<num-1;i++){for(j=0;j<num-i;j++){if(strcmp(str[j],str[j+1])>0){strcpy(temp,str[j]);strcpy(str[j],str[j+1]);strcpy(str[j+1],temp);}} } printf("After sorted:\n");for(i=0;i<num;i++){printf("%s\n",str[i]);}return 0;
}
本题思路:
1、学习使用串库,包括声明#include<string.h>,strcpy(复制串,被复制串)。strcmp(串1,串2),如果串1>串2,返回值是>0,串1<串2,返回值<0,等于即相等。
2、思路类似于冒泡排序,i每加一,就有一项最大值被送入串末尾。
串的换位置类似于两数交换位置,也需要一个辅助串。并且思路都是一样的。
3、注意串的输入输出。%s可以直接输入输出一个串。
习题8-10(未解决完全)
题目要求:
本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
代码如下:
#include<stdio.h>
int max(int x,int y);
int min(int x,int y);int main(void){int n,i;float temp,sum,ave,ma=0.0,mi=101.0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%f",&temp);sum=sum+temp;ma=max(temp,ma);mi=min(temp,mi);}ave=sum/n;printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,ma,mi);return 0;
}
int max(int x,int y){if(x>y)return x;elsereturn y;
}int min(int x,int y){if(x>y)return y;elsereturn x;
}
**注意:**此段代码并未使用动态分配,待以后更新。
本题思路:
1、思路很简单,只是用到了两个函数需要自己写,其余就是动态分配的问题,待以后更新。
发布评论