《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 (a<b<c)
{
t = 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",sizeof(them));}
(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",a.no, a.name);
}
在控制台显示: __3,a__
2. 阅读下面代码,写出运行结果。
#include <stdio.h>
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 <stdio.h>
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", x, y);
f2(&p1,&p2);
printf("x,y=%d%d", x, y);
f3(&x,&y);
printf("x,y=%d%d", x, y);
x++;
y--;
f2(&p1,&p2);
printf("x,y=%d%d", x, y);
}
运行结果:__x,y=1026X,y=2610X,y=1026x,y=2511__
四.编程题(20分)
歌星大奖赛
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。(10分)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#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", fFinaScor);
}