1、一、选择题(每题 1.5 分,共计 45 分) 1、以下选项中合法的标识符是【 】A1_1B1-1C_11D1_ _ 2、若函数中有定义语句: int k; ,则【 】A系统将自动给 k 赋初值 0B这时 k 中的值无定义C系统将自动给 k 赋初值-1D这时 k 中无任何值 3、一下选项中,能用作数据常量的是【 】Ao115B0118C1.5e1.5D115L 4、设有定义: int x=2; ,一下表达式中,值不为 6 的是【 】Ax*=x+1BX+,2*xCx*=(1+x)D2*x,x+=2 5、程序段: int x=12; double y=3.141593; printf(“%d%8.
2、6f“,x,y); 的输出结果是【 】A123.141593B12 3.141593C12,3.141593D123.1415930 6、若有定义语句: double x,y,*px,*py; 执行了 px= py= 之后,正确的输入语句是【 】Ascanf(“%f%f“,x,y);Bscanf(“%f%f“ Cscanf(“%lf%le“,px,py);Dscanf(“%lf%lf“,x,y); 7、一下是 if 语句的基本形式: if(表达式) 语句,其中“表达式“【 】A必须是逻辑表达式B必须是关系表达式C必须是逻辑表达式或关系表达式D可以是任意合法的表达式 8、有以下程序#includ
3、e main() int x;scanf(“%d“,if(xmain( ) int a=1,b=2,c=3,d=0;if (a=1 else printf(“%d,%d,%dn“,a,b,c);else printf(“%d,%d,%dn“,a,b,c);程序运行后输出结果是【 】A1,2,3B1,3,2C1,3,3D3,2,1 10、假设以下程序段中的变量已正确定义for(i=0;imain() char *s=“ABC“;do printf(“%d“,*s%10); s+;while (*s);注意:字母 A 的 ASCII 码值为 65。程序运行后的输出结果是【 】A5670B65666
4、7C567DABC 12、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段【 】An=0; while(ch=getchar()!=n) n+;Bn=0; while(getchar()!=n) n+;Cfor(n=0;getchar()!=n;n+);Dn=0; for(ch=getchar();ch!=n;n+); 13、有以下程序#include main() int a1,a2; char c1,c2;scanf(“%d%c%d%c“,printf(“%d,%c,%d,%c“,a1,c1,a2,c2);若通过键盘输入,使得 a1 的值为 12,a2 的值为 3
5、4,c1 的值为字符 a,c2 的值为字符 b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下_代表空格,代表回车) 【 】A12a34bB12_a_34_bC12,a,34,bD12_a34_b 14、有以下程序#include int f(int x,int y) return (y-x)*x);main() int a=3,b=4,c=5,d;d=f(f(a,b),f(a,c);printf(“%dn“,d);程序运行后的输出结果是A10B9C8D7 15、有以下程序#include void fun(char *s) while(*s) if (*s%2= =0) pri
6、ntf(“%c“,*s);s+;main() char a =“good“;fun(a); printf(“n“);注意:字母 a 的 ASCII 码值为 97,程序运行后的输出结果是【 】AdBgoCgodDgood 16、有以下程序#include void fun(int *a,int *b) int *c;c=a;a=b;b=c;main( ) int x=3,y=5,*p=fun(p,q); printf(“%d,%d,“,*p,*q);fun(printf(“%d,%dn“,*p,*q);程序运行后输出的结果是【 】A3,5,5,3B3,5,3,5C5,3,3,5D5,3,5,3
7、17、有以下程序#include void f(int *p,int *q);main( ) int m=1,n=2,*r=f(r, printf(“%d,%d“,m,n);void f(int *p,int *q)p=p+1;*q=*q+1;程序运行后的输出结果是【 】A1,3B2,3C1,4D1,2 18、以下函数按每行 8 个输出数组中的数据#include void fun(int *w,int n) int i;for(i=0;imain() char *a =“abcd“,“ef“,“gh“,“ijk“; int i;for(i=0;iint fun(int x,int y) if
8、(x= =y) return (x);else return(x+y)/2);main() int a=4,b=5,c=6;printf(“%dn“,fun(2*a,fun(b,c);程序运行后的输出结果是【 】A3B6C8D12 24、设函数中有整型变量 n,为保证其在未赋初值的情况下初值为 0,应该选择的存储类别是【 】AautoBregisterCstaticDauto 或 register 25、有以下程序#include int b=2;int fun(int *k) b=*k+b; return (b); main() int a10=1,2,3,4,5,6,7,8,i;for(i
9、=2;i#define PT 3.5 ;#define S(x) PT*x*x ;main( ) int a=1,b=2 ; printf(“%4.1fn“,S(a+b); 程序运行后的输出结果是【 】A14.0B31.5C7.5D程序有错无输出结果 27、有以下程序#include struct ord int x,y; dt2=1,2,3,4;main() struct ord *p=dt;printf(“%d,“,+p-x); printf(“%dn“,+p-y);程序的运行结果是【 】A1,2B2,3C3,4D4,1 28、设有宏定义: #define IsDIV(k,n) (k%n=
10、1)?1:0)且变量 m 已正确定义并赋值,则宏调用:IsDIV(m,5)t=(amain() FILE *f;f=fopen(“filea.txt“,“w“);fprintf(f,“abc“);fclose(f);若文本文件 filea.txt 中原有内容为:hello,则运行以上程序后,文件 filea.txt 的内容为【 】AhelloabcBabcloCabcDabchello 二、填空题(每空 2 分,共 30 分)1、表达式(int) (double) (5/2)+2.5)的值是_。2、若变量 x、y 已定义为 int 类型且 x 的值为 99,y 的值为 9,请将输出语句prin
11、tf(_,x/y);补充完整,使其输出的计算结果形式为:x/y=11。3、有以下程序#include main( ) char c1,c2;scanf(“while(c190) scanf(“c2=c1+32;printf(“程序运行输入 65 回车后,能否输出结果、结束运行(请回答能或不能)_ 。4、以下程序运行后的输出结果是_。#include main( )int k=1,s=0;doif(k5、下列程序运行时,若输入 labced12df 输出结果为_。#include main( )char a =0,ch;while(ch=getchar()!=n)if(amain()int a1
12、0=10,9,8,7,6,5,4,3,2,1,i;for(i=2;i=0;i-) funfor(i=0;iint_ ;main( )int x,y,(*p)( );p=max;printf(“Int max(int a,int b)return (ab/a:b);8、以下程序用来判断指定文件是否能正常打开,请填空#include main( ) FILE *fp;if (fp=fopen(“test.txt”,”r”)=_)printf(“未能打开文件!n” ) ;elseprintf(“文件打开成功!n”);9、下列程序的运行结果为_。#include #include struct Ain
13、t a; char b10; double c;void f (struct A *t);main()struct A a=(1001,”ZhangDa”,1098,0);f(printf(“void f(struct A *t)strcpy(t-b,”ChangRong”); 10、以下程序把三个 NODETYPE 型的变量链接成一个简单的链表,并在 while 循环中输出链表结点数据域中的数据,请填空#include struct nodeint data; struct node *next;typedef struct node NODETYPE;main()NODETYPE a,b,
14、c,*h,*p;a. data=10;b.data=20;c.data=30;h=b. next=b.next=c.next=0;p=h;while(p)printf(“_;三、程序改错题(10 分)下列给定程序功能是:读入一行英文文本,将每一个英文单词的第一个字母改写成大写字母然后输出此文本。例如:若输入“good luck!”则输出”Good Luck”。 请修函数 top 中的错误使其能得出正确的结果。注意不要修改主函数,不要增删程序行或更改程序的结构。#include#include#include/*错误区*/ void top(char s)int i=0;for(;*s;*s+)
15、if(i)if(*s= )i=0;elseif(*s!= )i=1;*s=toupper(*s);main()char str81;printf(“nPlease enter an English text line:“);gets(str);printf(“nnBefore changing:n%s“,str);top(str);printf(“nAfter changing:n%sn“,str);四、程序编写(15 分)该函数实现的功能是:求能整除 k 且是偶数的数,把这些数保存在数组 a 中,并按大到小输出。例如:当 k=40 时,依次输出 40、20、10、4、2。注意:部分源程序给出
16、如下。请补充 fun 函数。#include#includevoid fun(int k,int a)/*请开始编写*/main()int k=1;int a100;printf(“nPlease input kn“);scanf(“%d“,fun(k,a);C 语言程序设计(B 卷)答案一、选择题 1-10:CBDDA CDBCB11-20:CDABA BACBC21-30:ADBCC CBDAC二、填空题(1)4(2)“x/y=%d“(3)能(4)s=0(5)1AbCeDf2dF(6)7777654321(7)max(int a,int b)(8)NULL(9)1001,ChangRong,1098.0(10)p=pnext 三、程序改错题void top(char s) 改为 void top(char *s)for(;*s;*s+) 改为 for(;*s;s+)四、程序编写#include#includevoid fun(int k,int a)int i;int j=0;for(j=1;i=0;i-)printf(“%d“,ai);main() int k=1;int a100;printf(“nPlease input kn“);scanf(“%d“,fun(k,a);