本学期C上机题_第1页
本学期C上机题_第2页
本学期C上机题_第3页
本学期C上机题_第4页
本学期C上机题_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、8.1背景:电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入: 按顺序给出一个小组10个人的最后得分(int)。输出: 能够出线的学生序号(09)。#include <stdio.h>#include <stdlib.h>int main() int score10; int i,max=0; for(i=0; i<10; i+) scanf("%d",&score

2、i); if(scorei>max) max=scorei; for(i=0; i<10; i+) if(scorei=max) printf("%dn",i); return 0;8.2描述实验室有一批小白鼠,为了评估他们的健康程度,我们为每一只小白鼠都设定了一个“健康指数”。现在我们需要进一步的评估这批小白鼠的健康均衡程度,因此我们需要从中找到健康指数差距最大的两只小白鼠的编号,以此来进一步的进行评估。关于输入第一行是一个整数n(2<= n <= 100),表示的是一共有n只小白鼠。 第二行是n个整数(互不相同),分别表示n只小白鼠的健康指数,同

3、时根据输入顺序,从1开始为其编号1,2n。也就是说第一个整数是第一只小白鼠的健康指数,第二个整数是第二只小白鼠的健康指数,依次类推。关于输出输出健康指数差距最大的两只小白鼠的编号。第一个数是健康指数较大的小白鼠的编号,第二个数是健康指数较小的小白鼠的编号。#include <stdio.h>#include <stdlib.h>int main() int n; scanf("%d",&n); int f2n; int a,b,i,max,min; for(i=0; i<n; i+) scanf("%d",&

4、f1i); max=f10; min=f10; for(i=0; i<n; i+) if(max<=f1i) max=f1i; a=i+1; if(min>=f1i) min=f1i; b=i+1; printf("%d %dn",a,b); return 0;8.3求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。输入:正整数m输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:输入:10输出:2 3 5 7 4#include <stdio.h>#include <stdlib.h

5、>#define z aint main() int a,i,k,m,d; scanf("%d",&a); int primez; m=0; for(i=1; i<a; i+) primei=i+1; for(i=1; i<a; i+) d=1; for(k=2; k<=primei&&(d!=0); k+) d=primei%k; if(d=0&&(primei!=0) if(k=primei) printf("%4d",primei); m=m+1; printf("n&quo

6、t;); printf("%dn",m); return 0;8.4描述 王师傅的发廊距开张已经有10年之久了! 由于王师傅以及其他理发师傅洗剪吹技术娴熟, 发廊有了许多常客, 连毕业多年的学生也会不时回来学校, 到王师傅的发廊做洗剪吹. 常客们都有自己喜欢理发师, 然而随着运营规模的扩张, 理发师的分配时常会出现问题. 现在你的任务就是为顾客们交换理发师傅. 假设有0.n-1共n名顾客, 他们的理发师傅恰巧安排反了. 也就是说n-1的理发师傅安排给了0, n-2的理发师傅安排给了1.请帮助他们找到喜欢的理发师傅吧!输入第一行一个整型n(1<=n<=1000),

7、 表示顾客的人数 第二行n个整型, 分别表示现在安排给每位顾客的理发师傅的编号输出以此输出为0.n-1位顾客正确安排理发师傅之后的, 师傅们的编号每个数字由空格隔开, 最后一个数字后无空格。#include <stdio.h>#include <stdlib.h>#define size nint main()int i,n,a,b;scanf("%d",&n);int number 2size;for(i=0;i<n;i+) scanf("%d",&number1i);a=number10;for(i=0;

8、i<n-1;i+) b=number1n-i-1; printf("%d ",b);printf("%dn",a); return 0;8.5问题描述:程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。例如: 数组中的值为1 2 3 42 2 3 43 2 3 44 2 3 4假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)10 2 3 420 20 3 430 20 30 440 20 30 40#include <stdio.h>#include <

