C语言书后习题.docx

上传人:b****8 文档编号:27827400 上传时间:2023-07-05 格式:DOCX 页数:40 大小:43.11KB
下载 相关 举报
C语言书后习题.docx_第1页
第1页 / 共40页
C语言书后习题.docx_第2页
第2页 / 共40页
C语言书后习题.docx_第3页
第3页 / 共40页
C语言书后习题.docx_第4页
第4页 / 共40页
C语言书后习题.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

C语言书后习题.docx

《C语言书后习题.docx》由会员分享,可在线阅读,更多相关《C语言书后习题.docx(40页珍藏版)》请在冰豆网上搜索。

C语言书后习题.docx

C语言书后习题

习题

第1部分表达式及三种基本结构

1、单项选择题

1)在C语言中,int、char和float三种类型数据所占用的内存。

A、均为2个字节B、分别为1、2、4个字节

C、分别为2、1、4个字节D、由变量的大小决定

2)在C语言中,错误的int类型的常数是。

A、32768B、-32766C、037D、0xAF

3)下列可以表示字符型常数的是。

A、"a"B、'\t'C、"\n"D、297

4)下列错误的转义字符是。

A、'\\'B、'\"'C、'\81'D、'\0'

5)已知chara;intb;floatc;doubled;执行语句c=a+b+c+d;后,变量c的数据类型是。

A、intB、charC、floatD、double

6)已知inti=5;执行语句i+=++i;后,i的值是。

A、6B、10C、12D、11

7)若w=1,x=2,y=3,z=4;则条件表达式w>x?

w:

y

y:

z的结果为。

A、4B、3C、2D、1

8)已知intx;则使用逗号运算符的表达式(x=4*5,x*5),x+25的结果为。

A、20B、100C、125D、45

9)已知a、b、c的值都为1,且均为int类型变量,则执行以下语句:

++a||++b&&++c;变量b的值为。

A、1B、2C、3D、0

10)若要求在if后一对圆括号中表示条件“a不等于0成立”,则能正确表示这一关系的表达式是。

A、a<>0B、!

aC、a=0D、a

11)C语言对嵌套if语句的规定是:

else总是和配对。

A、其之前最近的ifB、第一个if

C、缩进位置相同的ifD、其前面最近的且尚未配对的if

12)已知x、a、b均为整型变量,则下列选项中错误的if语句是。

A、if(a=b)x++;B、if(a=

13)下列关于switch语句和break语句的结论中,正确的是。

A、break语句只能用于switch语句中

B、在switch语句中可以根据需要,使用或不使用break语句

C、在switch语句中必须使用break语句

D、break语句不能用于switch语句

14)在C语言中,判断一个量是否为"真"时,通常这个量必须是才表示逻辑值“真”。

A、1B、非0整数C、大于0的整数D、非0值

15)以下四条语句中,有语法错误的是。

A、if(a>b)m=a;B、if(a=b)m=b;C、if((a=b)>=0)m=a;D、if((a=b;)>=0)m=a;

16)程序main(){intx=5;if(x++>10)printf("%d",x);elseprintf("%d",x--);}的输出是。

A、4B、5C、6D、7

17)在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三条语句不等价,它是。

A、if(a)s1;elses2;B、if(a==0)s2;elses1;

C、if(a!

=0)s1;elses2;D、if(a==0)s1;elses2;

18)在循环语句的循环体中使用break和continue语句的作用分别是。

A、都是结束循环B、结束本次循环和结束循环

C、都是结束本次循环D、结束循环和结束本次循环

19)设i和s是整型变量,执行如下的语句,则输出的i和s的值为。

for(i=0,s=0;i<10;i++,s++);

printf("%d,%d\n",i,s);

A、0,0B、10,0C、10,10D、9,9

20)语句while(!

x);中的条件等价于。

A、x==0B、x!

=0C、~xD、x!

=1

21)在while(x)语句中的x与下面条件表达式等价的是。

A、x==0B、x==1C、x!

=1D、x!

=0

22)若intx=3;且有下面的程序片段,则输出结果是。

do

{printf("%d",x-=2);

}while(!

(--x));

A、1B、30C、1-2D、死循环

23)若i,j均为整型变量,则关于循环for(i=0,j=-1;j==1;i++,j++)printf("%d,%d\n",i,j);正确的说法是。

A、循环体只执行一次B、循环体一次也不执行

