c语言实验答案_第1页
c语言实验答案_第2页
c语言实验答案_第3页
c语言实验答案_第4页
c语言实验答案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验1 基本程序示例任务1 熟悉C语言程序的编辑、编译、连接和运行过程【上机内容】1输入并运行下面程序,写出运行结果。#include "stdio.h"main( ) char c1,c2; c1=97;c2=98; printf("%c,%c", c1, c2);在此基础上,完成以下3项任务:(1)在c1=97;c2=98;语句后加入如下语句,并运行。printf("%d, %d", c1, c2 );运行结果:a,b97,98(2)将char c1,c2;改为如下语句,再运行。int c1, c2;运行结果:a,b(3

2、)将c1=97;c2=98;改为如下语句,再运行,并分析其运行结果。c1=300; c2=400;运行结果:,怭(或,?) 2分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。#include "stdio.h"main( ) char c1='a',c2='b',c3='c',c4='101',c5='116'printf("a%c b%ctabc%c n",c1,c2,c3);printf("tb%c %c"

3、;,c4,c5);运行结果:aa bb abccA N3分析下面程序,写出运行结果,再输入计算机中运行,将得到的结果与分析得到的结果比较对照。#include "stdio.h"main( ) int i , j , m , n ; i=8; j=10; m=+i; n=j+; printf("%d,%d,%d,%d",i,j,m,n);运行结果:9,11,9,10分别进行以下改动后,先分析结果,再运行对照。(1)将m=+i; n=j+;改为如下:m=i+; n= + j;运行结果:9,11,8,11(2)程序改为如下:#include &qu

4、ot;stdio.h"main( ) int i , j ;i=8; j=10;printf("%d,%d", i+, j+);运行结果:8,10(3)程序改为如下:#include "stdio.h"main( ) int i , j ;i=8; j=10;printf("%d,%d", + i, + j);运行结果:9,11(4)程序改为如下:#include "stdio.h"main( ) int i , j ;i=8; j=10;printf("%d,%d

5、,%d,%d",i,j,i+,j+);运行结果:8,10,8,10(5)程序改为如下:#include "stdio.h"main( )int i , j , m=0 , n=0 ;i=8; j=10;m+= i +; n-= -j;printf("i=%d,j=%d,m=%d,n=%d",i,j,m,n);运行结果:i=9,j=9,m=8,n=-9任务2 简单的C语言程序设计1按格式要求输入、输出数据。程序请单如下:#include "stdio.h"main( )   int a,b; fl

6、ost x,y; char c1,c2; scanf("a=%d,b=%d",&a,&b); scanf("%f, %e",&x,&y); scanf("%c %c",&c1,&c2); /*录入时%c与%c之间有个空格*/ printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn",a,b,x,y,c1,c2);运行该程序,必须按如下方式在键盘上输入数据: a=3,b=7 8.5,71.82a A (注解:a与A之间输入一个空格,且a紧跟71

7、.82后写,不要空格)请写出输出结果。运行结果:a=7,b=3,x=8.500000,y=71.820000,c1=a,c2=A2输入三角形的三条边长,求三角形面积。程序清单如下:#include "stdio.h"#include "math.h"main( )float a,b,c,s,area;scanf("%f ,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf("area=%f",a

8、rea);运行结果:(具体情况根据自己输入的数据而定)如在键盘上输入:3,4,5则运行结果为:area=6.0000003已知圆半径、圆柱高、求圆周长、圆柱体积。程序清单如下:#include "stdio.h"main( )float r,h,l,v,pi;pi=3.1415926;scanf("%f,%f",&r,&h);l=2*pi*r;v=pi*r*r*h;printf("圆周长为:%6.2fn",l);printf("%圆柱体积为:6.2f",v);运行结果:(具体情况根据自己输

9、入的数据而定)如在键盘上输入:5,6则运行结果为:圆周长为:31.42圆柱体积为:471.244输入一个摄氏温度,要求输出华氏温度,公式为f = 5/9·c+32。程序清单如下:#include "stdio.h"main( )float c,f;scanf("%f",&c);f=5.0/9*c+32;printf("%5.2fn",c);运行结果:(具体情况根据自己输入的数据而定)如在键盘上输入:37则运行结果为:52.56实验2选择结构任务1 if语句程序设计1修改下列程序,使之满足输入10时输出“=

10、=”,否则输出“!=”的条件。#include"stdio.h"main()int x;scanf("%d",&x);if(x=10)printf("=n");else printf("!=n");2修改下列程序,使之实现以下功能: 当a= =b并且b=c时,输出“a=b=c”; 当a!=b时,输出“a!=b”。#include “stdio.h” main( ) int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if (a=b) if(b=c) printf(“

