C语言练习题.docx

上传人:b****6 文档编号:6667502 上传时间:2023-01-08 格式:DOCX 页数:15 大小:24.89KB
下载 相关 举报
C语言练习题.docx_第1页
第1页 / 共15页
C语言练习题.docx_第2页
第2页 / 共15页
C语言练习题.docx_第3页
第3页 / 共15页
C语言练习题.docx_第4页
第4页 / 共15页
C语言练习题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言练习题.docx

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

C语言练习题.docx

C语言练习题

练习一

1、把十进制数56,-74转化为对应的二进制数,并分别写出它们的8位原码和补码。

2、什么是浮点数?

计算机内部是如何存储浮点数的?

3、什么是ASCII码?

ASCII码编码方案有何特点?

试述常用字符的大致编码顺序。

4、什么是汉字的机内码?

在计算机的内存中如何区分机内码与ASCII码?

5、试述计算机内部采用二进制工作的原因,以及计算机的工作原理。

6、试述程序设计的概念,以及程序设计的基本过程。

7、什么是算法?

算法有哪些特性和描述方法?

算法与程序的关系如何?

8、什么是高级语言?

有哪些主要的高级语言?

9、什么是标识符和关键字?

它们分别有什么作用?

10、标识符是如何构成的?

使用标识符时应注意哪些问题?

11、下列字符序列中,哪些可以构成合法的标识符?

signeda-1x_y_1$useπ

0x56sumnum#_1234age

12、试述C程序的基本结构。

13、试述C程序上机的全过程,并解释这过程中产生的各类错误的含义。

练习二

1、C语言的基本数据类型有哪些?

数据类型对数据的表示和运算有什么约束?

2、什么是常量?

数值常量和符号常量有何区别?

使用符号常量有什么好处?

3、什么是变量?

变量的名字、地址、值、类型有什么关系?

4、如何定义变量?

C语言中为什么规定变量必须先定义,后使用?

5、常量也有数据类型,请问如何区分整型常量和实型常量的数据类型?

6、字符常量与字符串常量的表示形式有何区别?

'a'和"a"有什么不同?

7、字符串常量"\\\34ab\n"中有多少个字符?

8、下列表达式计算时,哪些地方会发生类型转换?

从什么类型转换到什么类型?

表达式计算的结果是什么类型?

值多少?

(1)2.5+2*7%2/4

(2)4*(2L+6.5)-12

(3)10/(5*3)(4)2*10.0/(5*3)

9、设有变量定义:

floatx=2.7,y=4.5;inta=8;求表达式y+a%5*(int)(x+y)/2%4的值。

10、执行下列程序,解释程序的运行结果,并修改程序使得它能输出正确的结果。

#include

intmain()

{floatx;

x=45678*56789;

printf("45678*56789=%f\n",x);

}

答:

程序运行结果为:

45678*56789=-1700959360.000000。

由于45678*56789=2594007942,已经超出了long类型的取值范围,所以结果为负数。

修改后的程序如下:

#include

intmain()

{doublex;

x=45678.0*56789;

printf("45678*56789=%f\n",x);

}

修改后的程序运行结果为:

45678*56789=2594007942.000000

11、执行下列程序,解释程序的运行结果,从中体会常用转义字符的含义。

#include

intmain()

{printf("_ab_c\t_de\rf\tg\n");

printf("h\ti\b\bj_k\n");

}

程序运行结果:

第一个printf由于输出\r光标又回到了最左边,原来屏幕上的_ab_c□□□_(□表示空格)都被接下来输出的f\tg(实际上是输出了字符f、7个空格和字符g),而第二个printf由于输出\b\b删除了字符i和它前面的1个空格,所以得到以上运行结果。

12、执行下列程序,解释程序的运行结果,从中体会字符和数的区别和联系。

#include

intmain()

{intm,n,k;

m='5'*'6';n=5*6;

k=('5'-'0')*('6'-'0');

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

}

程序运行结果为:

m,n,k=2862,30,30。

由于('5'-'0')起到了将字符5转换为数5的功能,('6'-'0')起到类似作用,所以变量n和k的值一样。

而'5'*'6'实际上是字符5的ASCII码(53)乘以字符6的ASCII码(54),所以变量m的值为2862。

13、执行下列程序,解释程序的运行结果,从中体会前置和后置运算的区别。

#include

intmain()

{intx=5,y,z;

y=8-x++;

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

z=++x*2;

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

}

程序运行结果:

