试之。
08-09学年第2学期《高级语言程序设计》重修试卷 参考答案
一、选择题(50分,每小题2分)
(1)A(2)D(3)D(4)B(5)C(6)D(7)A(8)D(9)B(10)C
(11)B(12)D(13)A(14)D(15)B(16)D(17)C(18)C(19)C (20)D (21)D(22)B(23)A(24)B(25)A
二、程序填空题(16分,每小题8分)
1.(1)int m=0,k; (2)m-1
2.(1)#include
三、编程题(34分)
(1)(11分)编写程序,计算数列1,1,2,3,5,8,13,21,??,的前20项之和。
#include
int a=1,b=1,c,i; long s=2;
for(i=3;i<=N;i++){ c=a+b; s+=c; a=b;b=c; }
printf(“s=%ld\\n”,s); } (2)(11分)用二维数组data存储随机输入的(4×5)20个不重复整数,输出其中的最大整数及其输入的序号(序号可能值为1,2,3,... ,20)。 #include
int a[4][5],i,j,max,row,col; for(i=0;i<4;i++) for(j=0;j<5;j++)
scanf(“%d”,&a[i][j]); max=a[0][0];row=0;col=0; for(i=0;i<4;i++) for(j=0;j<5;j++)
if{a[i][j]>max}{max=a[i][j];row=i;col=j;} printf(“max=%d,order=%d\\n”,max,row*5+col+1);
}
(3)(12分)完成函数int fun(char *s){ ? },函数返回字符串s中各个数字字符所组成的数。如,char *s=”a1bc2defg3h”,则函数返回值为整数123。并设计程序测试之。
#include
if(*s>='0'&&*s<='9') n=n*10+*s-'0'; s++; }
return n; }
void main(void){
char *str=(char*)malloc(80); puts(\ gets(str);
printf(\}
华侨大学10-11学年第1学期《C语言程序设计》重修班试卷
学号________________ 姓名___________ 班级___________ 成绩______ 注意:请将所有答案写在答卷上! 一、单项选择题(40分,每小题2分) 1.在一个可运行的C源程序中,( )。
A.可以有一个或多个main函数 C.可以没有main函数
B.必须有且仅有一个main函数 D.必须有main函数和其他函数 C.int a=10, *b=&a; C.65 C n%2.5 C. 3
D.float *a, b=&a; D.W
D m=-1&&(m>n) D. 8
2.以下定义语句中正确的是( )。
A.char a='A' b='B'; B.float a=b=10.0; A.\A m=(n==5) A. 7
B.'\\0x41' B m=sizeof(k) B. 6
3.以下选项中合法的字符常量是( )。
4.若有定义:int m=4,n=5; float k; 则以下不符合C语言语法的表达式是( )。 5.若有定义: int x,y,z; 语句x=(y=z=3,++y,z+=y); 运行后,x的值为( )。 6.以下程序段运行后x的值为( )。 int a=3,b=6,x; x=(a==b)?a++:--b;
A. 4 A. 3
B. 3 B. 2
C. 6 C. 0
D. 5 D. 1
7.若有定义:int a=3,b=4,c=5; 则表达式 !(a-b)||(c-b) 的值为( )。
8.若有定义:int a=3,b=5; 要实现输出形式为:3*5=15 正确的printf( )函数调用语句为( )。
A. printf(\
C. printf(\
B. printf(\
D. printf(\
9.以下程序段的运行结果是( )。
int s=10; switch(s/4){
case 1: printf(\
case 2: printf(\ case 3: printf(\ default: printf(\ } A. BC B. C A.int x[]={1,2,3,4,5,6}; C.int a[8]; a[8]=10;
C. B D. BCD
10.在下列数组定义、初始化或赋值语句中,正确的是( )。
B.int x[5]={1,2,3,4,5,6};
D.int n=8; int score[n];
11.以下程序段运行后,s的值是( )。 int a[3][3]={1,2,3,1,2,3,1,2,3}; int i,j,s=0;
for(i=0;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(\
A. 4
A.puts(str);
C.printf(\
B. 6
C. 10
D. 14
12.若已有定义:int i; char str[8]=\则下列语句中,不正确的是( )。
B.for(i=0;str[i]!='\\0';i++) printf(\
D.for(i=0;str[i]!='\\0';i++) putchar(str);
13.设已定义:char str1[20]=\ str2[20]=\若要形成字符串\正确语句是( )。
A strcpy (str2,str1) #include
void fun(void ){ a++; printf(\}
void main(void){
int i;
B strcat(str1,str2)
C strcpy (str1,str2)
D strcat(str2,str1)
14.以下程序的运行结果是( )。
for(i=1;i<=2;i++) fun(); }
A. 1 2 B. 0 0 C. 1 1 D. 0 1 15.若已定义:int a[4]={0,1,2,3}, *p=a; 则以下( )不能表示数组元素a[1]。 A.p[1]
B.*(p+1)
C.*p+1
D.*(a+1)
16.以下程序的输出结果是( )。
#include
int i; char *s=\ for(i=0;i<3;i++) printf(\} A. B.
C. D.
ABCD AB CD ABCD ABC ABC BCD BCD AB ABCD ABCD CD 17.若已定义:int a[][2]={1,2,3,4,5,6},(*p)[2]; p=a; 则*(*(p+1)+1)的值为( A.6
B.3
C.4
D.5
18.C语言中,数组名作为函数调用的实参时,下面叙述正确的是( )。A.传递给形参的是数组元素的个数 B.传递给形参的是数组中全部元素的值 C.传递给形参的是数组第一个元素的值
D.形参数组中各元素值的改变会使实参数组相应元素的值同时发生变化
19.若有以下定义,则表达式sizeof(s)的值是( )。
union U_type{
int x[10]; char z; }s; A.20 B. 10 C.2 D.1 20.若有宏定义:#define F 2+4,则表达式F*F的值为( )。 A. 36
B. 12
C. 16
D. 14
二、填空题(18分,每小题9分)
1.下面程序的功能是计算n!,请填空完成。
#include \void main(void) { long i, n, result; printf(\ scanf(\ result= ( 1 ); for(i=2;i<=n;i++) ( 2 ) ; printf(\( 3 ) \ }
。 )
2.以下程序中定义的函数fun的功能是:将p2所指字符串复制到p1所指内存空间。请完成程序。
#include \
void fun( ( 4 ) ,const char *p2){ while((*p1= ( 5 ) )!='\\0'){ p1++; p2++; } }
void main(void){ char str1[20];
const char *str2=\
fun( ( 6 ) ,str2); /* 将str2所指向的字符串复制到str1所指内存空间 */ printf(\}
三、改错题(18分,每小题9分)
1.以下程序中的函数reverse的功能是将数组a中的n个元素进行倒置。程序运行结果为:9 8 7 6 5 4 3 2 1 0
请修改“/**/”和“/**/”之间存在的错误,使程序正确。
#include
void reverse(int a[], int n){ int i,temp; for(i=0; /**/ i void main(void){ int b[10]={0,1,2,3,4,5,6,7,8,9},i; for(i=0;i<10;i++) printf(\ printf(\ reverse(/**/ b[10] /**/ , sizeof(b)/sizeof(int) ); for(i=0;i<10;i++) printf(\} 2.以下程序的功能是输出以下图形: A BBB CCCCC DDDDDDD 请修改“/**/”和“/**/”之间存在的错误,使程序正确。