11、a=b=c”); else printf(“a!=b”);3程序填空。从键盘输入任意一个大写字母,将其转换成相应小写字母输出。 #include <stdio.h> main() char c; scanf("%c",&c); if (c>='A'&&c<='Z')或(c>=65&&c<=90) c=c+32; printf("n%c",c); 4有以下程序,执行后输出结果为_4_。#include “stdio.h”main( ) int a=1

12、,b=2,c=3,d=4; if(a<b<c) printf(“%dn”,d); else if(c-b)=a) printf(“%dn”,2*d); else printf(“%dn”,4*d);5有以下程序,执行后输出结果为_9 7 0_。#include "stdio.h" main( ) int a=8,b=7,c=9,t=0; if(a<b) t=a;a=b;b=t; if(a<c) t=a;a=c;c=t; if(b<c) t=b;b=c;c=t; printf("%5d%5d%5dn",a,b,c);6有以下程

13、序,执行后输出结果为_9 8 7_。#include "stdio.h" main( ) int a=8,b=7,c=9,t=0; if(a<b) t=a;a=b;b=t; if(a<c) t=a;a=c;c=t; if(b<c) t=b;b=c;c=t;printf("%5d%5d%5dn",a,b,c); 7. x、y有如下函数关系,编写程序输入x,输出y值。 x (x<1) y = 2x1 (1x<10) 3x11 (x10) 参考答案:#include "stdio.h"main() double

14、 x,y; scanf ("%lf",&x); if (x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; printf ("y=%lf",y);8 输入一个百分制分数,要求输出对应的成绩等级:90100为A,8089为B,7079为C,6069为D,不及格为E。参考答案:#include<stdio.h>main( ) float score; printf("input socre:"); scanf("%f", &s

15、core); if(score>=90) printf("An"); else if(score>=80) printf("Bn"); else if(score>=70) printf("Cn"); else if(score>=60) printf("Dn"); else printf("En");9给一个不多于3位的正整数,编写程序完成以下要求:(1)求出它是几位数;(2)分别输出每一位数字;(3)按逆序输出各位数字,例如,原数为321,应输出123。参考答案:#i

16、nclude "stdio.h"void main()int a,b,c,x,n;scanf("%d",&x);a=x/100;b=(x-a*100)/10;c=x%10;if(a!=0) printf("%d为3位数,原数为%d,逆序数为%dn",x,x,c*100+b*10+a);else if(b!=0) printf("%d为2位数,原数为%d,逆序数为%dn",x,x,c*10+b); else printf("%d为1位数,原数为%d,逆序数为%dn",x,x,c);任务2

17、switch语句程序设计1有如下程序,执行后输出结果为_14_。#include “stdio.h” main ( ) int i=5; switch(i) case 4:i+=1; case 5:i+=2; case 6:i+=3; default:i+=4; printf("%dn",i);2.有如下程序段,若grade的值为'C',则输出结果是_ Medium!_ Pass!_ 。switch(grade) case 'A':printf("Excellent!n");case 'B':printf(

18、"Fine!n");break;case 'C':printf("Medium!n");case 'D':printf("Pass!n");break;default:printf("Fail!n");3有以下程序,执行后输出结果为_a=3,b=5_#include "stdio.h"main( ) int x=0,y=1,a=2,b=3; switch(x) case 0: switch(y) case 0: a+; case 1: b+; break; cas

19、e 1: a+;b+; break; case 2: a+;b+; printf("na=%d,b=%d",a,b);4.将下列的程序段改用switch语句来实现,使它完成相同的功能。if(x>=0&&x<10) y=x;else if(x<20) y=x+3;else if(x<40) y=-0.5*x+10;else y=2*x-5;参考答案:#include "stdio.h"main() float x1,x2; float y; scanf("%f",&x1); x2=x1;

20、switch(x1>0) case 0 :y=0; break; case 1 : switch(int)x2/10) case 0: y=x2; break; case 1: y=x2+3;break; case 2: case 3: y=-0.5*x2+10;break; default: y=2*x2-5;break; printf("x=%f,y=%f",x1,y);5以下程序计算某年某月有几天,闰年与平年的二月份天数不同。判别闰年的条件是:能被4整除但不能被100整除的年是闰年,或者能被400整除的年也是闰年。请分析程序填空。#include "s

21、tdio.h"#include "stdio.h"main() int yy,mm,days; printf("input year and month:"); scanf("%d %d",&yy,&mm); switch(mm) case 1: case 3: case 5: case 7:case 8: case 10:case 12: days=31 ;break; case 4: case 6: case 9: case 11:days=30;break; case 2:if(yy%4=0&&

