C语言习题课附答案.docx

上传人:b****4 文档编号:12056313 上传时间:2023-04-16 格式:DOCX 页数:26 大小:33.99KB
下载 相关 举报
C语言习题课附答案.docx_第1页
第1页 / 共26页
C语言习题课附答案.docx_第2页
第2页 / 共26页
C语言习题课附答案.docx_第3页
第3页 / 共26页
C语言习题课附答案.docx_第4页
第4页 / 共26页
C语言习题课附答案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言习题课附答案.docx

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

C语言习题课附答案.docx

C语言习题课附答案

C语言习题课

一、单项选择题:

1.以下A是C语言中有效的变量名称。

A._abcB.2abcC.charD.a#3

变量名只能以下划线和字母开头

2.下面四个说法中错误的是B。

A.for循环不仅可以和for循环嵌套,而且可以和While循环嵌套。

B.当在循环体内执行continue语句的时候,将结束整个循环。

C.while循环最少循环0次,do-while循环最少循环1次。

D.goto语句也可以实现循环的功能。

3.在while(x)中的x与下面条件表达式等价的是D

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

=1D.x!

=0

4.为表示关系x≥y≥z,应使用C语言表达式A

A.(x>=y)&&(y>=z)

B.(x>=y)AND(y>=z)

C.(x>=y>=z)

D.(x>=y)&(y>=z)

5.设有如下定义:

intx=9,y=2,z;则语句printf(“%d\n”,z=x/y);的输出结果是C

A.1B.4.5C.4D.3

整形中的“/”是整除

6.若有以下语句:

staticcharx[]=”12345”;staticchary[]={‘1’,’2’,’3’,’4’,’5’};则正确的说法是B。

A.x数组和y数组的长度相同

B.x数组的长度大于y数组的长度

C.x数组的长度小于y数组的长度

D.x数组与y数组等价

字符串后有一个“\0”

7.已知有定义:

charch;则下面正确的赋值语句为A。

A.ch='X'B.ch='55'C.ch="M"D.ch="55"

8.以下说法中正确的是C

A.C语言程序总是从第一个的函数开始执行

B.在C语言程序中,要调用的函数必须在main()函数中定义

C.C语言程序总是从main()函数开始执行

D.C语言程序中的main()函数必须放在程序的开始部分

9.C语言中,形参的缺省存储类型说明是:

A

A.autoB.staticC.registerD.extern

10.C语言中的简单数据类型有:

B

A.整型实型逻辑型

B.整型实型字符型

C.整型字符型逻辑型

D.整型实型逻辑型字符型

11.以下程序段的输出结果是:

C

A.1intx=3;

B.30do{

C.1-2printf("%3d",x-=2);

D.死循环}while(!

(--x));

12.以下非法的赋值语句是:

A

A.n=(i=2,++i);

B.j++;

C.++(i+1);

D.x=y>0;

13.设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是:

D

A.6.500000B.6C.5.500000D.6.000000

14.已知x=3,y=2,则表达式x*=y+8的值为:

C

A.3B.2C.30D.10

y+8是一个整体

15.设x,y,z均为int型变量,则执行以下语句后,t的值为:

C

x=y=z=1;t=++x||++y&&++z;

A.不定值B.2C.1D.0

16.为了测试字符串的实际长度,C语言规定了一个“字符串结束标志”,这个结束标志字符是:

B

A.‘\n’B.‘\0’C.‘\x’D.‘\9’

17.C程序的三种基本结构是:

A

A.顺序结构、选择结构、循环结构

B.逻辑结构、层次结构、网状结构

C.顺序结构、逻辑结构、选择结构

D.层次结构、顺序结构、循环结构

18.若inti=10;执行完下面程序判断后,变量i的正确结果是D。

A.10switch(i)

B.11{

C.12case7:

i+=1;

D.13case10:

i+=1;

case17:

i+=1;

default:

i+=1;

}

case后有break,结束跳出结果,没有break,继续执行具体见书本105页

19.下列关于C语言注释的描述中,错误的是:

D 。

A.C语言中用/*……*/表示注释部分

B.注释只是给人看的,对编译和运行不起作用

C.注释可以加在程序中的任何位置

D.C语言中用{*……*}表示注释部分

20.下列关于C程序的描述中,错误的是:

