浙江师范大学2009C期末考试卷A卷及答案


浙江师范大学《C 语言程序设计》考试 A 卷
(2008----2009 学年第 2 学期)
考试形式 笔试(闭卷) 考试时间 120 分钟 【说明】 使用学生 全校 08 级理科(非行知)专业 出卷时间 2009 年 5 月 31 日

(1)考生应将全部答案都写在答题纸上,否则作无效处理。
(2) 试题 1~7 为程序选择填空题,为每个空格挑选出一个正确答案写在答题纸上。试题 8~9 为程序设计题。

试题 1 (每小题 2 分,共 10 分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,选择一个正确答案. 【程序说明】 求多项式 1 ?

1 1 1 1 ? ? ? ? ... 的值,直到最后一项的绝对值小于 10-4. 3 5 7 9

【运行示例】 sum = 0.785448 【程序】 #include <stdio.h> #include< (1) > void main() { int i=1, flag=1; double item, (2) ; do{ item = (3) ; sum = sum+ item ; flag = (4) ; } while( (5) ); printf("sum = %.2f \n", sum); } 【供选择的答案】 (1) A. math.h C. ctype.h (2) A. s C. sum = 0 (3) A. 1 / 2*i-1 C. flag / (2*i-1) (4) A. 0 B. string.h D. stdlib.h B. sum D. sum = 1 B. 1 / (2*i-1) D. (double)flag / (2*i-1) B. 1

C. -1 (5) A. item >= 0.0001 C. item < 0.0001

D. - flag B. fabs(item) >= 0.0001 D. fabs(item) < 0.0001

试题 2 (每小题 2 分,共 10 分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,选择一个正确答案. 【程序说明】 输入一个正整数 n,然后输入 n 个单精度实数,用冒泡法将这些实数从低到高排序后输 出。 【运行示例】 Enter n: 5 Enter 5 floats: 75.273 89.5 67.342 -98 5.41 After sorted: -98.00 5.41 67.34 75.28 89.50 【程序】 #include <stdio.h> void main() { int n, i, j; float temp, a[100]; printf("Enter n(n>0): "); while(scanf("%d", &n), (6) printf("Enter %d floats: ", n); for(i=0; i<n; i++) scanf("%f", (7) ); for(i=0; i<n-1; i++) for(____(8) ; (9) ; j--) if( (10) ){ temp = a[j-1]; a[j-1] =a[j]; a[j] = temp; } printf(" Afer sorted: "); for(i=0; i<n; i++) printf("%.2f ", a[i]); printf("\n"); } 【供选择的答案】 (6) A. n > 0 C. n >= 0

); //输入正整数 n

B. n < 0 D. n <= 0

(7) A. a C. &a[i] (8) A. j = 0 C. j= n-1 (9) A. j >i C. j< n-i (10)A. a[i]> a[j] C. a[j]> a[j+1]

B. a[i] D. &a B. j = i D. j = n-i B. j > 0 D. j < n-i-1 B. a[j-1] > a[j] D. a[j-1]> a[j+1]

试题 3 (每小题 2 分,共 8 分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,选择一个正确答案. 【程序说明】 输入十六进制整数形式的字符串, 调用函数 htod 将它转换成十进制整数,然后输出该 整数. 【运行示例】 Enter hexadecimal string: 4f Deciamal integer is: 79 【程序】 #include <stdio.h> int ctoi(char c) { if (c>='0' && c<= '9') return c- ‘0’; else if (c>= 'A' && c<= 'Z') return ____(11) ; else if (c>= 'a' && c<= 'z') return (12) ; else return 0; } int htod( char *h) { int i, d=0; for (i=0; h[i]!= '\0'; i++) d = ____(13) ; return d; } void main() { int dec; char hex[10];

printf("Enter hexadecimal string: "); ______(14)__ ___; dec = htod (hex); printf("Decimal integer is: %d\n", dec); } 【供选择的答案】 (11)A. c - 'A’ C. c - 'F’ (12)A. c – 'a’ C. c – 'f’ (13)A. d + ctoi( h[i] ) C. d*10 + ctoi( h[i]) (14)A. hex= getchar() C. scanf("%s", hex) B. c +10 D. c – 'A’ +10 B. c + 10 D. c – 'a’ +10 B. d*16 + ctoi( h[i]) D. d + ctoi( h[i])*16 B. scanf ("%c", hex) D. scanf("%s", &hex)

试题 4(每小题 2 分,共 8 分)
【程序说明】 数组 x[7]的初值为{1, 2, 3, 4, 5, 6, 7},经调用函数 f 后,数组 x 的元素被循环左 移 3 位,输出移位后数组 x 的各元素,屏幕上的输出结果为:4 5 6 7 1 2 3 【程序】 #include <stdio.h> void f(int a[],int n,int k) { int i,j,t; for(i=0;i<k;i++){ (15) ; for( (16) ) a[j-1] = a[j]; (17) ; } } void main() { int i, x[7] = {1,2,3,4,5,6,7}; (18) ; for(i=0; i<7; i++) printf("%4d",x[i]); printf("\n"); } 【供选择的答案】 (15) [A] t = a[i] [C] t = a[j] [B] t = a[k] [D] t = a[0]

(16) [A] j=i; j<n; j++ [C] j=1; j<k; j++ (17) [A] a[n]=t [C] a[n-1]=t (18) [A] f(x,7,3) [C] f(x,3,7)

[B] j=1; j<n; j++ [D] j=i+1; j<n; j++ [B] a[n-1]=a[i] [D] a[n]=a[i] [B] f(x,7,5) [D] f(x,5,7)

试题 5(每小题 2 分,共 8 分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include<stdio.h> void f1( int x, int y); void f2( int *x, int y ); void f3( int x, int *y ); void f4( int *x, int *y); void main() { int a=1, b=2; f1(a, b); printf(“a=%d, b=%d \n”, a,b); a = 1, b = 2; f2(&a, b); printf(“a=%d, b=%d \n”, a,b); a = 1, b = 2; f3(a, &b); printf(“a=%d, b=%d \n”, a,b); a = 1, b = 2; f4(&a,&b); printf(“a=%d, b=%d \n”, a,b); } void f1(int x, int y) { int t; t = x; x = y; } void f2(int *x, int y) { int t; t = *x; *x = y; }

y = t;

y = t;

void f3(int x, int *y) { int t; t = x; x = *y; } void f4( int *x, int *y) { int t; t=*x; *x=*y; *y=t; } (19) 程序运行时,第一行输出 A. a=1, b=2 C. a=1, b=1 (20) 程序运行时,第二行输出 A. a=1, b=2 C. a=1, b=1

*y = t;

。 B. a=2, b=1 D. a=2, b=2 。 B. a=2, b=1 D. a=2, b=2

(21) 程序运行时,第三行输出 A. a=1, b=2 C. a=1, b=1

。 B. a=2, b=1 D. a=2, b=2

(22) 程序运行时,第四行输出 A. a=1, b=2 C. a=1, b=1

。 B. a=2, b=1 D. a=2, b=2

试题 6(每小题 2 分,共 8 分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include <stdio.h> int a= 0; void fun() { } void main() { int i; for(i = 1; i <= 2; i++) fun(); printf("%d", a); } (23) 程序运行结果是 。 int a = 1; // 第 4 行 printf("%d,", a++);

A. 1, 2, 3 C. 1, 1, 0

B. 1, 2, 0 D. 0, 1, 2

(24) 其它代码不变,将源程序第 4 行改为“ static int a=1; ” ,程序运行结果是 。 A. 1, 2, 3 C. 1, 1, 0 B. 1, 2, 0 D. 0, 1, 2 。

(25) 其它代码不变,将源程序第 4 行改为“ a=1; ” ,程序运行结果是 A. 1, 1, 2 C. 1, 1, 0 B. 1, 2, 0 D. 0, 1, 2 。

(26) 其它代码不变,将源程序第 4 行改为“ ; ” ,程序运行结果是 A. 1, 1, 2 C. 1, 1, 0 B. 1, 2, 0 D. 0, 1, 2

试题 7(每小题 2 分,共 8 分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。 【程序】 #include <stdio.h> #include<string.h> struct student{ int num; char name[20]; char sex; } ; void main() { struct student s[4], *p ; char *sname [] = {"Zhao", "Qian", "Sun", "Li"}; char csex[] = {'M', 'F'}; int i; for( i = 0; i< 4; i++){ s[i].num = i+1; strcpy( s[i].name, sname[i] ); s[i].sex = csex[ s[i].num%2]; } p = s; } (27) 运行程序,输出 A. (Zhao, F) C. (Zhao, M) 。 B. (Qian, M) D. (Qian, M) //第 18 行 printf("(%s, %c)\n", p->name, p->sex);

(28) 为得到与(27)题相同的运行结果,程序的第 18 行可改写为 A. *p = s C. p = s[0] B. p = &s D.p = &s[0]



(29) 将程序的第 18 行改为“p = &s[1]”, 运行程序, 输出 A. (Zhao, M) C. (Zhao, F) B. (Qian, M) D. (Qian, F)



(30) 将程序的第 18 行改为“p= s+2”, 运行程序, 输出 A. (Qian, M) C. (Qian, F) B. (Sun, M) D. (Sun, F)



试题 8

程序设计(12 分)

【编程要求】 输入一个整数 n,计算并输出它的各位数字之和。如输入 3427,则它的各位数字之和为 3+4+2+7,即 16.

试题 9

程序设计(28 分)

【编程要求】 (1)用递归方式定义函数 fib(n),功能是计算菲波那契数列 1,1,2,3,5,8,13,?的 第 n 项, 其中,数列第 1 项和第 2 项均等于 1,从第三项开始的各项等于前两项之和。函 数返回值类型是 int 。 (8 分) (2)定义函数 fact(n),其功能是计算整数 n 的阶乘,即 n!=1*2*3*??*n, 函数返回值类 型是 double。 (8 分) (3)定义主函数 main(),要求输入整数 n、计算下列算式的值,并将计算结果按”%.2f” 的格式写入当前文件夹下的文件”result.dat”中:

s?

1 1 2 3 5 8 fib(n) ? ? ? ? ? ... ? 1! 2! 3! 4! 5! 6! n!

其中,该算式的第 i 项,分子是菲波那契数列的第 i 项为分子,分母是阶乘 i!。要求分别 调用在(1)和(2)所定义的递归函数 fib()和 fact()计算分子和分母。 (12 分) ) 2008-2009 学年第二学期 浙江师范大学 计算机基础(C 语言)期末考试 A 卷 答案与评分标准 第一部分:选择题( 2*30=60 分) ACDDB DCCAB DDBC

DBCA

ADCB CBAD ADBD 第二部分:编程题(12+28 分) 7. (12) #include<stdio.h> --1 分 void main() { int n, s=0; --1 分 printf("Enter n:"); scanf("%d",&n ); if(n<0) n=-n; while( n!=0){ s += n%10; n /= 10; }

--1 分 --2 分 --2 分 --2 分 --2 分 //或 #include<math.h> + n=fabs(n);

printf("s=%d \n",s ); --1 分 } 8. (28) (1) int fib(int n) --1 分 { if(n==1 || n==2) return 1; --3 分 else return fib(n-1)+fib(n-2); --4 分 } (2) double fact(int n) --1 分 { if (n==1) return 1; --3 分 else return n*fact(n-1); --4 分 } 或者 double fact(int n) --1 分 { double r=1; --1 分 int i; --1 分 for(i=1; i<=n; i++) --2 分 r = r*i; --2 分 return r; --1 分 } (3)#include<stdio.h> --1 分 void main() { FILE *fp; --1 分

int i,n; double s=0;

--1 分 --1 分

fp=fopen(“result.dat”,”w”); --1 分 scanf(“%d”, &n); --1 分 for(i=1; i<=n; i++) --1 分 s = s+ fib(i)/fact(i); --调用函数 2 分,累加 1 分 fprintf(fp, “%.2f”, s); fclose(fp); } --1 分 --1 分


相关文档

浙江师范大学2009C期末考试卷B卷及答案
浙江师范大学2010C期末考试卷A卷及答案
浙江师范大学2010C期末考试卷B卷及答案
南昌大学数学物理方法期末考试2009C卷答案
浙江师范大学《工程图学》考试卷A卷答案
浙江师范大学结构化学试题A卷答案
浙江师范大学 高等数学(上) 期末试题 A卷答案(理科1)
浙江师范大学《中国地理》试卷(A卷)参考答案
浙江师范大学大学物理D期末考试试卷
电脑版