6.输入一个字符串,将其中的所有大写字母改为小写字母,而所有小写字母全部改为大写字母,然后输出。 【解】程序先输入字符率,然后顺序考察输入字符串中的字符,当发现是大写字母时,将它改写成对应的小写字母,而当它是小写字母时,就将它改写成对应的大写字母。若变量ch中的字符是大写字母,则与它对应的小写字母的表达式可以写成ch- ’A’+’a’ ;类似地,若变量ch中的字符是小写字母,则与它对应的大写字母的表达式可以写成ch-’a’+’A’ 。完整程序如下: # include # define N 200 main() { char s[N] ; int i; printf(" Enter string! \n"); scanf ("%s" ,s); for(i=0; s[i]!=’\0’;i++) if(s[i] >=’A’&&s[i] <=’Z’ ) s[i]=s[i] -’x’+’a’ ; else if(s[i] >=’a’&& s[i] <=’z’) s[i]= s[i]-’a’ +’A’ ; printf("s=%s\n", s); }
7.设某班50名学生的三科成绩表如下: 课程一 课程二 课程三 ... ... ... 试编一个程序,输入这50个学生的三科成绩,计算并输出每科成绩的平均分。 【解】程序定义一个50行3列的二维数组,用于存储全班学生的成绩。程序顺序输入各个学生的三科成绩,然后按列的顺序,累计各科总分,并计算平均分。完整程序如下: # include # define N 50 # define M 3 main() {int score[N][M], i,j,t; double a[M]; printf("Enter scores!\n"); for(i=0;i< N; i++) for(j=0;j scanf("%d",&t);score[i][j]=t; } for(j=0;j for(j=0;j< M;j++){ for(i=0;i< N; i++) a[j]+= score[i][j]; a[j]/= N; } for(j=0;j printf("课程%d的平均分是%.2f\n", j+1,a[j]); }
8.编一个程序,输入一个整型数据,输出每位数字,其间用远号分隔。例如,输入整数为2345,则输出应为: 2, 3, 4, 5。 【解】程序的主要工作是从输入整数分拆出它的十进制整数的各位数字,将分拆出来的各位数字存于数组中,然后将这些数字自高位到低位的顺序逐位输出。要将一个整数按十进制数的要求分拆,需用一个循环,每次循环求出被分拆数除以10的余数的办法来求出它的个位,每分拆出一位就将被分拆的数除以10。循环过程直至被分拆的数为0结束。完整程序如下: # include main() {int a[20],i,base=10; int n; printf("Enter a number! \n"); scanf("%d", &n);/*整数输入*/ i=0;/*对n进行分拆,各位数字自低位到高位存于数组 a*/ do{ a[i++]=n% base; n/= base; } while(n) ; for(i--;i>=0;i--)/*自高位到低位输出*/ printf("%d%c",a[i], i? ’,’ :’\n’); }
9.编一个程序,输入一个字符串,将其中所有的大写英文字母的代码+3,小写英文字母的代码-3。然后输出加密后的字符串。 【解】程序的主要工作是输入字符串,并顺序考察输入字符率中的字符,分别对其中大小写英文字母完成问题要求的更改,而跳过不是英文字母的字符。完整程序如下: # include # define N 200 main() {char s[N]; int i; printf("Enter string! \n"); scanf("%s", s); for(i=0;s[i] !=’\0’; i++) if(s[i] >=’A’ && s[i]=’Z’) s[i]=3; else if(s[i]=’a’&& s[i]=’z’ ) s[i]=3; printf("s=%s\n",s); }
10.编一个程序,将按第9题中加密的字符率(从键盘输入)解密后输出。 【解】本问题编写的程序是完成上一程序的逆操作。同样是顺序考察输入字符串,对满足要求的字符作恢复更改。要求是当字符减3后是大写英文字母时,则对其作减3处理的替换;当字符加3后是小写英文字母时,则对它作加3的处理。如此做法是有错误的,程序未考虑原 先不是英文字母,而未被加3或减3处理,但对它减3或加3后是英文字母时,将被下面的程序转换成英文字母。所以下面的程序不是完成上题程序的逆操作。但没有简单的办法能避免这个错误。完整程序如下: # include # define N 200 main() {char s[N]; int i; printf("Enter string!\n"); scanf("%s",s); for(i=0;s[i] !=’\0’;i++) if(s[i]-3>=’A’&&s[i]-3<=’Z’) s[i]-=3; else if(s[i]+3>=’a’ && s[i]+3<= ’Z’) s[i]+=3; printf("s=%s\n",s); } |