《C 语言程序设计》试题A 答案
考 生 信 息 栏 经济 学院 计统 系 专业 2010 年级 姓名______ 学号_______________
装 订 线 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
一、单项选择题(每题2分,共60分) 注意:答案纸不能当草稿,请保持整洁!
二、简答题 (13题,1~12题每题3分,第13题4分,共40分)
1. 三种基本结构: 顺序、选择、 循环
2.① y 能被4 整除, 但不能被100整除; 或 y 能被 400 整除。 ② 2008 是闰年 1997 不是闰年
3. 输入的数据为: 任意负奇数
4. ① 作用: 原型说明 ② 输入: 3#8
5. ① 语句: t=*a ; *a=*b ; *b=t ; ② swap (&x , &y );
6. ① 当某趟已排好序时,控制排序结束,不必执行后面趟数 ② 参数: sort ( d , 5 );
7. ① printf ( " %3c", a[j][i] ) ② a 的内容
8. ① 条件:s < p ② 运行结果: H, ! 9. ① 运行结果: ABC ②
10.① m= sizeof (ss) / sizeof ( char * ); ② printf ("%s", * p ); 11.p0 = (struct node*) malloc (sizeof (struct node )) ; p0->data=1003 ; p0->next = NULL;
12. ① printf (" %6d ", p -> data ) ② p = p -> next ; 13. 运行结果: 101 102 104
C
F
厦门大学答题卷纸
考 生 信 息 栏 ______学院______系______ 专业 ______年级 姓名______ 学号____________ 装 订 线 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
考试课程:_________ 考试地点:_________ 考试时间:_________ 试卷(请打√):A 卷( )B 卷( )
遵章守纪考试诚信承诺书
《C 语言程序设计》试题A 答题纸
考 生 信 息 栏 经济 学院 计统 系 专业 2010 年级 姓名______ 学号_______________
装 订 线 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
一、单项选择题(每题2分,共60分) 注意:答案纸不能当草稿,请保持整洁!
二、简答题 (13题,1~12题每题3分,第13题4分,共40分)
1. 三种基本结构:
2.① ② 2008 , 1997 。
3. 输入的数据为:
4. ① 作用: ② 输入:
5. ① 语句: ; ; ; ② swap ( , );
6. ① ② 参数: sort ( , );
7. ① printf (" %3c", ) ② a 的内容 8. ① 条件: ② 运行结果: 9. ① 运行结果: ②
10.① m= ; ② printf ("%s", ); 11.p0 = ; ; ; 12. ① printf (" %6d ", ) ② ; 13. 运行结果:
注意:答案填入答题纸中,答案纸不能当草稿,草稿可以写在试卷纸上。考完后试卷和答案纸都得交上。
一、单项选择题(30题,每题2分,共60分)
1.下列叙述中错误的是:
A) C语言源程序是文本文件B) 目标程序不是二进制文件
C) 目标程序不是文本文件D) 可执行程序是二进制文件
2.表达式(int) ((double) (5/2)+2.5) 的值是:
A) 4.5 B) 4 C) 5 D) 5.0
3.设x和y均为int 型变量,则以下语句:x += y; y = x-y; x -= y; 的功能是:
A) 交换x和y中的值B) 把x和y按从小到大排列
C) x和y中的值不变D) 把x 和y按从大到小排列
4.若已定义int a = 3, b = 3, x =1, y = 2; 表达式( a= y>x) && ( x= b>a) 的值是:
A) 6 B) 1 C) 9 D) 0
5.以下叙述中错误的是
A) C语言是一种结构化程序设计语言B) 结构化程序有顺序、分支、循环三种基本结构组成
C)结构化程序设计提倡模块化的设计方法D) 使用三种基本结构构成的程序只能解决简单问题
6.使以下程序中t的输出结果为3,则输入a和b应满足的条件是:
main ()
{ int s = 1, t = 1, a, b;
scanf (" %d %d ", &a, &b );
if ( a > 0 ) s += 1;
if ( a>b ) t = s + t;
else if ( a= =b ) t = 5;
else t = 2 * s;
printf ( "%d \n ", t );
}
A) a>0并且a0并且a>b D) a<0并且a>b
7.以下叙述中正确的是:
A) C程序的基本组成单位是语句B) C程序中的每一行只能写一条语句
C) 简单C语句必须以分号结束D) C语句必须在一行内写完
8.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是:
A) 函数调用可以作为独立的语句存在B) 函数调用可以作为一个函数的实参
C) 函数调用可以出现在表达式中D) 函数调用可以作为一个函数的形参
9.若定义int a[ ][3] = { 1, 2, 3, 4, 5, 6, 7 };则a数组中行的大小是:
A) 2 B) 3 C) 4 D) 无确定值
10.若有定义语句:char s[ ] = "123450\0\0" ; ,则sizeof (s) 的值是:
A) 7 B) 8 C) 9 D) 10
11.运行以下程序段:char a[5]="work"; char *p=a; 则表达式*(p++)的值为:
A) 'w' B) 存放'w' 的地址C) 'o' D) 存放'o' 的地址
12.若有定义int a[3][5],i,j;(且0
A) *a+i*5+j B) (*(a+i))[j] C) *(a+i)+j D) a[i]+j
13.设有以下语句:typedef struct S { int g;char h;} T;则下面叙述中正确的是:
A) 可用S定义结构体变量B) 可以用T 定义结构体变量
C) S是struct 类型的变量D) T 是struct S 类型的变量
14.设有定义:struct complex { int real, unreal; } data1={1,8}, data2; 则以下赋值语句中错误的是:
A) data2=data1; B) data2=(2,6); C) data2.real=data1.real; D) data2.real=data1.unreal;
15.对枚举类型的定义错误的是:
A) enum b{1, 2, 3}; B) enum a{A, B, C}; C) enum c{D=3, E, F}; D) enum d{X=0, Y=5, Z=9}; 以下(16 ~ 30题) 为:阅读程序, 选择正确的输出的结果。
16.main ()
{ int a=65; char c='A'; /* 'A' 的ASCII为65 */
printf("%d+%c=%d\n" ,a, c, a+c);
}
A) A+A=AA B) 65+A=65A C) 65+65=130 D) 65+A=130
17.main( )
{ int sum = 0, item = 0;
while (item++ < 5)
{ if (item == 2) continue;
sum += item;
}
printf("%d\n",sum);
}
A) 10 B) 13 C) 15 D) 1
18.main ( )
{ int i, j;
for ( i = 1; i <= 3; i++ )
{ for ( j = 2; j >=1; j--) printf ( " %3d ", i * j );
printf ( " \n" );
}
}
A) 3 6 B) 2 1 C) 1 2 3 D) 6 4 2
2 4 4 2 2 4 6
3 2 1
1 2 6 3
19.void f (int x, int y)
{ int t;
if (x } main ( ) { int a = 4, b = 3, c = 5; f ( a, b ); f ( a, c ); f ( b, c ); printf ( " %d, %d, %d \n ", a, b, c); } A) 3, 4, 5 B) 5, 3, 4 C) 5, 4, 3 D) 4, 3, 5 20.int fun1( ) { static int m=0; return m++; } int fun2( ) { int m=0; return m++; } main( ) { int i; for ( i=1; i<=4; i++) fun1( ); for ( i=1; i<=4; i++) fun2( ); printf ("%d %d", fun1( ), fun2( )); } A) 0 ,0 B) 4, 4 C) 4 ,0 D) 5,1 21.int a, b; void fun() { a=100; b=200; } main() { int a=5, b=7; fun( ); printf ( "%d %d \n", a, b); } A) 100 200 B) 5 7 C) 200 100 D) 7,5 22.void fun(int a[ ]) { a[0]=a[1];} main() { int a[10]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, i; for ( i=2; i>=0; i--) fun (&a[i]); for ( i=0; i<10; i++) printf ("%d ", a[i]); printf ("\n"); } A) 9 8 7 7 6 5 4 3 2 1 B) 10 9 8 7 6 5 4 3 2 1 C) 10 9 7 6 5 5 4 3 2 1 D) 7 7 7 7 6 5 4 3 2 1 23.void fun (int array[ ][3], int k) { int j; for ( j=0; j<3; j++ ) array[k][j]++; } main( ) { int j, a[ ][3] = {1,2,3,4,5,6,7,8}; fun(a,1); for( j=0; j<3; j++) printf ( "%2d", a[1][j] ); } A) 5 6 7 B) 3 6 9 C) 2 3 4 D) 2 5 8 24.main ( ) { int a[ ] = {2, 4, 6, 8, 10 }, y = 0, x, *p; p=&a[2]; fo r (x = 1; x<3; x++) y += p[x]; printf ( "% d \n ", y ); } A) 6 B) 10 C) 14 D) 18 25.main ( ) { char str[] = "xyz", *ps = str; while ( *ps ) ps++; for ( ps--; ps-str >=0; ps-- ) puts ( ps ); } A) yz<回车>xyz B) z<回车>yz C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz 26.main( ) { char *a[] = {"1357", "24", "68", "123" }; int i; for ( i=0; i<4; i++) printf ( "%c", *a[i]+1 ); } A) 1261 B) 2372 C) 3482 D) 3574823 27.main() { int a[] ={1, 2, 3, 4, 5, 6}, *k[3], i=0; while (i<3) { k[i] = &a[2*i]; printf ("%d", *k[i++] ); } } A) 2 4 6 B) 1 3 5 C) 0 2 4 D) 4 5 6 28.struct ord { int x, y; } dt[2]={1,2,3,4}; main() { struct ord *p = dt; printf ( "%d,", ++p->x); printf ( "%d\n", ++p->y ); } A) 1,2 B) 2,3 C) 3,4 D) 4,1 29.typedef struct { int num; double s } REC; void fun1( REC x ) { x.num=34; x.s=88.5; } void fun2( REC * x ) { x->num=56; x->s=53.5; } main() { REC a={12, 90.0 }; fun1(a); printf ( "%d, ", a.num ); fun2(&a); printf ( "%d\n ", a.num ); } A) 34, 56 B) 12, 12 C) 12, 56 D) 34, 34 30.# include struct NODE { int num; struct NODE *next; } main ( ) { struct NODE *p, q, r; p = ( struct NODE *) malloc (sizeof (struct NODE) ); p->num = 10; q.num = 20; r.num = 30; p->next = &q ; q.next =&r; printf ( " %d \n ", p->num + p->next->num); } A) 10 B) 20 C) 30 D) 40 二、简答题(13题,1~12题每题3分,第13题4分,共40分,答案填入答题纸中相应的位置!) 1.C语言中用于结构化程序设计的三种基本结构是什么? 2.判断某一年是闰年年的逻辑表达式为:(y%4==0 && y%100!=0)|| y%400 == 0 其中y 是表示年的整型变量(如:1980) ①用自然语言解释闰年的条件。 ②判断2008和1997 是否闰年。 3.有以下程序段:int n, t = 1, s = 0; scanf ( "%d", &n ); do { s = s+t; t = t-2; } while (t != n); 为使此程序段不陷入死循环,从键盘输入的数据应该是: 4.①下面程序中第一行int add ( int, int ) 的作用是什么? ②要使程序运行结果为:x = 3,y = 5,z = 8 则应该从键盘输入什么? int add ( int, int ); /* ①该句作用*/ main ( ) { int x, y, z ; scanf (" %d # %d ", &x, &y );/* ②从键盘输入什么*/ z = add ( x , y ); printf ( "x = %d, y = %d, z = %d", x, y, z ); } int add ( int a , int b ) { return ( a + b ); } 5.下面为实现变量x与y内容交换程序。①填入实现交换的语句;②给出调用swap( ) 的实参。 # include void swap (int *a , int *b ) { int t; t= ; ; ; } /* ①填入实现交换的语句 */main ( ) { int x =10, y = 20;; swap ( , ) ; /* ②填入实参 */ printf ("x = %d, y = %d\n", x, y); } 6.以下是冒泡排序法程序。①说明change的作用;②填入实参对d中所有数据进行正确排序。 void sort( int a[ ], int num ) { int change = 1, t, i, j; for ( i = num-1; i>0 && change; i--)/*change的作用*/ { change=0; for ( j = 0; j < i; j++) if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t;change = 1;} } } main ( ) { int i, d[ ] = { 5, 1, 3, 2, 4 }; sort ( , ); for (i = 0; i < 5; i++ ) printf ( " %d ", d[i] ); } 7. ① 在 printf ( ) 中填入正确的参数,使得以下程序运行结果为: ② 给出以下程序初始化后a 的内容(所有元素的内容都得填上)。 main ( ) { char a[ ][3] = {'A', 'B', 'C', 'D', 'E', 'F' , 'G'}; /* ② a 的内容 */ int i, j; for ( i = 0; i< 3; i++ ) { for ( j = 0; j < 3; j++ ) printf ( " %3c", ); /*① 填入正确的参数 */ printf ( "\n" ); } } 8. 以下是实现字符串反转的程序(如把 “HELLO!” 变成 “!OLLEH ”)。回答下面问题: ① 写出循环条件, 实现字符串反转程序的功能两个字符? ② 给出程序运行结果。 main() { char str[ ] = "HELLO!" , *s=str, *p =s , c ; while ( *p) p ++; p -- ; printf ( "%c, %c", *s, *p ) ; while ( ) /* ① 写出循环条件 */ { c = *s; *s++ = *p; *p-- = c; } } 9. ① 给出以下程序运行结果 ② 运行后数组s2中的每个元素的内容。 # include void fun( char * p, char q [ ] ) { int i = 0; while ( p[i] =q[i] ) i++; } main ( ) { char * s1 = "ABC", s2 []= "12345"; fun ( s2 , s1); puts(s2); } A D G B E C F 10. 利用以下程序中已经定义的变量和数组, 根据要求完成程序: ① 填入适当表达式,使得m 能自动计算字符串个数; ② 在 printf( ) 中填入正确的参数,使得程序输出字符串数组中的所有字符串。 main () { char * ss [ ] = { "cat", "dog", "bird", … , "mouse" }, ** p ; int m ; m = ; /* ① 自动计算字符串个数 */ for ( p = ss; p < ss+m; p++ ) printf ("%s ", ); /* 填入正确的参数 */ } 11. 设有一链表的结点结构及有关指针变量定义如下: struct node { int data; struct node * next } * p0 ; 写出动态产生右图p0结点的程序段。(包含:申请内存语句,产生节点内容语句) 12. 同上题的结点结构,以下函数print_llink (hd) 实现显示链表各结点数据,hd 为头指针,请完成该函数。 void print_link ( struct node *hd ) { struct node * p =hd; while ( p != NULL ) { printf (" %6d ", ); /* ① 显示结点数据 */ ; /* ② p 移到下一个结点 */ } } 13. 续上题,假定已建立如下链表结构, 给出下面程序运行的结果。 struct node *creat_link (int n) /* 创建n 个结点的链表,内容略 */ { …… } main ( ) { struct node * p, *head; head=creat_link(4); /* 创建上图的4个结点的链表 */ p=head->next; p-> next = p-> next -> next; print_link (head); /* 调用上题的函数,显示链表各结点数据 */ } data next