9、;stdlib.h>int main()int f44,n,i,j;for(i=0;i<4;i+) for(j=0;j<4;j+) scanf("%d",&fij);scanf("%d",&n);for(i=0;i<4;i+) for(j=0;j<=i;j+) fij=n*fij; for(i=0;i<4;i+) for(j=0;j<4;j+) printf("%4d",fij); printf("n"); return 0;8.6杨辉三角形,又称贾宪三角形

10、,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。杨辉三角有如下性质:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 2、第n行的数字个数为n个。 3、每个数字等于上一行的左右两个数字之和。编写程序,输入正数n, 将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1#include <stdio.h>#

11、include <stdlib.h>#define N 100#define M 100int main() int i,j,n,aNM; scanf("%d",&n); for(i=0; i<=n; i+) for(j=0; j<=i; j+) if(i=0|i=1) aij=1; if(j=0) aij=1; for(i=2; i<=n; i+) for(j=1; j<=i; j+) aij=ai-1j-1+ai-1j; for(i=0; i<=n; i+) for(j=0; j<=i; j+) printf(&q

12、uot;%3d",aij); printf("n"); return 0;8.7如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include <stdio.h>#include <stdlib.h>int main() int i,a11,n,b=0; for(i=0; i<10; i+) scanf("%d",&ai); scanf(

13、"%d",&n); for(i=0; i<10; i+) if(a9<=n) b=10; if(a0>=n) b=0; else if(ai>=n&&n>=ai-1) b=i; break; for(i=9; i>=b; i-) ai+1=ai; ab=n; for(i=0; i<11; i+) printf(" %d",ai); printf("n"); return 0;8.8任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为

14、9531 。输入: 自然数 n输出: 各位数字组成的最大数#include <stdio.h>#include <stdlib.h>#define N 100int main()int n,i,a,m=0,j,temp,numberN;scanf("%d",&n);doa=n%10;numberm=a;n=n/10;m+;while(n!=0);for(i=0;i<m-1;i+)for(j=i+1;j<m;j+)if(numberi<numberj)temp=numberj;numberj=numberi;numberi=t

15、emp;for(i=0;i<m;i+)printf("%d",numberi);printf("n");return 0;8.9问题描述: 上学期,环设13级两个班同学的C语言考试成绩(人数最多不超过70人)比较理想。现要求从键盘输入学生的成绩,编程将成绩按从高到低顺序进行排序输出,并同时输入指定学生的学号和成绩。输入:有多行。从第一行开始,每行输入两个空格分隔的整数,分别表示每个学生的学号和成绩,当输入负值时,表示输入结束。最后一行输入需要查找的学生学号。输出:有两行。第一行是按由高到低排好序的学生成绩。第二行输出查找到的学生学号和成绩,若没有找

16、到指定学生,则输出未找到信息。#include <stdio.h>#define N 1000int main() int aN,bN; int i,j,h,k,m,n,p,flag=0; scanf("%d%d",&a0,&b0); for(i=1; ai-1>=0&&bi-1>=0; i+) scanf("%d%d",&ai,&bi); scanf("%d",&n); for(j=0; j<i; j+) k=j; for(h=j+1; h<

17、=i; h+) if(bh>bk) k=h; if(k!=j) m=bk; bk=bj; bj=m; p=ak; ak=aj; aj=p; for(j=0; j<i-2; j+) printf("%d ",bj); printf("%dn",bj); for(j=0; !flag&&j<=i; j+) if(aj=n) printf("%d %dn",aj,bj); flag=1; if(!flag) printf("not find!n"); return 0;8.10描述 我叫

