资源描述
《C语言程序设计》期末试题A答案
考 生 信 息 栏
经济 学院 计统 系 专业 2012 年级 姓名______ 学号_______________
装 订 线
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
一、单项选择题(每题2分,共60分) 注意:答案纸不能当草稿,请保持整洁!
1
B
2
B
3
D
4
D
5
A
16
A
17
B
18
B
19
A
20
B
6
B
7
D
8
B
9
A
10
A
21
D
22
D
23
C
24
C
25
A
11
C
12
C
13
C
14
B
15
C
26
A
27
D
28
A
29
D
30
C
二、简答题 (13题,1~12题每题3分,第13题4分,共40分)
1. x % 10 * 100 + x / 10 % 10 * 10 + x / 100
2. 运行结果: 1, 3, 3
3. 运行结果: 6, 13
4. if ( ( i+1 ) % 4 == 0 ) printf ( "\n" );
5. ① m = sizeof (a) / sizeof (int ) / 3 ; ② 运行结果: 1 5 0
6. ① 语句: c = *a ; * a = *b ; *b = c ; ② swap ( &x, &y );
7. 运行结果: 5 14 28
8. 运行结果: BCDACDD
9. ① while ( *p++ = *s++ ); ② 运行结果: abc123, abc123
name (排序后)
0
PAS
1
BAS
2
FOR
3
TC
10.① printf ("%s", * p ); ② name的情况
11.① 功能: 查找 ② 结果: ADC
12.① p->next=q->next ; q = p ; ② ABEC
13. while ( p != NULL )
{ n++; p = p -> next ; }
《C语言程序设计》期末试题A答题纸
考 生 信 息 栏
经济 学院 计统 系 专业 2012 年级 姓名______ 学号_______________
装 订 线
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
一、单项选择题(每题2分,共60分) 注意:答案纸不能当草稿,请保持整洁!
1
B
2
B
3
D
4
D
5
A
16
A
17
B
18
B
19
A
20
B
6
B
7
D
8
B
9
A
10
A
21
D
22
D
23
C
24
C
25
A
11
C
12
C
13
C
14
B
15
C
26
A
27
D
28
A
29
D
30
C
二、简答题 (13题,1~12题每题3分,第13题4分,共40分)
1. x % 10 * 100 + + x / 100
2. 运行结果:
3. 运行结果:
4. if ( ) printf ( );
5. ① m = ; ② 运行结果:
6. ① 语句: ; ; ; ② swap ( , );
7. 运行结果:
8. 运行结果:
9. ① while ( ); ② 运行结果:
name (排序后)
0
PAS
1
BAS
2
FOR
3
TC
10.① printf ("%s", ); ② name的情况
11.① 功能: ② 结果:
12.① ; ; ②
13. while ( )
{ n++; ; }
厦门大学《C语言程序设计》课程试卷
经济学院统计系2012级各专业
主考教师:黄扬铭 试卷类型:(A卷)
注意:答案填入答题纸中,答案纸不能当草稿,草稿可以写在试卷纸上。考完后试卷和答案纸都得上交。
一、单项选择题 (30题,每题2分,共60分)
1. 下列叙述中错误的是:
A) 计算机不能直接执行C语言源程序 B) 计算机可以直接运行二进制文件
C) 后缀为.exe的文件可以直接运行 D) 后缀为.obj和.exe的文件都是二进制文件
2. 若有定义:int x = 2, y = 4; float z = 5.5; 则表达式 (int) (z * x) % y + ( x+ y - 1.0 ) / 2; 的值是:
A) 4.5 B) 5.5 C) 12.5 D) 13.5
3. 设t, x和y均为int 型变量,则不是把x和y按从小到大排列的语句是:
A) if (x>y) { x += y; y = x-y; x -= y;} B) if (x>y) { t=x; x=y; y=t;}
D) if (x>y) { y += x; x = y-x; y -= x;} D) if (y>x) { y += x; x = y-x; y -= x;}
4. 设已有定义 int a = 5, b = 6, c = 7, d = 8, m = 2, n = 2; 则逻辑表达式 ( m = b>a ) || ( n = c>d ) 运算后,m, n的值为:
A) 1, 0 B) 2, 1 C) 2, 2 D) 1, 2
5. 下面叙述中,不是结构化程序设计中的三种基本结构之一的是:
A) 函数结构 B) 选择结构 C) 循环结构 D) 顺序结构
6. 对于整型变量a,赋值语句 a= ( a%3 == 0 ? 1: 0 );不等价语句是:
A) if (a%3 == 0) a=1; B) if (!(a%3)) a=0; C) if (a%3!=0) a=0; D) a=!( a%3);
else a=0; else a=1; else a=1;;
7. 关于C语言的函数叙述中,不正确的是:
A) main函数可以位于其他自定义函数后面 B) main函数与其他自定义函数之间是平等的
C) 在一个函数内部不能定义其它函数 D) main函数与其他自定义函数可以互相调用
8. 关于变量作用域与生存期的叙述中,不正确的是:
A) 在函数内未指定的存储类型变量隐含为auto B) 全局变量的作用域为所在程序的全部范围
C) static变量的生存期为整个程序的运行期间 D) 函数的形参都属于局部变量
9. 若定义 int a[ ][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 则值8的数组元素为:
A) a[1][3] B) a[2][1] C) a[2][4] D) a[3][2]
10. 以下能正确定义数组的是:
A) char str[ ]={48,49,50}; B) int a[3]={0,1,2,3}; C) int a[ ]="012"; D) char str[6]="str";
11. 若有定义:char str1[6] = "ABCDE", *str2 = "FEDCBA"; 错误的语句是:
A) strcpy(str2, str1); B) str[1] = ′A′-strcmp(str1, str2); C) str1=str2; D) str2= str1;
12. 若有定义int a[3][5], (*p)[5], i, j;(其中0<i<3,0<j<5), 且p = a; 则对数组元素a[i][j] 的引用错误是:
A) *(*(a+i)+j) B) p[i][j] C) *(*(p+i)[j]) D) *(p[i]+j)
13. 设有如下定义:typedef int *INTP; 则错误的叙述是:
A) 用INTP 可以定义整型指针变量 B) INTP是整型指针类型的一个新名
C) INTP 是新增的数据类型 D) INTP q 与int *q 是等价的
14. 设有如下语句: struct stu { int num; int age; } s[3] = {{101,18},{102,21},{103,19}}; struct stu *p = s; 则下面表达式的值与s[1].num相同是:
A) (p++)->num B) (*++p).num C) (*p++).num D) *(++p)->num
15. 设有定义 union data { char d1; float d2; } demo;,则下面叙述中错误的是:
A) sizeof (demo) 的值与sizeof (demo.d2) 的值相同 B) &demo的值与 &demo.d2的值相同
C) sizeof (demo) 的值与sizeof (demo.d1) 的值相同 D) &demo的值与 &demo.d1的值相同
l 以下 (16 ~ 30题) 为:阅读程序, 选择正确的输出的结果。
16. main ()
{ char ch1,ch2;
ch1 = 'A' + '5' - '3'; ch2 = 'A' + '6' - '3'; /* 'A' 的ASCII为 65 */
printf ( " %d, %c \n ", ch1, ch2 );
}
A) 67, D B) C, D C) C, 68 D) 67, 68
17. main ( )
{ int a=1, b=2;
while ( a<6 ) { b += a; a += 2; b %= 10; }
printf (" %d, %d \n ", a, b );
}
A) 5,11 B) 7,1 C) 7,11 D) 6,1
18. void f ( int b[ ] )
{ int i = 0;
while ( b[i] <= 10 ) { b[i] += 2; i++; }
}
main ( )
{ int i, a[ ] = {1, 5, 10, 9, 13, 7 };
f ( a+1 );
for ( i=0; i < 6; i++ ) printf ( " %d, ", a[i] );
}
A) 2, 7, 12, 11, 13, 9, B) 1, 7, 12,11, 13, 7, C) 1, 7, 12, 11, 13, 9, D) 1, 7, 12, 9, 13, 7,
19. main ( )
{ int a [ ]= { 1, 2, 3, 4, 5, 0}, i = 0, s;
while ( s = a[i++] )
{ switch ( s )
{ case 1: printf ( " %d ", s + 5 );
case 2: printf ( " %d ", s + 4 ); break;
case 3: printf ( " %d ", s + 3 );
default: printf ( " %d ", s + 1); break;
}
}
}
A) 6566456 B) 66656 C) 66666 D) 6666656
20. int f ( int x, int y)
{ return ( ( y - x ) * x); }
main ( )
{ int a = 3, b = 4, c = 5, d;
d = f ( f (a, b), f (a, c) );
printf ( " %d\n ", d );
}
A) 10 B) 9 C) 8 D) 7
21. int d = 1;
fun (int p)
{ static int d = 5; d += p; printf ("%d ", d); return ( d ); }
main ( )
{ int a = 3;
printf ( "%d %d \n", d, fun ( a + fun(d) ) );
}
A) 6 9 1 9 B) 6 15 15 15 C) 6 6 15 15 D) 6 15 1 15
22. int b = 100, a = 200
fun ( int a )
{ a = a + 1; return b++; }
main ( )
{ int b = 5;
b = fun ( b ) + a;
printf ( "%d, %d \n", fun ( b ) , b );
}
A) 207, 106 B) 101, 301 C) 100, 300 D) 101, 300
23. void sum ( int a[] )
{ a[0] = a[-2] + a[2]; }
main ( )
{ int a[ ] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
sum ( &a[2] );
printf ( " %d \n ", a[2] );
}
A) 8 B) 7 C) 6 D) 9
24. void fun ( int array[][3], int k )
{ int j;
for ( j = 0; j<3; j++ ) array[j][k]++;
}
main ( )
{ int j, i = 2 , a[3][3] = { 0, 1, 3, 1, 0, 4, 2, 4, 5 };
fun ( a, i );
for ( j=0; j<3; j++ ) printf ( " %2d ", a[j][i] );
}
A) 2 1 5 B) 3 5 6 C) 4 5 6 D) 1 2 3
25. void fun ( char *s )
{ while (*s)
{ if (*s%2==0) printf ( "%c" ,*s);
s++;
}
}
main ( )
{ char a[ ] = "good" ; /* ′a′ 的ASCII码值为97 */
fun ( a ); printf ( "\n" );
}
A) d B) go C) ood D) good
26. void f ( int *p, int *q )
{ p = p + 1; *q = *q + 1; }
main ( )
{ int m = 1, n = 2, *r = &m;
f ( r, &n );
printf ( " %d, %d ", m, n );
}
A) 1,3 B) 2,3 C) 1,4 D) 1,2
27. main ( )
{ int *p, *q, a[ ] = {1, 2, 3, 4, 5, 6, 3, 2, 9}, i, x = 0 ;
p = &a[0]; q = &a[8];
for ( i = 0; i < 3; i++ )
if ( *( p+i ) == *( q-i ) ) x += *( p + i ) * 2;
printf ( " %d ", x );
}
A) 不确定 B) 5 C) 6 D) 10
28. main ( )
{ struct tt { int x; struct tt *y; } a[4] = { 20, a+1, 15, a+2, 30, a+3, 17, a }, *p;
p = a + 3; p = p -> y; printf ( " %d\n ", p -> x );
}
A) 20 B) 15 C) 30 D) 17
29. union myun { struct { int x, y, z; } u; int k; } a;
main ( )
{ a.u.x = 4; a.u.y = 5; a.u.z = 6; a.k = 0;
printf ( " %d\n", a.u.x );
}
A) 4 B) 5 C) 6 D) 0
30. #include <stdio.h>
void main ( )
{ enum Weekday {sun = 7, mon = 1, tue, wed, thu, fri, sat } day;
for ( day = sun; day >= sat; day-- )
printf ( "%3d ", day );
}
A) 7 6 5 4 3 2 1 B) sun sat C) 7 6 D) 7 1 2 3 4 5 6
二、简答题 (13题,1~12题每题3分,第13题4分,共40分,答案填入答题纸中相应的位置!)
1. 在以下程序的printf ( ) 中应填入适当表达式,使得输出结果为321。
main ( )
{ int x = 123; ;
printf ( " %d \n ", x % 10 * 100 + + x / 100 );
}
2. 给出以下程序运行结果
main ( )
{ int a = 1, b = 2, c= 3, d = 0;
if ( a == 1 && b++ == 2 )
if ( b != 2 || c--! =3 ) printf ( " %d, %d, %d\ n ", a, b, c);
else printf ( " %d, %d, %d \n ", a, b, c );
else printf ( " %d , %d, %d \n", a, b, c);
}
3. 给出以下程序运行结果。
main ( )
{ int sum = 0, i = 0;
while ( i++ < 5 )
{ if ( i == 2 ) continue;
sum += i;
if ( sum == 5 ) break;
}
printf ( "%d , %d \n", i, sum);
}
4. 以下函数按每行4个输出数组中的数据,下划线应该填入的语句是:
main ( )
{ int i , w[ ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
for ( i = 0; i < 20; i++ )
{ printf ( " %4d ", w[i] ); if ( ) printf ( ); }
}
5. ① 填入适当表达式,使得m能自动计算数组a的行数; ② 给出以下程序运行结果。
main ( )
{ int a[ ][2] = {1, 2, 3, 4, 5, 6, 7 }, i, j, m;
m = /* ① 自动计算a的行数*/
for ( i = 0; i< m; i++ ) printf ( " %3d", a[i][i] );
}
6. 在下划线位置填上合适的语句或参数,使程序输出为:x = 5, y = 3 (即x和y 的内容对调)。
void swap ( int *a, int *b )
{ int c;
}
main ( )
{ int x = 3, y = 5;
swap ( ); printf ( " x = %d, y = %d \n", x, y);
}
7. 给出以下程序运行结果。
int b = 2;
int fun ( int *k )
{ b = * k + b;
return (b);
}
main ( )
{ int b=0, a[10] = {1, 2, 3, 4, 5, 6, 7, 8}, i;
for ( i = 2; i < 5; i++ )
{ b = fun (&a[i]) + b; printf( "%3d", b); }
}
8. 给出以下程序的输出结果。
# include <string.h>
main ( )
{ char s[ ] = "ABCD", * str = s + 1;
putchar ( (*str ) ++ ); putchar ( *str ++ ); putchar ( ++ *str ); puts ( s );
}
9. ① 函数scat ( ) 实现字符串连接的操作,写出循环条件;② 给出以下程序的输出结果。
char *fun (char * d, char *s )
{ char *p = d ;
while ( *p) p ++;
while ( );
return (d ) ;
}
main ( )
{ char s1 [10] = "abc" , *s2 = "123" ;
s2 = fun ( s1, s2 ) ;
printf ( " %s, %s ", s1, s2) ;
}
10. 以下程序功能是对字符串按字典序进行排序,并输出排序后结果。
① 填入适当参数完成程序功能; ② 画出排序后数组name的情况。
# include <string.h>
char sort (char *a[ ] , int n )
{ char * t; int i, j, k ;
for ( i = 0; i < n-1; i++ )
{ for (k = i, j = i+1; j < n; j++ )
if (strcmp (a[k], a[j])>0 ) k=j;
t = a[i]; a[i] = a[k]; a[k ]= t;
}
}
main ( )
{ char * name[ ]={ "PAS","BAS","FOR","TC"};
sort ( name, 4 ) ;
for ( p = name; p < name+4; p++ )
printf ("%s", ); /* 填入参数 */
}
11. 假定已建立如下链表结构, 其的结点结构为:struct node { char data; struct node * next };
C
NULL
B
A
head
data next
① 简单说明函数fun( )的功能 ② 给出下面程序运行的结果。
struct node *fun ( struct node *hd, int x )
{ struct node * p = hd ;
while ( (p!=NULL) && (p -> data!= x) ) p = p -> next;
return p
}
struct node *create_link ( int n ) /* 创建n个结点的链表,内容略 */
{ …… }
print_link ( struct node * hd ); /* 显示链表各结点数据,内容略 */
{ …… }
main ( )
{ struct node * q, *head
head = create_link (3); /* 创建上图的3个结点的链表 */
q = fun ( head, ′B′ ); q -> data =′D′;
print_link (head );
}
12. 对于上题所示的链表,若执行以下语句: struct node *p, *q; q = head -> next;
p = ( struct node* ) malloc ( sizeof (struct node ) ); p -> data = ′E′; p->next = NULL;
① 写出将p所指的节点插入到q所指节点后形成链表的语句;;
② 按链表连接顺序写出插入后链表中各节点的值。
13. 以下函数link_len (hd) 求链表长度(即链表结点数),hd为头指针,请完成该函数。
int link_len ( struct node *hd )
{ struct node * p =hd; int n=0;
while ( )
{ n++; ; } /* p 移到下一个结点 */
return n;
}
展开阅读全文