C语言习题.docx
《C语言习题.docx》由会员分享,可在线阅读,更多相关《C语言习题.docx(14页珍藏版)》请在冰豆网上搜索。
C语言习题
浙江理工大学
C程序设计试题(十三)
一、单选题(每题2分,共20分)
1、若有定义:
intx,y;chara,b,c;并有以下输入数据(此处代表换行符,u代表空格):
1u2
AuBuC
则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是:
_
(1)__
[A]scanf(“x=%dy=%d”,&x,&y);a=getchar();b=getchar();c=getchar();
[B]scanf(“%d%d”,&x,&y);a=getchar();b=getchar();c=getchar();
[C]scanf(“%d%d%c%c%c”,&x,&y,&a,&b,&c);
[D]scanf(“%d%d%c%c%c%c%c%c”,&x,&y,&a,&a,&b,&b,&c,&c);
2、若有以下定义和语句:
doubler=99,*p=&r;*p=r;则以下正确的叙述是:
(2)
[A]以上两处的*p含义相同,都说明给指针变量p赋值
[B]在“doubler=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元
[C]语句“*p=r;”把变量r的值赋给指针变量p
[D]语句“*p=r;”取变量r的值放回r中
3、以下说法正确的是:
(3)
[A]输入项可以是一个实型常量,如:
scanf(“%f”,3.5);
[B]只有格式控制,没有输入项,也能正确输入数据到内存,例如:
scanf(“a=%d,b=%d”);
[C]当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:
scanf(“%4.2f”,&d);
[D]当输入数据时,必须指明变量地址,例如:
scanf(“%f”,&f);
4、以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为:
(4)
[A]5[B]6[C]7[D]8
#include
intfunc(charstr[])
{intnum=0;
while(*(str+num)!
='\0')
num++;
return(num);
}
voidmain()
{charstr[10],*p=str;
gets(p);
printf("%d\n",func(p));
}
5、若有以下定义:
chara;intb;floatc;doubled;则表达式a*b/d-c值的类型为:
(5)
[A]float[B]int[C]double[D]char
6、下列可作为C语言赋值语句的是:
(6)
[A]x=3,y=5[B]a=b=6
[C]i--;[D]y=int(x);
7、给出以下定义:
charx[]=“abcdefg”;chary[]={'a','b','c','d','e','f','g'};则正确的叙述为:
(7)
[A]数组x和数组y等价
[B]数组x和数组y的长度相同
[C]数组x的长度大于数组y的长度
[D]数组x的长度小于数组y的长度
8、以下叙述中不正确的是:
(8)
[A]在不同的函数中可以使用相同名字的变量
[B]函数中的形式参数是局部变量
[C]在一个函数内定义的变量只在本函数范围内有效
[D]在一个函数内的复合语句中定义的变量在本函数范围内有效
9、设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是:
(9)
[A]k=P1-P2;[B]P2=k;[C]P1=P2;[D]k=*P1*(*P2);
10、非法的转义字符是:
(10)
[A]‘\t’[B]‘\018’[C]‘\n’[D]‘\xaa’
二、程序填空题(阅读以下程序说明和相应程序,将空格补充完整。
每小题2分,共30分)
1、【程序说明】打印数字金字塔,金字塔层数由用户输入控制(1~9层)。
要求金字塔最下面一行的第一个字符紧贴屏幕左侧输出。
如输入6,则输出的金字塔如下图。
运行示例:
【程序代码】
#include
voidmain(){
inti,j,n;
printf("输入金字塔层数:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;(11);j++)
(12);
for(j=0;(13);j++)
printf("%d",i);
(14);
}
}
【选项】
(11)
[A]j<=n
[C]j<=n-i
[B]j<=n-1
[D]j(12)
[A]printf("");
[C]printf("\t");
[B]printf("\n");
[D]printf("\b");
(13)
[A]j<=2*i-1
[C]j<2*i-2
[B]j<=2*i-2
[D]j<=2*i
(14)
[A]printf("");
[C]printf("\t");
[B]printf("\n");
[D]printf("\b");
2、【程序说明】随机产生20个100~300之间的整数,选出其中能被3或能被5整除的数,并把它们从小到大排序后按每行5个数输出。
运行示例:
【程序代码】
#include
#include
#include
voidmain(){
inti,j,k,a[20],b[20],temp, (15) ;
srand(time(NULL));
printf("原始数据:
\n");
for(i=0;i<20;i++){
a[i]=rand()%201+100;
if((16)){
n=n+1;
b[n]=a[i];
}
if(i%5==0)printf("\n");
printf("%-5d",a[i]);
}
printf("\n上述数据中能被3或5整除的数从小到大排序后:
\n");
for(i=0;ik=i;
for(j=i+1;jif((17) )
(18) ;
}
if(k!
=i){
temp=b[k];
b[k]=b[i];
b[i]=temp;
}
}
for(i=0;iif(i%5==0)printf("\n");
printf("%-5d",b[i]);
}
printf("\n");
}
【选项】
(15)
[A]n
[C]n=1
[B]n=0
[D]n=-1
(16)
[A]a[i]%3==0||a[i]%5==0
[C]a[i]%3=0&&a[i]%5=0
[B]a[i]%3==0&&a[i]%5==0
[D]a[i]%3=0||a[i]%5=0
(17)
[A]b[k]>b[i]
[C]b[k]>b[j]
[B]b[k]
[D]b[i]>b[j]
(18)
[A]k=j
[C]i=j
[B]k=i
[D]j=k
3、【程序说明】从输入的字符串中找出特定的字符(由用户输入),并统一替换成另一个字符(也由用户输入)。
运行示例:
【程序代码】
#include
#include
voidmain(){
inti;
charx,y,a[100];
printf("请输入一个句子(不超过80个字母):
\n");
gets((19));
printf("请输入一个欲被替换的字母:
\n");
(20);
getchar();
printf("输入一个欲替换成的字母:
\n");
scanf("%c",&y);
for(i=0;(21);i++)
if((22))a[i]=y;
printf("上述句子中的字母%c被替换成字母%c后:
\n",x,y);
(23)
}
【选项】
(19)
[A]a[]
[C]a()
[B]a[100]
[D]a
(20)
[A]getchar(x);
[C]x=getchar();
[B]scanf(“%s”,x);
[D]scanf(“%c”,x)
(21)
[A]a[i]!
=\0
[C]i[B]i[D]a[i]!
=’\0’
(22)
[A]a[i]!
=x
[C]a[i]==x
[B]a[i]=x
[D]a[i]!
=’\0’
(23)
[A] printf(“%s\n”,a[100]);
[C]putchar(a);
[B]printf(“%c”,a);
[D]puts(a);
4、【程序说明】输入三个整数,按由小到大的顺序输出这三个数。
【程序代码】
#include
voidswap((24))
{
inttemp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
voidmain()
{
inta,b,c,temp;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(a>c)
swap(&a,&c);
if(b>c)
swap(&b,&c);
printf("%d,%d,%d",a,b,c);
}
【选项】
(24)
[A]int*pa,*pb
[C]double*pa,*pb
[B]int*pa,int*pb
[D]double*pa,double*pb
5、【程序说明】将两个字符串连接起来。
【程序代码】
#include
voidmain()
{chars1[80],s2[40];
inti=0,j=0;
printf("\nInputthefirststring:
");
scanf("%s",s1);
printf("\nInputthesecondstring:
");
scanf("%s",s2);
while(s1[i]!
='\0')
i++;
while(s2[j]!
='\0')
(25);
s1[i]='\0';
printf("\nNewstring:
%s",s1);
}
【选项】
(25)[A]s1[i]=s2[j][B]s1[i++]=s2[j++][C]s1[i]=s2[j++][D]s1[i++]=s2[j]
三、程序阅读题(阅读下列程序,写出运行结果,每小题2分,共20分)
1、【程序代码】
#include
intstring_length(chars[])
{inti=0;
while(s[i]!
='\0')
i++;
returni;
}
voidmain()
{charstring1[]="testing";
charstring2[]={'t','e','s','t','\0'};
intj=0;
j=string_length(string1);
printf("thelengthofthefirststringis\n%d\n",j);
j=string_length(string2);
printf("thelengthofthesecondstringis\n\%d\n",j);
}
【选项】
(26)程序运行时,第二行输出________(26)_________
[A]6[B]7[C]8[D]9
(27)程序运行时,第四行输出_______(27)_________
[A]4[B]5[C]6[D]7
2、【程序代码】
#include
#include
voidmain()
{intn,s=0;
scanf("%d",&n);
n=abs(n);
while(n!
=0){
s=s+n%10;
n=n/10;
}
printf("%d\n",s);
}
【选项】
(28)程序运行时,若输入1234,则输出____(28)_____
[A]123[B]12[C]1[D]10
(29)程序运行时,若输入-1280,则输出____(29)_____
[A]11[B]-128[C]-12[D]–1
3、【程序代码】
#include
voidmain()
{inta[]={5,8,7,6,2,10,3};
inty,z,*p=&a[1];
y=(*--p)++;
printf("%3d\n",y);.
printf("%3d\n",a[0]);
}
【选项】
(30)程序运行时,第一行输出______(30)__________
[A]5[B]8[C]7[D]6
(31)程序运行时,第二行输出______(31)__________
[A]7[B]6[C]2[D]10
4、【程序代码】
#include
#include
#defineformat1"%d,%d\n"
#defineformat2"%d,%d"
voidmain(){
inta,b,x,y;
intf1(int,int),f2(int*,int*);
scanf(format2,&a,&b);
x=f1(a,b);
printf(format1,a,x);
y=f2(&a,&b);
printf(format1,a,y);
}
intf1(inta,intb){
staticintx;
inty=0;
x=x+a+b;
y=y+x--;
printf(format1,x,y);
returny;
}
intf2(int*a,int*b){
intx=0,*y=(int*)malloc(sizeof(y));
*y=*a;
*a=*b;
*b=*y;
x=x+(*a)++;
printf(format1,x,*y);
returnx;
}
【选项】
程序运行时,输入2,3(回车),
(32)第一行输出___(32)_______
[A]不确定值,不确定值[B]5,5
[C]4,5[D]4,4
(33)第二行输出_____(33)_______
[A]2,5[B]5,5
[C]4,5[D]4,4
(34)第三行输出_____(34)_______
[A]4,3[B]4,2[C]3,2[D]3,3
(35)第四行输出_____(35)_______
[A]3,3[B]5,5[C]3,3[D]4,3
四、程序设计题(本题共30分,每小题10分)
1、商场搞购物优惠活动,消费不同的额度,给予不同的折扣(见下表)。
编写程序,为顾客计算实际的消费金额。
消费额
<300元(不含300)
300~500元(不含500)
500~1000元(不含1000)
1000元以上
折扣率
95折
85折
8折
7折
2、a为一个整数,若a2=XXa成立(XX表示任意数),则称a为“守形数”。
例如52=25,252=625
则5和25为守形数。
编写判断守形数的函数f1,参数为一个正整数。
主函数利用该函数查找1到1000内的所有守形数。
并把这些数写入文件e:
\abc.txt。
3、输入一个字符串,判断该字符串是否为回文。
如“abccba”、“coloc”等为回文,“youaresokind”就不是回文。