计算机语言B(C语言)历年试题及参考答案

上传人:wuli****0220 文档编号:144000867 上传时间:2022-08-26 格式:DOC 页数:142 大小:536.51KB
收藏 版权申诉 举报 下载
计算机语言B(C语言)历年试题及参考答案_第1页
第1页 / 共142页
计算机语言B(C语言)历年试题及参考答案_第2页
第2页 / 共142页
计算机语言B(C语言)历年试题及参考答案_第3页
第3页 / 共142页
资源描述:

《计算机语言B(C语言)历年试题及参考答案》由会员分享,可在线阅读,更多相关《计算机语言B(C语言)历年试题及参考答案(142页珍藏版)》请在装配图网上搜索。

1、1、有一个已排好序的数组,今有一个数,要求按原来排序的规律将它插入数组(从小到大排列)中。main ( )int i, k, x ,a5=1,3,5,7 ; scanf(“%d”,x);for ( k=4; k0; k- ) /* 从后向前比较 */if ( ak-1 x ) ak = ak-1; /* 将大数向后移动 */else break; /* 找到插入的位置,退出 */ak = x; /* 完成插入操作 */for (i=0; iN; i+) printf(“%d ”, ai);2、打印出所有的水仙花数 。main() int i,a,b,c; for (i=100;i0); pri

2、ntf(sum=%dn,x1); 4、求1!+2!+3!+.20!main() int n,i;float t=1,f=0; printf(input n:n); scanf(%d,&n); for(i=1;i=n;i+) t=t*i;f=f+t; printf(sum=%dn,f); 5、 打印杨辉三角形main() int i,j,a1111; for(i=1;i=10;i+) ai1=1; aii=1; for(i=2;i=10;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; for(i=1;i=10;i+) for(j=1;j=i;j+) printf

3、(%d ,aij); printf(n); 6、打印输出100200之间的所有素数# include math.hmain() int n,k,flag; for(n=100;n200;n+) flag=1; for(k=2;k=sqrt(n);k+) if(n%k=0) flag=0;break; if(flag=1) printf(%d ,n); 7、用冒泡法对数组进行排序(从大到小)#include main() int a11,i,j,k,x; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); f

4、or(i=1;i10;i+) k=i; for(j=i+1;jak) k=j; if(i!=k) x=ai; ai=ak; ak=x; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);8、函数 输入x输出y。main()float x,y;scanf(%f,&x);if (x=1 & x10) y=2*x-1; else y=3*x-11;printf(%f,y);9、编写一个程序,当用户输入年份和月份,电脑会自动输出当月天数。 main( ) int year, month, days; scanf(%d%d, &yea

5、r, &month); switch (month) 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 ( year%4=0 & year%100!=0 | year%400=0 ) days=29; /* 如果是闰年 */ else days=28; /* 不是闰年 */ break; default

6、: /* 月份错误 */ printf(Input error!n); days=0; if (days!=0) printf(”%d,%d is %ddaysn,year,month,days);10、 求一个3X3矩阵对角线元素之和#include main( )int i, j, sum=0,a33; /* 说明数组a */for (i=0; i=2; i+) for (j=0; j=2; j+)scanf(%d,&aij); /* 输入数组元素的值 */for (i=0; i=2; i+) /* 按行输出 */ for (j=0;j=2;j+) if (i=j) sum+= aii;

7、/*对角线元素求和*/printf(%d , sum);11、用选择法对10个整数排序 #include main() int a11,i,j,k,x; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(i=1;i10;i+) k=i; for(j=i+1;j=10;j+) if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);12、有一个3X4的矩

8、阵,要求编程求出其中值最大的那个元素,以及其所在的行号和列号。main()int i,j,m,n,max,a34; for (i=0;i3;i+) for (j=0;j4;j+)scanf(%d,&aij);for (i=0;i3;i+)for (j=0;j4;j+)printf(%5d,aij); printf(n);max=a00;for (m=0,n=0,i=0;i3;i+) for (j=0;j4;j+) if (maxaij)m=i;n=j;max=aij; /*m和 n分别存放最大值虽在的行号和列号*/ printf(max=a%d%d=%5dn,m,n,amn);13、求矩阵A(

9、23)的转置矩阵B(32)。 1 2 3 1 4 2 5 4 5 6 3 6 矩阵转置算法:在原来矩阵中的元素aij,应是转置后矩阵中的元素bji。#include main( )int i, j, b32, a23 = 1,2,3, 4,5,6 ; /* 说明初始化数组a */for (i=0; i=1; i+) for (j=0; j=2; j+)bji = aij; /* 进行数组转置 */for (i=0; i=2; i+, printf(”n”) /* 按行输出 */ for (j=0; j=1; j+) printf(%d , bij);14、用二分法求下面方程在(-10,10)之