C、判断循环结束的条件不合法D、是无限循环

24)以下不是死循环的语句为。

A、for(;;x+=i);B、while

(1){x++;}

C、for(i=10;;i--)D、for(;(c=getchar())!

='\n';)

sum+=i;printf("%c",c);

25)设有如下程序段,则以下叙述中正确的是。

intx=2002,y=2003;

printf("%d\n",(x,y));

A、输出语句中格式说明符的个数少于输出项的个数

B、输出语句中格式说明符必须再增加一个%d

C、输出值为2002

D、输出值为2003

2、填空题

1)设有如下说明:

inti=3,j=5,m;

执行语句m=(i++)-(--j);后,m的值是,j的值是。

2)设有如下程序:

voidmain()

{inta=3,b=3,c;

c=a+++b;printf("%d%d\n",a,c);

c=a---b;printf("%d%d\n",b,c);/*减号之间有无空格结果是不同的*/

c=a+++b;printf("%d%d\n",a,c);}

该程序执行后的三行输出分别是,,。

3)设x=2.5;a=7;y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为。

4)以下程序运行的结果是。

#include

voidmain()

{inti,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf("%d,%d,%d,%d",i,j,m,n);

}

5)若intx=600;则执行下列程序后,变量y的值是。

if(x>400)

if(x<500)

y=0.5*(x-400);

else

y=x-400;

else

y=0;

6)若inti=10;则执行下列程序后,变量i的正确结果是。

switch(i)

{case9:

i+=1;

case10:

i+=1;

case11:

i+=2;

default:

i+=2;

}

7)以下程序的输出为。

voidmain()

{inta=9,b=7,c=11;

if(a>b)

if(a>c)printf("%d",a);elseprintf("%d",b);

printf("end");}

8)完善程序:

企业根据月销售额为销售人员发奖金。

销售额小于1万元,奖金为销售额的20%;销售额大于或等于1万元而小于2万元,低于1万元的部分按20%,高于1万元的部分按15%发奖金;销售额大于2万元而小于4万元的,低于2万元的部分仍按上述方法发奖金,高于2万元的部分按10%发奖金;销售额大于4万元而低于6万元时,高于4万元的部分按6%发奖金;销售额大于6万元而低于10万元时,高于6万元的部分按3%发奖金;当销售额大于10万元时,高于10万元的部分按2%发奖金。

#include

voidmain()

{floatsales;

doubleprice;

intn;

printf("请输入月销售额:

\n");

scanf("%f",&sales);

if(sales>=100000)

n=10;

else

;

switch(n)

{case0:

price=sales*0.2;break;

case1:

price=2000+(sales-10000)*0.15;break;

case2:

case3:

price=3500+(sales-20000)*0.1;break;

case4:

case5:

price=5500+(sales-40000)*0.06;break;

case6:

case7:

case8:

case9:

price=6700+(sales-60000)*0.03;break;

case10:

price=7900+(sales-100000)*0.02;break;

}

printf("奖金是:

%f\n",price);

}

9)执行下列程序段后,x和i的值分别是10和。

intx,i;

for(i=1,x=1;i<=50;i++)

{if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;}

10)完善程序:

程序用于求100~200之间的全部素数。

程序中n的作用是累计素数的个数,该程序要求控制每行输出10个数据。

#include"math.h"

voidmain()

{intm,k,i,n=0;

for(m=101;m<=200;m=m+2)

{if(n%10==0)printf("\n");

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0);

if(i>=k+1){printf("%d",m);n=n+1;}

}

}

11)完善程序:

已知任意一个正整数的立方都可以写成一串连续奇数的和。

例如:

13×13×13=2197=157+159+…+177+179+181,下列程序可以验证上述定理。

voidmain()

{longintn,i,k,j,sum;

printf("Entern=");

scanf("%ld",&n);

k=n*n*n;

for(i=1;i

{for(j=i,sum=0;sum

sum+=j;

if(sum==k)

printf("%ld*%ld*%ld=%ld=from%ldto%ld\n",n,n,n,sum,i,j);

}

}

12)完善程序:

下面程序的功能是打印100以内个位数为6且能被3整除的所有数。

#include"stdio.h"

voidmain()

{inti,j;

for(i=0;i<10;i++)

{j=i*10+6;

if()continue;

printf("%d",j);}

}

13)阅读程序,写出程序的输出结果。