D。

A.C程序是由函数构成的

B.一个C程序总是从main函数开始执行

C.C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上

D.C语言中是利用输入/输出运算符构成输入/输出语句完成输入/输出操作的

21.C源程序的后缀名默认为:

B。

A.cpp

B.c

C.obj

D.exe

C语言的默认后缀名是.c,在C++中才是cpp

22.以下不属于C语言的基本数据类型的是:

B。

A.整型

B.布尔型

C.字符型

D.实型

23.下列标识符中,符合C语言语法规范的是:

C。

A.M.D.John

B.$123

C._name

D.3D64

24.下列选项中,不是C语言中的关键字的是:

C。

A.auto

B.if

C.VOID

D.break

25.下列常量中,合法的长整型常量是:

A。

A.0L

B.4962710000

C.0.05472

D.2e+2

长整型的范围是-2147483648~2147483647

26.设int型变量m,n,a,b,c,d均为0,执行表达式(m=a==b)||(n=c==d)后,m和n的值是:

C。

A.0,0

B.0,1

C.1,0

D.1,1

当在“或”的前面为1,后面不再执行。

在“与”前面为0,后面也不在执行,出现“短路”现象。

27.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是:

C。

A.-3

B.9

C.-12

D.6

28.假设double型变量x,y已经正确定义,则表达式x=1,y=x+3/2的值是:

D。

A.1

B.2.0

C.2

D.2.5

29.已知’A’的ASCII码为65,则下列程序的运行结果为:

A。

main()

{

charch1=’A’;

charch2=ch1+3;

printf(“%d,%c\n”,ch1,ch1);

printf(“%d,%c”,ch2,ch2);

}

A.65,A

68,D

B.A,65

D,68

C.A,D

65,68

D.D,68

A,65

30.以下关于while语句的叙述正确的是 B  

A.while语句构成的循环必须用break语句才能退出

B.while循环语句中,当while子句中的表达式值为零时,结束循环

C.不能使用while语句来构成循环结构

D.while语句的循环体至少被执行一次

二、填空题:

1.程序段floatx=165.323;printf(“x=%-10.2f”,x);执行时输出的结果为:

165.32□□□□p76

2.设x,y,z,k都是int型变量,则执行表达式x=(y=4,z=16,k=32)后,x的值为:

32

3.要将两个字符串连接成一个字符串,可以使用的标准库函数名为:

strcatP147

4.多分支选择结构中,若在执行某一个case语句后,使流程跳出switch结构,应该使用语句breakp105。

5.若有定义inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},则a[1][2]=7p137

6.C语言中,结束本轮循环,将循环是否继续交给循环判断条件确定的语句是:

continue。

7.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为:

2.5

8.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。

9.在C语言程序中,用关键字float定义单精度实型变量。

10.设有语句“inti=1,s=1;for(;s+i<6;i++)s+=i;”,其中for语句的循环次数为 2 。

11.已知有声明“intx=1,y=2”,则执行表达式“(x>y)&&(--x>0)”后x的值为  1 。

12.多分支选择结构中,若在执行某一个case语句后,使流程跳出switch结构,应该使用语句breakp105

13.C语言中的if语句属于三种基本结构中的 选择 结构的语句。

14.若变量ch为char类型,判断ch为数字字符的表达式是 ch>’0’&&ch<’9’ 。

15.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为:

2.5

16.continue语句只能用在三种基本结构中的 循环 结构的语句中。

17.如果在用户的程序中要使用C库函数中的数学函数时应在该源文件中使用的include命令是:

math.h

18.若有定义:

intx[5];则访问x数组中的元素时,下标的上限为:

4。

19.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。

20.C语言本身没有输入输出语句,格式化的标准输出是借助库函数实现。

三、程序阅读题:

1.阅读下列程序,并给出程序运行的结果。

voidmain()

{

intn,d,k;

n=263;

d=1;

k=1;

do{

k*=n%10;

n/=10;

printf("%d,",d);

d++;

}while(n);

printf("\n");

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

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

}

运行结果:

1,2,3

36

0

2.阅读下列程序,并给出程序运行的结果。

voidmain()

