C程序习题集.docx
《C程序习题集.docx》由会员分享,可在线阅读,更多相关《C程序习题集.docx(64页珍藏版)》请在冰豆网上搜索。
![C程序习题集.docx](https://file1.bdocx.com/fileroot1/2023-1/25/d93ede7b-15eb-4898-9fd5-cd03aea662df/d93ede7b-15eb-4898-9fd5-cd03aea662df1.gif)
C程序习题集
《程序设计基础》习题集1
一、单项选择题
1、一个C语言程序是由()
①一个主程序和若干子程序组成②函数组成
③若干过程组成④若干子程序组成
2、一个C程序的执行是从()。
①本程序的main函数开始,到main函数结束
②本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
③本程序的main函数开始,到本程序文件的最后一个函数结束
④本程序文件的第一个函数开始,到本程序main函数结束
3、在C语言中(以16位PC机为例)5种基本数据类型的存储空间长度的排列顺序为()
①char③char4、下面四个选项中,不合法的用户标识符是()
①P_O②ha2③goto④_ab
5、以下不正确的叙述是()。
①在C程序中,逗号运算符的优先级最低②在C程序中,APH和aph是两个不同的变量
③若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b的值不变
④当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
6、设c是字符变量,以下语句中错误的是()。
①c=’Y’;②c=’\\’;③c=’Yes’;④c=’\x23’;
7、已知ch是字符型变量,下面不正确的赋值语句是()。
①ch=’a+b’;②ch=’\0’;③ch=’7’+’9’;④ch=5+9;
8、判断char型变量c1是否为小写字母的正确表达式是()
①'a'<=c1<='z'②(c1>=a)&&(c1<=z)③98<=c1&&123>=c1④c1>='a'&&c1<='z'
9、下面的表达式正确的是()
①5.0%2②"ab"-'c'③int(5+0.1)④'b'-78
10、表示图中坐标轴上阴影部分的正确表达式是()
x
-1013
①-1<=x&&1<=x||x<=3②(x<=-1)&&(1<=x||x<=3)
③x<=-1||x>=1&&x<=3④!
(-1(x>3)
11、已知字母A的ASCII码为65,以下程序段的输出结果是()
charc1=’A’,c2=’Y’;
printf(″%d,%d″,c1,c2);
①65,90②A,Y③65,89④输出格式不合法
12、执行以下语句后b的值为()。
inta=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
①6②0③1④4
13、以下能正确地定义整型变量a,b和c并为其赋初值5的语句是()。
①inta=b=c=5;②inta,b,c=5;③inta=5,b=5,c=5;④a=b=c=5;
14、设变量a是整型,f是实型,i是双精度型,则表达式10+′a′+i*f值的数据类型为()。
①int②float③double④不确定
15、以下程序的运行结果是()
main()
{intm=5;
if(m++>5)printf(“%d\n”,m);
elseprintf(“%d\n”,m--);
}
①4②5③6④7
16、为了避免在嵌套的条件语句if---else中产生二义性,C语言规定:
else子句总是与()配对。
①缩排位置相同的if②其之前最近的if
③其之后最近的if④同一行上的if
17、以下不正确的语句是()。
①if(x>y);②if(x=y)&&(x!
=0)x+=y;
③if(x!
=y)scanf(“%d”,&x);elsescanf(“%d”,&y);
④if(x18、C语言中while与do---while语句的主要区别是()
①do---while的循环体至少无条件执行一次
②do---while允许从外部转到循环体内
③do---while的循环体不能是复合语句
④while的循环控制条件比do---while的循环控制条件严格
19、以下程序段()
x=-1;
do
{x=x*x;}
while(!
x);
①是死循环②循环执行两次③循环执行一次④有语法错误
20、以下的for循环
for(x=0,y=0;(y!
=123)&&(x<4);x++);
①执行3次②执行4次③循环次数不定④是无限循环
21、执行下面语句后,变量I的值是()。
for(I=1;I++<4;);
①3②4③5④不定
22、设x和y均为int型变量,则执行下面循环后,y的值为()。
for(y=1,x=1;y<=50;y++)
{if(x==10)break;
if(x%2==1)
{x+=5;continue;}
x-=3;
}
①2②4③6④8
23、若运行时给变量x输入12,则以下程序的运行结果是()。
main()
{intx,y;
scanf(“%d“,&x);
y=x>12?
x+10:
x–12;
printf(“%d\n”,y);
}
①0②22③12④10
24、以下正确的函数定义形式是()。
①doublefun(intx,inty)②doublefun(intx;inty)
③doublefun(intx,inty);④doublefun(intx,y);
25、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()。
①float②int③long④double
26、以下对一维整型数组a的正确说明是()。
①inta(10);②intn=10,a[n];
③intn;④#defineSIZE10
scanf(“%d”,&n);inta[SIZE];
inta[n];
27、若有说明:
inta[10];则对a数组元素的正确引用是()。
①a[10]②a[3.5]③a(5)④a[10-10]
28、以下能对二维数组a进行正确初始化的语句是()。
①inta[2][]={{1,0,1},{5,2,3}};②inta[][3]={{1,2,3},{4,5,6}};
③inta[2][4]={{1,2,3},{4,5},{6}};④inta[][3]={{1,0,1}{},{1,1}};
29、对两个数组a和b进行如下初始化:
chara[]=“ABCDEF”;charb[]={‘A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述正确的是()。
①a与b数组完全相同②a与b长度相同
③a和b中都存放字符串④a数组比b数组长度长
30、有两个字符数组a、b,则以下正确的输入语句是()。
①gets(a,b);②scanf(“%s%s”,a,b);
③scanf(“%s%s”,&a,&b);④gets(“a”),gets(“b”);
31、变量的指针,其含义是指该变量的()。
①值②地址③名④一个标志
32、若需要建立如图所示的存储结构,且已有说明float*p,m=3.14;则正确的赋值语句是()。
pm
①p=m;②p=&m;③*p=m;④*p=&m;
33、下面程序段的运行结果是()。
char*s=“abcde”;
s+=2;printf(“%d”,s);
①cde②字符’c’③字符’c’的地址④无确定的输出结果
34、若有以下定义,则对a数组元素地址的正确引用是()。
inta[5],*p=a;
①p+5②*a+1③&a+1④&a[0]
35、chara[]=“language”,*p;
p=a;
while(*p!
=‘u’){printf(“%c”,*p–32);p++;}
①LANGUAGE②language③LANG④langUAGE
二、填空题
1、设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为。
2、逗号表达式(a=3*5,a*4),a+15的值为,a的值为。
3、C程序中,每条语句都以结尾。
4、数学表达式:
的C语言表达式为:
;数学表达式:
-
的C语言表达式为:
。
5、设x的值为15,n的值为2,则表达式x%=(n+=3)运算后x的值是。
6、利用条件运算符将这两条语句“if(a>b)m=a;elsem=b;”转换成与其等价的一条语句是:
。
7、设y为int型变量,请写出描述“y是奇数”的逻辑表达式。
8、若a=5,b=2,c=1,则表达式a–b9、若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是,a[2][1]得到的初值是。
10、若自定义函数要求返回一个值,则应在该函数体中有一条语句。
三、判断题(正确的打“√”,错误的打“×”)
1、若有常量定义:
#defineN1,则语句:
N++;是合法的C语句。
()
2、实际上,可以用顺序,分支,循环三种结构构造任何算法.()
3、有字符串常量〃ab123〃,则该字符串在内存中要占用5个字节的单元。
()
4、goto语句可以构成循环。
()
5、有数组:
inta[5]={1,2,3,4,5};则输出数组5个元素可用printf(”%d”,a[5]);()。
6、标识符AP与标识符ap在C语言中代表同一变量。
()
7、若有变量定义:
inta[5],*p,I;则语句:
for(I=1;I<6;I++)scanf(”%d”,p++);可实现给数组a正确赋值。
()
8、continue语句与break语句功能一样,都是退出循环体。
()
9、switch选择结构中必须有default子句。
()
10、数组的下标可以是float数据类型。
()
四、仔细阅读如下程序,按题意填写程序空缺
1、输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。
main()
{charch;
scanf(“%c“,&ch);
if()ch=ch+32;
elseif(ch>=‘a’&&ch<=‘z’);
printf(“%c”,ch);
}
2、下面程序的功能是打印100以内个位数为6且能被3整除的所有数。
#include
main()
{inti,j;
for(i=0;;i++)
{j=i*10+6;
if()continue;
printf(“%d“,j);
}
}
3、输入三个数求最大者。
intmax(intx,inty)
{;
if(xMax=y;
else
Max=x;
return();
}
main()
{inta,b,c,d;
scanf(“%d,%d,%d”,&a,&b,&c);
d=max(a,);
printf(“%d“,d);
}
4、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,分别输出数组a、b。
main()
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf(“arraya:
\n”);
for(i=0;i<=1;i++)
{for(j=0;;j++)
{printf(“%5d”,a[i][j]);
;
}
printf(“\n”);
}
printf(“arrayb:
\n”);
for(i=0;;i++)
{for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“\n”);
}
}
五、仔细阅读如下程序,写出运行结果或其实现的功能
main()
{intI;
for(I=0;I<3;I++)
switch(I)
{case0:
printf(“0*”);
case1:
printf(“1*\n”);break;
case2:
printf(“2*\n”);break;
default:
printf(“3*\n”);break;
}
}
运行结果:
2、inta=3,b=5;
max(inta,intb)
{intc;
c=a>b?
a:
b;
return(c);
}
main()
{inta=9;
printf(“%d”,max(a,b));
}
运行结果:
1、
3、main()
{inti,max,a[10];
printf("input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max)max=a[i];
printf("maxmum=%d\n",max);
}
该程序的功能是:
六、编程题
1、由键盘输入3个整数a、b、c,然后按由小到大顺序输出。
2、计算1!
+2!
+3!
+…+10!
的值。
3、求数组:
a[2][3]={1,2,3,4,5,6}的转置(即数组a的行列互换后的元素值)。
《程序设计基础》习题集2
一、单选题
1.在C语言中,合法的字符常数是()
A)‘程序设计’B)“程序设计”
C)cD)‘\\’
2.在C语言中,以下不正确的八进制或不正确的十六进制数是()
A)090B)0xAB
C)0xlaD)-016
3.执行intx=2,y=3;后表达式x=(y==3)的值是()
A)0B)1
C)2D)3
4.在循环结构的循环体中执行break语句,其作用是()
A)结束本次循环,进行下次循环
B)继续执行break语句之后的循环体中各语句
C)跳出该循环体,提前结束循环
D)终止程序运行
5.以下程序运行结果是()
main()
{chars[]=”\’Address\’”;
printf(%d\n”,strlen(s));
}
A)9B)10
C)11D)12
6.以下程序运行结果是()
main()
{inta[]={2,4,6,8,10},y=1,x;
for(x=0;x<3;x++)y+=a[x+1];
printf(“%d\n”,y);
}
A)17B)18
C)19D)20
7.已定义charx[8];inti;为了给x数组赋值,以下正确的语句是()
A)x[8]=”TurboC”;B)x=”TurboC”;
C)x[]=”TurboC”;D)for(i=0;i<7;i++)x[i]=getchar();
8.设inta[][4]={0,0};则以下错误的描述是()
A)数组a的每个元素都可得到初值0
B)二维数组a的第一维大小为1
C)数组a的行数为1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素得不到初值0
9.以下程序运行结果是()
fun3(intx)
{staticinta=3;
a+=x;
returna;
}
main()
{intk=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf(“%d\n”,n);
}
A)3B)4
C)6D)9
10.以下四个运算符,按优先级由高到低的排列顺序是()
A)++%+=>B)%++>+=
C)%+=>++D)++%>+=
11.以下不正确的描述是()
A)在函数外部定义的变量是全局变量
B)在函数内部定义的变量是局部变量
C)函数的形参是局部变量
D)局部变量不能与全局变量同名
12.“文件包含”预处理语句的使用形式中,当#include后面的文件名用“”括起时,寻找被包含的文件的方式为()
A)直接按系统设定的标准方式搜索目录
B)先在源程序所在目录搜索,再按系统设定的标准方式搜索
C)仅仅搜索源程序所在的目录
D)仅仅搜索当前目录
13.C语言的简单数据类型包括()
A)整型、实型、逻辑型B)整型、实型、字符型、逻辑型
C)整型、字符型、逻辑型D)整型、实型、字符型
14.下列各变量均为整型,选项中不正确的C语言赋值语句是()
A)i+=++i;B)i=j==k;
C)i=j+=i;D)i=j+1=k;
15.数学关系式x≤y≤z可用C语言的表达式表示为()
A)(x<=y)&&(y<=z)B)(x<=y)and(y<=z)
C)(x<=y<=z)D)(x<=y)&(y16.要使以下程序的输出结果为4,则a和b应满足的条件是()
main()
{ints,t,a,b;
scanf(“%d%d”,&a,&b);
s=t=1;
if(a>0)s+=1;
if(a>b)t=s+t;
else
if(a==b)t=5;
elset=2*s;
printf(“%d\n”,t);
}
A)a>0并且aC)a>0并且a>bD)a<0并且a
17.下面程序的输出结果为()
main()
{inti;
for(i=100;i<200;i++)
{
if(i%5==0)continue;
printf(“%d\n”,i);
break;
}
}
A)100B)101
C)无限循环D)无输出结果
18.下列程序段的运行结果是()
inti=1,a[]={1,5,10,9,13,7};
while(a[i]<=10)a[i++]+=2;
for(i=0;i<6;i++)printf(“%d”,a[i]);
A)271211139B)171211137
C)171211139D)17129137
19.以下语句把字符串“abcde”赋初值给字符数组,不正确的语句是()
A)chars[]=“abcde”;B)chars[]={’a’,’b’,’c’,’d’,’e’,’\0’};
C)chars[]={“abcde”};D)chars[5]=“abcde”;
20.下面程序段的运行结果是()
inta[2][3]={1,2,3},i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{a[i][j]=a[i*j%2][j]+a[i][(i+j)%3];
printf(“%d,”,a[i][j]);
}
A)2,4,6,2,0,8,B)1,2,3,0,0,0,
C)1,2,3,2,0,6,D)2,4,6,2,0,6,
二、填空题
1.以下程序的功能是:
从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。
main()
{floatx,amax,amin;
scanf(“%f”,&x);
amax=x;
amin=x;
while(【1】)
{if(x>amax)amax=x;
if(【2】)amin=x;
scanf(“%f”,&x);
}
printf(“\namax=%f\namin=%f\n”,amax,amin);
}
2.Fibonacci数列中的头两个数是1和1,从第三个数开始,每个数等于前两个数之和。
下述程序计算此数列的前20个数,且每行输出5个数,请填空。
#include
voidmain()
{intf,f1=1,f2=1;
inti;
printf(“%6d,%6d”,f1,f2);
for(i=3;i<=20;i++)
{f=【3】
printf(“%6d”,f);
if(【4】)
printf(“\n”);
f1=f2;
【5】
}
}
3.下面程序的功能是将两个字符串连接起来,请填空。
#include
main()
{chars1[80],s2[40];
inti=0,j=0;
printf(“\nInputstring1:
”);
scanf(“%s”,s1);
printf(“Inputstring2:
”);
scanf(“%s”,s2);
while(s1[i]!
=‘\0’)
i++;
while(s2[j]!
=‘\0’)
【6】;
【7】=‘\0’;
printf(“%s\n”,s1);
}
4.计算1+1/2+1/4+…+1/50的值,并显示出来。
main()
{inti=2;
floatsum=1.0;
while(i<=【8】)
{sum+=1/【9】;
i+=2;
}