#include

voidmain()

{intk=1;charc='A';

do

{switch(c++)

{case'A':

k++;break;

case'B':

k--;

case'C':

k+=2;break;

case'D':

k=k%2;continue;

case'E':

k=k*2;break;

default:

k=k/3;

}

k++;

}while(c<'F');

printf("k=%d\n",k);

}

14)写出程序的输出结果。

#include

voidmain()

{inti=1;

while(i<=15)

if(++i%3!

=2)

continue;

else

printf("%d",i);/*该语句是否在循环中?

*/

printf("\n");/*该语句是否在循环中?

*/

}

15)编程将一个键盘输入的正整数分解质因数。

例如:

输入90,打印出90=2*3*3*5。

16)猴子吃桃问题:

几个猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半多一个。

到第10天早上想再吃时,见只剩下一个桃子了。

编程求第一天共摘了多少桃子。

(提示:

采取逆向思维的方法,从后往前推断。

/*有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?

*/

main()

{

intday=0,x1=1020,x2;

while(x1)

{x2=x1/2-2;

x1=x2;

day++;

}

printf("day=%d\n",day);

system("pause");

}

第2部分数组

1、单项选择题

1)以下对数组的初始化方法中,正确的是。

A、inta[]='A','B','C';B、inta[5]={0,1,2,3,4,5};

C、chara={'A','B','C'};D、inta[]={0,1,2,3,4,5};

2)若要判断两个字符串str1和str2是否相等,应选用的函数是。

A、strcat(str1,str2)B、strcpy(str1,str2)

C、strcmp(str1,str2)D、strstr(str1,str2)

3)以下对字符数组初始化的方法中,错误的是。

A、charstr[]={"Hello"};B、charstr[]="Hello";

C、charstr[]={Hello};D、charstr[]={'H','e','l','l','o','\0'};

4)若给出以下定义,则正确的叙述为。

charx[]="abcdefg";

chary[]={'a','b','c','d','e','f','g'};

A、数组x和数组y等价B、数组x和数组y的长度相同

C、数组x的长度大于数组y的长度D、数组x的长度小于数组y的长度

5)若二维数组a有m列,则在a[i][j]前的元素个数为。

A、j*m+i;B、i*m+j;C、i*m+j-1;D、i*m+j+1;

6)若已定义:

intw[10];则在下面表达式中不能表示w[2]的地址的是。

A、w+2B、&w[2]C、&w[0]+2D、w+=2

7)以下对二维数组a的正确说明是。

A、inta[3][]={3,4,2,6,9,2,7,5};B、floata(3,4);

C、inta[][4]={3,4,2,6,9,2,7,5};D、inta[10]={10*1};

8)不正确的字符串赋值或赋初值方式是。

A、charstr[]={'s','t','r','i','n','g','\0'};B、charstr[7]={'s','t','r','i','n','g'};

C、charstr1[10];str1="string";D、charstr1[]="string",str2[]="12345678";

9)若有以下说明和语句,则输出结果是。

p51

chars[12]="abook!

";

printf("%.4s",s);

A、abook!

B、abo

C、abook!

□□□(□代表空格)D、因格式描述不正确,没有确定的输出

10)若有以下说明和语句,则输出的结果是。

charsp[]="\x69\082\n";

printf("%d",strlen(sp));

A、3B、1C、2D、4

11)若两个静态数组A和数组B进行如下初始化,则。

staticcharA[]="ABCDEF";

staticcharB[]={'A','B','C','D','E','F’};

A、A和B完全相同B、A和B只是长度相等

C、A和B不相同,A是字符串,不是数组D、A数组长度比B数组长

12)下列程序的输出结果是。

voidmain()

{intk=3,a[2];

a[0]=k;k=a[1]*10;

printf("%d\n",k);

}

A、10B、30C、33D、不定值

13)要定义一个连续10个字节的存储空间,以下定义正确的是。

A、charss[10];B、intss[10];C、floatss[10];D、doubless[10];

14)有一数组intnum[][4]={11,12,13,14,15,16,17,9,8,7,6,5},执行语句scanf("%d",&num[2][3]);时键盘输入值为0,则数组中的值应为。

A、11,12,13,14,0,0,0,0,0,0,0,0B、11,12,13,14,15,16,17,9,8,7,6,0

