您的当前位置:首页c语言上机考试(参考答案)

c语言上机考试(参考答案)

2024-02-02 来源:乌哈旅游
 - !

2013-2014(二)C语言上机考试题(参考答案)

姓名:学号:成绩:

一、 程序填空题(30分)

1、 下列给定程序中,函数fun的功能是计算如下公式:

例如,若形参e的值为1e-3,则函数返回值为0.551690。

请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include double fun(double e) { inti,k;

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 #define M 10 intproc(intaa[]) { inti,j,t;

for(i=1;i{ for(___j=1_____;jaa[j])

{____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;iprintf(\"\\n***new list ***\\n\"); for(i=0;i3、请补充函数proc(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。 请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。

#include int m;

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 int main() { inti,j,x; for(j=4;j__>=1 或>0 或!=0_ ;j--)

{ for(i=1;i<=4;i++) {x=(j-1)*4+____i___; printf(“%4d”,x);

}

printf(“\\n”); }

return 0; }

5、以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。

请在程序的下画线处填上正确的内容,使程序得出正确的结果。 注意,不得增行或删行,也不得更改程序的结构。 #include int main()

{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 main()

{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 doubleproc(int n) {double result=1.0; if(n==0) return 1.0;

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 int fun(int *b) {int j,a1,a2,i=0; for(j=1;j<=50;j++) { a2=j/10; a1=j-a2*10;

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三、编程上机调试,请写出程序代码及调试结果(60分)

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 int main() { int t=0,s=0,i; for(i=1;i<=5;i++) { t=i+t*10;s=s+t;}

55

- !

printf(\"s=%d\\n\return 0; } 2.

#include #include intmain() { char s[50],t[50]; inti,d;

printf(\"请输入一串字符:\"); scanf(\"%s\printf(\"%s\\n\d=strlen(s); printf(\"%d\for(i=0;iprintf(\"新串为%s\\n \return 0;

66

- !

}

3.#include int main() { int i,j,n,flag=0;

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; iprintf(\"\\n\"); return 0; }

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 #include int main() { int count=0,i; char *p,str[20]; p=str;

printf(\"请输入字符串:\"); gets(str);

for(i=0;str[i]!='\\0';i++,p++) if(*p>='0'&& *p<='9') count++;

printf(\"count=%d\\n\} 法二:

#include #include int main() { int count=0,i; char str[20];

printf(\"请输入字符串:\"); gets(str);

for(i=0;str[i]!='\\0';i++)

99

- !

if(str[i]>='0'&&str[i]<='9') count++;

printf(\"count=%d\\n\}

1010

因篇幅问题不能全部显示,请点此查看更多更全内容