18、王大锤,是一个刚找到工作的程序员。万万没想到,刚开始工作的第一天,就发生了大事。某市高校P大与T大由于长期矛盾的积累,终于在这天爆发了全面战争。 T大的导弹是突破了次元之壁的导弹,它会先在n维空间中运动,抵达目标后出现在P大相应的位置。P大及时的发明了在n维空间中阻截的方法,并找到了导弹的方向,现在我需要做的是计算出导弹的速度大小。 P大找到了我所在的公司,而这个任务竟然落到了刚加入公司的我身上。现在公司的谍报人员已经获知,T大的导弹的速度大小是由先发出的两颗 信号弹的速度矢量决定的,他们还顺便帮我捕获到了最终发射出的导弹的速度大小与信号弹速度矢量之间的关系为v(-)=v1·v2(v

19、1,v2分别为2颗信 号弹与v(-)为导弹的速度大小,·为矢量内积)。 我的同事们会告知我信号弹的速度信息,展现我高深莫测的专业技术的时刻到了!计算出导弹的速度吧! 矢量内积公式: (a1,.,an)·(b1,.,bn)= a1b1 + . + anbn关于输入 第一行一个整数n(1<=n<=1000),表示导弹所在空间的维度 第二行n个整数,表示第一颗信号弹的速度矢量 第三行n个整数,表示第二颗信号弹的速度矢量关于输出一个整数,表示导弹的速度大小,结果保证在int表示范围之内(结果可为负,此时表示导弹在远离P大)#include <stdlib.h>

20、;#define N 1000int main()int i,n,s=0,aN,pN,tN; scanf("%d",&n); for(i=0;i<n;i+) scanf("%d",&pi); for(i=0;i<n;i+) scanf("%d",&ti); for(i=0;i<n;i+) ai=pi*ti; s=s+ai; printf("%dn",s); return 0;8.11编写一个程序,求出4×5的二维数组周边元素之和。输入:二维数组元素输出:周边元素之

21、和如:输入:1 3 5 7 92 9 9 9 46 9 9 9 81 3 5 7 0输出:61#include <stdio.h>#include <stdlib.h>int main()int i,j,s=0,a45; for(i=0;i<4;i+) for(j=0;j<5;j+) scanf("%d",&aij); for(i=0;i<4;i+) for(j=0;j<5;j+) s=s+aij; for(i=1;i<3;i+) for(j=1;j<4;j+) s=s-aij; printf("

22、%dn",s); return 0;8.12编程,输入 n ,存储并输出如下例( n=5 )所示的 图形。1 2 3 4 51 1 2 3 41 1 1 2 31 1 1 1 21 1 1 1 1#include <stdio.h>#include <stdlib.h>#define N 100int main()int i,j,n,aNN;scanf("%d",&n);for(i=0;i<n;i+) for(j=0;j<=i;j+) aij=1; for(i=0;i<n;i+) for(j=i+1;j<n;

23、j+) aij=aij-1+1; for(i=0;i<n;i+) for(j=0;j<n;j+) printf(" %d",aij); printf("n"); return 0;8.13对数组 a10 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10) 则输出为: (4,1,3,7,1,4,6,8,9,10)#include<stdio.h>int main() int a11,b11; int i

24、,j,t,m; for(i=1; i<11; i+) scanf("%d",&ai); bi=ai; for(j=1; j<=10; j+) for(i=1; i<11-j; i+) if(ai>=ai+1) t=ai; ai=ai+1; ai+1=t; for(m=1; m<11; m+) for(i=1; i<11; i+) if(bm=ai) printf("%3d",i); break; printf("n"); return 0;8.14 方阵阶数为n(n<100),例如当n

25、=3时,矩阵int a33,矩阵int b33。 矩阵的数据由用户输入。输出新的矩阵c=a+b。 输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间有1个空格关于输入方阵阶数n矩阵a:a00 a01 a02a10 a11 a12a20 a21 a22矩阵b:b00 b01 b02b10 b11 b12b20 b21 b22关于输出矩阵c:c00 c01 c02c10 c11 c12c20 c21 c22注意:输出时每行最后不能有空格#include<stdio.h>#define N 100int main()int n,i,j,aN

