五、编程题(共55分)
1.请编程实现:计算并输出下列多项式值:s=1+1/(1+2)+1(1+2+3)+....+1/(1+2+3+..+50) (7分)
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 float sum=0; 7 int count=0; 8 int i=50; 9 for(i=1;i<=50;i++){ 10 count+=i; 11 sum+=(1.0/count); 12 } 13 printf("%g\n",sum); 14 return 0; 15 }
运行结果:

2请编程实现:计算并输出3到n之间所有素数的平方根之和
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<math.h> 4 int Isprime(int num){ 5 int i; 6 int flag=1; 7 8 for(i=2;i*i<=num;i++){ 9 if(num%i==0){ 10 flag=0; 11 break; 12 } 13 } 14 return flag; 15 } 16 17 int main() 18 { 19 int i,n; 20 float sum=0.0; 21 printf("Input n:"); 22 scanf("%d",&n); 23 24 for(i=3;i<=n;i++){ 25 if(Isprime(i)){ 26 sum+=sqrt(i); 27 } 28 } 29 printf("sum=%g\n",sum); 30 return 0; 31 }
运行结果:

3、请编程实现:两个m*m阶矩阵相乘,要求:在主函数中进行输入、调用矩阵乘法函数完成两个矩阵相乘,并在主函数内输出结果;函数实现矩阵相乘。(10)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define M 3 4 int main() 5 { 6 int a[M][M]; 7 static int result[M][M]; 8 int i,j,k; 9 printf("Input a %d*%d阶矩阵\n",M,M); 10 for(i=0;i<M;i++) 11 for(j=0;j<M;j++) 12 scanf("%d",&a[i][j]); 13 14 for(i=0;i<M;i++){ 15 for(j=0;j<M;j++){ 16 for(k=0;k<M;k++){ 17 result[i][j]+=a[i][k]*a[k][j]; 18 } 19 } 20 } 21 22 printf("Print :\n"); 23 for(i=0;i<M;i++){ 24 for(j=0;j<M;j++) 25 printf("%5d",result[i][j]); 26 printf("\n"); 27 } 28 return 0; 29 }
运行结果:

4.请编程实现对6个从键盘输入的国家名字进行字典序输出。要求:在主程序中进行输入,调用排序函数并在主函数内输出结果:函数实现排序。(15 分)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<string.h> 4 5 void sort(char *name[],int n){ 6 int i,j,k; 7 char *t; 8 for(i=0;i<n-1;i++){ 9 //选择排序法从小到大排 10 k=i; 11 for(j=i+1;j<n;j++) 12 if(strcmp(name[k],name[j])>0) 13 k=j; 14 if(k!=i){ 15 t=name[i]; 16 name[i]=name[k]; 17 name[k]=t; 18 } 19 } 20 } 21 22 void Print(char *name[],int n){ 23 int i; 24 for(i=0;i<n;i++) 25 puts(name[i]); 26 } 27 int main() 28 { 29 char cs[6][20]; 30 char *name[]={cs[0],cs[1],cs[2],cs[3],cs[4],cs[5]}; 31 int i,n=6; 32 for(i=0;i<6;i++) 33 gets(cs[i]); 34 printf("result:\n"); 35 sort(name,n); 36 Print(name,n); 37 return 0; 38 }
运行结果:

5.磁盘当前目录下存在文件cl.txt,其中存放了一段英文文字。请编程实现将c1.txt中英文文字全部转换为大写字母,并保存到c2.tt文件中。要求: c2.txt文件的前面保存的是cl.xt文件中的原始文字,后面紧跟着的是转换后的文字
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 FILE *fp1,*fp2; 7 char ch; 8 if((fp1=fopen("c1.txt","r"))==NULL||(fp2=fopen("c2.txt","w"))==NULL){ 9 printf("Cannot open this file!\n"); 10 exit(1); 11 } 12 ch=fgetc(fp1); 13 while(!feof(fp1)){ 14 if(ch>='a'&&ch<='z') 15 ch=ch-32; 16 fputc(ch,fp2); 17 18 ch=fgetc(fp1); 19 } 20 fclose(fp1); 21 fclose(fp2); 22 return 0; 23 }
运行结果:

