2013-2014(二)C语言上机考试题(参考答案)
姓名:学号:成绩:
一、 程序填空题(30分)
1、 下列给定程序中,函数fun的功能是计算如下公式:
例如,若形参e的值为1e-3,则函数返回值为0.551690。
请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include double s,t,x; s=0;k=1;i=2; x=___3.0___/ 4; while(x ___>__e) {s=s+k*x; k=k*(-1); t=2*i; x=__(2*i+1)___/(t*t); i++; } return s; } Intmain() {double e=1e-3; printf(“\\nThe result is:%lf\\n”,fun(e)); } 2、 请补充函数proc(),该函数的功能是:把数组aa中元素下标为奇数的元素按从大到小的 顺序重新保存在原数组中,其元素位置不变。 例如,若数组aa中的元素为:“45 65 40 32 13 57 88 90 67 99”,则输出结果为:”45 99 40 90 13 65 88 57 67 32“。 请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 11 - ! #include for(i=1;i {____t=aa[j]_____; aa[j]=aa[i]; ______aa[i]=t______; } } } int main() { inti; intaa[M]={45,65,40,32,13,57,88,90,67,99}; printf(\"\\n***original list ***\\n\"); for(i=0;i #include voidproc(char *str) { int i=0,j=0; char *p=str; while(*(p+i)) {if(*(p+i)>='A' && *(p+i)<='Z') {str[j++]=*(p+i);} __i++____; } str[j]='\\0'; ___m=j_____; } int main() {charstr[80]; printf(\"\\nEnter a string:\"); 22 - ! gets(str); printf(\"\\n\\nThe string is:%s\\n\proc(str); printf(\"\\n\\nThe string of changing id:%s\\n\ printf(\"\\n\\nThe length of changed string is:%d\\n\} 4、以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include { for(i=1;i<=4;i++) {x=(j-1)*4+____i___; printf(“%4d”,x); } printf(“\\n”); } return 0; } 5、以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。 请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include {inti,a[20],sum,count; sum=count=0; for(i=0;i<20;i++) scanf(“%d”,____&a[i]____); for(i=0;i<20;i++) { if(a[i]>0) {count++; sum+=___a[i]____; } } printf(“sum=%d,count=%d\\n”,sum,count); return 0; } 33 - ! 6、有1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完? 请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include {int day,x1,x2; day=0;x1=1020; while(__x1_____) { x2=_x1/2-2__;x1=x2;day++;} printf(\" day=%d\\n\",day); return 0; } 二、 改错题(10分) 1、 下列给定程序中函数proc()的功能是:计算n!。例如,若输入:6,则输出:6!=720.000000。 请修改程序中的错误,使它能得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include if(n>1&&n<170) result=n*proc(n-1); return result; } int main() { int n; printf(\"Input N:\"); scanf(\"%d\ printf(\"\\n\\n%d!=%lf\\n\\n\} 2、 下列给定程序中,函数fun的功能是:从整数1到50之间,选出能被3整除且有一位 上的数是5的数,并把这些数放b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。 请修改程序中的错误,使它能得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include 44 - ! if((j%3==0&&a2==5)||(j%3==0 && a1==5)) {b[i]=j; i++; } } return i; } int main() { int a[50],i,n; n=fun(a); printf(\"the result is:\\n\"); for(i=0;i 1.计算:s=1+12+123+1234+12345的值(请用循环) 2.将s数组中的字符串的正序和逆序进行连接,形成一个新串放在t数组中。 例如:s数组中的字符串为”ABCD“时,则t数组中的字符串应为“ABCDDCBA”。 3.输入一个整数n(2<=n<=5000),打印它的所有为素数的因子。(例如,若输入整数1234,则应输出:617) 4、.定义一个3*3的矩阵,并打印出来,输入整数m,使矩阵的右半三角元素乘以m,并输出。 例如:a数组中的值为 1 9 7 2 3 8 4 5 6 若输入m的值为2, 则输出2 18 14 2 6 16 4 5 12 5、编程输入一个字符串,请统计出字符串中数字字符出现的次数,如数字字符没有出现,请打印出没有出现的信息。例如:字符串为:“abcdf89ik62,则应输出4。 参考答案: 1. #include 55 - ! printf(\"s=%d\\n\return 0; } 2. #include printf(\"请输入一串字符:\"); scanf(\"%s\printf(\"%s\\n\d=strlen(s); printf(\"%d\for(i=0;i 66 - ! } 3.#include printf(\"\\nplease enter an integer number betwen 2 to 5000:\"); scanf(\"%d\ printf(\"\\n\\n The prime factor(s) of %d is (are):\for(i=3; i 4、#include 77 printf(\"%4d\ continue; - ! int main() {int a[3][3]={{1,9,7},{2,3,8},{4,5,6}}; inti,j,m; printf(\"原矩阵\\n\"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\"%3d\printf(\"\\n\");} printf(\"请输入m的值:\"); scanf(\"%d\for(i=0;i<3;i++) for(j=0;j<=i;j++) a[j][i]=a[j][i]*m; printf(\"结果为:\\n\"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\"%3d\printf(\"\\n\");} return 0; } 5、法一: 88 - ! #include printf(\"请输入字符串:\"); gets(str); for(i=0;str[i]!='\\0';i++,p++) if(*p>='0'&& *p<='9') count++; printf(\"count=%d\\n\} 法二: #include printf(\"请输入字符串:\"); gets(str); for(i=0;str[i]!='\\0';i++) 99 - ! if(str[i]>='0'&&str[i]<='9') count++; printf(\"count=%d\\n\} 1010 因篇幅问题不能全部显示,请点此查看更多更全内容