扬州大学C语言上机作业1-9整理_第1页
扬州大学C语言上机作业1-9整理_第2页
扬州大学C语言上机作业1-9整理_第3页
扬州大学C语言上机作业1-9整理_第4页
扬州大学C语言上机作业1-9整理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、答案仅供参考实验一4设计main函数实现从键盘上输入两个整型变量a、b的值,交换它们的值并输出。#include<stdio.h>void main()int a,b,c;printf("enter first integer :  ");scanf("%d",&a);printf("enter second integer :   ");scanf("%d",&b);c=a;a=b;b=c;printf("%d,%dn",a,b);ge

2、tch();5设计main函数实现从键盘上输入两个整型变量a、b的值,并将b的值加入到a中,输出a的值。  #include<stdio.h>void main()int a,b,c;printf("enter first integer :  ");scanf("%d",&a);printf("enter second integer :   ");scanf("%d",&b);c=a+b;a=c;printf("a=%d,b=%dn&

3、quot;,a,b);getch();6从键盘输入整数x的值,根据公式y=x3+3x2+x-10求y的值,输出x和y的值。#include<stdio.h>void main()int x,y;printf("enter first integer :  ");scanf("%d",&x);y=x*x*x+3*x*x+x-10;printf("x=%d,y=%dn",x,y);getch();实验二1 编写程序,从键盘上输入一个整数(例如560)表示分钟,将其换算成用小时和分钟表示,然后输出至屏幕。#in

4、clude <stdio.h>void main()  int a,b,hour,min;  printf("enter first integer :  ");  scanf("%d",&a);  b=60;  hour=a/b;  min=a%b;  printf("hour=%d,min=%dn",hour,min);     getch();    

5、 2 编写程序,输入两个整数(例如1500和350),求出它们的商和余数并进行输出。#include <stdio.h>void main()   int a,b,c,d;   a=1500,b=350;   c=a/b;   d=a%b;   printf("%d,%d",c,d);   getch();  3.编写程序,读入3个整数给分别变量a,b,c,然后将a,b,c的值输出到屏幕,再交换它们中的数值,把a中原来的值给

6、b,把b中原来的值赋给c,把c中原来的值赋给a,然后再次输出a,b,c的值到屏幕。#include <stdio.h>void main() int a,b,c,d;printf("enter first integer : ");scanf("%d",&a);printf("enter second integer : ");scanf("%d",&b);printf("enter third integer : ");scanf("%d",&a

7、mp;c); printf("a=%d,b=%d,c=%dn",a,b,c);d=c;c=b;b=a;a=d;printf("a=%d,b=%d,c=%d",a,b,c);getch();4编写程序,读入3个双精度数,求它们的平均值输出到屏幕。#include <stdio.h>void main()    double sum=0;    double a,b,c,d; printf("enter first integer :  ");&#