10、间的根。2x3-4x2+3x-6=0#include main()float x1,x2,x,f,f1,f2;scanf(%f%f,&x1,&x2);f1=2*pow(x1,3)-4*x1*x1+3*x1-6;f2=2*pow(x2,3)-4*x2*x2+3*x2-6;if (f1*f20) printf(fang cheng gai qu jian nei wu shi gen);else do x=(x1+x2)/2;f=2*pow(x,3)-4*x*x+3*x-6;if (f1*f0) x1=x; f1=f; else if (f2*f0) x2=x; f2=f; while(fabs(

11、f)=0.00001); printf(x=%f,x);15、求分数序列前20项和。2/1+3/2+5/3+8/5+13/8+21/13+.main()int k;float i=1,j=2,sum=0,t;for (k=1;k=20;k+)sum+=j/i;t=j+i;i=j;j=t;printf(qian 20 xiang he wei :%f,sum);16、给出一个百分制成绩,要求输出成绩等级ABCADE,90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。main()int select,score;char grade;printf(Please inp

12、ut the score:);scanf(%dn,&score);select=score/10;switch(select) case 1: case 2: case 3: case 4: case 5: grade=E; break; case 6: grade=D; break; case 7: grade=C; break; case 8: grade=B; break; case 9: case 10: grade=A; break; /*注意使用break语句*/printf(grade=%cn,grade);17、求Fibonacci数列40个数#include main( )

13、int n,i,un1,un2,un; un = un2 = 1; /* 设置递推初始值 */ for ( i=3; i=40; i+) /* 用递推法计算第N项的值 */ un1 = un2; un2 = un; un = un1 + un2; printf (No. %d is %dn, n, un); 18、求一元二次方程的根。#include main()float a,b,c,x1,x2,deta;scanf(%f%f%f,&a,&b,&c);deta=b*b-4*a*c;if (deta0) x1=(-b+sqrt(deta)/(2*a);x2=(-b-sqrt(deta)/(2*

14、a); printf(fangcheng de gen wei : x1=%f x2=%f,x1,x2) ;else if (deta=0) x1=x2=-b/(2*a);printf(fangcheng de gen wei : x1=x2=%f,x1);else printf (fangcheng mei you shi gen. ); 二、基本算法 两个变量交换,素数判断,计算分段函数值,求数列或级数的和,求解二次方程,字母大小写转换,数组最大值、最小值、平均值计算,数组排序,矩阵转置,数组逆序排列,矩形法和梯形法计算定积分,最小公倍数和最大公约数计算,三角形面积计算等等。 三、基本算法

15、举例1、输入三个数a,b,c,按大小顺序输出main ( ) float a, b, c,t; scanf(%f,%f,%f, &a, &b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c);2、求1到100的和。main( ) int i, sum=0;i=1; while(i=100) sum=sum+i; i=i+1; printf(sum=%dn,sum); main ( ) int total=0, i=1; wh

16、ile ( i 0.000001) /*整数除以整数还是商为整数因此(x=1.0/(2.0*i-1) */k=k*j; pi=pi+k*x; i+;printf(pi de zhiwei %f,4*pi);4、判断一个数能否同时被3和5整除。main()int n;scanf(%d,&n);if (n%3=0&n%5=0) /*注意关系表达式的写法*/ printf(%d neng bei 3 he 5 zhengchu.,n);else printf(%d bu neng bei 3 he 5 zhengchu.,n);5、素数# include math.hmain() int n,k,f

