C填空题集.docx
- 文档编号:23151379
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:26
- 大小:26.84KB
C填空题集.docx
《C填空题集.docx》由会员分享,可在线阅读,更多相关《C填空题集.docx(26页珍藏版)》请在冰豆网上搜索。
C填空题集
填空题集:
一)基础知识
1.在C语言中,当关系表达式中的关系成立时,则该关系表达式的值为______。
2.设有说明“intj;floatx;”,则执行语句“x=j=4.8;”后,x的值为_____。
3.在C语言中,任一语句必定以字符_______结束。
4.在C语言中,主要有三种控件结构,分别是顺序结构、______结构、______结构。
5.break语句不能用于_______语句和_______语句之外的任何其他语句中。
6.C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是__________。
7.char型常量在内存中存放的是_______码值。
8.’\72’在内存中占________个字节,”\72”在内存中占________个字节。
9.所有的C语言程序是由(9)构成的。
10.在C程序设计中,可以将被调用函数中的值带回调用函数的三种方法分别是(10),(11)和(12).
二)程序填空:
1.写出下面程序的运行结果:
main()
{inta,b,c,t;
a=1;b=2;c=2;
while(a
{t=a;a=b;b=t;c--;}
printf("%d%d%d\n",a,b,c);
}
请写出程序运行结果:
________。
答案:
120
分析:
1)a
先进行a
2)while是循环语句,只有当a
本题循环两次。
2.当a,b,c的值分别为1,2,3时,以下程序段执行后a,b,c的值为____、____、_____。
if(a a=c; else a=b;c=b;b=a; 分析: c=b;b=a;语句不属于分支结构组成部分。 答案: 3,3,2。 3.若想通过输入语句使字符数组a中存放字符串“1234”,字符变量b中存放字符’5’,则输入数据的语句形式应该是scanf( (1)); 答案: scanf(“%s%c”,a,&b); 对应的键入内容应该为: 1234 5↙ 分析: 注意在%s与%c之间一定要加空格,此空格的作用为: 因为在键盘键入数据时,字符串输入的结束是以空格为标志的。 此处加一个(或多个)空格用来对应键入数据时字符串的结束标志。 如此处不加空格,则字符串的结束标志即空格符将会被字符变量b所接收,使得空格符后的内容将不会送入字符变量b中,从而不能达成预期的目的。 即在%s与%c之间加空格的目的1)对应字符串输入结束标志,2)避免字符变量b接收空格。 本程序段完整代码应该为: chara[10],b; scanf(“%s%c”,a,&b); printf(“%s\n”,a); printf(“%c\n”,b); 4.设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为(3)。 答案: 1.0(1.000000) 必须有小数部分。 分析: 1.0+x/y表达式的类型为double型。 请参见教材p54。 float型在运算时一律先转换成double型,以提高运算精度。 而int型与double型混合运算时,int型先转换为double型,然后在两个double型数据间进行运算。 所以本题1.0先变为double型,x/y也要由int型转换成double型,则整个表达式为double型。 注意: 如果用printf(“%d”,1.0+x/y); 则结果为0。 因为double型数据占用8个字节空间,而int型数据占用2个字节空间。 double型1.0的后两个字节内容应该为0。 5.以下程序的功能是: 从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。 #include main() {charstr[81],*sptr; (13); /*inti;*/ for(i=0;i<80;(14))/*i++*/ {str[i]=getchar(); if(str[i]=='\n')break; } str[i]=(15);/*‘\0’*/ sptr=str; while(*sptr)putchar((16));/**sptr++*/ } 分析: 1)putchar函数属标准输入输出函数,所以应该使用#include 2)putchar函数中的参数应该使用字符型变量或字符常量。 所以本题在putchar函数中使用的参数是*sptr(输出字符指针变量sptr所指向单元中的字符常量)。 6.下面程序的输出结果是 (2)。 charb[]="ABCD"; main() {char*chp; for(chp=b;*chp;chp+=2)printf("%s",chp); printf("\n"); } 7.设i,j,k均为int型变量,则执行完下面的for循环后,k的值为(4). for(i=0,j=10;i<=j;i++,j--)k=i+j; 8.设有以下定义的语句: inta[3][2]={10,20,30,40,50,60},(*p)[2]; p=a; 则*(*(p+2)+1)值为(5)。 9.在C程序设计中,可以将被调用函数中的值代回调用函数的三种方法分别是(10),(11)和(12)。 10.以下程序的功能是: 从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。 #include"stdio.h" main() {charstr[81],*sptr; (13); for(i=0;i<80;(14)) {str[i]=getchar(); if(str[i]=='\n')break; } str[i]=(15); sptr=str; while(*sptr)putchar((16)); } 11.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差.例如: 输入的两个字符串分别为abcdef和abceef,则输出为-1。 请填空。 #include main() {charstr[100],str2[100],c; inti,s; printf("\ninputstring1: \n");gets(str1); printf("\ninputstring2: \n");(17)/*gets(str2);*/ i=0; while((strl[i]==str2[i])&&(str1[i]! =(18)))/*‘\0’*/ i++; s=(19);/*str1[i]-str2[i]*/ printf("%d\n",s); } 注意: gets也属于标准输入输出函数,用于输入字符串(串中可以含空格)。 12.以下程序打印所有符合下列条件的3位正整数: 是某一个数的平方数,其中有两位数字相同。 如100,121等。 main() {inta,b,c,n,k; for(k=0;;k++) {n=(20); /*k*k*/ if(n>999) break; a=n/100; b=______(21)_________;/*n/10%10*/ c=n%10; if(! ((a-b)*(b-c)*(c-a))&&n>=100)printf(“\n%d,%d”,n,k); } } 13.以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制形式输出,请填空。 #include main() {charb[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; intc[64],d,i=0,base; longn; printf("enteranumber: \n");scanf("%ld",&n); printf("enternewbase: \n");scanf("%d",&base); do {c[i]=(22);/*n%base*/ i++;n=n/base; }while(n! =0); printf("transmitenewbase: \n"); for(--i;i>=0;--i) {d=c[i]; printf("%c",b(23));/*[d]*/ } } 14.下述程序用于统计文件中的字符个数,请填空。 #include voidmain() {FILE*fp; longnum=0; if((fp=fopen("TEST","r"))==NULL) {printf("Can'topenfile."); return; } while(___(24)___)/*fgetc(fp)! =EOF*/ num++; ____(25)____;/*fclose(fp)*/ printf("num=%ld",num); } 分析: 1)EOF是一个文件结束标志,其值为-1。 EOF不是可输出字符,因此不能在屏幕上显示。 由于字符的ASCII码不可能出现-1,因此EOF定义为-1是合适的。 当读入的字符值等于-1(即EOF)时,表示读入的已不是正常的字符而是文件结束符。 但EOF只适用于文本文件。 一情况下为了通用于文本文件和二进制文件,使用feof()函数来判断文件是否已经结束。 注意: feof()函数为真时,位置指针指向EOF之后的位置。 而使用常量EOF(-1)来判断文本文件是否结束时,则位置指针到EOF为止。 2)fopen中的”r”是只读文本文件方式,它等效于”rt”,而不是”rb”。 三)1998秋等级考试 1.下面的程序打印杨辉三角形,其格式为: 1 11 121 1331 14641 15101051 1615201561 172135352171 18285670562881 193684126126843691 程序如下: #defineN11 /* 1998年秋填空题9 */ main() {inti,j,a[N+1][N+1]; for(i=1;i<=N;i++) {a[i][i]=1; a[i][1]=1; } for( ;i for(j=2; ;j++)/*j a[i][j]= ;/*a[i-1][j-1]+a[i-1][j]*/ for(i=1;i {j=N-i-1; while(j>0){printf("");j--;} /*决定每一行输出的起始位置*/ for(j=1;j<=i;j++) printf("%6d",a[i][j]); printf("\n"); } printf("\n"); } 2.下面程序首先建立一个链表,函数fmax()的功能是: 求出链表所有结点中数据域值最大的结点的位置,并由参数s返回给主函数。 该函数的第一个参数是链表的首指针。 #include #include structnode{ intdata; structnode*next; }; voidfmax(structnode*head,structnode) {structnode*p; p=head;*s=p; if(p==NULL){return;} while(p) {if(p->data>)*s=p; p=; } } voidprint(structnode*p) {while(p) {printf("%5d",p->data); p=p->next; } } /*h为头结点指针,p为指向新开辟结点的指针,p1为指向链表尾结点的指针*/ main() {structnode*h=0,*p,*p1; inta; printf("Inputdata: "); scanf("%d",&a); while(a! =-1) {p=(structnode*)malloc(sizeof(structnode)); p->data=a; if(h==0){h=p;p1=p;} else{p1->next=p;p1=p;} printf("Inputdata: "); scanf("%d",&a); } p->next=0; print(h); printf("\n"); fmax(h,&p); if(p)printf("Maxdatais: %d\n",p->data); } 四)1999春等级考试题: 下列程序首先建立一个链表,并输出链表上的数据值。 函数fun()的参数是链表的首指针,它完成的功能是: 将链表中各结点分量data的数值为偶数的结点依次调到链表的前面。 方法是: 根据结点的值,分为奇偶数两个链表,然后将两个链表拼接在一起。 #include #include structnode{ intdata; structnode*next; }; /* p指向当前结点,p1指向奇数子链表尾结点,odd指向奇数子链表首结点,p2指向偶数子链表尾结点,even指向偶数子链表首结点,*/ structnode*fun(structnode*head) {structnode*p=head,*even=0,*odd=0,*p1=0,*p2=0; if(head==NULL){returnhead;} while(p) {if(p->data%2) if(odd==0){odd=p;p1=p;} else{ ;p1=p;} else if(even==0){even=p;p2=p;} else{ ;p2=p;} p=p->next; } if(odd)p->next=0; /*将奇数子链表放在后面*/ if(even){head=even; ;}/*如果有偶数子链表,将偶数子链表放在前面*/ elsehead=odd;/*如果没有偶数子链表,则仅有奇数子链表,使head指向奇数子链表*/ returnhead; } voidprint(structnode*p) {while(p) {printf("%5d",p->data); p=p->next; } } /*h为头结点指针,p为指向新开辟结点的指针,p1为指向链表尾结点的指针*/ main() {structnode*h=0,*p,*p1; inta; printf("Inputdata: "); scanf("%d",&a); while(a! =-1) {p=(structnode*)malloc(sizeof(structnode)); p->data=a; if(h==0){h=p;p1=p;} else{p1->next=p;p1=p;} printf("Inputdata: "); scanf("%d",&a); } p->next=0; print(h); printf("\n"); h=fun(h); print(h); } 五)2000春等级考试题: 1.说明“intj=5,m=2,k=7,n;”,执行语句“n+=m*=n=j*k;”后,n和m的值分别为__________和_________。 /*2000春填空题1*/ 2.下列程序输出的两个数分别是_____和_____。 /*2000春填空题2*/ main() {staticintx[3][3]={{1,2},{5,6},{7,8,9}},(*p)[3]; p=x; printf(“%d\t%d\n”,(*(p+1))[1],p[0][0]); } 3.#include main() {inta=1,b=2,x1,x2,x3; x1=add(a,b); x2=add(add(a,b),b); x3=add(a,b); printf("%d\n%d\n%d\n",x1,x2,x3); } intadd(intx,inty) {staticintz=1; z=x+y+z; return(z); } 程序输出的第一行是_____,第二行是____,第三行是_____。 答案: 41619 分析: 关键在于理解静态局部变量z的生存期,z始终存在,直至main程序运行结束。 另外,x1,x2,x3的值与变量z的三次变化是一致的。 4.#include voidf(int*p1,int*p2) {int*t; t=p1;p1=p2;p2=t; } main() {inta=10,b=20; printf("%d,%d\n",a,b); f(&a,&b); printf("%d,%d\n",a,b); } 程序输出的第一行是_________,第二行是__________。 答案: 1020 1020 分析: 在fun函数中改变了指针变量p1,p2中保存的值(即指针),使其指向发生了变化,但变量a,b中的值并未发生变化。 5.#include voidfun(int*a,intb,int*c) {*a=++b;b=*c;*c=*a;} main() {inta=10,b=20,c=30; {inta=4; c=a+b; printf("%d\n",a+b+c); {intc=b;/*此处定义的变量c与最外层定义*/ fun(&a,b,&c);/*的变量c为两个不同的变量*/ printf("%d\n",a+b+c); } printf("%d\n",a+b+c); } } 程序输出的第一行是________,第二行是________,第三行是________。 答案: 486265 分析: 本题主要考察变量的作用域。 main函数中有两层复合语句嵌套,在复合语句中定义的变量,其作用域仅限于本复合语句范围内。 1)最先定义的变量a=10一直未使用,而变量b=20的值一直有效。 2)变量c在最内层复合语句中重新进行了定义c=b;,而经过fun函数的调用后a,c中的值又发生了变化。 3)最内层复合语句执行结束后,在本层定义的c被释放,进入其相邻外层,此时使用的c为c=a+b;中所得到的c变量值24。 4)在不同复合语句中定义的同名变量c为不同的变量。 6.#include voidf(int*p,intn) {inti,j; for(i=0;i for(j=i+1;j if(p[i]&&p[j]&&(p[j]%p[i]==0))p[j]=0; } main() {inta[28],i,j=0; for(i=0;i<28;i++)a[i]=i+2; f(a,28); for(i=0;i<28;i++) if(a[i]) {printf("%d\t",a[i]); if(++j%5==0)printf("\n"); } } 程序输出的第一行是__________________,第二行是_________________。 答案: 235711 1317192329 分析: 本题f函数的功能是用筛选法求质数。 main生成28个(2—29)数字,然后用f函数求2—29之间的质数。 最后把未筛掉的数字(质数)进行输出,且每行输出5个数字。 注意: 在f函数中,if(p[i]&&p[j]&&(p[j]%p[i]==0))条件含义是p[i]<>0且p[j]<>0且p[j]能被p[i]整除。 六)2000秋等级考试题 1.char*fun(char*s) /*00秋_填空6*/ {inti,j; for(i=j=0;s[i]! ='\0';i++) if(s[i]! ='c')s[j++]=s[i]; s[j]='\0'; returns; } main() {printf("%s",fun("chance"));} 程序输出结果是_________。 答案: hane 分析: 本程序实现删除字符串中的某个字符(c)的作用。 其中函数fun是指针型函数,返回的指针s指向一个字符串,即hane。 2.int*swap(int*a,int*b) /*00秋_填空7*/ {int*p; p=a;a=b;b=p; returna; } main() {intx=3,y=4,z=5; swap(swap(&x,&y),&z); printf("%d,%d,%d",x,y,z); } 程序输出的结果是: _________。 答案: 3,4,5 分析: swap的功能是交换指针变量中的地址值,而不是交换x,y,z变量中的值。 3.main() /*00秋_填空9*/ {inti,p[3][3]={1,2,3,4,5,6,7,8,9},*p1[3],(*p2)[3]; for(i=0;i<3;i++)p1[i]=p[i]; p2=p; for(i=1;i<3;i++) printf("\n%d,%d",*(*(p1+i)+1)+1,*(*++p2+1)+1); } 程序运行时输出的第一行是_____,第二行是______。 答案: 6,6 9,9 分析: 注意区别*p1[3],(*p2)[3]含意。 *p1[3]是指针数组,(*p2)[3]是指向数组的指针,即行指针。 p2自身是一个指针变量,用于指向包含3个元素的一维数组。 并且对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 填空