c语言上机实验题_第1页
c语言上机实验题_第2页
c语言上机实验题_第3页
c语言上机实验题_第4页
c语言上机实验题_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、1下列程序中,要求main函数实现如下功能:从键盘上输入三个正整数,求出它们中的最大值。请完善程序,并在程序最后用注释的方式给出你的测试数据及在这组测试数据下的运行结果。#include <stdio.h>void main() int a,b,c,max; printf("Enter three integers:"); scanf("%d%d%d",&a,&b,&c); if(a>b) max=a; else max=b if(c>max) max=c; printf("max of the

2、three numbers is %d",max); /*1,2,5 max of the three numbers is 5*/2.请编程序,对从键盘上输入的x值,根据以下函数关系计算出相应的y值(设x,y均为整型量)。xyx<000<=x<10x10<=x<201020<=x<40-5x+20#include<stdio.h>main() int x,y; scanf("%d",&x); if(x<0) y=0; else if(x>=0&&x<=10) y=x;

3、 else if(x>=10&&x<=20) y=10; else y=-5*x+20; printf("%d",y);3. 写程序计算下列各表达式的值:1)2)3)#include<stdio.h>#include<math.h>main()float a,b,c; a=2.0/(4.0/5+3)+1; b=sqrt(13-pow(2.24-pow(0.24,2),2)/3.68); c=2*3.14159*sqrt(13+exp(2); printf("%fn%fn%f",a,b,c);4.写程序计

4、算5x2+2x+6的两个实根。考虑用合适的方式输出。(提示:可先计算出判别式b2-4ac的值)#include<stdio.h>#include<math.h>main() float a,b,c,x1,x2,p,q,disc; printf("input a,b,c:"); scanf("%f%f%f",&a,&b,&c); disc=b*b-4*a*c; if(disc>=0) p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf("

5、;%fn%fn",x1,x2); elseprintf("No Answer");5.从键盘上任意输出一个年份year,判别该年是否为闰年,如是输出“yes”,否则输出“no”。提示:如果变量year的值是闰年年份,那么这个值应该是4的部数但又不是100的倍数,或者它是400的倍数。#include<stdio.h>void main()int year;scanf("%d",&year);if(year%4=0&&year%100!=0|year%400=0)printf("yes");

6、elseprintf("no");6.从键盘上输入float型数,判断这三个数能否构成三角形,若能则求该三角形面积,否则输出不能构成三角形的信息。#include<stdio.h>#include <math.h>void main() float a,b,c,p,area; printf("input three integers:"); scanf("%f %f %f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a