17、lag; for(n=100;n200;n+) flag=1; for(k=2;k=sqrt(n);k+) if(n%k=0) /*注意相等关系的表示*/ flag=0;break; if(flag=1) printf(%d ,n); 6、求m和n的最大公约数和最小公倍数。 main() int m,t,n,i=2,yueshu,beishu; scanf(%d%d,&m,&n); if (m1;i-) /* 最大公约数*/ if (m%i=0 & n%i=0) yueshu =i; break; beishu= n*m/yueshu; /*最小公倍数*/ printf(%d he %d de

18、 zui da gong yue shu shi %dn,m,n,yueshu ) ; printf(%d he %d de zui xiao gong bei shu shi %dn,m,n,beishu ) ;7、求二元一次方程的根。#include main()float a,b,c,x1,x2,deta;scanf(%f%f%f,&a,&b,&c);deta=b*b-4*a*c;if (deta0) x1=(-b+sqrt(deta)/(2*a);x2=(-b-sqrt(deta)/(2*a); printf(fangcheng de gen wei : x1=%f x2=%f,x1,

19、x2) ;else if (deta=0) x1=x2=-b/(2*a);printf(fangcheng de gen wei : x1=x2=%f,x1);else printf (fangcheng mei you shi gen. ); 8. 符号函数。main() float x;int y;scanf(“%f”,&x);if (x=0) if (x0) y=1; else y=0;else y= 1;printf(“%f”,y);9、函数 输入x输出y。main()float x,y;scanf(%f,&x);if (x=1 & x10) y=2*x-1;else y=3*x-11

20、;printf(%f,y);10、给出一个百分制成绩,要求输出成绩等级ABCADE,90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。main()int select,score;char grade;printf(Please input the score:);scanf(%dn,&score);select=score/10;switch(select) case 1: case 2: case 3: case 4: case 5: grade=E; break; case 6: grade=D; break; case 7: grade=C; break;

21、 case 8: grade=B; break; case 9: case 10: grade=A; break; /*注意使用break语句*/printf(grade=%cn,grade);11、求Fibonacci数列40个数#include main( ) int n,i,un1,un2,un; un = un2 = 1; /* 设置递推初始值 */ for ( i=3; i=40; i+) /* 用递推法计算第N项的值 */ un1 = un2; un2 = un; un = un1 + un2; printf (No. %d is %dn, n, un); 12、 n!main()

22、 int n,i;float t=1,f=0; /*注意阶乘及其和不能定义为整数,此时会溢出,应为长整数或实数。*/ printf(input n:n); scanf(%d,&n); for(i=1;i=n;i+) t=t*i; printf(sum=%dn,f); 13、求1!+2!+3!+.20!main() int n,i;float t=1,f=0; /*注意阶乘及其和不能定义为整数,此时会溢出,应为长整数或实数。*/ printf(input n:n); scanf(%d,&n); for(i=1;i=n;i+) t=t*i;f=f+t; printf(sum=%dn,f); 14、

23、 求和main()int i;float x,y,z,sum;for (x=0,i=1;i=100;i+) x+=i; for (y=0,i=1;i=50;i+) y+=i*i;for (z=0,i=1;i=10;i+) z=z+1.0/i; /* 注意1.0/i的表示,不能写为1/I */sum=x+y+z;printf(san xiang de he wei %f,sum); 15、打印出所有的水仙花数 。main() int i,a,b,c; for (i=100;i=999;i+) a=i/100; /*取百位*/ b=(i-a*100)/10; /*取十位*/ c=i%10; /*取

24、个位*/ if(a*a*a+b*b*b+c*c*c=i) printf(n The number %d is flowern,i); 16、求分数序列前20项和。2/1+3/2+5/3+8/5+13/8+21/13+.main()int k;float i=1,j=2,sum=0,t;for (k=1;k0); printf(sum=%dn,x1); 18、用二分法求下面方程在(-10,10)之间的根。2x3-4x2+3x-6=0#include main()float x1,x2,x,f,f1,f2;scanf(%f%f,&x1,&x2);f1=2*pow(x1,3)-4*x1*x1+3*x

