C填空题集Word格式文档下载.docx
《C填空题集Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C填空题集Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
![C填空题集Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/acb7aa4a-ca86-46bf-96f4-956be8bed728/acb7aa4a-ca86-46bf-96f4-956be8bed7281.gif)
else
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;
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<
stdio.h>
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"
;
{char*chp;
for(chp=b;
*chp;
chp+=2)printf("
%s"
chp);
\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"
(14))
11.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差.例如:
输入的两个字符串分别为abcdef和abceef,则输出为-1。
请填空。
{charstr[100],str2[100],c;
inti,s;
\ninputstring1:
gets(str1);
\ninputstring2:
(17)/*gets(str2);
i=0;
while((strl[i]==str2[i])&
&
(str1[i]!
=(18)))/*‘\0’*/
i++;
s=(19);
/*str1[i]-str2[i]*/
%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型)以二到十六进制形式输出,请填空。
{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;
enteranumber:
scanf("
%ld"
&
n);
enternewbase:
%d"
base);
do
{c[i]=(22);
/*n%base*/
n=n/base;
}while(n!
=0);
transmitenewbase:
for(--i;
i>
=0;
--i)
{d=c[i];
%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)*/
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 */
{inti,j,a[N+1][N+1];
for(i=1;
=N;
i++)
{a[i][i]=1;
a[i][1]=1;
}
for( ;
N;
i++) /*i=3*/
for(j=2;
;
j++)/*j<
i*/
a[i][j]= ;
/*a[i-1][j-1]+a[i-1][j]*/
{j=N-i-1;
while(j>
0){printf("
"
j--;
} /*决定每一行输出的起始位置*/
for(j=1;
j<
=i;
j++)
%6d"
a[i][j]);
}
2.下面程序首先建立一个链表,函数fmax()的功能是:
求出链表所有结点中数据域值最大的结点的位置,并由参数s返回给主函数。
该函数的第一个参数是链表的首指针。
#include<
#include<
alloc.h>
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为指向链表尾结点的指针*/
{structnode*h=0,*p,*p1;
inta;
Inputdata:
"
a);
while(a!
=-1)
{p=(structnode*)malloc(sizeof(structnode));
p->
data=a;
if(h==0){h=p;
p1=p;
else{p1->
next=p;
next=0;
print(h);
fmax(h,&
p);
if(p)printf("
Maxdatais:
四)1999春等级考试题:
下列程序首先建立一个链表,并输出链表上的数据值。
函数fun()的参数是链表的首指针,它完成的功能是:
将链表中各结点分量data的数值为偶数的结点依次调到链表的前面。
方法是:
根据结点的值,分为奇偶数两个链表,然后将两个链表拼接在一起。
/* p指向当前结点,p1指向奇数子链表尾结点,odd指向奇数子链表首结点,p2指向偶数子链表尾结点,even指向偶数子链表首结点,*/
structnode*fun(structnode*head)
{structnode*p=head,*even=0,*odd=0,*p1=0,*p2=0;
if(head==NULL){returnhead;
data%2)
if(odd==0){odd=p;
else{ ;
else
if(even==0){even=p;
p2=p;
if(odd)p->
/*将奇数子链表放在后面*/
if(even){head=even;
;
}/*如果有偶数子链表,将偶数子链表放在前面*/
elsehead=odd;
/*如果没有偶数子链表,则仅有奇数子链表,使head指向奇数子链表*/
returnhead;
h=fun(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<
/*00春_填空6*/
{inta=1,b=2,x1,x2,x3;
x1=add(a,b);
x2=add(add(a,b),b);
x3=add(a,b);
%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<
/*00春_填空7*/
voidf(int*p1,int*p2)
{int*t;
t=p1;
p1=p2;
p2=t;
{inta=10,b=20;
%d,%d\n"
a,b);
f(&
a,&
程序输出的第一行是_________,第二行是__________。
1020
在fun函数中改变了指针变量p1,p2中保存的值(即指针),使其指向发生了变化,但变量a,b中的值并未发生变化。
5.#include<
/*00春_填空8*/
voidfun(int*a,intb,int*c)
{*a=++b;
b=*c;
*c=*a;
{inta=10,b=20,c=30;
{inta=4;
c=a+b;
a+b+c);
{intc=b;
/*此处定义的变量c与最外层定义*/
fun(&
a,b,&
c);
/*的变量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<
/*00春_填空9*/
voidf(int*p,intn)
{inti,j;
n;
for(j=i+1;
if(p[i]&
p[j]&
(p[j]%p[i]==0))p[j]=0;
{inta[28],i,j=0;
28;
i++)a[i]=i+2;
f(a,28);
if(a[i])
%d\t"
a[i]);
if(++j%5==0)printf("
程序输出的第一行是__________________,第二行是_________________。
235711
1317192329
本题f函数的功能是用筛选法求质数。
main生成28个(2—29)数字,然后用f函数求2—29之间的质数。
最后把未筛掉的数字(质数)进行输出,且每行输出5个数字。
在f函数中,if(p[i]&
(p[j]%p[i]==0))条件含义是p[i]<
>
0且p[j]<
0且p[j]能被p[i]整除。
六)2000秋等级考试题
1.char*fun(char*s) /*00秋_填空6*/
for(i=j=0;
s[i]!
='
\0'
if(s[i]!
c'
)s[j++]=s[i];
s[j]='
returns;
{printf("
fun("
chance"
));
程序输出结果是_________。
hane
本程序实现删除字符串中的某个字符(c)的作用。
其中函数fun是指针型函数,返回的指针s指向一个字符串,即hane。
2.int*swap(int*a,int*b) /*00秋_填空7*/
{int*p;
a=b;
b=p;
returna;
{intx=3,y=4,z=5;
swap(swap(&
x,&
y),&
z);
%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];
3;
i++)p1[i]=p[i];
p2=p;
\n%d,%d"
*(*(p1+i)+1)+1,*(*++p2+1)+1);
程序运行时输出的第一行是_____,第二行是______。
6,6
9,9
注意区别*p1[3],(*p2)[3]含意。
*p1[3]是指针数组,(*p2)[3]是指向数组的指针,即行指针。
p2自身是一个指针变量,用于指向包含3个元素的一维数组。
并且对