22、amp;yy%100!=0|yy%400=0) days=29 ; else days=28; break; default:printf("input error");break; printf("the days of %d %d is %dn",yy,mm,days);6.假设奖金税率如下(ma代表奖金,tr代表税率), 利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款以及实得奖金数(扣除奖金税后), ma<1000时, tr=0%; 1000 ma<2000时, tr=5%; 2000 ma<4000时, tr

23、=8%; 4000 ma时, tr=10%。参考答案:#include "stdio.h"main() float ma, tr,ma_tr; scanf("%f",&ma); printf("奖金数为%8.2f",ma); switch(ma>=1000) case 0 :tr=0; break; case 1 : switch(int)ma/1000) case 1: tr=0.05;break; case 2: case 3: tr=0.08;break; default: tr=0.1;break; printf

24、("税率为=%.2f,应交税款为=%.2f,实得奖金数为=%.2fn",tr,ma*tr,ma*(1-tr);实验3循环结构实验(1)任务1 while语句程序设计1分析并修改下面的程序,使该程序能正常结束运行。 #include <stdio.h> main() int x,y; x=2; y=0; while (!y-) printf (“%d,%dn”,x, y);2下列程序中,while循环的循环次数为_6次_。 #include <stdio.h> main() int i=0; while(i<10) if(i=5) break;i

25、+; printf (“%dn”,i);3下面是一个计算e的近似值(使误差小于给定的数值)的程序。#include<stdio.h>main() double e=1.0,x=1.0,y,detax; int i=1; printf("please input enter :n"); scanf("%lf",&detax); y=1/x; while(y>=detax) x=x*i; y=1/x; e=e+y; +i; printf("%12.10f",e);参考答案:实验要求:(1)阅读上面的程序,写出程序

26、所依据的计算公式。e=1+1/1!+1/2!+1/3!+.+1/n!(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:a.不进入循环;detax>1.0b.只循环两次;detax>0.5&&detax<=1.0c.进入死循环(程序将永远循环下去)。 <=0(3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y<detax,y<=detax,观察程序运行将会有什么变化。4编写程序。对输入的任意的一个正整数按反序输出。例如,输入147,输出741。参考答案:#include &q

27、uot;stdio.h"void main() int x,i; scanf("%d",&x); while(x!=0) i=x%10; x=x/10; printf("%d",i); 任务2 do-while语句程序设计1分析并修改下面的程序,使该程序能正常结束运行。 #include <stdio.h> main() int x=0; dox+;while(x=2); printf (“%dn”,x);2.有以下两段程序,比较输出结果并分析原因。(一)main() int x=0;while(x<0) x+; pr

28、intf (“%dn”,x); 结果为:0(二)main() int x=0; do x+;while(x<0); printf (“%dn”,x); 结果为:1两段程序结果不同,是因为x的初始值为0,从而使循环条件不成立。当循环条件不成立一次都不成立时,dowhile循环会比while循环多执行一次循环体。3下列程序中,do_while循环的循环次数为_ 无限次_。#include <stdio.h>main() int i=0; do if(i=6) continue; i=i+2; while(i<10); printf ("%dn",i);4

29、.运行下列程序,输出结果为_sum=4000_。#include "stdio.h"#define N 100main( ) int x=0,sum=0; do if(x=(x/5*5) continue; sum=sum+x; while(+x<N); printf("sum=%dn",sum);5.求 1!+2!+3!+4!+5!+6!+7!+8!+9!+10! 请填空将下面的程序补充完整: 答案:4037913#include <stdio.h>main( ) int j,m,p,s; s=0; m=1 ; do p=1; j=1

30、 ; while(j<=m) p*=j; j+; s=s+p; m+; while(m<=10); printf("s=%dn",s);6. 编写程序。每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果总个数到不超过100的最大值,求每天平均花多少钱? 答案:9.92参考答案:#include "stdio.h"void main() int x,sum,day; double ave=0; x=2; day=1; sum=2; do x=2*x; sum=sum+x; day+; while(sum<=

31、100); ave=(sum-x)*0.8/(day-1); printf("%lf",ave);实验4循环结构实验(2)任务1 for语句程序设计1分析并修改下面的程序,使该程序能正常结束运行。#include <stdio.h>main() int i; for(i=1;i<10;i+) printf ("%dn",i);2分析并修改下面的程序,使sum的值为1+2+10的和。#include <stdio.h>main( ) int i=1,将封号改为逗号sum=0; for(;i<=10;i+) sum=sum

32、+i; printf ("sum=%dn",sum);3.运行下列程序,输出结果为_sum=15_。#include <stdio.h>main() int i,sum=0; for(i=0;i<=10;i+) sum=sum+i; if(i=5) break; printf ("sum=%dn",sum);4.运行下列程序,输出结果为_sum=4000_。#include <stdio.h>main() int i,sum=0; for(i=0;i<=100;i+) if(i%5)=0) continue; sum=

33、sum+i; printf ("sum=%dn",sum);5.运行下列程序,输出结果为_ sum=60_。#include <stdio.h>main() int i,j,sum=0; for(i=0;i<=3;i+) for(j=0;j<=5;j+) sum=sum+j; printf ("sum=%dn",sum);6.程序填空。求出1000以内能被13整除的最大数。#include "stdio.h"main() int i; for( i=1000 ; i>0 ;i-) if( i%13=0 )

34、 break; printf("n%d",i);7.程序填空。求如下Fibonacci 数列1,1,2,3,5,8, 的前40个数,要求每一行输出8个数。 参考答案:#include <stdio.h> main( ) long f1,f2; int i; f1=1; f2=1; for(i=1; i<=20; i+ ) printf("%10ld%10ld",f1,f2); if( i%4=0 ) printf("n"); f1=f1+f2; f2=f2+f1; 8程序填空。从键盘输入10个不为0的整型数,统计其中

35、负数的个数并求出所有正数的平均值。参考答案:#include <stdio.h>main( ) int i,x,count=0; float ave=0; for(i=0;i<10;i+) scanf("%d",&x); if(x>0) ave+= x ; else count+ ; if(count!=10) ave/= 10-count ; printf("count:%d,Average:%fn",count,ave);9帕多瓦数列:1,1,1,2,2,3,4,5,7,9,12,16,21,求出这个数列的前20项之和

36、。参考答案:方法1一次一项#include "stdio.h"main() int f1=1,f2=1,f3=1,f,sum=3,i; printf("%d %d %d",f1,f2,f3); for(i=4;i<=20;i+) f=f1+f2; printf(" %d",f); sum=sum+f; f1=f2; f2=f3; f3=f; printf("nsum=%d",sum);方法2一次3项#include "stdio.h"main() int f1=1,f2=1,f3=1,su

37、m=0,i; for(i=1;i<=7;i+) printf("%4d%4d%4d",f1,f2,f3); sum=sum+f1+f2+f3; f1=f1+f2; f2=f2+f3; f3=f3+f1; printf("nsum=%d",sum-f3+f1);10.统计能被4整除而且个位数为6的4位数的个数及和。参考答案:#include "stdio.h"main() int i,sum=0,count=0; for(i=1000;i<=9999;i+) if(i%10=6&&i%4=0) count+;

38、 sum=sum+i; printf("个数为:%8d,总和为:%8dn",count,sum);11.求1100之间所有素数的个数及和。参考答案:#include <stdio.h>#include <math.h>main() int m,n,i,j,k,sum=0; n=0; for(m=2;m<=100;m+) k=(int)sqrt(m); i=2; while(m%i!=0&&i<=k) i+; if(i=k+1) n+;sum=sum+m; printf("共有%8d个素数,总和为%8dn"

39、;,n,sum);12(1)编写程序输出下面的数字金字塔。 1 121 12321 1234321 123454321参考答案:#include<stdio.h>main() int n=5, i,j; for(i=1;i<=5;i+) for(j=1;j<=5-i;j+) printf(" " ); for(j=1;j<=i;j+) printf("%d",j ); for(j=i-1;j>=1;j-) printf("%d",j ); printf("n"); 12(2)编写

40、程序输出下面的数字金字塔。 1 222 33333 4444444 555555555 参考答案:#include<stdio.h>main() int n=5, i,j; for(i=1;i<=5;i+) for(j=1;j<=5-i;j+) printf(" " ); for(j=1;j<=2*i-1;j+) printf("%d",i ); printf("n"); 实验5 函数定义、声明与调用任务1 函数的定义和声明1预测下面程序的输出,并上机运行验证结果。(结果:21)#include <

41、stdio.h>func(int a,int b) int c; c=a+b; return c;main( ) int x=6,y=7,z=8,r; r=func(x-,y+,x+y),z-); printf("%dn",r);2分析推测下面程序的输出,并上机运行验证结果。(结果:12)#include <stdio.h>unsigned fun26(unsigned num) unsigned k=1; do k*=num%10;num/=10; while(num); return k;main( ) unsigned n=26;

