c语言上机模拟 |
一、改错题(18分) 函数Void fun(char str[][],int m,*pt)的功能是:将数组str中的m(1≤m≤lo)个字 符串依次连接起来,组成一个新串,放入pt所指的字符数组中。 例如,把3个串"abc"、"CD"、"EF"连起来,所得新字符串是"abcCDEF"。 含有错误的源程序如下: 1 #include<stdio.h> 2 #include<string.h> 3 void fun(char str[][],int m,*pt) 4 { 5 int k,q,i; 6 for(k=0;k<m;k++) 7 { 8 q=strlen(str[k]); 9 for(i=O;i<q;i++) ’ 13 } 14 } 15 main() 16 { 17 int m,h; 18 char s[10][10],P[120]; 19 printf("\nPlease enter m:"); 20 scanf("%d",&m); 21 gets(s); 22 printf("\nPlease enter%d string:\n",m); 23 for(h=0;h<m;h++) gets(s[h]); 24 fun(s,p,m); 25 printf("\nThe result is:%s\n",p); 26 } 【要求】 1•将上述程序录人到文件myfl.c中,根据题目要求及程序中语句之间的逻辑关系对 程序中的错误进行修改。 2•改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译 预处理命令,但不能增加其他语句,也不能删去整条语句。 3.改正后的源程序(文件名myfl.c)必须放在考试软盘的根目录下,供阅卷用,否则不 予评分。 二:编程题(22分) 1.函数void fun(int m, int *k, int xx[])的功能是:将所有大于1小于整数m的非素数存入 xx所指数组中,非素数的个数通过k传回 2.编写main函数,从键盘输入m,调用fun函数,将函数fun返回的全部数据写入文件myf2.out中, 例如;若输入10,则输出为4以及4 6 8 9 要求: 1.将源文件取名为myf2.c,输出结果为myf2.out 答案: 一、改错题 ’ 1.第3行void fun(char str[][],int m,*pt) 改为void fun(char str[][10],int m,char *pt) 2•第10行pt[i]=str[k,i]; 改为pt[i]=str[k][i]; 3.第12行pt[i]='\0'; 改为pt[0]='\0'; 4.第24行 fun(s,p,m); 改为fun(s,m,p); 二编程题: #include <stdio.h> void fun( int m, int *k, int xx[ ]) { int i,j; *k=0; for(i=2; i<m; i++) { for(j=2; j<=i; j++) if(i%j==0) break; if(j<i) xx[(*k)++]=i; } } main() { int m,n,zz[100]; FILE *out: if((out=fopen("myf2.out","w"))==NULL) { printf("open file myf2.out failed!\n"); exit(0); } printf("\nPlease enter n:(10<=n<=100):"); scanf("%d",&n); fun(n,&m,zz); ’ fprintf(out,"\n\nThere are%d non-prime numbers less than%d:",m,n); for(n=0;n<m;n++) fprintf(out,"\n%4d",zz[n]); fclose(out); ’ } 分析:本题主要考查的是求素数的算法。本题的基本思路是判断从2到指定数m之间 的每个数是素数还是非素数。 ’ 判断某数是否为素数的算法思想是:判断此数是否只能被1和其自身整除,而不能被其 他任何数整除。若能被1到自身之间的任何一个数整除,则此数为非素数,将此数存放到数’ 组XX中,并且指针k所指向变量中的数值加1。 |