华中科技大学计算机学院2016年C语言程序设计试卷 下载本文

计算机学院2015-2016学年第2学期C语言程序设计考试试卷

A卷(或B卷): A卷 闭卷(或开卷):闭卷 考试时间:2016年 6 月 21 日 专业: 班级: 学号: 姓名:

题号 题分 得分 一 10 二 10 三 10 四 10 五 20 六 20 七 20 总分 100 核对人 注意:试卷后面附有运算符的优先级和结合性表。

试卷所有问题都假设基于32位的系统。

得分 评卷人 一、 单项选择题(在下面每小题的A、B、C、D四个选项中,只有一个选项

是正确的,请选择正确的选项并填写到括号内,选择正确得分。本大题共10 小题,每小题1分,共10分。)

【 】

1、有声明char c; int a;下列语句非法的是 。

A、 a+=c; B、c=2*c-1; C、putchar(c); D、printf(c); 2、下列转义序列中,表示空字符(ASCII值为0)的是 。

A、 ‘\\0’;

B、‘\\n’;

C、‘\\r’;

D、‘\\t’;

【 】

【 】

3、常量‘1’、 1、 1.0的类型分别是 。

A、char、int、float

B、int、char、float

【 】

C、char、int、double D、int、char、double 4、局部变量int a;的存储类型为 。

A、register

B、extern

C、static D、auto

5、用scanf(\语句读入三个整数1、2、3到变量a、b、c中,正确的输入序列是 。 【 】

A、123

B、1 2 3

C、1,2,3 D、1.2.3

【 】

6、char s[]=“HUST”,数组s的元素个数是 。

A、4

B、5

C、32

D、40

7、二维数组a有M行N列,则在a[i][j]之前的元素个数是 。

A. j*N+i B. i*N+j C. i*N+j-1 D. i*N+j+1

【 】

8、有声明const int ci=10, cj=10; const int *pci=&ci; const int * const cpci=&ci;下列语句合法的是 。 【 】

A、pci=&cj; B、*cpci=10;

C、cpci=&cj;

D、*pci=8;

9、表达式 1|2|4>>2 的值是 。 【 】

A、0

B、1

C、3

D、4

10、设有声明: int a=0x12345678, *pa=&a; unsigned char *pc=(unsigned char *)pa;

C语言程序设计试卷 共11页 第 1页

则表达式*(pc+2)的值是 。 【 】 A、0x12 得分 评卷人 B、0x34

C、 0x56

D、0x78

二、 多项选择题(下面每小题的A、B、C、D备选项中,有两个或两个以上的选项是正确的,请选择正确的选项并填写到括号内。本大题共5小题,每小题2分,共10分。)

【 】

1、 下列属于标识符的有 。

A、3days B、float_ C、num-people D、integer

2、 下列声明及初始化,合法的有 。 【 】

A、short int a[5]={1,2,3}; B、int b[3]={1,2,3,4,5}; C、long int c[]={1,2,3,4}; D、double d[] = {}; 3、 设有声明: int i=1,j=2; int *p=&i, *q=&j;

则下列语句不合法的有: 。 A、*p=q; B、i=*q; C、q=&p; D、*p=&q;

4、 打开二进制文件a.dat的语句有 。 A、f=fopen(\B、f=fopen(\

C、f=fopen(\D、f=fopen(\

【 】

【 】

5、下列变量中,生命周期相同的有 。 【 】

A、自动变量 B、静态局部变量 C、全局变量 D、静态全局变量

得分 评卷人 三、 填空题(本大题共10小题,每小题1分,共10分。)

本大题的第1题至第5题请参考下面的说明,写出各表达式的值。各题的表达式相互无关。 char u[] = \char v[] = \struct ST { int a; char *s;

}a[] = {{100,u},{200,v}}, *p=a;

题号 1 2 3 4 5 表达式 (++p)->a *(++p)->s p->s[2]++ *++p->s ++*p->s 值 C语言程序设计试卷 共11页 第 2页

本大题的第6题至第10题请参考下面的说明,写出各表达式的类型与值并填入相应的空格内,各题的表达式相互无关。假设数组a的地址为500。

double a[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; double *p = a + 4;

题号 例1 例2 6 7 8 9 10 得分 评卷人

四、 判断改错题 (先判断下面各题代码是否存在错误;如果存在错误,请改正之;否则不必改。本大题共5小题,每小题2分,共10分。)

1、下列程序计算两个数的和。

#include

float add(float, float); int main(void) {

printf(\ return 0; }

float add(float a, float b) {

return a + b; }

2、以下函数change用于将字符变量的值设置为‘N’,例如函数调用change(a)能将a的值设置为‘N’。

void change(char ch){

ch=‘N’; } 3、以下程序段将小写字母转换成大写字母。

if ('a' <= c <= 'z') c += 'A' - 'a';

表达式 p[3] p *p+10 *(a+5) *(p+4) p[-1] a+2 double 类型 double * 值 8.0 532 4、以下程序片段中有带参的宏,实现计算x的平方,如本例中s应等于49。 #define SQ(x) x*x float s;

C语言程序设计试卷 共11页 第 3页

s = SQ(9-2);

5、 以下代码是typearg.c文件的内容,其中的main函数读入用户在命令行下输入的参数并将它们原样输出,如在命令行下输入typearg hello world ,将输出hello world。

#include

int main(int argc, char *argv[]) {

int i;

for(i=0;i

printf(\ return 0; } 得分 评卷人 五、简答题(本大题共5小题,每小题4分,共20分)

1、用一条语句(利用自增或自减)替代下列三条语句,不能使用逗号表达式。 b = b + 1; c = a – b; a = a + 1;

2、写一个表达式,取整数x最右边的m位。如0x123456fa,取最右边5位等于0x0000001a;

3、请给出下列代码中函数调用的顺序。注意本题不要求写出输出结果,只需按函数调用顺序写

出函数调用语句(含库函数),如main(), Displayhello(), ……。(这段代码中的函数包括main、printf、Displayworld、Displayhello) #include

void Displayworld(void){ printf(\}

void Displayhello(void){ printf(\ Displayworld(); }

int main(void){ Displayhello(); Displayworld();

C语言程序设计试卷 共11页 第 4页