{

intx=2345,t;

intsum,muti;

sum=0;

muti=1;

printf("数字为:

%d\n",x);

while(x!

=0)

{

t=x%10;

sum+=t;

muti*=t;

x=x/10;

}

printf("构成数字的和:

%d\n",sum);

printf("构成数字的乘积:

%d\n",muti);

}

运行结果:

数字为:

2345

构成数字的和:

14

构成数字的乘积:

120

3.阅读下列程序,并给出程序运行的结果。

voidmain()

{intx=20,y=30,z=60;

while(x

y=y+4;

z=z/2;

printf(“%d\n”,x);

printf(“%d\n”,y);

printf(“%d\n”,z);

}

运行结果:

32

34

30

4.阅读下列程序,并给出程序运行的结果。

voidmain()

{

inti,j,l,m,a[10]={9,8,7,6,5,4,3,2,1,5};

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

{

l=i;

for(j=i+1;j<=9;j++)

if(a[j]

l=j;

if(l!

=i)

{

m=a[i];

a[i]=a[l];

a[l]=m;

}

}

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

{

printf("%d",a[i]);

if(i%3==0&&i!

=0)

printf(“\n”);

}

}

运行结果:

1234

556

789

四、编程题:

(8分每题,共16分)

1.写一个函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一个空格。

例如输入1990,应该输出“1990”。

算法一:

#include

voidmain()

{

inta,b,c,d,e;//定义四个数,a是一个四位数,b是它的千位,c是百位,d是十位,e是个位

printf(“请输入一个四位数:

”);

scanf(“%d”,&a);

b=a/1000;//获取它的千位

c=(a-b*1000)/100;//获取它的百位

d=(a-b*1000-c*100)/10;//获取它的十位

e=a-b*1000-c*100-d*10;//获取它的个位

printf(“%d%d%d%d\n”,b,c,d,e);//将它的每一位重新排序输出

}

算法二:

#include//这方法与第3题类似

voidmain()

{

charc;

printf(“请输入数字:

”);//提示

while((c=getchar())!

='\n')//逐个获取数字(当然字母也可以,n个数都可以)

printf(“%c”,c);//逐个数字输出(数字与数字之间有空格)

printf(“\n”);

}

算法三:

#include

voidmain()

{

inta[10],n,i=0;

printf(“请输入一个数:

”);

scanf(“%d”,&n);

while(n!

=0)

{

a[i++]=n%10;

n/=10;

}

for(i--;i>=0;i--)

printf(“%d”,a[i]);

printf(“\n”);

}

2.编写程序,用公式

≈1-

+

-

+

-

+…求π的近似值,直到最后一项小于10-5为止。

解法一:

#include

#include

voidmain()

{

doublex=1,i=1;//定义x=1/i(i是分数的分母)

intj=1;//定义该数列有j项

doublep=0;//定义p是该数列的和,初始为0

while(x>1e-5)//在该条件下循环

{

x=1/i;//x是每一项的值

i+=2;//数列的分母+2

if(j%2!

=0)//奇数项相加,偶数项相减获得p的值p为π/4

p+=x;

if(j%2==0)

p-=x;

j++;

}

p=p*4;//获得π的值

printf("π=%lf\n",p);//输出值

}

解法二:

#include

#include

voidmain()

{

ints;

floatn,t,pi;

t=1;pi=0;n=1.0;s=1;

do

{

pi+=t;

n+=2;

s=-s;

t=s/n;

}while(fabs(t)>1e-5);

pi*=4;

printf(“π=%.5f\n”,pi);

}

3.输入一行字符(不超过100),将其中的大写字符变成小写,小写字符变成大写,其余字符不变。

解法一:

#include

voidmain()

{

charc;

while((c=getchar())!

='\n')//获得字符

{

if(c>='a'&&c<='z')//小写字母变大写字母

{c=c-32;

printf("%c",c);

}

elseif(c>='A'&&c<='Z')//大写字母变小写字母

{c=c+32;

printf("%c",c);

}

else//其他字符不变

printf("%c",c);

}

printf("\n");

}

解法二:

#include

voidmain()

{

inti=0;

chara[100],c;

printf("请输入字符串的内容:

\t");

do

{

scanf("%c",&a[i]);

c=a[i];

i++;

}while(c!

='\n');

a[i]='\0';

i=0;

printf("输入字符串的内容为:

\t");

while(a[i]!

='\0')

{

printf("%c",a[i]);

i++;

}

printf("转换后字符串的内容为:

\t");

i=0;

while(a[i]!

='\0')

{

c=a[i];

if(c>='a'&&c<='z')

a[i]-=32;

elseif(c>='A'&&c<='Z')

a[i]+=32;

printf("%c",a[i]);

i++;

}

}

4.以下程序把100~200之间不能被3整除的数输出

#include

voidmain()

{

inti;

for(i=100;i<=200;i++)//100到200之间循环

if(i%3!

=0)//排除能被3整除的数(余数不为0)

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

}

5.输入3个数,按从小到大的顺序输出。

方法一:

#include

voidmain()

{

intx,y,z,t;

printf("请输入要比较的三个数:

");

scanf("%d%d%d",&x,&y,&z);

if(x>y)

{

t=x;

x=y;

y=t;

}

if(y>z)

{

t=z;

z=y;

}

if(x

y=t;

else

{

y=x;

x=t;

}

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

}

方法二:

#include//此题使用了冒泡排序的方法

voidmain()

{

inta[3];//定义3个数

inttemp,i,j,k;

printf("请输入3个数:

");//提示输入

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

scanf("%d",&a[i]);//给输入的3个数进行编号

for(j=0;j<2;j++)//进行2次循环

for(k=0;k<2-j;k++)//每次循环中进行2次比较

if(a[k]>a[k+1])//进行比较把大的数放到最后

{

temp=a[k];

a[k]=a[k+1];

a[k+1]=temp;

}

for(i=0;i<3;i++)//将排好序的3个数重新编号

printf("%d",a[i]);//输出3个数

printf("\n");

}

方法三:

#include//这种方法比较麻烦,需要一一列出来

voidmain()

{

inta,b,c,d,e,f;

printf(“请输入3个数:

”);

scanf(“%d%d%d”,&a,&b,&c);//获取3个数a,b,c

if(a>=b&&b>=c)//a>=b>=c的情况

printf(“%d%d%d\n”,c,b,a);//重新排序输出

elseif(a>=c&&c>=b)//a>=c>=b的情况

printf(“%d%d%d\n”,b,c,a);//重新排序输出

elseif(b>=a&&a>=c)//b>=a>=c的情况

printf(“%d%d%d\n”,c,a,b);//重新排序输出

elseif(b>=c&&c>=a)//b>=c>=a的情况

printf(“%d%d%d\n”,a,c,b);//重新排序输出

elseif(c>=b&&b>=a)//c>=b>=a的情况

printf(“%d%d%d\n”,a,b,c);//重新排序输出

elseif(c>=a&&a>=b)//c>=a>=b

printf(“%d%d%d\n”,b,a,c);//重新排序输出

}

6.以下程序用while语句计算式子

方法一:

用while计算

#include//此题要算从1加到100

voidmain()

{

ints=0,n=1;

while(n<=100)//n从1到100之间循环

{

s+=n;

n++;

}

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

}

方法二:

用for计算

#include

voidmain()

{

ints=0,n;//s为累加的初始值

for(n=1;n<=100;n++)//n从1到100之间循环

s=s+n;

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

}

7.求100~200间的全部素数。

方法一:

#include

voidmain()

{

inti,n;

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

{

for(i=2;i<=n-1;i++)

if(n%i==0)

break;

if(i==n)

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

}

}

方法二:

#include

#include

voidmain()

{

intm,i,k,n=0;

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

{

k=sqrt(m);

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

if(m%i==0)

break;

if(i>=k+1)

{

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

n+=1;

}

}

printf("\n");

}

8.函数pi()的功能是根据以下公式求π值,

=1+

+

×

+

×

×

+

×

×

×

+…

直到最后一项小于10-5为止。

#include

doublejiecheng1(intx)//定义一个函数阶乘1,可以得到一个从1乘到x的值

{

doubles=1;

for(inti=1;i<=x;i++)

s=s*i;

return(s);

}

doublejiecheng2(intx)//定义一个阶乘2函数可以得到一个从3*5*7*。

*2x-1的值

{

doubles=1;

for(inti=1;i<=x;i++)

s=s*(2*i+1);

retu

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

当前位置:首页 > 医药卫生 > 药学

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

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