42、 printf("%dn",fun26(n);3求出以下程序的运行结果,并描述程序所完成的功能。(结果:s=16。功能是:求x的n次幂即2的4次幂。)#include <stdio.h>main( ) int power(int x,int n); int x=2,n=4; printf("ns=%d",power( x,n);int power(int x,int n) int i,p=1; for(i=1;i<=n;i+) p=p*x; return(p);4上机调试下面计算两个整数之和的程序,记录系统给出的出错信息,指出

43、出错原因并予以改正。正确代码为:#include <stdio.h>int sum( int a,int b) /函数不能嵌套定义,所以将sun函数拉到main函数外,同 时形参的每个参数前都必须要有类型 return (a+b); main( )int x,y;scanf("%d,%d",&x,&y); printf("%dn",sum(x,y); /形参与实参的个数要一致,所以将加号改成逗号。5上机调试下面判断n是否是素数的程序,函数fun中有逻辑错误,调试并改正。正确代码为:#include <stdio

44、.h>fun(int n) int k,yes=1; for(k=2;k<=n/2;k+) if(n%k=0) yes=0; break; /反证法证明,找到一个就跳出,否则会被后面覆盖 else yes=1; return yes;main( ) int n; scanf("%d",&n); if(fun(n ) /将main函数中的函数调用fun()改成fun(n),因为实参的个数应与形参对应 printf("%d:yes!n",n); else printf("%d:no!n",n);6下

45、面程序中,函数fun的功能是根据形参m计算公式T=1/1!+1/2!+1/3!+1/m!的值,上机调试,请改正程序中的错误。当从键盘输入10时,给出程序运行的正确结果(按四舍五入保留10位小数)。正确代码为:(输入10时的结果:1.7182818011)#include <stdio.h>main( ) double fun(int m); /先调用再定义,且不是能缺省的int型,请加上函数说明。 int m; printf("n input m:"); scanf("%d",&m); printf("n t=%1

46、2.10lf n",fun(m);double fun(int m) double fac,t=0.0; int i=1,j; for(i=1;i<=m;i+) fac=1.0; for(j=1;j<=i;j+) fac=fac*j; /逻辑有误,改为:for(j=1;j<=i;j+) fac=fac*j;这样才表示求i!,原程序行是求i的m次方。 t+=1.0/fac; return t;任务2 函数的嵌套调用1跟踪调试下面程序,注意函数调用的过程中形参、实参的关系。记录并分析结果;将形参a,b对应改为x,y,使之与实参变量同名,记录并分析结果。#include

47、<stdio.h>main( ) int t,x=2,y=5; int swap(int,int); printf("(1) in main: x=%d,y=%dn",x,y); swap(x,y); printf("(4) in main: x=%d,y=%dn",x,y);swap(int a,int b) int t; printf("(2) in swap: a=%d,b=%dn",a,b); t=a; a=b; b=t; printf("(3) in swap: a=%d,b=%dn"

48、;,a,b);结果:(1) in main: x=2,y=5(2) in swap: a=2,b=5(3) in swap: a=5,b=2(4) in main: x=2,y=5将形参a,b对应改为x,y 结果:(1) in main: x=2,y=5(2) in swap: x=2,y=5(3) in swap: x=5,y=2(4) in main: x=2,y=5结论:无论实参、形参是否同名,交换的只是子函数(swap)中两个变量的值。主函数中的x,y的值没有变。2若输入2、3,求以下程序的运行结果,分析函数嵌套调用的执行过程。#include <stdio.h>long

49、sum(int a,int b);long factorial(int n);main( ) int n1,n2; long a; scanf("%d,%d",&n1,&n2); a=sum(n1,n2); printf("a=%ld",a);long sum(int a,int b) long c1,c2; c1=factorial(a); c2=factorial(b); return(c1+c2);long factorial(int n) long rtn=1; int i; for(i=1;i<=n;i+) rt

50、n*=i; return(rtn);(结果为:a=8。程序功能:求n1!+n2! 即:2!+3!)3运行下面程序,写出运行结果。#include "stdio.h"main( ) int i=5; void palin(int n); printf("please input 5 characters: "); palin(i); printf("n");void palin(int n) char next; if(n<=1) next=getchar( ); printf("n0: "); putchar(next); else next=getchar( ); palin(n-1); putchar(next); (程序功能:实现将从键盘输入的5个字符逆序输出。如输入:abcde.输出:edcba)4写出下面程序的输出结果。#include "stdio.h"int abc(int u,int v);main ( ) int a=24,b=16,c; c=abc(a,b); printf("%dn",c); int abc(int u,int v) int w; while(v)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论