7、) p=(a+b+c)/2.0; area=sqrt(p*(p-a)*(p-b)*(p-c); printf("%fn",area); else printf("inputs are wrong!");7.下列程序想求出满足如下条件的三位数n:(1)n除以11(整数相除)所得到的商等于n的各位数字的平方和;(2)n中至少有二位数字相同。如:131除以11的商为11,131各位数字的平方和为11,131中有二位数字相同,故131是所要求出的三位数中的一个;又如550,也是满足条件的三位数。源程序中有些错误,请你改正并最终使程序得到如下的运行结果:131 5

8、50 900【含有错误的源程序】#include <stdio.h>void main() int n , a , b , c; for(n=1; n<1000; n+) a=n/100; b=n/10%10; c=n/10; if(n/11=a*a+b*b+c*c|(a=b+a=c+b=c)>=2) printf("%5d",n); #include"stdio.h"void main() int a,b,c,n;for(n=100;n<1000;n+) a=n/100;b=n/10%10;c=n%10;if(n/11=a

9、*a+b*b+c*c&&(a=b|a=c|b=c)/*或n/11=a*a+b*b+c*c&&(a=b)+(a=c)+(b=c)>=1 */printf("%5d",n);8. 请编程序,实现从键盘上输入任意一个整数n,求出n的各位数字之和。例如,当n为263时,各位数字之和为11。下面是一个可以实现逐位数字累加功能的程序段,试理解后应用到自己的程序中。#include"stdio.h"void main() int n,k;scanf("%d",&n);k=0 ;dok+=n%10;n/=

10、10;while (n);printf("%d",k);getch();9.试找出符合下列条件的正整数:(1)该数是一个三位数;(2)该数是37的倍数;(3)该数循环左移后得到的另两个数也是37的倍数。例如148是37的倍数,481和814也是37的倍数。#include"stdio.h"void main() int n,a,b; for(n=100;n<1000;n+) if(n%37=0) a=n/10+n%10*100; b=n/100+n%100*10; if(a%37=0&&b%37=0) printf("%5

11、d",n); getch();10.请编辑调试下列程序,观察其运行结果,理解函数定义、函数调用的基本方法,并理解函数调用时形参和实参之间数据的传递方式。(1)请将下列源程序进行调试,观察运行结果,尽量想明白为什么得到如此运行结果后再看题后的评注:【源程序】#include <stdio.h>void main() int i=2,x=5,j=7; fun(j,6); printf(“i=%d,j=%d,x=%dn”, i , j , x); int fun(int i ,int j) int x=7; printf(“i=%d,j=%d,x=%dn”, i , j ,x)

12、;(2)评注:该题想要使大家明白,函数调用时是实参单向值传递给形参的,函数的形参是随着该函数被调用而分配空间,调用结束系统要回收空间;当执行main函数中的语句fun(j,6)时,其中的j是main函数中的量j,这次调用等价于fun(7,6),即将7和6分别传输给形参变量i和j;当执行fun函数时,fun有其自身的内部变量x,fun函数中的输出语句中,i,j,x的值分别为7,6,7;执行流程遇fun函数中的函数体闭封符“”返回主函数,在主函数中输出时,i,j,x的值分别2,7,5。2(实验报告上的题2)请按如下步步骤设计程序:(1)编辑并运行下列程序:#include <stdio.h&

13、gt;void main() char i; float x; printf("enter x:"); scanf("%f",&x); printf("1. To calculate e to the power xn"); printf("2. To calculate logx to the base 10n"); printf("3. To calculate lnx n"); printf("4. To calculate square root of xn"

14、); printf("n"); printf("enter your choice:1/2/3/4"); scanf("%1s",&i); /* 表示截取输入字符串中的1个字符,因为输入串中回车也算1个字符的*/ switch(i) /* i必须视作字符量,这由它的类型及输入的数据所决定*/ case '1': fexp(); break; case '2': flog10();break; case '3': flog();break; case '4': fs

15、qrt();break; default: printf("Sorry, can' t do for you!n"); break; getch(); fexp()flog10() flog()fsqrt()评注:这个程序既然能运行了,输入测试数据,试着走走所有的分支路径,看看能不能都走得通(当然有些是不可能有结果的,因为辅助功能函数都是空的),一定要走哟,并且弄清楚所走路径中分别执行什么语句,得到什么结果。(2)试着将下面的功能函数的首部作修改(加上形参和返回值类型,一定要注意到哟):#include <stdio.h>void main() char

16、 i; float x; printf("enter x:"); scanf("%f",&x); printf("1. To calculate e to the power xn"); printf("2. To calculate logx to the base 10n"); printf("3. To calculate lnx n"); printf("4. To calculate square root of xn"); printf("n&q

17、uot;); printf("enter your choice:1/2/3/4"); scanf("%1s",&i); switch(i) case '1': fexp(x); break; case '2': flog10(x);break; case '3': flog(x);break; case '4': fsqrt(x);break; default: printf("Sorry, can' t do for you!n"); break; g

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

19、明,这也就是第一步中程序能运行的原因)。这个程序中,辅助函数的返回值类型均改为了float型,函数声明就不可以再缺省,有两种方法可以处理好这一问题,一是将后面的几个函数搬到main函数的前面,编译预处理命令的后面(自己试试吧);另一种办法是在编译预处理后面加函数的声明语句,如下列程序所示:#include <stdio.h>float fexp(float); /*函数声明*/float flog10(float); /*函数声明*/float flog(float);/*函数声明*/float fsqrt(float);/*函数声明*/void main() char i; fl

20、oat x; printf("enter x:"); scanf("%f",&x); printf("1. To calculate e to the power xn"); printf("2. To calculate logx to the base 10n"); printf("3. To calculate lnx n"); printf("4. To calculate square root of xn"); printf("n");

21、 printf("enter your choice:1/2/3/4"); scanf("%1s",&i); switch(i) case '1': fexp(x); break; case '2': flog10(x);break; case '3': flog(x);break; case '4': fsqrt(x);break; default: printf("Sorry, can' t do for you!n"); break; getch()

22、;float fexp(float x)float flog10(float x) float flog(float x)float fsqrt(float x)评注:很神奇(这是编译系统的功劳,你要记住哟),程序又能执行了,跟(1)一样,可以走遍所有的路径了。(3)下面我们试着将一些功能添加到函数中(当然,如果你有能力,可以添加足够复杂的功能,这也是我之希望:例如,求素数、黑洞数、反素数可逐一添加到你的程序中,你想要某一模块干啥就去干啥):#include <stdio.h>float fexp(float); /*函数声明*/float flog10(float); /*函数声

