《C语言编程》课程考试笔试试卷
总分: 100分 时间: 60分钟 姓名: 班级: 身份证号: 一:简答:(20分)
1 . 头文件中的 ifndef/define/endif 起什么用?(4分) 编译过程中防止代码段被重复包含。
2. 以下为Windows NT下的VC6开发环境下程序,请计算sizeof的值(8分) char str[] = “Hello” ; char *p = str ; int n = 10; 请计算
sizeof (str ) = 6
sizeof ( p ) = 4
sizeof ( n ) = 4
void *p = malloc( 100 ); 请计算
sizeof ( p ) = 4
3.解释一下什么是内存栈创建、堆分配(4分) 内存栈创建是指在程序运行过程中申请内存栈区的一段空间的过程,堆分配则是程序在内存堆空间内申请一段空间的过程。
4.下面的代码输出是什么,为什么?(4分) void foo(void) {
unsigned int a = 6; int b = -20;
(a+b > 6) ? printf(\"> 6\") : printf (\"<= 6\"); } >6
二.选择:(40分)
1.下面程序段的运行结果是【 A】 a =1;b=2;c=2; while (at = a; a = b; b = t; c--;
}
printf(“%d,%d,%d”,a,b,c);
A) 1,2,0 B) 2,1,0 C) 1,2,1 D) 2,1,1
2.下面的程序输出是【B】。 typedef union
{ double x[2]; int y[4]; char z[8];} MYTYPE; MYTYPE them; main()
{ printf(\"%d\\n\
(A) 32 (B) 16 (C) 8 (D)24
3.在一个单链表中,已知q所指结点是p结点的前驱结点,若在q和p之间插入结点,则执行【C】 A)s->next = p->next;p->next = s; B) p->next = s->next; s->next = p; C) q->next = s; s->next = p; D) p->next = s; s->next = q;
4. typedef enum { PLAYMODE =0, PAUSEMODE, STOPMODE =5, TRACKRPTMODE, MIXMODE }Status_t; 上述枚举定义中,元素MIXMODE的数值为【D】 A. 4 B. 5 C. 6 D. 7 5 下列do-while循环的次数为【D】
int i=5; do{
printf(“%d\\n”, i--); i--;
}while(i != 0);
A . 0 B.1 C. 5 D. 无限 6. 按照标识符的要求,【A】符号不能组成标识符。
A . 连接符 B.下划线 C. 大小写字母 D. 数字符号
7. 在将两个字符串连接起来组成一个字符串时,选用( C )函数。 A. strlen( ) B.strcpy( ) C. strcat( ) D.strcmp( ) 8. 下列函数中,【D】是对文件进行写操作。
A . get( ); B. read( ); C. seek ( ); D. put( )
三、写出程序运行结果(第1、2小题各6分,第3小题8分 总计20分) 1.阅读下面代码,写出运行结果。 #include \"stdio.h\" struct student { int no; char name; };
void ModifyStudent(struct student b) { b.no=20; b.name='y'; }
main() { struct student a; a.no=3; a.name='a'; ModifyStudent (a); printf(\"%d,%c\}
在控制台显示: __3,a__
2. 阅读下面代码,写出运行结果。 #include void main() {int s;
for (int i=1,s=0;i<20;i++) { if(i%2==0 || i%3==0)
continue;
printf(“%d ”, i); s+=i; }
printf(“%d”, s); }
在控制台显示: __1 5 7 11 13 17 19 73__
3.阅读下面代码,写出运行结果。 #include void f2(int** x, int** y) { int z=**x; **x = **y; **y = z; }
void f3(int* x, int* y) { int z=*x; *x=*y; *y=z; }
void main() { int x=10,y=26; int *p1 = &x; int *p2 = &y; printf(\"x,y=%d%d\ f2(&p1,&p2); printf(\"x,y=%d%d\ f3(&x,&y); printf(\"x,y=%d%d\ x++; y--; f2(&p1,&p2); printf(\"x,y=%d%d\}
运行结果:__x,y=1026X,y=2610X,y=1026x,y=2511__
四.编程题(20分) 歌星大奖赛
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。(10分) #include #include #include #define SUCCEED 0 #define TEACHERS 10 #define AVAILTEACHER 8
int DelMin(int aiArray[], int iLength) { int iTemp; int iDelMinVar; for (iDelMinVar = 1; iDelMinVar < iLength; iDelMinVar++) { if(aiArray[iDelMinVar] < aiArray[0]) { iTemp = aiArray[iDelMinVar]; aiArray[iDelMinVar] = aiArray[0]; aiArray[0] = iTemp; } } aiArray[0] = 0; return SUCCEED; }
int DelMax(int aiArray[], int iLength) { int iTemp; int iDelMaxVar; for (iDelMaxVar = 1; iDelMaxVar < iLength; iDelMaxVar++) { if(aiArray[iDelMaxVar] > aiArray[0]) { iTemp = aiArray[iDelMaxVar]; aiArray[iDelMaxVar] = aiArray[0]; aiArray[0] = iTemp; } } aiArray[0] = 0; return SUCCEED; }
void main() {
// int iScores; int iMainVar; int iTotaScor = 0; float fFinaScor;
}
int iChairMan[TEACHERS]; srand((unsigned)time(NULL));
for (iMainVar = 0; iMainVar < TEACHERS; iMainVar++) { iChairMan[iMainVar] = rand()%101; }
DelMin(iChairMan, TEACHERS); DelMax(iChairMan, TEACHERS);
for (iMainVar = 0; iMainVar < TEACHERS; iMainVar++) { iTotaScor += iChairMan[iMainVar]; }
fFinaScor = (float)iTotaScor/(float) AVAILTEACHER; printf(\"%f\