8、160;scanf("%lf",&a); printf("enter second integer :   "); scanf("%lf",&b); printf("enter third integer :  "); scanf("%lf",&c); sum=a+b+c;    d=sum/3.0;    printf("

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

10、=b; if(c>max) max=c; printf(“max of the three numbers is %d”,max);grtch();6. 请编程序:对从键盘上输入的x值,根据以下函数关系计算出相应的y值(设x,y均为整型量)。x值的范围计算y的公式x<000<=x<10x10<=x<201020<=x<40-5x+20 #include <stdio.h>void main()    int x,y;  printf("x=");  scanf(&q

11、uot;%d" ,&x);  if (x<0)  y=0;   else if (x<10&&x>=0)  y=x;   else if (x>=10&&x<20)  y=10;   else if (x>=20&&x<40)  y=(-5)*x+20;  printf("%d" ,y);  getch();  实验三1. 下列程

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

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

14、; k=0;  do k+=n%10;  n/=10;  while(n);  printf("%d",k);  getch();   3. 试找出符合下列条件的正整数:(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

15、=n/100+n%100*10;if(a%37=0&&b%37=0)printf("%dn",n);getch();4请编程序利用下列公式求的近似值。公式为:要求:先求出前2n项的值,再求出2n+2项的值,直至二者之差小于105为止。#include<stdio.h>void 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); 

16、; printf("%f,%f",2*a,2*b); getch(); 5. 请编程序求出满足如下条件的四位数n:(1)n的范围为5000,8000;(2)n千位上的数减百位上的数减十位上的数减个位上的数大于零。编程要求:以每行5个输出满足条件的数及该类数的个数。#include<stdio.h>void main()int n,a,b,c,d,k=0; for(n=5000;n<=8000;n+) a=n/1000; b=n/100%10; c=n/10%10; d=n%10; if(a-b-c-d)>0) print

17、f("%5d",n);k+; if(k%5=0) printf("n"); printf("k=%d",k); getch(); 6请编程序求出满足如下条件的一个四位整数,它的9倍恰好是其反序数(例如,1234与4321互为反序数)。#include<stdio.h>void main()int n,e,a,b,c,d;  for(n=1000;n<=9999;n+)  a=n/1000; b=n/100%10; c=n/10%10; d=n%10; e=d

18、*1000+c*100+b*10+a; if(9*n=e) printf("%d",n); getch(); 7请编程序求出从键盘上输入的两个正整数a和b的最大公约数和最小公倍数。#include <stdio.h>void main() int m,n,r,x; scanf("%d,%d",&m,&n); x=m*n;while(n!=0) r=m%n; m=n; n=r; printf("%d %d",m,x/m);getch();8请编程序计算1!+2!+3!+

19、n!的前10项之和。#include <stdio.h>void main()    long sum,k;    int i,j;   sum=0;    for(i=1;i<=10;i+)              for(j=1,k=1;j<=i;j+)              k*=j;        

20、              sum+=k;          printf("%ldn",sum);     getch();     实验四1. 反序数。例如,123的反序数是321。请设计程序,从键盘上输入一个整数,求其反序数并输出。#include "stdio.h"main() int n,k;printf("n=");scanf

21、("%d",&n);k=0; while(n!=0) k=k*10+n%10; n/=10; printf("k=%d",k); getch(); 2. 完备数。完备数是一些特殊的自然数,它所有的真因子(即除了自身以外的约数)之和恰好等于该数本身。例如,6=1+2+3,故6是一个完备数。请设计程序,找出500以内的所有完备数。#include "stdio.h"void main() int n,i,k;for(n=1;n<=500;n+)  

22、; k=0;for(i=1;i<=n-1;i+)    if(n%i=0)      k+=i;   if(n=k)   printf("%dn",n);  getch(); 3. 回文数。一个数如果正读和倒读(即反序数)相同,称该数是回文数。例如,121、1331均为回文数。请设计程序,找出200300之间的所有回文数,并以每行8个数输出至屏幕。#include "stdio.h"void main

23、() int n,k,i,m=0; for(n=200;n<=300;n+) k=0; i=n; while(i!=0) k=k*10+i%10; i/=10; if(n=k) m+; printf("%8d",n); if(m%8=0) printf("n"); getch(); 4. 回文质数。一个数如果是回文数,同时又是质数,则该数被称为回文质数。请设计程序,找出100500之间的所有回文质数,并以每行5个输出至屏幕。#include "stdio.h"#include "math.h"void mai

24、n() int n,k,i,m; for(n=100;n<=500;n+)   k=0;    i=n;    while(i!=0)    k=k*10+i%10;      i/=10;    if(n=k)      for(m=2;m<=sqrt(n);m+)      

25、;  if(n%m=0)            break;                if(m>sqrt(n)           printf("%4d",n);account+;if(account%5=

26、0)printf(“n”);           getch();5. 绝对质数。如果一个数和其反序数均为质数,则该数被称为绝对质数。如,13是质数,其反序数31也为质数,则13和31是一对绝对质数。请设计程序,找出200以内的绝对质数。#include "stdio.h"#include "math.h"void main() int n,k,i,m,a; for(n=1;n<=200;n+) for(a=2;a<=sqrt(n);a+) if(n%a

27、=0) break; if(a>sqrt(n) i=n,k=0; while(i!=0) k=k*10+i%10; i/=10; for(m=2;m<=sqrt(k);m+) if(k%m=0) break; if(m>sqrt(k) printf("%5d",n); getch(); 6. 平方镜反数。如果一个数的平方数,是其反序数的平方数的反序数,则称该数和其反序数是一对平方镜反数。例如,12的平方数是144,其反序数为21,21的平方数是441,其反序数是12的平方数144,故12和21是一对平方镜反数。请设计程序找出200以内的所有平方镜反数对。#

28、include "stdio.h"#include "math.h"void main() int n,k,i,a,b;  for(n=1;n<=200;n+)     k=0;      i=n;      while(i!=0)      k=k*10+i%10;       i/=10; 

29、;      a=k*k;       b=0;       while(a!=0)       b=b*10+a%10;       a/=10;       if(b=(n*n)     

30、0; printf("%dn",n);     getch();   7黑洞数。黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得到某个数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。随便造一个四位数,如a1=1231,先把组成部分1231的四个数字由大到小排列得到a2=3211,再把1231的四个数字由小到大排列得a3=1123,用大的减去小的a2-a1=3211-1123=2088。把2088按上面的方法再作一遍,由大到

31、小排列得8820,由小到大排列得288,相减8820-288=8532。把8532按上面的方法再作一遍,由大到小排列得8532,由 小到大排列得2358,相减8532-2358=6174。如果再往下做,奇迹就出现了!7641-1467=6174,又回到6174。6174便是一个4位黑洞数。请编写程序,用上述方法找出3位黑洞数。暂无答案实验五1. 有一张足够大的纸,厚0.09毫米,问将它对折多少次后可以达到珠穆朗玛峰的高度(8848米)?#include "stdio.h"void main()double a=9e-2; int n=0;while(a<=8848)a

32、=a*2;n+; printf("a=%d",n);getch();2. 请设计程序采用递推法计算下列级数的近似值,当n取某一值使得|x(2n+1)/n!|<0.000001时停止计算(x从键盘输入)。级数如下:#include "stdio.h"#include "math.h"void main()double sum,x,p,n,q,m,k; printf("x="); scanf("%lf",&x); sum=x;p=x;m=1;q=1;n=1

33、;k=1; while(fabs(p/n)>=1.0e-6)   m=-m;    p*=(x*x);    q+=2;    k+;    n*=k;    sum+=(m*p)/(q*n);        printf("%lf",sum);    getch();   

34、; 3. 请设计程序,根据下列公式计算cos(x)的近似值。精度要求:当通项的绝对值小于等于10-6为止。cos(x)=1-x2/2!+x4/4!-x6/6!+(-1)nx2n/(2n)!#include "stdio.h"#include "math.h"void main() double x,k,sum,term,a,b,m;  printf("x=");  scanf("%lf",&x);  sum=1;  m=1;  a=0;  k=1;

35、  b=1;  term=1;  while(fabs(term)>1.0e-6)    k*=(x*x);     m=-m;     a+=2;     b*=(a*(a-1);     sum+=(m*k)/b);     term=(m*k)/b;       printf(

36、"cos(x)=%lf",sum);   getch();   4. 请设计程序采用递推法计算的值。即求-+的值。其中x为键盘输入的一个任意的单精度实数。#include "stdio.h"void main()int i,p; float x,m,q,sum; printf("x="); scanf("%f",&x); sum=x; m=x; p=1; q=1; for(i=1;i<

37、;=10;i+) m*=(x*x);  p=-p;  q*=i;  sum+=(p*m/q);    printf("%f",sum);  getch();  5. 请设计程序,根据下列公式计算表达式的值。计算公式如下: 当通项绝对值小于等于10-6时停止累加。#include "stdio.h"#include "math.h"void main() double x,k,sum,term,a,b,m;  printf("x=&quo

38、t;);  scanf("%lf",&x);  sum=1;  m=1;  a=0;  k=1;  b=1;  term=1;  while(fabs(term)>1.0e-6)    k*=(x*x);     m=-m;     a+=2;     b*=(a*(a-1);     sum+

39、=(m*k)/b);     term=(m*k)/b;        sum=(-1)*sum*cos(x)/x;    sum+=3.14/2;    printf("%lf",sum);    getch();    实验六3. 水仙花数是指一个3位数,其各位数字的立方和等于该数本身。请完善下列程序中的函数int daffodil(int n),其功能

40、是判断整数n是否为水仙花数,如是,则该函数返回值,否则返回值。注意,不能更改main函数。#include <stdio.h>int daffodil(int n) int k=0,m; m=n; do k+=(m%10)*(m%10)*(m%10); m/=10;while(m); if(n=k) 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"

41、;); getch();4. 请编写程序,找出满足如下条件的整数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。编写main函数,求出11,999内满足条件的所有整数。#include <stdio.h>int value(long m) long s,n; s=0; n=m; while(n) s=s*10+n%10; n/=10; if(s=m

42、) return 1; else return 0;main() long m; for(m=11;m<1000;m+) if(value(m)=1&&value(m*m)=1&&value(m*m*m)=1) printf("%5ld",m); getch();5. 设n0是一个给定的正整数。对于i=0,1,2,定义:若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni是1,则序列结束。用这种方法产生的数称为冰雹数。请编写一个函数void hailstones(int n),其功能是显示由n产生的所要求的序

43、列,按每行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 hailstones generated:23#include <stdio.h>void hailstones(int n);void main()int n; scanf("%d",

44、&n); hailstones(n); getch(); void hailstones(int n) int i; printf("Hailstones generated by 77:n"); i=0; while(n!=1) printf("%5d",n); i+; if(n%2=0) n=n/2; else n=3*n+1; if(i%6=0) printf("n"); printf("%5dn",n); i+; printf("Number of hailstones generated

45、:%5d",i); 6. 请按要求编写程序。编程要求:(1) 编写函数int twinborn(int m,int n),其功能是判断整数m和n是否为孪生质数对(相差为2的两个质数称为孪生质数),如是,则函数返回值,否则返回值。(2) 编写main函数,求出10,99内的所有孪生质数对,使得程序的运行结果为:11,1317,1929,3141,4359,6171,73#include <stdio.h>int prime(int m)int n; for(n=2;n<=(m/2);n+) if(m%n=0) return 0; return 1; int twinb

46、orn(int m,int n) if(prime(m)+prime(n)=2)return 1;elsereturn 0; void main()int n,m; for(n=10;n<=97;n+) m=n+2; if(twinborn(m,n)=1) printf("%d,%dn",n,m); getch(); 实验七1用牛顿迭代法求方程3x3-3x2+x-1=0在x0=2附近的实根。要求:用函数float newtoon(float x)求方程在x附近的根;用函数float F(float x)求x处的函数值,用函数float F1(float x)求f(x)

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

48、160;     return 9*x*x-6*x+1;    float newtoon(float x)     float f,f1,x0;    do x0=x;         f=F(x0);         f1=F1(x0);     

49、;    x=x0-f/f1;      while(fabs(x-x0)>1e-5);    return x; void main()  float x0;   scanf("%f",&x0);   printf("The result =%.2fn",newtoon(x0);   getch(); 2请设计程序,用二分法求方程x3+1.1

50、x2+0.9x-1.4=0在(0,1)内的近似根。直到|f(x)|<0.0001为止。#include <stdio.h>#include <math.h>float f(float x) return(x*x*x+1.1*x*x+0.9*x-1.4); void main() float m=0,n=1,r; r=(m+n)/2.0; while(1) if(fabs(f(r)<1e-4) break; if(f(m)*f(r)<0) n=r; else m=r; r=(m+n)/2.0; printf("x=%f",r); ge

51、tch(); 3以下程序的功能是从键盘上输入10个整数,并检测整数3是否包含在这些数据中,若包含3,则显示出第一个3出现的位置,程序有些错误,试改正之。#include <stdio.h>void main() int data10,j=0; while (j<10) scanf("%d",&dataj); j+; for(j=0;j<10;j+) if(dataj=3) printf("3 is in the position of %dn ",j+1); break; if(j=10) printf("not

52、 found!n "); getch();4请编辑调试下列程序,观察其运行结果,理解数组名作为函数参数时的作用。该程序的功能是选出a数组中下标为奇数的并大于10的项并且输出满足条件的个数。【源程序】#include <stdio.h>int fun(int a,int b) int i,j=0; for(i=0;ai;i+) if(i%2=0)continue ; if(ai>10) bj+=ai; return j;void main() int a10=3,15,32,23,11,4,5,9,b10; int i,x; x=fun(a,b) ; for(i=0;

53、i<x;i+) printf("%dt",bi); printf("n%d",x);实验八1请编辑调试下列程序,观察、理解其运行结果,并叙述该程序的功能。【源程序】#include <stdio.h>int fun(int a,int b) int i,j=0; for(i=0;ai;i+) if(i%2=0)continue ; if(ai>10) bj+=ai; return j;void main() int a10=3,15,32,23,11,4,5,9,b10; int i=0,x=0; x=fun(a,b) ; for

54、(i=0;i<x;i+) printf("%dt",bi); printf("n%d",x);该程序的功能:选出a数组中下标为奇数的并大于10的项并且输出满足条件的个数。2以下程序在a数组中查找与x值相同的元素的所在位置。请完善程序。【源程序】#include <stdio.h>void main() int a11 ,x , i; printf("Enter 10 Integers:n"); for(i=1; i<=10; i+) scanf("%d",a+i); printf("

55、;Enter x:"); scanf("%d",&x); a0=x; i=10; while(x!=ai) i-; if(i>0)printf("%5d 's position is %4dn",x,i); else printf("%d is not found!n",x); getch();3下列程序是利用插入排序法将n个数从大到小进行排序,插入排序的算法思想如下:从一个空表开始,将待排序的数一个接一个插入到已排好序的有序表中(空表视为有序),从而得到一个新的、记录数增1的有序表。例如:当n=7时,

56、待排序的数及每一趟有序表的变化情况如下:趟数有序表剩余待排序数初始状态空49386597761327第1趟49386597761327第2趟49386597761327第3趟65493897761327第4趟97654938761327第5趟97766549381327第6趟97766549381327第7趟97766549382713空请完善下列程序并进行调试。#include <stdio.h>void main() int a10=10,9,8,7,3,4,5,1,-3,0,i,j,t; sort(a,10); ; printf("nthere is 10 numb

57、er: "); for(i=0; i<=9; i+) printf("%4d",ai); getch();int sort(int a,int n) int i,j,t; for(i=1; i<n; i+) t=ai; j=i-1; while(j>=0)&&(t>aj) aj+1=aj; j-; aj+1=t ; 4请按下列要求设计程序:(1)请编写void selsort(int a,int n)函数,其功能是用选择排序算法对a指向的长度为n的数组进行从小到大排序。(2)编写main函数,声明一个一维数组并用下列测试数据

58、初始化,调用selsort函数实现a3到a8元素从小到大排序。测试数据为:6 8 9 12 16 -3 90 -9 10 1。#include<stdio.h>void selsort(int a,int n)int i,j,k,t;for(i=3;i<=n-2;i+)k=i;for(j=i+1;j<n;j+)if(ak>aj) k=j;t=ai;ai=ak;ak=t;void main()int a10=6,8,9,12,16,-3,90,-9,10,1,i;selsort(a,9);for(i=0;i<10;i+)printf("%5d&quo

59、t;,ai);getch();5冒泡排序算法的C语言描述如下:void bb_sort(int a,int n) int i,j,t; for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(aj>aj+1) t=aj; aj=aj+1; aj+1=t; 但这个算法对问题规模为n的待排序数组来说要进行n-1趟排序。事实上,对一些测试数据,如2 1 5 6 7 8 9等7个数据来说,利用上述冒泡排序算法,在第2趟排序过程中已没有元素的交换,亦即排序进行2趟后就已经有序。试修改上述冒泡算法,使之在已经有序的情况下提前结束外循环以提高程序执行效率。并利用题4的main函数调用改进的函数实现对待排序数据的排序。#include<stdio.h>void bbsort(int a,int n) int i,j,t,flag=1; for(i=0;i<n-1&&flag;i+) flag=0; for(j=0;j<n-i-1;j+) if(aj>aj+1) t=aj; aj=aj+1; aj+1=t; flag=1; void main()int a7=2,1,5,6,7,8

温馨提示

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

评论

0/150

提交评论