26、N,bNN,cNN;scanf("%d",&n);for(i=0;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij); for(i=0;i<n;i+) for(j=0;j<n;j+) scanf("%d",&bij); for(i=0;i<n;i+) for(j=0;j<n;j+) cij=aij+bij; for(i=0;i<n;i+) for(j=0;j<1;j+) printf("%d",cij); for(

27、j=1;j<n;j+) printf(" %d",cij); printf("n"); return 0;8.15给定一系列整数,对每个整数的每一位数字统计09各个数字的出现次数,求出现次数最多的数字。输入:有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值输出:出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数输入样例:11233输出样例:出现次数最多2次的数字是 3#include <stdio.h>int main() int a100 ,i,j,x,max,n; int b1

28、0=0,0,0,0,0,0,0,0,0,0; scanf("%d",&n); x=0; for(i=0;i<n;i+) scanf("%d",&ai); for(i=0;i<n;i+) for(j=0;ai!=0;j+) x=ai%10; ai=ai/10; bx=bx+1; max=0; for(i=0;i<10;i+) if(bi>bmax) max=i; printf("出现次数最多%d次的数字是",bmax); for(i=0;i<10;i+) if(bi=bmax) printf

29、(" %d",i); printf("n"); return 0;8.16假设有n项物品,大小分别为s1,s2,.,sn,其中si是整数且满足:1<=si<=100。要把这些物品装入到容量为100的一批箱子(序号1n)中。装箱方法是:对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。写一个程序来模拟这个装箱的过程。输入:有两行。第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小输出:每个物品所在的箱子序号,并输出所需

30、的箱子数目输入样例:860 70 80 90 30 40 10 20输出样例:60 170 280 390 430 140 510 120 2所需的箱子数目为5#include <stdio.h>#include <stdlib.h>#define N 100int main() int n,i,j,sN,FnN; scanf("%d",&n); for(i=0;i<n;i+) scanf("%d",&si); for(i=0;i<n;i+) Fni=100; for(i=0;i<n;i+) fo

31、r(j=0;j<n;j+) if(Fnj>=si) Fnj=Fnj-si; printf("%d %dn",si,j+1); break; for(i=0; i<n+1; i+) if(Fni=100) printf("所需的箱子数目为%dn",i); break; return 0;8.(附加)1 我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用

32、3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。信息的格式见测试用例。#include<stdio.h>#include<math.h>int main()int i,j,p,q,x=0,f=0,g=0; static lo

33、ng a37,b37; char m11 ,n11; scanf("%s %s",m,n); p=strlen(m); q=strlen(n); for(i=0;i<=p-2;i+) if(mi<mi+1) f=i+1; for(i=0;i<=q-2;i+) if(ni<ni+1) g=i+1; if(mf>64) f=mf-55; else f=mf-48 ; if(ng>64) g=ng-55; else g=ng-48 ; for(i=f+1;i<=36;i+) for(j=1;j<=p;j+) if(mj-1>6

34、4) ai=(mj-1-55)*pow(i,p-j)+ai; else ai=(mj-1-48)*pow(i,p-j)+ai; for(i=g+1;i<=36;i+) for(j=1;j<=q;j+) if(nj-1>64) bi=(nj-1-55)*pow(i,q-j)+bi; else bi=(nj-1-48)*pow(i,q-j)+bi; for(i=f+1;i<=36;i+) for(j=g+1;j<=36;j+) if(ai=bj) x=1; goto k; k: if(x=0)printf("%s is not equal to %s in

35、any base 2.36n",m,n); else printf("%s (base %d) = %s (base %d)n",m,i,n,j); return 0;8.(附加)2将任一正整数(<65536)转换为 16 位二进制形式。输入: 正整数输出: 正整数的 16 位二进制数友情提示:定义一个整型数组,数组有16个元素,保存变换后的二进制数。#include<stdio.h>int main() int n,i,a16; scanf("%d",&n); if(n<=0|n>=65536) prin

36、tf("Invalid input!n"); else if(n>0&&n<65536) for(i=15; i>=0; i-) ai=n%2; n=n/2; for(i=0; i<16; i+) printf("%d",ai); printf("n"); return 0;9.1请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。例如:当a=45,b=12,调用该

37、函数后,c=5241。部分源程序如下,只需要完成Fun函数的编写即可。前置代码:#include <stdio.h>后置代码:int main() int a,b,c; scanf("%d,%d",&a,&b); Fun(a,b,&c); printf("%dn",c); return 0;提交:void Fun(int a,int b,int *c)int d,e,f,g; d=a/10; e=a%10; f=b/10; g=b%10; *c=1000*e+100*g+10*d+f;9.2给定程序中,函数fun的功能

38、是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。 例如,输入一个数:27638496,新的数:为739。注意:本题只需提交Fun函数即可前置代码:#include <stdio.h>后置代码:int main( ) int n=-1; while(n>99999999|n<0) scanf("%d",&n); Fun(&n); printf("%dn",n); return 0;提交部分:void Fun(int *n) int b=0,c

39、=1,m; while(*n!=0) m=*n%10; if(m%2!=0) b=b+m*c; c=c*10; *n=*n/10; *n=b;9.3请编一个函数 Fun ,其功能是对变量 h 中的值保留 2 位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。 例如: h 值为 8.32433 ,则函数返回 8.32 ; h 值为 8.32533 ,则函数返回 8.33 。注意:本题只需提交Fun函数即可前置代码:#include <stdio.h>后置代码:int main( ) double a,h; scanf("%lf",&a); Fun(

40、a,&h); printf("The result:%lfn",h); return 0;提交部分:#include <math.h>double Fun(double a,double*h) a=(int)(a*100+0.5)/100.0; *h=a; return *h;9.4请编一个函数 Fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。 例如:数组中的值依次为: 1 , 8 , 2 , 3 , 11 , 6 ;则利用指针 odd 返回