25、1-6;f2=2*pow(x2,3)-4*x2*x2+3*x2-6;if (f1*f20) printf(fang cheng gai qu jian nei wu shi gen);else do x=(x1+x2)/2;f=2*pow(x,3)-4*x*x+3*x-6;if (f1*f0) x1=x; f1=f; else if (f2*f0) x2=x; f2=f; while(fabs(f)=0.00001); printf(x=%f,x);19、打印三角形和菱形。三角形:main()int x,i, h;printf(shu ru hang shu :);scanf(%d,&h);f

26、or(x=1;x=h;x+) for(i=1;i=x;i+) printf(*); printf(n);菱形:main()int n,i,x,h;printf(shu ru hang shu :);scanf(%d,&h);for(x=1;x=h;x+) for(i=1;i=h-x;i+) printf( ); for(n=1;n=1;x-) for(i=1;i=h-x;i+) printf( ); for(n=1;n=2*x-1;n+) printf(*); printf(n); 20、冒泡排序(从大到小)#include main() int a11,i,j,k,x; printf(Inp

27、ut 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(i=1;i10;i+) k=i; for(j=i+1;jak) k=j; if(i!=k) x=ai; ai=ak; ak=x; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);21、22、求矩阵A(23)的转置矩阵B(32)。 1 2 3 1 4 2 5 4 5 6 3 6 矩阵转置算法:在原来矩阵中的元素aij,应是转置后矩阵中的元素bji。#include main( )int i, j,

28、b32, a23 = 1,2,3, 4,5,6 ; /* 说明初始化数组a */for (i=0; i=1; i+) for (j=0; j=2; j+)bji = aij; /* 进行数组转置 */for (i=0; i=2; i+, printf(”n”) /* 按行输出 */ for (j=0; j=1; j+) printf(%d , bij);23、有一个3X4的矩阵,要求编程求出其中值最大的那个元素,以及其所在的行号和列号。main()int i,j,m,n,max,a34; for (i=0;i3;i+) for (j=0;j4;j+)scanf(%d,&aij);for (i=

29、0;i3;i+)for (j=0;j4;j+)printf(%5d,aij); printf(n);max=a00;for (m=0,n=0,i=0;i3;i+) for (j=0;j4;j+) if (maxaij)m=i;n=j;max=aij; /*m和 n分别存放最大值虽在的行号和列号*/ printf(max=a%d%d=%5dn,m,n,amn);25、用选择法对10个整数排序 #include main() int a11,i,j,k,x; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n);

30、for(i=1;i10;i+) k=i; for(j=i+1;j=10;j+) if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);26、 求一个3X3矩阵对角线元素之和#include main( )int i, j, sum=0,a33; /* 说明数组a */for (i=0; i=2; i+) for (j=0; j=2; j+)scanf(%d,&aij); /* 输入数组元素的值 */for (i=0; i=2; i+) /* 按行

31、输出 */ for (j=0;j0; k- ) /* 从后向前比较 */if ( ak-1 x ) ak = ak-1; /* 将大数向后移动 */else break; /* 找到插入的位置,退出 */ak = x; /* 完成插入操作 */for (i=0; iN; i+) printf(“%d ”, ai);28、 将一个数组按逆序重新排放。main()int i,j,t,a5;for (i=0;i5;i+)scanf(%d,&ai);for (i=0;i5;i+)printf(%d,ai);printf(n);for (i=0,j=4;ij;i+,j-) t=ai; ai=aj; aj

