当前位置:文档之家› 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. 其之前最近的ifB. 第一个ifC. 缩进位置相同的ifD. 其之前最近且不带else的if4. 以下语句中,( C )是不可能做到提前退出循环语句的。

A. gotoB. breakC. continueD. return5. 假设有两个字符数组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 <stdio.h>main(){int digit, number;scanf("%d", &number);while(number){digit = number % 10;number /= 10;printf("%d", digit);}}结果为:2345评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;若结果有误且无分析,得0分2. 运行下列程序,如果输入18 ,请写出程序运行结果(库、头文件省略)。

#include <stdio.h>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");}结果为:(十进制转二进制)10010Yes评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;若结果有误且无分析,得0分3. 请写出以下程序的运行结果#include <stdio.h>void increment(void);int main(){increment();increment();increment();}void increment(void){static int x;x += 1;printf("%d", x);}结果为:123评分标准:若结果正确,6分;若结果部分有误,但有正确分析过程,根据比例适当得分;若结果有误且无分析,得0分4. 请写出以下程序的运行结果#include <stdio.h>#include <string.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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分。

相关主题