23、明*/float flog(float); /*函数声明*/float fsqrt(float); /*函数声明*/void main() char i; float x; printf("enter x:"); scanf("%f",&x); printf("1. To calculate e to the power xn"); printf("2. To calculate logx to the base 10n"); printf("3. To calculate lnx n"

24、); printf("4. To calculate square root of xn"); printf("n"); printf("enter your choice:1/2/3/4"); scanf("%1s",&i); switch(i) case '1': fexp(x); break; case '2': flog10(x);break; case '3': flog(x);break; case '4': fsqrt(x);br

25、eak; default: printf("Sorry, can' t do for you!n"); break; getch();float fexp(float x) printf("exp(%f)=%en",x,exp(x); /*exp(x)表示求ex */float flog10(float x) printf("log10(%f)=%en",x,log10(x); /*log10(x)表示求log10x */ float flog(float x) printf("log(%f)=%en",x

26、,log(x); /* log10(x)表示求logex */float fsqrt(float x) printf("sqrt(%f)=%en",x,sqrt(x); 评注:注意上列源程序中的注释哟,帮助你了解更多的数学库函数。调试上述程序输入测试数据(x为0,选择做操作1),这是什么结果?这2个测试数据输入,应该求的是e啊,e的值谁都知道啊,怎么就不是这个值呢?这一点,我想请你自己想办法了11水仙数 水仙花数是指一个3位数,其各位数字的立方和等于该数本身。完善函数int daffodil(int n),其功能是判断整数n是否为水仙花数,如是,则该函数返回值,否

27、则返回值。#include<stdio.h>int daffodil(int n)int i,k,j;i=n/100;k=n/10%10;j=n%10;if(n=i*i*i+k*k*k+j*j*j) return 1;else return 0;main() int m,i=0; for(m=100;m<1000;m+) if(daffodil(m)=1) printf("%5d",m); i+; if(i%5=0)printf("n"); getch(); 12冰雹数.设n0是一个给定的正整数。对于i=0,1,2,定义:若ni是偶数,

28、则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni是1,则序列结束。用这种方法产生的数称为冰雹数。请编写一个函数void hailstones(int n),其功能是显示由n产生的所要求的序列,按每行6个数输出该数列中的所有数。编写main函数,在main函数中定义一个整型变量n,从键盘上输入值77赋给n,用n作为实参调用函数hailstones。测试数据:77输出结果:Hailstones generated by 77:77 232 116 58 29 8844 22 11 34 17 5226 13 40 20 10 516 8 4 2 1Number of hailst

29、ones generated:23#include<stdio.h> int i=0;void hailstones(int n) while(n!=1) if(i%6=0) printf("n");printf("%5d",n);if(n%2=0) n=n/2;else n=3*n+1;i+;printf("%5d",n);i+;main()int n;scanf("%d",&n);printf("Hailstones generated by %dn",n); hails

30、tones(n); printf("nNumber of hailstones generated:%d",i);13判断质数.从键盘上输入一个正整数x,判断x是否为质数,如果是则输出“TURE”,否则输出“FALSE”。#include<stdio.h>#include<math.h>main() int x,k,i; scanf("%d",&x); for(i=2;i<=(k=sqrt(x);i+) if(x%i=0) break; if(i>k) printf("TRUE"); els

31、e printf("FALSE");14孪生质数对53题.请按要求编写程序。编程要求:(1)编写函数int twinborn(int m,int n),其功能是判断整数m和n是否为孪生质数对(相差为2的两个质数称为孪生质数),如是,则函数返回值,否则返回值。(2)编写main函数,求出10,99内的所有孪生质数对,使得程序的运行结果为:   11,   13   17,   19   29,   31   41,  

32、 43   59,   61   71,   73#include<stdio.h>#include<math.h>int prime(int m)int n;for(n=2;n<=sqrt(m);n+) if(m%n=0) return 0; return 1;int twinborn(int m,int n) if(prime(m)+prime(n)=2) return 1; else return 0;main() int m,n;for(n=10;n<=97;n+) m=

33、n+2;if(twinborn(m,n)=1)printf("%5d,%5dn",n,m);53孪生质数对. 请编写函数int twinborn(int a2,int m,int n),其功能是找出m,n中的所有孪生质数对(相差为2的两个质数称为孪生质数),并依次将每对孪生质数写到a指向的二维数组的每一行中。编写main函数,声明一个100×2的二维数组a,并从键盘上输入m和n的值,用a、m、n作为实在参数调用函数twinborn,将结果数组以行为单位输出至屏幕。例如,测试数据和运行结果如下:input two numbers:10 100 11, 13 17,

34、19 29, 31 41, 43 59, 61 71, 73#include<stdio.h>#include<math.h>int prime(int i)int k;for(k=2;k<sqrt(i);k+)if(i%k=0)return 0;return 1;int twinborn(int a2,int m,int n) int k=0,i;for(i=m;i<=n-2;i+=1)if(prime(i)&&prime(i+2)ak0=i,ak1=i+2,k+;return k; main() int a1002,m,n,i; prin

35、tf("input two numbers:"); scanf("%d%d",&m,&n); m=twinborn(a,m,n); for(i=0;i<m;i+) printf("%5d,%5dn",ai0,ai1); getch(); 15.以下程序欲实现从键盘输入一个较大的整数n(n>=6),然后验证6到n之间的所有偶数都可以分解为两个质数之和。但程序有些错误,请改正这些错误以达到要求的功能。【含有错误的源程序】#include "stdio.h"void main() int k,

36、j,n,limit; do printf("Input a number>=6:"); scanf("%d",&limit); while(limit<6); for(n=6;n<=limit;n+=2) for(k=3;k<=n/2;k+=2) if(prime(k) j=n-k; if(prime(j) printf("%d=%d+%dn",n,k,j); continue; int prime(int m) int g,h; h=sqrt(m); for(g=2;g<=h;g+) if(m%

37、g=0)return 0; else return 1; #include "stdio.h"#include<math.h>void main() int k,j,n,limit; do printf("Input a number>=6:"); scanf("%d",&limit); while(limit<6); for(n=6;n<=limit;n+=2) for(k=3;k<=n/2;k+=2) if(prime(k) j=n-k; if(prime(j) printf("

38、;%d=%d+%dn",n,k,j); continue; getch();int prime(int m) int g,h; h=sqrt(m); for(g=2;g<=h;g+) if(m%g=0) return 0; return 1;16回文数.请编写程序,找出满足如下条件的整数m:(1)该数在11,999之内;(2) m、m2、m3均为回文数。例如m=11,m2=121,m3=1331,11、121、1331皆为回文数,故m=11是满足条件的一个数。请设计函数int value(long m),其功能是判断m是否是回文数,如是,该函数返回值1,否则返回值0。编写mai

39、n函数,求出11,999内满足条件的所有整数。#include<stdio.h>int value(long m);void main() long m,n; for(n=11;n<=999;n+) m=n; if(value(m) m=n*n; if(value(m) m=n*n*n; if(value(m) printf("%ldn",n); getch(); int value(long m) long a=0,b; b=m; while(m) a=a*10+m%10; m=m/10; if(a=b) return 1; return 0; 54回文

40、数. 请编写函数int palindrome(long *a,long m,long n),其功能是找出m,n内的所有回文数(回文数:顺读倒读其值都相同的数,例如12321),函数返回m,n内回文数的个数。编写main函数,声明一个长度为1000的长整型数组a,从键盘输入长整型数m和n,用a、m、n作为实在参数调用函数palindrome,将结果数组输出至屏幕,并输出符合条件数的个数。例如,若m=100 n= 500,则输出结果为: 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 3

41、03 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494count=40#include<stdio.h>int palindrome(long *a,long m,long n) long x,y,i=0,k; for(x=m;x<=n;x+) k=0; y=x; while(y) k=k*10+y%10; y=y/10; if(k=x) ai+=x; return i;main() long a1000,m,n,i,count; printf("input m&a

42、mp;n"); scanf("%ld %ld",&m,&n); count=palindrome(a,m,n); for(i=0;i<count;i+) printf("%5d",ai); if(i+1)%5=0) printf("n"); printf("count=%ld",count); getch();17. 请按要求编写程序。编程要求:(1)编写函数long Fibonacci(int n),其功能是:求Fibonacci数列中大于t 的最小的一个数,函数返回该数。下列数列

43、为Fibonacci数列:1,1,2,3,5,8,13,21,,即从第3项开始,每一项均为前两项的和。(2)编写main函数,从键盘上输入一个整数t,用t作为实在参数调用Fibonacci函数,并输出调用结果。例如,当t=1000时,输出为1597。#include<stdio.h>long Fibonacci(long int n);main()long int n; scanf("%ld",&n); Fibonacci(n); getch();long Fibonacci(long int n) long int x=1,y=0; while(x&l

44、t;=n) x=x+y; y=x-y ; printf("%ld",x) ;18.下列给定程序中,函数fun的功能是:计算如下公式直到,并且把计算结果作为函数值返回。例如,若形参e的值为1e-3,则函数返回值为0.551690。请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!#include <stdio.h>double fun(double e) int i, k;double s, t, x;s=0; k=1; i=2;x=_1_/4;while( _2_ ) s=s+k*x;k=-k;t=2*i

45、;x=_3_/(t*t);i+;return s;main() double e=1e-3;printf("nThe result is: %fn",fun(e);#include <stdio.h>double fun(double e) int i, k;double s, t, x;s=0; k=1; i=2;x=3,0/4;while( x>e ) s=s+k*x;k=-k;t=2*i;x=(t+1.0)/(t*t);i+;return s;main() double e=1e-3;printf("nThe result is:%fn&q

46、uot;,fun(e);getch();19.下列给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。#include<stdio.h>#include<math.h>unsigned long fun(unsigned n);main()unsigned long n; fun(n); getch();unsigned long fun(unsigned n) int b; unsigned long a; a=0; printf(&q

47、uot;Enter an integer:"); scanf("%ld",&n); while(n%10!=0) b=n%10; if(b%2=0) a=a*10+b; n=n/10; printf("%ld",a); getch();20最大公约数和最小公倍数.请编写程序求出从键盘上输入的两个正整数a和b的最大公约数和最小公倍数。#include<stdio.h>main() int p,r,n,m,temp; scanf("%d,%d",&n,&m); if(n<m) temp=

48、n;n=m;m=temp; p=n*m; while(m) r=n%m;n=m;m=r; printf("%d,%dn",n,p/n);21.请编写程序利用下列公式为公式求的近似值。公式为: 要求:先求出前2n项的值,再求出2n+2项的值,直至两者之差小于10-5为止。#include<stdio.h> main() int n; float a,b; a=1,b=4.0/3; n=1; while(b-a>=1e-5) a=b; n+; b=b*4*n*n/(2*n-1)/(2*n+1); printf("%12f%12f",2*a,

49、2*b); getch(); 22.请编写程序计算1!+2!+3!+n!的前10项之和。#include<stdio.h>main() int n,i; long s,t; s=0, t=1; printf("input n="); scanf("%d",&n); for(i=1;i<=n;i+) t=i*t; s=s+t; printf("sum=%ldn",s); getch(); 23.请编写程序求出满足如下条件的一个四位整数,它的9倍恰好是其反序数(所谓反序数是指正读和倒读相同的数。例如,1234和4

50、321互为反序数)。#include<stdio.h>main() int i,j,a; for(i=1001;i<10000;i+) a=i;j=0;j是a反序数 while(a) j=j*10+a%10; a=a/10; if(j=i*9) printf("%d",i); getch(); 24.请编写程序求出满足如下条件的四位数n:(1) n的范围为5000,8000;(2) n千位上的数减百位上的数减十位上的数减个位上的数大于零。编程要求:以每行10个输出满足条件的数及该类数的个数。#include<stdio.h>main() int

51、 n,a,b,c,d,s,i=0; for(n=5000;n<=8000;n+) a=n/1000; b=n%1000/100; c=n%100/10; d=n%10; s=a-b-c-d; if(s>0) i+; printf("%dt",n); if(i%10=0) printf("n"); printf("sum=%d",i); getch(); 25牛顿迭代法.用牛顿迭代法求方程3x3-3x2+x-1=0在x0=2附近的实根。要求:(1)用函数float newtoon(float x)求方程在x附近的根;(2)用

52、函数float F(float x)求x处的函数值,用函数float F1(float x)求f(x)在x处的导数;(3)在主函数中输入x0,调用函数求得方程的近似根(精度要求为10-5),并输出结果。请完善下列程序,使之完成上述功能。并请以注释的方式在程序的最后给出你在运行该程序时所选用的测试数据及在该测试数据下的运行结果。【源程序】#include <stdio.h>#include <math.h>float F(float x) return 3*x*x*x-3*x*x+x-1; float F1(float x) return _; float newtoon

53、(float x) float f,f1,x0; do _; f=F(x0); f1=F1(x0); x=_; while(_); return x; void main() float x0; scanf("%f ",&x0); printf("The result =%.2fn ",_);测试数据:2运行结果:The result =1.00#include <stdio.h>#include <math.h>float F(float x) return 3*x*x*x-3*x*x+x-1; float F1(float x) return 9*x*x-6*x+1; float newtoon(float x) float f,f1,x0; do x0=x; f=F(x0); f1=F1(

温馨提示

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

评论

0/150

提交评论