C语言期末试卷题及答案

C语言期末试卷题及答案
C语言期末试卷题及答案

一、选择题(共20分,每小题2分)

1. 在C语言类型说明中,int, char, short等类型数据的长度是( D )。

A. 固定的

B. 由用户自己定义的

C. 任意的

D. 与机器字的长度有关

2. 若已正确说明为int类型,要给abc输入数据,则正确的输入语句是( D )。

A. read(a,b,c);

B. scanf(“%d%d%d”,a,b,c);

C. scanf(“%D%D%D”,&a,&b,&c);

D. scanf(“%d%d%d”,&a,&b,&c);

3. C语言中对嵌套if语句的规定是:else总是与( D )配对。

A. 其之前最近的if

B. 第一个if

C. 缩进位置相同的if

D. 其之前最近且不带else的if

4. 以下语句中,( C )是不可能做到提前退出循环语句的。

A. goto

B. break

C. continue

D. return

5. 假设有两个字符数组a、b,则以下正确的输入语句是( B )。

A. gets(a, b)

B. scan f(“%s %s”,a,b)

C. scanf(“%s%s”,

D. gets(“a”); gets(“b”)

6. 以下正确的描述是( B )。在C语言程序中,

A. 函数的定义可以嵌套,但函数的调用不可以嵌套

B. 函数的定义不可以嵌套,但函数的调用可以嵌套

C. 函数的定义和含糊的调用均可以嵌套

7. 在宏定义#define PI 3.1415926中,用宏名PI代替一个( D )。

A. 单精度数

B. 双精度数

C. 常量

D. 字符串

8. 以下选项中,对指针变量p不正确的操作是( C )。

A. int a[6], *p; p = &a;

B. int a[6], *p; p = a;

C. int a[6]; int *p = a = 1000;

D. int a[6]; int *p1, *p2 = a; *p1 = *p2;

9. 设有以下说明,已知int类型占2个字节,则下列叙述正确的是( D )。

struct st { int a; int b[2]; } a;

A. 结构体变量名a和结构体成员a同名,不合法

B. 程序运行时将为结构体st分配6个字节的内存单元

C. 程序运行时不为结构体st分配内存单元

D. 程序运行时将为结构体变量a分配6个字节的内存单元

10. 当文件顺利关闭时,fclose()的返回值是( C )。

A.-1 B. EOF C. 0 D. 1

二、填空题(共20分,每小题2分)

1. C程序中定义的一个变量,代表内存中的一个存储单元。

2. …\72?在内存中占一个字节,”\72”在内存中占二个字节。

3. 结构化程序设计的3种基本结构是顺序结构、选择结构、循环结构。

4. 下列for循环执行 4 次。For (x =0 , y = 0; y != 99 && x < 4; x++) ;

5. 若有定义“double x[3][5];”则x数组中行下标的下限为0 , 列下标的上限为 4 。

6. 函数swap(intx, inty)可以完成对x和y值的交换。在运行调用函数中的如下语句后,

a[0]和a[1]的值分别为1, 2 ,原因是参数按值传递,形参值的改变不会影响实参值。

a[0] = 1; a[1] = 2; swap(a[0], a[1]);

7. 设有以下宏定义:

#define WIDTH 80

#define LENGTH (WIDTH + 40)

则执行赋值语句”k = LENGTH * 20;” (k为int型变量)后,k的值是2400 。

8. 声明语句” int (*p)( ); ” 的含义是P是一个指向函数的指针变量,该函数的返回值是整

型。

9. typedef long int BIGGY 的作用是定义了一个新的数据类型标识符。

10. EOF只可用于文本文件,用来作为文件结束标志。

三、阅读程序,并将分析结果写在程序右边空白处(共24分,每小题6分)

1. 运行下列程序,如果输入5432,请写出程序运行结果。

#include

main()

{

int digit, number;

scanf("%d", &number);

while(number){

digit = number % 10;

number /= 10;

printf("%d", digit);

}

}

结果为:2345

评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;若结果有误且无分析,得0分

2. 运行下列程序,如果输入18 ,请写出程序运行结果(库、头文件省略)。

#include

int main()

{

int x, y, i, a[8], j, u, v;

scanf("%d", &x);

y = x;

i = 0;

do {

u = y / 2;

a[i] = y % 2;

i++;

y = u;

} while(y >= 1);

for(j = i - 1; j >= 0; j--)

printf("%d", a[j]);

printf("\nyes");

}

结果为:(十进制转二进制)

10010

Yes

评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;

若结果有误且无分析,得0分

3. 请写出以下程序的运行结果

#include

void increment(void);

int main()

{

increment();

increment();

increment();

}

void increment(void)

{

static int x;

x += 1;

printf("%d", x);

}

结果为:123

评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;

若结果有误且无分析,得0分

4. 请写出以下程序的运行结果

#include

#include

int main()

{

char *p1, *p2, str[20] = "ABC";

p1 = "abc";

p2 = "abc";

strcpy(str+1, strcat(p1, p2));

printf("%s\n", str);

}

结果为:Aabcabc

评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;

若结果有误且无分析,得0分

四、程序填空(共16分,每小题8分)

1. 以下程序可计算10名学生1门课成绩的平均分,请根据题意填空。

#include

float average(float array[]);

int main()

{

float score[10], aver;

int i;

printf("\n please input 10 scores:");

for(i = 0; i < 10; i++)

scanf("%f", &score[i]);

aver = average(score) ;

printf("\naverage score is %5.2f\n", aver);

getchar(); getchar();

}

float average(float array[10])

{

int i;

float aver, sum = array[0];

for(i=1; i <= 9 ; i++)

sum += array[i] ;

aver = sum / 10;

return (aver);

评分标准:每空2分

2. 以下程序从键盘输入一行字符作为字符串(遇换行符结束)存放在字符数组中,然后输出,请根据题意填空。

#include

main()

{

char s[80], *p;

int i;

for(i = 0; i < 80; i++){

s[i] = getchar();

if(s[i] == '\n' )

break;

}

s[i] = '\0' ;

p = s ;

while(*p)

putchar (*p ++ );

}

评分标准:每空2分

五、程序设计(共20分,每小题10分)

1. a是一个2*4的整型数组,且各元素以通过键盘赋值。函数max_value可求出其中的

最大元素值max,并将此值返回主调函数。现有函数调用语句”max = max_value(a);”,请编写max_value函数和main()函数,在main()中调用max_value函数并输出其结果。

#include

int max_value(int arr[][4]);

int main()

{

int i, j, x, a[2][4];

printf("please input the array a[2][4]:\n");

for(i = 0; i < 2; i++)

for(j = 0; j < 4; j++)

scanf("%d", &a[i][j]);

x = max_value(a);

printf("\n%d\n", x);

}

int max_value(int arr[][4])

{

int i, j, m;

m = arr[0][0];

for(i = 0; i < 2; i++)

for(j = 0; j < 4; j++)

if (arr[i][j] > m)

m = arr[i][j];

return m;

}

评分标准:在符合题意的要求上,实现方式任意,其中各部分声明总共2分;Main中,scanf 2分,调用1分,输出1分;max_value中,循环2,比较及返回2分。

2. 运用指针编写一个函数,将一个3*3的矩阵转置(即行列互换),并在主调函数中调用

实现。矩阵数据要求从键盘读取输入,并要求显示转置前后的矩阵内容。

#include

main()

{

void move(int *pointer);

int a[3][3], *p, i;

printf("please input the matrix:\n");

for(i = 0; i < 3; i++)

scanf("%d %d %d", &a[i][0], &a[i][1], &a[i][2]);

fflush(stdin);

printf("\noriginal matrix is:\n");

for(i = 0; i < 3; i++)

printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);

p = &a[0][0];

move(p);

printf("\nnow, the converted matrix is:\n");

for(i = 0; i < 3; i++)

printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);

}

void move(int *pointer)

{

int i, j, t;

for(i = 0; i < 3; i++)

for(j = i; j < 3; j++){

t = *(pointer + 3*i +j);

*(pointer + 3*i + j) = *(pointer + 3*j + i);

*(pointer + 3*j + i) = t;

}

}

评分标准:在符合题意的要求上,实现方式任意,其中各部分声明总共2分;Main中,scanf 2分,调用1分,输出1分;move中,循环2分,交换2分。

相关主题
相关文档
最新文档