五、编程题(共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 }

运行结果: