高级语言程序设计C实验与练习册答案_第1页
高级语言程序设计C实验与练习册答案_第2页
高级语言程序设计C实验与练习册答案_第3页
高级语言程序设计C实验与练习册答案_第4页
高级语言程序设计C实验与练习册答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一(1) C程序运行环境及简单程序的运行(解答) P23 1编辑、运行简单的C程序下面是一个简单的C程序,请输入、编译并运行之,观察并记下屏幕的输出结果,最后以文件名sy1_1.c存盘。 #include <stdio.h>main() int a,b,sum,m,f; /*定义整型变量a,b,sum,m,f*/float d; /*定义实型变量d */printf("Please Input a,b n "); /*输出语句*/scanf("%d%d",&a,&b); /*输入语句由键盘输入两个数分别赋予a和b*/sum

2、=a+b; /*赋值语句*/m=a-b;f=a*b;d=a/2.0;printf("%d + %d=%dn",a,b,sum); /*输出语句*/printf("%d - %d=%dn",a,b,m);printf("%d * %d=%dn",a,b,f);printf("%d / %f=%fn",a,2,d);运行结果:2 改错题(1)下列程序的功能为:计算x*y的值并将结果输出;请纠正程序中存在错误(程序中有8处错误),使程序实现其功能,程序以文件名sy1_2.c存盘。#include <stdio.h&

3、gt;main / main改为main() int x=2;y=3;a / 改为 int x=2,y=3,a;A=x*y / 改为 a=x*y;print ('a=%d",a); / 改为printf ('a=%d",a);printf("n"); 改正后源程序:#include <stdio.h>main() int x=2,y=3,a;a=x*y;printf("a=%d",a);printf("n");(2)下列程序的功能为:计算圆面积并将结果输出;请纠正程序中存在错误(程序中有

4、8处错误),使程序实现其功能,程序以文件名sy1_3.c存盘。 #include stdio.h; main(); float r;area; r=5.0;area=3.14159r*r;printf("area=%dn",area)改正后源程序:#include <stdio.h>main() float r,area; r=5.0; area=3.14159*r*r; printf("area=%fn",area);(3)下列程序的功能为:正确使用控制字符(水平制表符);请纠正程序中存在错误,使程序实现其功能,程序以文件名sy1_4.c存

5、盘。#include "stdio.h"main()char x,y,z;x=”a”;y='/t'z=”b”;printf("第1行为:%c%c%cn",x,y,z); printf("第2行为:%c%c%c%cn",x,y,y,z);改正后源程序:#include "stdio.h"main()char x,y,z;x='a'y='t'z='b'printf("第1行为:%c%c%cn",x,y,z); printf("

6、第2行为:%c%c%c%cn",x,y,y,z);运行结果:实验一(2) 数据类型、运算符和表达式P261若有定义 “int x,a,b,c;” ,写出顺序执行下列表达式后 x 的值,然后通过程序(程序以文件名sy1_5.c存盘)验证。 要求:先利用操作系统自带的计算器按表达式的运算次序计算下列表达式的结果,然后利用验证程序计算表达式的结果。 x=a=b=10 x=25%(c=3) x*=x+=x-=x x=(a=4%3,a=1)验证程序: #include<stdio.h>main() int x,a,b,c; x=a=b=10; printf("x=%dn&

7、quot;,x); x=25%(c=3); printf("x=%dn",x); x*=x+=x-=x; printf("x=%dn",x); x=(a=4%3,a=1); printf("x=%dn",x); 运行结果:2改错题(1)下列程序的功能为:已知圆锥半径r和高h,计算圆锥体积v。请纠正程序中存在错误(程序中有7处错误),使程序实现其功能,程序以文件名sy1_6.c存盘。#include stdio.hmain(); float r=10,h=5;v=1/3*3.14159*r2*h;printf("v=%dn&q

8、uot;,v)改正后源程序:#include <stdio.h>main() float r=10,h=5,v;v=1.0/3*3.14159*r*r*h;printf("v=%fn",v);(2)下列程序的功能为:通过键盘输入两个整数分别存放在变量x、y中,不借用第3个变量实现变量x、y互换值。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy1_7.c存盘。#include "stdio.h"main()int x,y;printf("请输入两个整数n");scanf("%d%d",x, y)

9、;printf("初始状态下的x:%d y: %dn");x=x+yy=x-y;x=x-y; printf("最终状态下的x:%d y: %d/n",x,y);改正后源程序:#include "stdio.h"main()int x,y;printf("请输入两个整数n");scanf("%d%d",&x,&y);printf("初始状态下的x:%d y: %dn",x,y);x=x+y;y=x-y;x=x-y; printf("最终状态下的x:%d

10、 y: %dn",x,y);3程序填空(1) 下列程序的功能为:输出小写字母a,b,请填写适当的符号,使程序实现其功能,程序以文件名sy1_8.c存盘。#include <stdio.h>main ()char c1,c2;c1=97; c2=98;printf(" %c,%c ",c1,c2);(2) 下列程序的功能为:从键盘输入3个整数分别存入变量a、b、c,然后,将变量a的值存入变量b,将变量b的值存入变量c,将变量c的值存入变量a,输出经过转存后变量a、b、c的值。(提示:使用中间变量)。请填写适当的符号或语句,使程序实现其功能,程序以文件名s

11、y1_9.c存盘。#include <stdio.h>main ()int a,b,c, m ;printf("Please input a,b,c: ");scanf("%d%d%d", &a,&b,&c ); m=a ; a=c ; c=b ; b=m ;printf("a=%d b=%d c=%dn",a,b,c);4编程题(1) 编写一个程序实现如下功能:从键盘输入三个大写英文字母,把它们转换成小写字母后输出(程序以文件名sy1_10.c存盘)。参考程序:(注意输入必须是大写字母)#incl

12、ude <stdio.h>main()char c1,c2,c3;scanf("%c,%c,%c",&c1,&c2,&c3);c1=c1+32;c2=c2+32;c3=c3+32;printf("%c,%c,%cn",c1,c2,c3);(2) 编写一个程序实现如下功能:从键盘输入两个整数a、b,求a2+b2的值并输出(程序以文件名sy1_11.c存盘)。参考程序:#include "stdio.h"main()int a,b,c;printf("请输入两个整数n");scanf

13、("%d%d",&a,&b); c=a*a+b*b; printf("c=%dn",c);实验二 设计并运行简单的C程序(解答)1改错题(1)下列程序的功能为: 输入一个华氏温度,要求输出摄氏温度。公式为:C= ,输出取2位小数。请纠正程序中存在的错误(程序中有3处错误),使程序实现其功能,程序以文件名sy2_1.c存盘。#include <stdio.h>main() float c,f;printf("请输入一个华氏温度:n");scanf("%f",f);c= =(5/9)*(f-

14、32);printf("摄氏温度为:%5.2fn"c);改正后的程序:#include <stdio.h>main()float c,f ;printf("请输入一个华氏温度:n");scanf("%f",&f);c=(5.0/9)*(f-32);printf("摄氏温度为:%5.2fn",c);(2)下列程序的功能为:按下列公式计算并输出x的值。其中a和b的值由键盘输入。 x=2ab/(a+b)2请纠正程序中存在的错误,使程序实现其功能,程序以文件名sy2_2.c存盘。 #include &l

15、t;stdio.h> main() int a,b; float x; scanf("%d,%d",a,b); x=2ab/(ab)(ab); printf("x=%dn",x); 改正后的程序:#include <stdio.h> main() int a,b; float x; scanf("%d,%d",&a,&b); x=2.0*a*b/(a+b)*(a+b); printf("x=%fn",x); (3)下列程序的功能为:从键盘输入一个大写字母,要求改用小写字母输出。请纠

16、正程序中存在的错误,使程序实现其功能,程序以文件名sy2_3.c存盘。#include <stdio.h>main() char c1,c2; c1=getchar; /* 输入大写字符 */ printf("%c,%dn",c1,c1); c2=c1-26; /* 转变为小写 */ printf("%c,%dn",c2,c2); /* 输出 */改正后的程序:#include <stdio.h>main() char c1,c2; c1=getchar(); /* 输入大写字符 */ printf("%c,%dn&qu

17、ot;,c1,c1); c2=c1+32; /* 转变为小写 */ printf("%c,%dn",c2,c2); /* 输出 */2程序填空(1)下列程序的功能为:给定格式输入数据,按输出要求输出结果,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_4.c存盘。输入形式 enter x,y:2 3.4输出形式 x+y=5.4#include <stdio.h>main() int x;float y;printf ("enter x,y: "); scanf("%d%f",&x,&y); p

18、rintf("x+y=%.1fn",x+y); (2) 下列程序的功能为:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据r、h,输出计算结果,输出时要求有文字说明,取小数点后位数字。(周长l=2,圆面积s=,圆球表面积sq=,圆球体积vq=;圆柱体积vz=)请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_5.c存盘。#include <stdio.h>main()float pi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf("请输入圆半径r,圆柱高h:

19、n"); scanf("%f%f",&r,&h); ;l= 2*pi*r ;s= pi*r*r ;sq= 4*pi*r*r ;vq= 3.0/4*pi*r*r*r ;vz= pi*h*r*r ; printf("圆周长为:%.2fn",l );printf("圆面积为:%.2fn", s );printf("圆球表面积为:%.2fn", sq );printf("圆球体积为:%.2fn", vq );printf("圆柱体积为:%.2fn", vz

20、); (3) 下列程序的功能为:通过键盘输入两个整数,分别存入变量x,y中,当x小于y时,通过中间变量t互换x,y之值,并输出之。请填写适当的符号或语句,使程序实现其功能,程序以文件名sy2_6.c存盘。#include <stdio.h>main() int x,y,t; printf("请输入x,y:n"); scanf("%d%d",&x,&y) ; if (x<y) t =x; x=y; y=t; /x与y交换 printf("交换后的x:%d y:%d n",x,y);3编程题(1)编写一个

21、程序实现如下功能:输入一元二次方程的系数a,b,c,求方程的根。要求:运行该程序时,输入a,b,c的值,分别使b2-4ac的值大于、等于和小于零,观察运行时的报错信息(程序以文件名sy2_7.c存盘)。参考程序:#include <stdio.h>#include <math.h>void main() float a,b,c,disc,x1,x2,p,q; scanf("a=%f,b=%f,c=%f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a);

22、 x1=p+q; x2=p-q; printf("x1=%5.2fnx2=%5.2fn",x1,x2);(2)编写一个程序实现如下功能:在屏幕显示提示信息(“输入一个字符串”),用户输入完成后在屏幕上再现该字符串(程序以文件名sy2_8.c存盘)。参考程序:#include <stdio.h>void main() char c1,c2,c3; printf("输入一个字符串n"); c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3);

23、 putchar('n');(3)编写一个程序实现如下功能:利用sizeof(),求得所有基本数据类型的长度(程序以文件名sy2_9.c存盘)。参考程序:#include <stdio.h>void main() int i,j; long s; float a,b; double f1,f2; char ch; printf("%d, %d, %dn",sizeof(int),sizeof(i),sizeof(10); printf("%d, %d, %d,%dn",sizeof(long),sizeof(s),sizeof

24、(50000),sizeof(10L); printf("%d, %d, %dn",sizeof(float), sizeof(b),sizeof(9.8F); printf("%d, %d, %dn",sizeof(double), sizeof(f1), sizeof(9.8); printf("%d, %d, %d,%dn",sizeof(char), sizeof(ch), sizeof('a'), sizeof('101');实验四 循环结构程序设计 (解答)1改错题(1)下列程序的功能为:求

25、1100之和(和值为5050)并输出。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_1.c存盘。#include <stdio.h>main() int i,sum=0; i=1; while(i<100) sum=sum+i; i+; printf(“The sum from 1 to 100 is %dn”,sum); 改正后的程序:#include <stdio.h>main() int i,sum=0; i=1; while(i<=100) sum=sum+i; i+; printf("The sum from 1 to 10

26、0 is %dn",sum);(2)下列程序的功能为:倒序打印26个英文字母。请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_2.c存盘。#include <stdio.h>main() char x; x='z' while(x!='a') printf("%3d",x); x+; 改正后的程序:#include <stdio.h>main() char x; x='z' while(x!='a'-1) printf("%3c",x); x-

27、-; (3)下列程序的功能为:输出如下的图形,要求顶端的*定位在第21字符位置,请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_3.c存盘。 * * * *#include <stdio.h>void main() int i,j; for (i=0;i<4;i+) for (j=0;j<=20;j+) printf("n"); for (j=0;j<2*i+1;j+) printf("*"); 改正后的程序: #include <stdio.h>void main() int i,j; for (i

28、=0;i<4;i+) for (j=0;j<=20-i;j+) printf(" "); for (j=0;j<2*i+1;j+) printf("*"); printf("n"); 2程序填空(1)下列程序的功能为:用辗转相除法求两个正整数的最大公约数;请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_4.c存盘。提示:“辗转相除法” 求两个正整数的最大公约数的算法如下: 将两数中大的那个数放在m中,小的放在n中。 求出m被n除后的余数r。 若余数为0则执行步骤(7);否则执行步骤(4)。 把除数作为新

29、的被除数;把余数作为新的除数。 求出新的余数r。 重复步骤(3)到(5)。 输出n,n即为最大公约数。 #include <stdio.h> main () int r, m, n, t ; scanf ("%d%d",&m,&n); if (m<n) t=m;m=n;n=t; r = m%n; while (r) m=n;n=r;r= m%n ; printf ("%dn",n);(2)下列程序的功能为:计算1020个西瓜几天后能卖完(第一天卖了一半多两个,以后每天卖剩的一半多两个);请填写适当的符号或语句,使程序实现

30、其功能,程序以文件名sy4_5.c存盘。#include <stdio.h>main() int day,x1,x2; day=0; x1=1020; while( x1>0 ) x2= x1/2-2 ; x1=x2;day+; printf(“day=%dn”,day); (3)下列程序的功能为:输出100以内能被3整除且个位数为6的所有整数;请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_6.c存盘。#include <stdio.h> main() int i,j; for(i=0; i<10 ; i+) j=i*10+6; if ( i

31、%3!=0 ) continue; printf("%d",j); 3编程题(1)编写一个程序实现如下功能:计算1100之间所有含8的数之和(程序以文件名sy4_7.c存盘)。参考程序:#include <stdio.h>main() int i, sum=0; for(i=1; i<=100; i+) if(i%10=8 | i/10=8) sum+=i; printf("sum=%dn",sum);(2)编写一个程序实现如下功能:用下列近似公式计算e值,误差应小于10-5(程序以文件名sy4_8.c存盘)。参考程序:#include

32、 <stdio.h>main() int i=0 ; long n=1; float e=0, t=1; while(t>1e-5) e+=t;i+;n*=i;t=1.0/n; printf("e=%fn",e);(3)编写一个程序实现如下功能:验证下列结论:任何一个自然数n的立方都等于n个连续奇数之和。例如: 13 =1 ; 23 =3+5 ; 33 =7+9+11 。 要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为 0 时止(程序以文件名sy4_9.c存盘)。参考程序:#include <stdio.h>main(

33、) int num, a, i; while(1) printf("输入一个自然数(输入0则结束程序):"); scanf("%d",&num); if(!num) break; a=num*num-num+1; /a为第一个奇数printf("%d*%d*%d=",num, num,num); for(i=1; i<=num-1; i+) printf("%d+", a); a+=2; printf("%dn", a); (4)编写一个程序实现如下功能:求该校的学生总人数(学校有

34、近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人(程序以文件名sy4_10.c存盘)。要求: 使用循环结构编写程序。 可以使用break语句。 编译、运行程序,并写出结果参考程序:#include <stdio.h> main() int i; for(i=900;i<=1000;i+)if(i%5=2&&i%7=3&&i%3=1)break;printf("学生总人数=%dn",i); 数组程序设计实验解答1改错题(1) #include<stdio.h>void main()int n

35、=10,i,sum=0; int a10; /an改为a10 for(i=0;i<10;i+) scanf("%d",&ai); /scanf("%d",ai); sum=sum+ai; printf("sum=%dn",sum);(2)#include<stdio.h>void main( ) char a20="wel",b="come" /a="wel" int i,n=0; while(an!='0') n+; /!an fo

36、r(i=0;bi!='0'i+) an+i=bi; an+i='0' printf("%sn",a);(3)#include <stdio.h>void main() int a23,b23,c23,i,j; for ( i = 0; i<2;i+) /for ( i = 1; i<2;i+) for( j=0; j<3; j+) /for( j=1; j<3; j+) scanf("%d",&aij); / scanf("%d",aij) for ( i =

37、 0; i<2; i+) /for ( i = 1; i<2;i+) for( j =0; j<3; j+) /for( j=1; j<3; j+) scanf("%d",&bij); /scanf("%d",bij) for ( i =0; i<2; i+) /for ( i = 1; i<2;i+) for( j =0; j<3; j+) /for( j=1; j<3; j+) cij=aij+bij; for ( i = 0; i<2; i+) /for ( i = 1; i<2;

38、 i+) for( j=0; j<3; j+) /for( j=1; j<3; j+) printf("%3d",cij); printf("n"); 2程序填空(1)#include "stdio.h"#define N 10main() int a =0,1,2,3,4,5,6,7,8,9,k; int low=0,high=N-1,mid,find=0; printf("请输入欲查找的值:n"); scanf("%d",&k); while (low<=high)

39、 mid=(low+high)/2; if(amid=k) printf("找到位置为:%dn",mid+1);find=1; if(amid>k) high=mid-1; /1 else low=mid+1; /2 if(!find) printf("%d未找到n",k);(2)#define N 20#include<stdio.h>#include<stdlib.h> /添加(#include<time.h> /添加或者和语句srand( (unsigned)time( NULL ) )都不要)void m

40、ain() int aN,i,j,k,t; (srand( (unsigned)time( NULL ) ); /添加或者和#include<time.h>都不要) printf("排序前:n"); for(i=0;i<N;i+) ai= rand()%100 ; /1 printf("%5d",ai); for(i=0;i<N-1;i+) k=i; for(j=i+1;j<N;j+) if(ak<aj) /2 k=j; if(k!=i) /3 t=ak; ak=ai; ai=t; printf("n排序后:

41、n"); for(i=0;i<N;i+) printf("%5d",ai);(3)#include<stdio.h>#include<string.h>void main()char line80 ; char ch; int i,j; int len; printf("输入一行字符 n"); gets(line) ; /1 printf("输入要删除字符 "); ch=getchar(); i=0; while(linei!='0' ) while( linei!='0

42、' && linei!=ch) i+; /2 len=strlen(line); for(j=i;j<len-1;j+) linej=linej+1 ; /3 linej='0' puts(line); 3编程题(1)编写一个程序实现如下功能:任意输入10个整数的数列完成下列运算(程序以文件名sy5_7.c存盘):要求用选择排序法将数列由小到大排序;在排序好的数列中插入一个数,使数列保持从小到大的顺序。#define N 11#include<stdio.h> void main() int aN,i,j,k,t,p; printf("请输入%d 个整数:n",N); for(i=0;i<N-1;i+) scanf("%d",&ai); for(i=0;i<N-2;i+) /选择排序 k=i; for(j=i+1;j<N-1;j+) if(ak>aj) k=j; if(k!=i) t=ak; ak=ai; ai=t; printf("n排序后:n"); for(i=0;i<N-1;i+) prin

温馨提示

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

最新文档

评论

0/150

提交评论