由于第一个赋值语句中是后置运算,所以y的值=8-5=3,x的值加了1为6,而第一个赋值语句中是前置运算,x的值首先加了1为7,再乘以2,所以z的值为14。

练习三

1、什么是结构化程序设计方法?

结构化程序设计应遵循哪些原则?

答:

结构化程序设计方法是基于模块化、自顶向下、逐步求精和结构化程序设计等程序设计技术的总称。

结构化程序设计方法应遵循:

(1)在总体设计阶段采用“自顶向下,逐步求精”的模块化设计方法;

(2)在详细设计阶段采用“基本结构,组合而成”的方法,就是程序不论大小,简单还是复杂,程序由三种基本结构(即顺序结构、选择结构和循环结构)组合而成;(3)在最后的编码阶段应做到“清晰第一,效率第二”,并采用良好的程序设计风格,从而提高程序的可读性,便于调试时改正错误,也便于程序的维护。

2、C语言的语句有哪几类?

为什么说C语言是表达式语言?

答:

C语言中语句可分为:

表达式语句、函数调用语句、控制语句、复合语句和空语句五类。

由于任何表达式加上分号“;”就能构成语句,所以称C语言是表达式语言。

3、C语言中如何表示逻辑值“真”和“假”?

一个值参加逻辑运算时又如何判断它是“真”还是“假”?

答:

C语言中逻辑值“真”和“假”分别用数“1”和“0”来表示,一个值参加逻辑运算时非0就认为是“真”,0才认为是“假”。

4、设有变量定义:

inta=3,b=8;表达式(a<5)||(b=5)求值后,b的值是多少?

答:

由于(a<5)为“真”,根据“短路求值法”,表达式(b=5)不求值,所以b的值仍然为8。

.

5、设有n(n>0)个学生要分班,每班k(k>0)个学生,最后不足k个学生也编一班,试用条件表达式表示班级数。

答:

(n%k==0)?

n/k:

n/k+1

6、设有整型变量n,以下选项中,构成死循环的是哪一个?

A.n=100;do{n++;}while(n>100);

B.for(n=100;;n=n%100+1)if(n>100)break;

C.n=100;while(n)--n;

D.n=100;while(n--);

答:

B。

注意A不构成死循环,因为n最终会溢出而成为负数。

7、请消除下列程序中的2个语法错误。

#include

intmain()

{inta,b;floatx=5.7;

a=10;

scanf("%d",b);//应改为:

scanf("%d",&b);

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

printf("x=%d\n",x);//应改为:

printf("x=%f\n",x);

}

8、如果执行下列程序时,数据的输入格式如下,请解释程序的运行结果。

为了使得c1='A'和c2='a',假定程序不做修改,应如何修改数据的输入格式?

假定数据的输入格式不变,又应如何修改程序?

从中体会一般情况下scanf的格式控制字符串中的普通字符不但起不到提示的作用,反而给用户的输入制造了麻烦。

#include

intmain()

{inta,b;floatx,y;charc1,c2;

scanf("a=%db=%d",&a,&b);

scanf("%f%f",&x,&y);

scanf("%c%c",&c1,&c2);

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

printf("x=%0.1fy=%0.1f\n",x,y);

printf("c1=%cc2=%c\n",c1,c2);

}

输入为:

a=3□b=7↙/*↙表示回车,□表示空格*/

8.5□6.1↙

A□a↙

输出为:

a=3b=7

x=8.5y=6.1

c1=

c2=A

答:

程序不做修改,数据的输入格式应修改为:

a=3□b=7↙

8.5□6.1Aa↙

数据的输入格式不变,程序中最后一句输入语句应修改为:

scanf("%*c%c%*c%c",&c1,&c2);//当然还有其它修改方法

9、编写一个程序,输入一个华氏温度f,输出对应的摄氏温度c。

计算公式是:

c=5/9*(f-32)。

#include

intmain()