32、=t; for (i=0;i5;i+)printf(%d,ai);printf(n);29、 杨辉三角形main() int i,j,a1111; for(i=1;i=10;i+) ai1=1; aii=1; for(i=2;i=10;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; for(i=1;i=10;i+) for(j=1;j=i;j+) printf(%d ,aij); printf(n); 30、编写一个程序,当用户输入年份和月份,电脑会自动输出当月天数。 main( ) int year, month, days; scanf(%d%d, &ye

33、ar, &month); switch (month) 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 ( year%4=0 & year%100!=0 | year%400=0 ) days=29; /* 如果是闰年 */ else days=28; /* 不是闰年 */ break; defaul

34、t: /* 月份错误 */ printf(Input error!n); days=0; if (days!=0) printf(”%d,%d is %ddaysn,year,month,days);三、编程题评分标准评分标准:结构完整2分(主函数或子函数); 变量声明恰当、控制符对应正确2分; 输入(或初始化)2分; 加工处理(顺序、选择或循环)2分; 输出(结果)2分四、典型例题分析 1、输入m和n(mn0)后,计算下列表达式的值并输出。 m! n!*(m-n)! 要求将计算阶乘的运算写成函数fact(n),函数返回值的类型为float。答案:#include float fact(int

35、);main()intm, n;float val;scanf(“%d%d”, &m, &n);val = fact(m) / (fact(n) * fact(m-n);printf(“Value: %fn”, val);float fact(int n)if ( n = 0 ) return 1;return(fact(n-1) * n);float fact(int n) int i; float f=1;for(i=1; i10y= 0 x=10 3x+5 x10) y=exp(x); else if(x=10) y=0; else y=3*x+5; printf(%fn, y);3、计

36、算1-1/2+1/3-1/4+1/99-1/100+,直到最后一项的绝对值小于10-4为止。#includemain() int i; float sum,sign; i=1; sum=0; sign=1.0; while(1.0/i)=1e-4) sum += sign / i ; i+; sign = - sign; printf(sum=%.4f,sum);4、输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。#includemain() char str81; int i ; int letter,space ,num ,other ; char c; pr

37、intf (Please enter a string : ); gets(str); letter=space=num=other=0; for( i= 0;stri!=0; i+) c=stri; if(c= A&c=a& c=0 & c=9) num+; else if ( c= ) space+; else other +; printf(In this string : letter=%d,space=%d ,num=%d,other=%d,letter ,space,num,other);5、任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。#includemain()

38、int num10; int i,j,k; int temp; printf(Please enter 10 numbers :n); for(i=0;i10;i+) scanf(%d,&numi); for (i=0;i9;i+) k= i ; for (j=i+1;jnumj) k=j; if(k!=i)temp=numi;numi=numk;numk=temp; printf(After sorted :n); for (i=0;i10;i+) printf (%5d,numi);6、编程计算1! + 2! + 3! + 4! + . + 10!的值答案1:#include main()

39、long term = 1,sum = 0;int i;for (i = 1; i = 10; i+)term = term * i;sum = sum + term;printf(1!+2!+.+10! = %ld n, sum);答案2:#include main()long term ,sum = 0;int i, j;for (i = 1; i = 10; i+)term = 1;for (j = 1; j = i; j+)term = term * j;sum = sum + term;printf(1!+2!+10! = %ld n, sum);7、从键盘任意输入某班30个学生的成

40、绩,将成绩按照由高到低顺序打印。答案1:#include main() float score30, temp; int n = 30, i, j; printf(Please enter the number and score:n); for (i=0; in; i+) scanf(%f, &scorei); /*用交换法按成绩由高到低对学生成绩排序*/for (i=0; in-1; i+) for (j=i+1; j scorei)/*按成绩由高到低排序*/ temp = scorej; scorej = scorei; scorei = temp; printf(Sorted resu

41、lts:n); for (i=0; in; i+) /*打印排序结果*/ printf(%4.0fn, scorei); 答案2:#include main() float score30, temp; int n = 30, i, j, k; printf(Please enter the number and score:n); for (i=0; in; i+) scanf(%f, &scorei); /*用选择法按成绩由高到低对学生成绩排序*/for (i=0; in-1; i+) k = i; for (j=i+1; j scorek)k = j; if (k != i) temp

42、= scorei; scorei = scorek; scorek = temp; printf(Sorted results:n); for (i=0; in; i+) /*打印排序结果*/ printf(%4.0fn, scorei); 8、求方阵的主对角线元素之和。 #include main() int a55,i,j,ss=0;printf(“按行输入数据:”);for(i=0;i5;i+) for(j=0; j5 ;j+) scanf(“%d”,&aij);for(i=0;i5;i+) ss=aii;printf(“sum=%dn”,ss); 9、求:sum=1/2+1/4+1/6+1/8+.前10项之和并输出和。 #include main ( ) float f1,sum=0.0; int n; f1= 2; for(n=1;n10;n+) sum+=1/f1; f1=f1+2 ; printf(“sum=%fn”, sum ) ; 10、编程找出1099中个位与十位之和等于10的数,要求统计满足条件的数的个数(请注意不要

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!