41、奇数之和 15 ;利用指针 even 返回偶数之和 16 。注意:本题只需提交Fun函数即可前置代码:#include <stdio.h>#define N 20后置代码:int main() int aN,i,n,odd,even; scanf("%d",&n); for(i=0;i<n;i+) scanf("%d",&ai); Fun(a,n,&odd,&even); printf("The sum of odd numbers:%dn",odd); printf("Th

42、e sum of even numbers:%dn",even); return 0;提交部分:void Fun(int a,int n,int *odd,int *even) int i; *odd=0; *even=0; for(i=0; i<n; i+) if(ai%2!=0) *odd=*odd+ai; else *even=*even+ai; 9.5请编写函数Fun ,它的功能是:求出能整除形参 x 且不是偶数的各整数 , 并按从小到大的顺序放在 aa数组中 , 这些除数的个数通过形参 n 返回。例如,若 x 中的值为 : 35 ,则有 4 个数符合要求,它们是 :

43、1, 5, 7, 35 。注意:本题只需提交Fun函数即可前置代码:#include <stdio.h>后置代码:int main( ) int x, aa1000, n, i ; scanf("%d", &x) ; Fun(x, aa, &n ) ; for( i = 0 ; i < n ; i+ ) printf(" %d", aai) ; printf("n") ; return 0;提交部分:void Fun(int x,int aa,int *n) int i,j=0; for(i=1;i&

44、lt;=x;i+) if(x%i=0)&&(i%2!=0) aaj=i; j+; aaj='0' *n=j;9.6请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17 5,则应输出19 23 29 31 37提醒:本题提交的时候,只需要提交Fun函数就可以。前置代码:#include <stdio.h>后置代码:int main() int m,n,zz1000; scanf("%d%d",&m,&n); Fun(m,n,zz); for(m=0;m<n;m+) pr

45、intf("%6d",zzm); printf("n"); return 0;提交部分:void Fun(int m,int n,int zz) int i,j,k=0; for(i=m+1; k<=n; i+) for(j=2; j<=i; j+) if(i%j=0) break; if(i=j) zzk=i; k+; 9.7请编写函数Fun, 函数的功能是: 将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSHWSH。注意:本题只需提交Fun函数即可前置代码:#include <stdio.h> #define M 3 #define N 4后置代码:int main() char a100,wMN='W','W','W','W','S','S','S','S','H','H','H','H' Fun(w,a);

温馨提示

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

评论

0/150

提交评论