{floatf,c;

printf("请输入华氏温度:

");

scanf("%f",&f);

c=5.0/9*(f-32);

printf("对应的摄氏温度:

%.2f\n",c);

return0;

}

10、假定某种手机套餐规定:

月租费10元,可免费发送短信60条,超出部分每条0.10元;可免费与本地手机通话20分钟(包括打入与打出),超出部分每分钟0.15元;与本地固定电话通话可享受每分钟0.2元的优惠(没有免费通话时间)。

在不考虑长途通话的情况下,输入某用户一个月发送短信的条数、与本地手机通话的分钟数和与本地固定电话通话的分钟数,程序计算并输出该用户这个月的手机通信费用。

#include

intmain()

{intmessage,mobilecall,phonecall;floatmoney;

printf("请输入发送短信的条数、与本地手机通话的分钟数和与本地固定电话通话的分钟数:

");

scanf("%d%d%d",&message,&mobilecall,&phonecall);

money=10;

if(message>60)money+=0.1*(message-60);

if(mobilecall>20)money+=0.15*(mobilecall-20);

if(phonecall>0)money+=0.2*phonecall;

printf("手机通信费用:

%.2f\n",money);

return0;

}

11、编写一个程序,输入某乘客先后两次乘坐公交车的上车时间(假定在同一天内),程序判断时间间隔是否大于2小时并输出相应的信息。

输入格式以及输出信息的格式如下所示,程序不考虑输入时间错误(如8:

68:

72)。

提示:

可将时间转换为秒为单位后再做减法。

输入为:

9:

31:

4□11:

8:

25↙/*↙表示回车,□表示空格*/

输出为:

时间间隔=01:

37:

21你能享受公交优惠1元。

输入为:

12:

58:

37□15:

2:

49↙

输出为:

时间间隔=02:

04:

12对不起,你不能享受公交优惠。

#include

intmain()

{inth1,m1,s1,h2,m2,s2,h,m,s;

longdiff;

printf("请输入先后两次乘坐公交车的上车时间(hh:

mm:

sshh:

mm:

ss)");

scanf("%d:

%d:

%d%d:

%d:

%d",&h1,&m1,&s1,&h2,&m2,&s2);

diff=(h2*3600L+m2*60+s2)-(h1*3600L+m1*60+s1);

h=diff/3600;m=diff%3600/60;s=diff%60;

printf("时间间隔=%02d:

%02d:

%02d",h,m,s);

if(diff<=7200)printf("你能享受公交优惠1元。

\n");

elseprintf("对不起,你不能享受公交优惠。

\n");

return0;

}

12、编写一个程序,输入三角形的三条边长,程序判断它是否能够构成三角形,能则输出三角形的面积,否则输出“不能构成三角形”。

三角形面积计算公式:

面积=√s(s-a)(s-b)(s-c),其中,a,b,c为三角形的三条边长,s=(a+b+c)/2。

#include

#include

intmain()

{floata,b,c,s,area;

printf("请输入三角形的三条边长:

");

scanf("%f%f%f",&a,&b,&c);

if(a+b>c&&b+c>a&&a+c>b)

{s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("三角形的面积为:

%.2f\n",area);

}

elseprintf("不能构成三角形!

\n");

return0;

}

13、计算个人所得税征税问题。

应纳税工资=工资总额-3500元,应纳税工资在1500元以下(含1500,以下同)的税率3%,1500元以上4500元以下的部分税率10%,4500元以上9000元以下的部分税率20%,9000元以上35000元以下的部分税率25%,输入工资总额(假定小于38500元),程序计算并输出个人所得税。

个税计算公式如下:

个税=应纳税工资×对应的税率—速算扣除数(见下表)

全月应纳税工资税率%速算扣除数(元)

不超过1500元30

超过1500元至4500元10105

超过4500元至9000元20555

超过9000元至35000元251005

#include

intmain()

{floatsalary,paytax,tax;

printf("请输入工资总额:

");

scanf("%f",&salary);

paytax=salary-3500;

if(paytax<=0)tax=0;

elseif(paytax<=1500)tax=paytax*0.03;

elseif(paytax<=4500)tax=paytax*0.1-105;

elseif(paytax<=9000)tax=paytax*0.2-555;

elsetax=paytax*0.25-1005;

printf("个人所得税为:

%.2f\n",tax);

return0;

}

14、假定银行整存整取存款的存期有1,2,3,5年四种,年利率分别为3.5%,4.4%,5%,6.5%。

输入存款的本金和存期(若输入的存期错误,应报错),程序计算并输出到期后的利息。

利息=本金×存期×年利率。

#include

intmain()

{doubleprincipal,rate,interest;

intterm;

printf("请输入本金:

");scanf("%lf",&principal);

printf("请输入存期:

");scanf("%d",&term);

switch(term)

{case1:

rate=3.5;break;

case2:

rate=4.4;break;

case3:

rate=5.0;break;

case5:

rate=6.5;break;

default:

printf("输入的存期错误!

\n");return1;

}

interest=principal*rate*0.01*term;

printf("利息:

%5.2lf\n",interest);

return0;

}

15、编写一个程序,输入年份和月份,输出该月的天数。

#include

intmain()

{inty,m,d;

printf("请输入年份和月份(yyyy-mm):

");

scanf("%d-%d",&y,&m);

switch(m)

{case2:

d=28;break;

case1:

case3:

case5:

case7:

case8:

case10:

case12:

d=31;break;

case4:

case6:

case9:

case11:

d=30;break;

default:

printf("输入的月份错误!

\n");return1;

}

if((m==2)&&(y%4==0&&y%100!

=0||y%400==0))d++;

printf("该月有%d天\n",d);

return0;

}

16、编写一个程序,输入一个正整数,要求以相反的顺序输出该数。

例如,输入12345,则输出为54321。

#include

intmain()

{intn;

printf("请输入一个正整数:

");

scanf("%d",&n);

printf("反序输出该数:

");

while(n!

=0)

{printf("%d",n%10);

n/=10;

}

printf("\n");

return0;

}

17、编写一个程序,输入一行字符,输出其中的英文字母、数字字符和其他字符各有多少个。

#include

intmain()

{intdigit,letter,other;charch;

digit=letter=other=0;

printf("请输入一个字符串:

");

while((ch=getchar())!

='\n')

if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))

letter++;

elseif(ch>='0'&&ch<='9')

digit++;

else

other++;

printf("各类字符个数:

\n");

printf("英文字母=%d,数字=%d,其他字符=%d\n",letter,digit,other);

return0;

}

18、编写一个程序,用e≈1+1/1!

+1/2!

+1/3!

+……+1/n!

,求e的近似值,直到1/n!

<10-6为止。

#include

intmain()

{intn;floate,t;

n=e=t=1;

do{

t/=n;

e+=t;

n++;

}while(t>1e-6);

printf("e=%f\n",e);

return0;

}

19、编写一个程序,用迭代法求数a的平方根,迭代公式为:

xn+1=(xn+a/xn)/2,要求前后两次求出的x的差的绝对值小于10-5。

数a可从键盘上输入,x0可取a/2。

#include

#include

intmain()

{floata,x1,x2;

printf("请输入一个正数:

");

scanf("%f",&a);

x2=a/2;

do{

x1=x2;

x2=(x1+a/x1)/2;

}while(fabs(x2-x1)>1e-5);

printf("数%.2f的平方根=%f\n",a,x2);

return0;

}

20、假定某一大型比赛中有10名裁判同时为一名体操运动员打分,编写一个程序,输入这10名裁判的打分,输出去掉一个最高分和一个最低分后该运动员的平均得分。

#include

#defineN10

intmain()

{inti;floata,max,min,sum;

max=0;min=10;sum=0;

printf("请输入%d个裁判的打分:

\n",N);

for(i=1;i<=N;i++)

{scanf("%f",&a);

if(max

if(min>a)min=a;

sum+=a;

}

sum=(sum-max-min)/(N-2);

printf("最高分=%.1f最低分=%.1f平均得分=%.3f\n",max,min,sum);

return0;

}

21、编写一个程序,输入10个互不相同的数,输出其中的最大数和次大数。

#include

#defineN10

intmain()

{inti;floata,max,smax;

printf("请输入%d个互不相同的数:

\n",N);

max=-1e30;

for(i=1;i<=N;i++)

{scanf("%f",&a);

if(a>max){smax=max;max=a;}

elseif(a>smax)smax=a;

}

printf("最大数=%f,次大数=%f\n",max,smax);

return0;

}

22、编写一个程序,找出连续整数之和是500的所有整数序列。

例如:

500=98+99+100+101

+102。

#include

intmain()

{inti,j,s,k,n;

for(n=0,i=1;i<250;i++)

{for(s=0,j=i;s<500;j++)

s+=j;

if(s==500)

{printf("%d:

",++n);

for(k=i;k

printf("%d",k);

printf("\n");

}

}

return0;

}

23、“百钱百鸡”问题。

我国古代数学家张丘建在《算经》中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。

百钱买百鸡,问鸡翁、母、雏各几何?

”。

意思是:

公鸡5元钱1只,母鸡3元钱1只,小鸡1元钱3只。

用100元钱买100只鸡,问公鸡、母鸡和小鸡各买多少只?

#include

intmain()

{intx,y,z;

printf("公鸡\t母鸡\t小鸡\n");

for(x=0;x<=20;x++)

for(y=0;y<=33;y++)

{z=100-x-y;

if(3*5*x+3*3*y+z==3*100)

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

}

return0;

}

24、爱因斯坦阶梯问题。

设有一个阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每

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

当前位置:首页 > 初中教育 > 英语

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

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