(12)函数fun的功能是计算xn double fun(double x, int n) I int i; double y=l return y 主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4+b4-(a+B) 实现这一计算的函数调用语句为【12】 (13)下面 rotate函数的功能是:将n行n列的矩阵A转置为A 请填空 #define n void rotate (int allIN) for(i=0: i<N: I++) for(j=0;【13】:j++) t=a[]lil 【14】 a[j][i]=t; (14)以下 sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空 间中,形成一个新的字符串s。请填空。 void sstrcpy(char *s, char *t) while(*s++=【15】);} char strl[100],str2[]=” abcdefgh” printf(“%sn”,str1); (15)下列程序的运行结果是:【16】 return s+strlen(s)/2: 1 main har*p,*str=” abcdefgh” (三)完善程序(共15分) 1、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码 6
6 (12) 函数 fun 的功能是计算 xn double fun(double x,int n) { int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y; } 主函数中已经正确定义 m,a,b 变量并赋值,并调用 fun 函数计算:m=a4+b4-(a+B) 3。 实现这一计算的函数调用语句为【12】 。 (13) 下面 rotate 函数的功能是:将 n 行 n 列的矩阵 A 转置为 A’ 请填空 #define N 4 void rotate(int a[][N]) { int i,j,t; for(i=0;i<N;I++) for(j=0;【13】;j++) { t=a[i][j]; 【14】 ; a[j][i]=t; } } (14) 以下 sstrcpy( )函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空 间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) { while(*s++=【15】);} main( ) { char str1[100],str2[]=”abcdefgh”; sstrcpy(str1,str2); printf(“%s\n”,str1); } (15) 下列程序的运行结果是:【16】 #include char *ss(char *s) { return s+strlen(s)/2;} main( ) { char *p,*str=”abcdefgh”; p=ss(str); printf(“%s\n”,p); } (三)完善程序(共 15 分) 1、有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是 1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码: main() {
int i,j, k; printf("n ); for(i=1;<5;1++) for(=1:<5 j++) (【18】) printf("%d, %d, %\n", ij, k) 2、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请 问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数 加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析 程序源代码 #include " math. h 【19】 for(【20】) i xsqrt(i+100) y=sqrt(i+268) if(【21】) printf("In%ld\n", 1) 3、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等 于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的 三次方。 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 程序源代码 int i,j, k, n; printf("water flower 'number is: ") for(n=100;n<1000n++) 【22】/*分解出百位* 【23】/*分解出十位* 【24】/*分解出个位* if(【25】) printf("%-5d", n)
7 int i,j,k; printf("\n"); for(i=1;i<5;i++) for(j=1;j<5;j++) for ( 【17】 ) { if ( 【18】 ) printf("%d,%d,%d\n",i,j,k); } } 2、 一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请 问该数是多少?程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数 加上 268 后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 程序源代码: #include "math.h" main() { 【19】; for (【20】) { x=sqrt(i+100); y=sqrt(i+268); if(【21】) printf("\n%ld\n",i); } } 3、 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等 于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次方+5 的三次方+3 的 三次方。 程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。 程序源代码: main() { int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { 【22】/*分解出百位*/ 【23】/*分解出十位*/ 【24】/*分解出个位*/ if(【25】) { printf("%-5d",n); } }
printf("\n"); 4、求s=a+a+a+a+a.a的值,其中a是一个数字。例如2+22+222+2222+2222此 时共有5个数相加),几个数相加有键盘控制。程序分析:关键是计算出每一项的值 程序源代码 aino int a, n, count=l long int【26】; printf("please input a and nIn); scanf("d,%d",【27】 printf("a=%d, n=%odIn", a, n); while(【28】) tn=tn+a 【29】 a*10; 【30】 printf("ataat.. %ld\n",sn)
8 printf("\n"); } 4、求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此 时共有 5 个数相加),几个数相加有键盘控制。程序分析:关键是计算出每一项的值。 程序源代码: main() { int a,n,count=1; long int【26】; printf("please input a and n\n"); scanf("%d,%d",【27】); printf("a=%d,n=%d\n",a,n); while(【28】) { tn=tn+a; 【29】 a=a*10; 【30】 } printf("a+aa+...=%ld\n",sn); }
上机部分(70分钟) 改错题(18分) 程序功能 给定程序 MODIL. C中函数fun的功能是:将在字符串s中出现、而未在字符串t中出 现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复 字符。 例如:当s=" AABCDE",t="BDFG"字符。 u中的字符串为"AACE"。 请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得 增行或删行,也不得更改程序的结构! 含有错误的源程序 #include #include #include void fun (char *s, char *t, char u sl= strlen(s): tl strlen(t) for (i=0 if (slil =s tlil break u++=s[i] main char s[100],t[100],u[100 clrscro printf( " \nPlease enter string s: ) scanf(%s" s printf(" \nPlease enter string t: ) scanf(%s" t) printf( the result %s\n", u) 「要求 1将上述程序录入到文件myfc中,根据题目要求及程序中语句之间的逻辑关系对程序中的 错误进行修改。 2改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处 理命令,但不能增加其它语句,也不能删去整条语句 3改正后的源程序(文件名mync)保存在考试软盘的根据目录中供阅卷使用,否则不予评分。 二、编程题(22分) 程序功能
9 上机部分(70 分钟) 一、改错题(18 分) [程序功能] 给定程序 MODI1.C 中函数 fun 的功能是:将在字符串 s 中出现、而未在字符串 t 中出 现的字符形成一个新的字符串放在 u 中,u 中字符按原字符串中字符顺序排列,不去掉重复 字符。 例如:当 s = "AABCDE",t = "BDFG"字符。 u 中的字符串为"AACE"。 请改正函数 fun 中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得 增行或删行,也不得更改程序的结构! [含有错误的源程序] Modi1.c #include #include #include void fun (char *s, char *t, char u) { int i, j, sl, tl; sl = strlen(s); tl = strlen(t); for (i=0; i { for (j=0; j if (s[i] == t[j]) break; if (j>tl) *u++ = s[i]; ) *u = '\0'; ) main() { char s[100], t[100], u[100]; clrscr(); printf("\nPlease enter string s:"); scanf("%s", s); printf("\nPlease enter string t:"); scanf("%s", t); fun(s, t, u); printf("the result is: %s\n", u); } [要求] 1.将上述程序录入到文件 myfl.c 中,根据题目要求及程序中语句之间的逻辑关系对程序中的 错误进行修改。 2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处 理命令,但不能增加其它语句,也不能删去整条语句。 3.改正后的源程序(文件名 myfl.c)保存在考试软盘的根据目录中供阅卷使用,否则不予评分。 二、编程题(22 分) [程序功能]
有两个磁盘文件A和B各存放一行字母,要求把这两个文件中的信息合并(按字母顺 序排列),输出到一个新文件C中。 「要求 源程序文件名必须取为my2.c,输出结果文件名为myf2.out 2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 3源程序文件和运行结果文件均需保存在考试盘根据目录中供阅卷使用 4不要复制扩展名为obj和exe的文件到考试盘上
10 有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺 序排列), 输出到一个新文件 C 中。 [要求] 1.源程序文件名必须取为 myf2.c,输出结果文件名为 myf2.out。 2.数据文件的打开、使用、关闭均用 C 语言标准库中缓冲文件系统的文件操作函数实现。 3.源程序文件和运行结果文件均需保存在考试盘根据目录中供阅卷使用。 4.不要复制扩展名为 obj 和 exe 的文件到考试盘上