C、11,12,13,14,15,16,17,0,8,7,6,5D、11,12,13,14,15,16,17,9,8,7,6,5

15)有一数组如下定义

inta[6]={1,2,3,4,5};

执行for(i=0;i<6;i++)

printf("%d",a[i]);输出的结果是。

A、123456B、12345随机值C、123450D、123455

16)执行以下程序,若输入数据为:

abcd1234efgh,则程序的输出结果是。

voidmain()

{charstr[13];

scanf("%s",str);

printf("%s\n",str);

}

A、abcdB、abcd1234C、efghD、abcd1234efgh

17)若有声明语句“intM[10],N[3][3];”,则以下对数组元素赋值的操作中,未出现越界访问的是。

A、N[0][3]=0B、M[10]=0C、N[3][0]=0D、M[-1]=0

18)已定义一个数组str存放字符串,要从键盘上接收一串字符到str中,正确的方法是。

A、gets(str);B、gets(&str);C、scanf("%c",str);D、scanf("%s",&str);

19)有一数组charstr[60],要将windows存放到此数组的正确语句是。

A、get(str);B、scanf("%s",str);C、scanf("%s",&str);D、puts(str);

20)C语言中,存储字符串"ABC"占用的字节数(即函数sizeof(a)的值)和字符串长度(即函数strlen("ABC")的值)分别是。

A、3、4B、4、3C、3、3D、4、4

21)设有说明:

“charstr[100];”,并假设已输入一个字符串至str数组中,则输出该字符串的printf函数调用语句的格式为。

A、printf("%d\n",&str);B、printf("%c\n",str);

C、printf("%s\n",str);D、printf("%s\n",&str);

22)下列描述正确的是。

A、数组名就是本数组在存储空间中的起始地址

B、数组名就是一个符号,在程序中没有实际的意义

C、数组名就是存放数组中的第一个元素的存储单元

D、在程序中数组不能单独使用,必须带[]使用

23)命题“当两个字符串s1和s2相等时为真,否则为假”的C语言表达式为。

A、s1==s2B、s1=s2C、!

strcmp(s1,s2)D、strcmp(s1,s2)

24)有一数组inta[8]={1,2,3,4,5,6,7,8},在执行scanf("%d",&a[a[5]%3+1]);时键盘输入值为0,则数组中的值为。

A、12045678B、12305678

C、12340678D、10345678

25)若有以下说明和语句,则输出结果是。

charstr[]="\"c:

\\abc.dat\"";

printf("%s",str);

A、符串中有非法字符B、\"c:

\\abc.dat\"C、"c:

\abc.dat"D、"c:

\\abc.dat

26)有以下语句:

intb;charc[10];则正确的输入语句是。

A、scanf("%d%s",&b,&c);B、scanf("%d%s",&b,c);

C、scanf("%d%s",b,c);D、scanf("%d%s",b,&c);

27)以下程序运行后的输出结果是。

voidmain()

{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)j+=p[i];

printf("%d\n",j);

}

A、42B、45C、56D、60

28)以下程序运行后的输出结果是。

voidmain()

{

chara[7]="a0\0a0\0";

inti,j;

i=sizeof(a);/*sizeof()是求a数组存储空间的库函数*/

j=strlen(a);

printf("%d%d\n",i,j);

}

A、22B、76C、72D、62

29)以下能正确定义一维数组的选项是。

A、inta[5]={0,1,2,3,4,5}B、chara[]={0,1,2,3,4,5};

C、chara={'A','B','C'};D、inta[5]="0123";

30)以下叙述中错误的是。

A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B、数组名代表的是数组所占存储区的首地址,其值不可改变

C、当程序执行中数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D、可以通过赋初值的方式确定数组元素的个数

31)以下能正确定义一维数组的选项是。

A、intnum[];B、#defineN100

intnum[N];

C、intnum[0…100];D、intN=100;

intnum[N];

32)若有定义语句"staticcharstr[4][12]={"thank","you","very","much!

"};"则str数组中存储'\0'的数组元素有个。

A、4B、1C、31D、27

33)为了判断两个字符串s1和s2是否相等,应当使用。

A、if(s1==s2)B、if(s1=s2)

C、if(strcpy(s1,s2))D、if(strcmp(s1,s2)==0)

2、填空题

1)执行以下程序段后,b[0]、b[1]、b[2]的值为。

intb[3]={0,1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1