1、第 1 页 (共 14 页)C 语言程序设计 笔试试题题号 一 二 三 四 五 六 笔试(70%)综合(30%)总分分数 试卷说明:1. 笔试卷面总分 100 分,取卷面成绩的 70%计入总分;2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的 30%;3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸;4. 答题时间 120 分钟。一、单项选择题。将正确答案填入下面框中。 (本题 16 分,每小题 1 分) 题号 1 2 3 4 5 6 7 8答案题号 9 10 11 12 13 14 15 16答案1. 有以下程序main()int a=1,b=0;if(!a) b+;els
2、e if(a=0) if(a) b+=2;else b+=3;printf(“%dn”,b);则程序输出( A )。A) 0 B) 1 C) 2 D) 32. 有以下定义:int a; long b; double x,y;则下列正确的是( A )。A) a%(int)(x-y) B) a=x!=y C) (a*y)%b D) y=x+y=x 3. 若有定义 int (*p)3;则下列说法正确的是( C )。号学名姓注意行为规范遵守考试纪律第 2 页 (共 14 页)A) 定义了基类型为 int 的三个指针变量B) 定义了一个名为 *pt、具有三个元素的整型数值C) 定义了一个名为 pt 的指
3、针变量,它可以指向每行有三个整数元素的二维数组 D) 定义了基类型为 int 的具有三个元素的整型数组4. 有以下程序段main() int x=10;while(x-);printf(“x=%dn“,x);则最后的输出结果是:( B )。A) x=0 B) x= -1 C) x=1 D)while 构成无限循环5. 有以下程序:int fun()static int x=1;x *= 2; return x;main( ) int i,s=1 ;for(i=1 ;i1);A) 12 B) 3 C) 6 D) 113. 若有定义语句:double x,y,*px,*py;执行了 px=x;py
4、=y;之后,正确的输入语句是( B )。A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);C) scanf(“%f%f”, x, y); D) scanf(“%f%f”,x,y);14. 以下程序运行结果是( D )。char str =“abc“;printf(“%d, %d n“,strlen(str),sizeof(str);A)6,3 B) 3,3 C) 10,10 D) 3,1015. 以下程序段运行结果是( A )。#define f(x) x*x*xmain( ) int a=1,b,c;b=f(a+1);c=f(a+1);pri
5、ntf(“%d,%dn“,b,c);A) 4,8 B) 8,4 C) 8,8 D) 4,416. 有以下程序:main()FILE *f;f=fopen(“fa.txt“,“w“);fprintf(f,“day“);fclose(f);第 4 页 (共 14 页)若文本文件 fa.txt 中原有内容为 :hello,则运行以上程序后,文件 fa.txt 中的内容为( A )。A)day B) helloday C) daylo D)dayhello二、填空题。请按序号把答案填入下面框中, 不允许出框线。 (本题 20 分,每空 2 分) 题号 答 案 题号 答 案1 arowcol 6 kne
6、xt5 m+ 10 si或01. 以下 fun 函数功能是在 N 行 M 列的整型二维数组中,选出一个最大值作为函数值返回。int fun(int aNM) int i,j,row=0,col=0;for(i=0;iarowcol)row=i;col=j;return( 【1】 );2. 以下程序的功能是:将值为三位正整数的变量 x 中的数值按照个位、十位,百位的顺序拆分输出。main() int x=123;printf(“%d-%d-%dn”, 【2】 ,x/10%10,x/100);3. 下列程序运行时,若输入 23he45a,输出结果是 【3】 #include main() char
7、 a=0;ch;while(ch=getchar()!=n)第 5 页 (共 14 页)if(a%2!=0/*函数声明语句*/main() long n;n=fun(); printf(“n=%ldn”,n);long fun()long m;for(m=0;getchar()!=$; 【5】 );return m;5. 有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;kdata); 【9】 ;printf(“n”);8. 以下程序的功能是:删除字符串中所有的空格。main() char s20=”how are you!”;int i,j;for(i=j=0;si!=0;i+
8、)if(si!= ) sj=si; j+; sj= 【10】 ;三、请把下列程序运行结果填入答案框中,不允 许出框线,用“”表示回车。 (本题 24 分,每小题 3 分) 1. main() int i,j,a 2=1,2,3,4;for(i=0;i0else return(2);void main()printf(“%dn”,fib(4);题号 1 2 3 4 5 6 7 8答案 124 43 6 4 121 55555 30 4第 7 页 (共 14 页)4. main( ) union examplestruct int x;int y;in;int a;int b;e;e.a=2;e.
9、b=1;e.in.x=e.a+e.be.in.y=e.a*e.b;printf(“%dn”,e.in.y);5. struct NODEint k;struct NODE *link;void main() struct NODE m3,*p=m,*q=m+2;int i=0;while(p!=q)p-k=+i;p+;q-k=i+;q-; q-k=i;for(i=0;i8)break;if(b%3=1)b+=3;continue;b-=5; printf(“%dn“,a);四、根据功能描述改正程序中的错误。 不得增行或删行,不得更改程序结构。 (本题 10 分)1. 下列给定程序中,函数 fu
10、n 的功能是:实现两个整数的交换。例如给 a 和 b 分别输入 60 和 65,输出为: a=65 b=60。(本小题 6 分)#include #include void fun (int a,b) int t;t=b;b=a;a=t;main() int a,b;printf(“Enter a,b:“);scanf(“%d%d“,a, b);fun(printf(“a=%d b=%dn“,a,b);第 9 页 (共 14 页)答案:scanf(“%d%d“,a, b); 改为:scanf(“%d%d“,-2 分fun (int a,b) 改为:fun (int *a,int *b) -2
11、分t=b; b=a; a=t; 改为:t=*b ;*b=*a ;*a=t ; -2 分2. 下述代码定义了一个结构体 STRU,用其声明指针变量*s,并完成对这个指针变量的赋值、输出的任务。请指出下列程序的错误,并予以更正(本小题 4 分)struct STRU int num;char name20; float score; struct STRU *p1;main()STRU *s=(struct STRU *)malloc(sizeof(struct STRU);s.num=123;s-name=”zhang”; s-score=61.5; printf(“num=%d,name=%s
12、,score=%f”,s-num,s-name, s-score);答案:s.num=123; 改为:s-num 或(*s).sum-2 分s-name=”zhang”; 改为:strcpy(s-name,”zhang”) -2 分五、请用标准程序流程图描述下列问题的算法 (本题 10 分)依次从键盘输入 30 个学生的计算机实用基础成绩,请分别统计不及格的人数和优秀(成绩不小于 90)的人数,并打印输出统计结果。答案:第 10 页 (共 14 页)六、编程题(本题 20 分)(考查课做前两道,考试课做后两道) 1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 (本小题 10 分)答案:main() int a,i,aa4,t;scanf(“%d“,aa0=a%10;aa1=a%100/10;aa2=a%1000/100;aa3=a/1000;for(i=0;i30i=90输 出 统 计 结 果结 束是 否是 否 是 否 分 分 分 分 分 分 i+ 分 分 分 分