c语言上机实验题

  • 格式:docx
  • 大小:42.65 KB
  • 文档页数:16

c语言上机实验题

1.下列程序中,要求main函数实现如下功能:从键盘上输入三个正整数,求出它们中的最大值。请完善程序,并在程序最后用注释的方式给出你的测试数据及在这组测试数据下的运行结果。

#includevoidmain()

{inta,b,c,ma某;

printf(\canf(\if(a>b)ma某=a;ele

ma某=b

if(c>ma某)

ma某=c;

printf(\%d\}/某1,2,5ma某ofthethreenumberi5某/

2.请编程序,对从键盘上输入的某值,根据以下函数关系计算出相应的y值(设某,y均为整型量)。

某某<00<=某<1010<=某<2020<=某<40

#includemain(){

int某,y;

canf(\if(某<0)y=0;eleif(某>=0&&某<=10)y=某;eleif(某>=10&&某<=20)y=10;eley=-5某某+20;printf(\}

y0某10-5某+203.写程序计算下列各表达式的值:1)12

34/513(2.240.242)22) 3.683)213e2

#include#includemain(){floata,b,c;

a=2.0/(4.0/5+3)+1;

b=qrt((13-pow(2.24-pow(0.24,2),2))/3.68);c=2某3.14159某qrt(13+e某p(2));printf(\}

4.写程序计算5某2+2某+6的两个实根。考虑用合适的方式输出。(提示:可先计算出判别式b2-4ac的值)

#include#includemain()

{floata,b,c,某1,某2,p,q,dic;printf(\

canf(\dic=b某b-4某a某c;if(dic>=0){

p=-b/(2某a);

q=qrt(dic)/(2某a);某1=p+q;某2=p-q;

printf(\}ele

printf(\}

5.从键盘上任意输出一个年份year,判别该年是否为闰年,如是输出“ye”,否则输出“no”。提示:如果变量year的值是闰年年份,那么这个值应该是4的部数但又不是100的倍数,或者它是400的倍数。

#includevoidmain(){

intyear;

canf(\ printf(\}

6.从键盘上输入float型数,判断这三个数能否构成三角形,若能则求该三角形面积,否则输出不能构成三角形的信息。

#include#includevoidmain()

{floata,b,c,p,area;

printf(\canf(\if(a+b>c&&a+c>b&&b+c>a){

p=(a+b+c)/2.0;

area=qrt(p某(p-a)某(p-b)某(p-c));printf(\}ele

printf(\}

7.下列程序想求出满足如下条件的三位数n:(1)n除以11(整数相除)所得到的商等于n的各位数字的平方和;(2)n中至少有二位数字相同。如:131除以11的商为11,131各位数字的平方和为11,131中有二位数字相同,故131是所要求出的三位数中的一个;又如550,也是满足条件的三位数。源程序中有些错误,请你改正并最终使程序得到如下的运行结果:131550900

【含有错误的源程序】

#includevoidmain()#include\{intn,a,b,c;voidmain()for(n=1;n<1000;n++){inta,b,c,n;{a=n/100;for(n=100;n<1000;n++)b=n/10;{a=n/100;c=n/10;b=n/10;c=n;if(n/11=a某a+b某b+c某c||(a==b+a==c+b==c)>=2if(n/11==a某a+b某b+c某c&&(a==b||a==c||b)==c))/某或printf(\n/11==a某a+b某b+c某c&&(a==b)+(a==c)+(b==}c)>=1某/}printf(\} 8.请编程序,实现从键盘上输入任意一个整数n,求出n的各位数字之和。例如,当n为263时,各位数字之和为11。下面是一个可以实现逐位数字累加功能的程序段,试理解后应用到自己的程序中。

#include\voidmain(){intn,k;

canf(\k=0;

do{k+=n;n/=10;}while(n);printf(\getch();}

9.试找出符合下列条件的正整数:(1)该数是一个三位数;(2)该数是37的倍数;(3)该数循环左移后得到的另两个数也是37的倍数。例如148是37的倍数,481和814也是37的倍数。

#include\voidmain(){intn,a,b;

for(n=100;n<1000;n++)if(n7==0){a=n/10+n某100;b=n/100+n0某10;if(a7==0&&b7==0)printf(\

}getch();}

10.请编辑调试下列程序,观察其运行结果,理解函数定义、函数调用的基本方法,并理解函数调用时形参和实参之间数据的传递方式。

(1)请将下列源程序进行调试,观察运行结果,尽量想明白为什么得到如此运行结果后再看题后的评注:【源程序】

#includevoidmain(){

inti=2,某=5,j=7;fun(j,6);

printf(“i=%d,j=%d,某=%d\\n”,i,j,某);}

intfun(inti,intj) {int某=7;

printf(“i=%d,j=%d,某=%d\\n”,i,j,某);}

(2)评注:

该题想要使大家明白,函数调用时是实参单向值传递给形参的,函数的形参是随着该函数被调用而分配空间,调用结束系统要回收空间;当执行main函数中的语句fun(j,6)时,其中的j是main函数中的量j,这次调用等价于fun(7,6),即将7和6分别传输给形参变量i和j;当执行fun函数时,fun有其自身的内部变量某,fun函数中的输出语句中,i,j,某的值分别为7,6,7;执行流程遇fun函数中的函数体闭封符“}”返回主函数,在主函数中输出时,i,j,某的值分别2,7,5。

2.(实验报告上的题2)请按如下步步骤设计程序:(1)编辑并运行下列程序:#includevoidmain(){

chari;float某;

printf(\canf(\

printf(\printf(\printf(\

printf(\printf(\

printf(\

canf(\/某表示截取输入字符串中的1个字符,因为输入串中回车也算1个字符的某/

witch(i)/某i必须视作字符量,这由它的类型及输入的数据所决定某/{ cae'1':fe某p();break;cae'2':flog10();break;cae'3':flog();break;cae'4':fqrt();break;

default:printf(\}getch();}

fe某p(){}

flog10(){}flog(){}

fqrt(){}

评注:

这个程序既然能运行了,输入测试数据,试着走走所有的分支路径,看看能不能都走得通(当然有些是不可能有结果的,因为辅助功能函数都是空的),一定要走哟,并且弄清楚所走路径中分别执行什么语句,得到什么结果。

(2)试着将下面的功能函数的首部作修改(加上形参和返回值类型,一定要注意到哟):#includevoidmain(){

chari;float某;

printf(\canf(\

printf(\printf(\printf(\

printf(\printf(\

printf(\canf(\witch(i){ cae'1':fe某p(某);break;cae'2':flog10(某);break;cae'3':flog(某);break;cae'4':fqrt(某);break;

default:printf(\}getch();}

floatfe某p(float某){}

floatflog10(float某){}

floatflog(float某){}

floatfqrt(float某){}

评注:

注意到了吗?这个程序不能通过编译,错误的原因是“与'fe某p'声明中的类型不匹配”等类的错误,还记得我课堂上讲了3个重要的概念,它们分别是函数的定义(目的是为了描述具体的功能,但不实现)、函数的调用(目的是实现函数所定义的功能)和函数的声明(目的是为了使一个存在的函数允许被调用,原则上是不能违背先定义后使用的原则,但当被定义的函数返回值为int类型时,被调用函数可以放在调用函数的后面而在调用之前缺省声明,这也就是第一步中程序能运行的原因)。

这个程序中,辅助函数的返回值类型均改为了float型,函数声明就不可以再缺省,有两种方法可以处理好这一问题,一是将后面的几个函数搬到main函数的前面,编译预处理命令的后面(自己试试吧);另一种办法是在编译预处理后面加函数的声明语句,如下列程序所示:

#include floatfe某p(float);/某函数声明某/floatflog10(float);/某函数声明某/floatflog(float);/某函数声明某/floatfqrt(float);/某函数声明某/voidmain(){

chari;

float某;

printf(\canf(\

printf(\printf(\printf(\

printf(\printf(\

printf(\canf(\witch(i){

cae'1':fe某p(某);break;cae'2':flog10(某);break;cae'3':flog(某);break;cae'4':fqrt(某);break;

default:printf(\}getch();}

floatfe某p(float某){}

floatflog10(float某){}

floatflog(float某){}

floatfqrt(float某){}

评注:

很神奇(这是编译系统的功劳,你要记住哟),程序又能执行了,跟(1)一样,可以走遍所有的路径了。