2014级下学期中国石油大学华东c语言上机题_第1页
2014级下学期中国石油大学华东c语言上机题_第2页
2014级下学期中国石油大学华东c语言上机题_第3页
2014级下学期中国石油大学华东c语言上机题_第4页
2014级下学期中国石油大学华东c语言上机题_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、【研究创新型】8.1 谁能出线【题目描述】电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。【输入】 按顺序给出一个小组10个人的最后得分(int)。【输出】 能够出线的学生序号(09)。【样例输入】989810097959490949392【样例输出】2#include #include int main() int score10; int i,j=0; for(i=0;ij) j=scorei; else ; for(i=

2、0;i10;i+) if (scorei=j) printf(%dn,i); else ; system(pause); return 0; 【设计型】8.2 挑选小白鼠【题目描述】 实验室有一批小白鼠,为了评估他们的健康程度,我们为每一只小白鼠都设定了一个“健康指数”。现在我们需要进一步的评估这批小白鼠的健康均衡程度,因此我们需要从中找到健康指数差距最大的两只小白鼠的编号,以此来进一步的进行评估。 【输入】 第一行是一个整数n(2= n = 100),表示的是一共有n只小白鼠。 第二行是n个整数(互不相同),分别表示n只小白鼠的健康指数,同时根据输入顺序,从1开始为其编号1,2n。也就是说第

3、一个整数是第一只小白鼠的健康指数,第二个整数是第二只小白鼠的健康指数,依次类推。 【输出】 输出健康指数差距最大的两只小白鼠的编号。第一个数是健康指数较大的小白鼠的编号,第二个数是健康指数较小的小白鼠的编号。 【样例输入】101 2 3 4 5 6 7 8 9 11【样例输出】10 1#include #include int main() int n,i,j=0,k=,x=0,y=0; scanf(%d,&n); int s100; for(i=0;ij) j=si; if (sik) k=si; for(i=0;in;i+) if (si=j) x=i; if (si=k) y=i; pr

4、intf(%d %dn,x+1,y+1); system(pause); return 0; 【设计型】8.3 统计素数的个数求出 2 到 m 之间 ( 含 m,m=1000) 所有素数并放在数组 a 中。输入:正整数m输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:输入:10输出:2 3 5 7 4#include #include int main() int m,i,j,k=0,t=2,n=0,l; int a1000; scanf(%d,&m); printf(%4d,t); for(i=2;i=m;i+) for(j=2;ji;j+) if (i%j=0) bre

5、ak; else if(j=i-1) an=i; n=n+1; k=k+1; else ; for(l=0;ln;l+) printf(%4d,al); printf(n); printf(%dn,k+1); system(pause); return 0; 【设计型】8.4 交换理发师傅【题目描述】 王师傅的发廊距开张已经有10年之久了! 由于王师傅以及其他理发师傅洗剪吹技术娴熟, 发廊有了许多常客, 连毕业多年的学生也会不时回来学校, 到王师傅的发廊做洗剪吹. 常客们都有自己喜欢理发师, 然而随着运营规模的扩张, 理发师的分配时常会出现问题. 现在你的任务就是为顾客们交换理发师傅. 假设有

6、0.n-1共n名顾客, 他们的理发师傅恰巧安排反了. 也就是说n-1的理发师傅安排给了0, n-2的理发师傅安排给了1.请帮助他们找到喜欢的理发师傅吧! 【输入】 第一行一个整型n(1=n=1000), 表示顾客的人数 第二行n个整型, 分别表示现在安排给每位顾客的理发师傅的编号 【输出】 以此输出为0.n-1位顾客正确安排理发师傅之后的, 师傅们的编号每个数字由空格隔开, 最后一个数字后无空格。 【样例输入】52 4 7 1 5【样例输出】5 1 7 4 2#include #include int main() int n,i; scanf(%d,&n); int sn; for(i=0;

7、i0;i-) printf(%d ,si); printf(%dn,s0); system(pause); return 0; 【设计型】8.5 二维数组【问题描述】程序定义了 4 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。【输入】一个44的二维数组,以及一个整数n【输出】变化之后的二维数组【样例输入】 1 2 3 4 2 2 3 4 3 2 3 4 4 2 3 4 0 【样例输出】(输出的数按照4位宽度来输出,即%4d) 0 2 3 4 0 0 3 4 0 0 0 4 0 0 0 0#include #include int main() int s44

8、; int i,j,n; for(i=0;i4;i+) for(j=0;j4;j+) scanf(%d,&sij); scanf(%d,&n); for(i=0;i4;i+) for(j=0;j=j) sij=sij*n; for(i=0;i4;i+) for(j=0;j4;j+) printf(%4d,sij); printf(n); system(pause); return 0; 【设计型】8.6 在屏幕上显示杨辉三角形【题目描述】杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾

9、经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。杨辉三角有如下性质:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 2、第n行的数字个数为n个。 3、每个数字等于上一行的左右两个数字之和。【输入】一个正整数n【输出】按照指定格式输出对应的杨辉三角形(注意数据之间的空格)。【样例输入】5【样例输出】11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1#include #include int main() int a100100; int i,j,n; scanf(%d,&n); for(i=0;i=n;i+) for(j=0;j=n;j+) if

10、(i=j|j=0) aij=1; for(i=1;i=n;i+) for(j=1;j=n;j+) aij=ai-1j-1+ai-1j; for(i=0;i=n;i+) for(j=0;j=n;j+) if(j=i) printf(%3d,aij); printf(n); system(pause); return 0; 【设计型】8.7 插入法排序【题目描述】如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。【输入】共两行,第一

11、行为10个从小到大排列的整数;第二行为要插入的数【输出】插入后的顺序【样例输入】1 2 3 4 5 6 7 8 9 1011【样例输出】1 2 3 4 5 6 7 8 9 10 11#include #include int main() int a11; int i,k,t; for (i=0;i10;i+) scanf(%d,&ai); scanf(%d,&k); for(i=0;ik) for(t=9;t=i;t-) at+1=at; ai=k; goto END; else if(a9=k) a10=k; goto END; else ; END:for(i=0;i11;i+) pri

12、ntf( %d,ai); printf(n); system(pause); return 0; 【设计型】8.8 求各位数字组成的最大数【题目描述】任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。【输入】自然数 n【输出】各位数字组成的最大数【样例输入】1593【样例输出】9531#include #include int main() int a20; int i,n,t,j,m=0; scanf(%d,&n); while(n!=0) am=n%10; m+; n=n/10; for(i=0;im-1;i+) for(j=i+1;ja

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

14、输出查找到的学生学号和成绩,若没有找到指定学生,则输出未找到信息。【样例输入】1301 871302 791303 901304 68-1 -21302【样例输出】90 87 79 681302 79#include #include int main() int a70; int b70; int c70; int k=0,t,i,j,m,w=0; do scanf(%d %d,&ak,&bk); k+; while(ak-1=0&bk-1=0); for(i=0;ik-1;i+) ci=bi; scanf(%d,&m); for(i=0;ik-1;i+) for(j=i+1;jbi) t=

15、bj; bj=bi; bi=t; for(i=0;ik-1;i+) if(i=0) printf(%d,bi); else printf( %d,bi); printf(n); for(i=0;ik;i+) if(ai=m) printf(%d %dn,ai,ci);w+;goto end; else ; if(w=0) printf(not find!n); end:system(pause); return 0; 【设计型】8.10 导弹速度【题目描述】 我叫王大锤,是一个刚找到工作的程序员。万万没想到,刚开始工作的第一天,就发生了大事。某市高校P大与T大由于长期矛盾的积累,终于在这天爆发

16、了全面战争。 T大的导弹是突破了次元之壁的导弹,它会先在n维空间中运动,抵达目标后出现在P大相应的位置。P大及时的发明了在n维空间中阻截的方法,并找到了导弹的方向,现在我需要做的是计算出导弹的速度大小。 P大找到了我所在的公司,而这个任务竟然落到了刚加入公司的我身上。现在公司的谍报人员已经获知,T大的导弹的速度大小是由先发出的两颗 信号弹的速度矢量决定的,他们还顺便帮我捕获到了最终发射出的导弹的速度大小与信号弹速度矢量之间的关系为v(-)=v1v2(v1,v2分别为2颗信 号弹与v(-)为导弹的速度大小,为矢量内积)。 我的同事们会告知我信号弹的速度信息,展现我高深莫测的专业技术的时刻到了!计

17、算出导弹的速度吧! 矢量内积公式: (a1,.,an)(b1,.,bn)= a1b1 + . + anbn 【输入】 第一行一个整数n(1=n=1000),表示导弹所在空间的维度 第二行n个整数,表示第一颗信号弹的速度矢量 第三行n个整数,表示第二颗信号弹的速度矢量 【输出】 一个整数,表示导弹的速度大小,结果保证在int表示范围之内(结果可为负,此时表示导弹在远离P大) 【样例输入】31 1 11 1 1【样例输出】3#include #include int main() int n,a10001000,i,j,s=0; scanf(%d,&n); for(i=0;i2;i+) for(j

18、=0;jn;j+) scanf(%d,&aij); for(j=0;jn;j+) s=s+a0j*a1j; printf(%dn,s); system(pause);return 0;【设计型】8.11 求二维数组周边元素之和【题目描述】编写一个程序,求出45的二维数组周边元素之和。【输入】二维数组元素【输出】周边元素之和【样例输入】1 3 5 7 92 9 9 9 46 9 9 9 81 3 5 7 0【样例输出】61#include #include int main() int a45; int i,j,s=0; for(i=0;i4;i+) for(j=0;j5;j+) scanf(%

19、d,&aij); for(i=0;i4;i+) for(j=0;j5;j+) if(i=0|j=0|i=3|j=4) s=s+aij; printf(%dn,s); system(pause);return 0;【设计型】8.12 存储并输出一个矩阵【题目描述】按照指定格式输出图形【输入】一个正整数n【输出】指定格式输出的图形【样例输入】5【样例输出】1 2 3 4 51 1 2 3 41 1 1 2 31 1 1 1 21 1 1 1 1#include #include int main()int a100100; int i,n,j; scanf(%d,&n); for(i=0;in;i

20、+) for(j=0;jn;j+) if(j=i) aij=1; else aij=j-i+1; for(i=0;in;i+) for(j=0;jn;j+) printf(%2d,aij); printf(n); system(pause);return 0;【设计型】8.13 给数组中的元素按顺序编号【题目描述】 对数组 a10 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。【输入】10个整数【输出】对应的编号【样例输入】5 3 4 7 3 5 6 8 9 10【样例输出】4 1 3 7 1 4 6 8 9 10#in

21、clude #include int main() int a10; int i,j,t=1; for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i10;i+) for(j=0,t=1;jaj) t+; printf(%3d,t); printf(n);system(pause);return 0;【设计型】8.14 矩阵加法【题目描述】 方阵阶数为n(n100),例如当n=3时,矩阵int a33,矩阵int b33。 矩阵的数据由用户输入。输出新的矩阵c=a+b。 输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间

22、有1个空格【输入】第一行为方阵的阶数接下来为两个n阶方阵a和b【输出】方阵的和c【样例输入】31 2 34 5 67 8 97 8 94 5 61 2 3【样例输出】8 10 128 10 128 10 12#include #include int main() int a100100,b100100; int i,j,n; scanf(%d,&n); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&bij); for(i=0;in;i+) for(j=0;jn;j+)

23、 if(j=0) printf(%d,aij+bij); else printf( %d,aij+bij); printf(n); system(pause);return 0;【设计型】8.15 求一系列整数中出现最多的数字【题目描述】给定一系列整数,对每个整数的每一位数字统计09各个数字的出现次数,求出现次数最多的数字。【输入】有两行,第一行是整数n(1=n=100),表示有n个整数;第二行是n个整数值【输出】出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数【输入样例】11233【输出样例】出现次数最多2次的数字是 3#include int main() int n,m,a

24、10,b10=0,i,j,max,t,q,count,c10; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&m); while(m!=0) am%10=m%10; bam%10+; m=m/10; max=b0; for(j=0;j10;j+) if(maxbj) max=bj; count=j; t=0; for(q=0;q10;q+) if(max=bq) ct=q;t+; printf(出现次数最多%d次的数字是,max); for(i=0;it;i+) printf(%2d,ci); printf(n); system(pause); return 0

25、;【探索型】8.16 装箱问题【题目描述】假设有n项物品,大小分别为s1,s2,.,sn,其中si是整数且满足:1=si=100。要把这些物品装入到容量为100的一批箱子(序号1n)中。装箱方法是:对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。写一个程序来模拟这个装箱的过程。【输入】有两行。第一行是整数n(n=1000),表示物品的个数;第二行是n个整数si(si=100),分别表示n个物品的大小【输出】每个物品所在的箱子序号,并输出所需的箱子数目【输入样例】860 70 80 90 30 40 10 20【输出样例】60 170 28

26、0 390 430 140 510 120 2所需的箱子数目为5#include#define n 1000int main() int an,bn,i=0,j,x,max=1; scanf(%d,&x); for(i=1;i=x;i+) scanf(%d,&ai); for(j=1;j=100;j+) bj=100; for(i=1;i=x;i+) for(j=1;j=0) printf(%d %dn,ai,j); bj=bj-ai; if(maxj) max=j; break; printf(所需的箱子数目为%dn,max); return 0;【探索型】8.17 起床的烦恼【题目描述】众

27、所周知,Nono是一只喜欢睡懒觉的熊猫。“我曾经也是早睡早起,直到我膝盖中了一箭”,Nono如是解释道。现在Nono又遇到了一个难题:他睡醒了但是显然,Nono并不想起床于是他决定用如下方法来解决这个问题。Nono从一开始数数,他每数一个数时会计算这个数中1的个数(如211中有两个1)并对1的个数进行累和,当1的个数之和不小于x时,Nono就要起床了。特别需要注意的是,当Nono数数达到10000时,Nono就会因为数太久而再次睡着现在Nono定下了x,他想知道他数到多少就需要起床了(或是他可以再睡一觉)。【输入】 第一行为一个整数T(T=5000)表示数据组数,接下来的T行每行一个整数x(0

28、x30000)。 【输出】 对于每组数据,如果Nono会数到睡着则输出zzz,否则输出一个数表示Nono需要数到多少。 【样例输入】225000 【样例输出】10zzz 提示 打表法先把所有可能情况记录下来#include #include int main()int t,i,j,k,x,cnt=0; scanf(%d,&t); for(i=0;it;i+) scanf(%d,&x); for(j=0;j=x) printf(%dn,j); goto end; k=k/10; while(k!=0); if(j=10000) printf(zzzn); end:cnt=0; system(pa

29、use);return 0;【设计型】8.18 The Himalayas【Description】As an artist, Bob usually need to travel around the world. He made a lot of sketch of scenery on his journey. A famous spot he have visited recently is the Himalayas. The Himalayas is a mountain range in South Asia separating the plains of the Indian

30、 subcontinent from the Qinghai-Tibet Plateau. The Himalayas include over a hundred mountains exceeding 7,200 meters in elevation.One day, Bob came up with an strange idea. He wanted to know the number of mountain peaks in his paintings. As his best friend, he turned to you for help. You are given a

31、list of N height sampling values Hi. You should determine how many peaks are there. For all i which satisfies 2 = i = N - 1, Hi is defined as a peak if and only if Hi-1 Hi+1.【Input】There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For e

32、ach test case:The first line contains one integer N (1 = N = 50). The next line contains N integers Hi (1 = Hi = 8844). It is guaranteed that any two adjacent height sampling values will be different.【Output】For each test case, output the number of peaks.【Sample Input】291 3 2 4 6 3 2 3 151 2 3 4 5【S

33、ample Output】30#include #include int main()int a5050,b50; int t,n,i,j; scanf(%d,&t); for(i=0;it;i+) scanf(%d,&n); for(j=0;jn;j+) scanf(%d,&aij); for(j=1;jaij-1&aijaij+1) bi+; for(i=0;it;i+) printf(%dn,bi); system(pause);return 0;【设计型】8.19 求年月日【题目描述】输入年份和这一年的第几天,输出具体的年、月、日的信息。(注意闰年的判断!)【输入】输入两个整数分别代表

34、年份和这一年的第几天。(假设数据都在有效范围内)【输出】输出对应的年、月、日。输出的数字之间以一条横线间隔,输出完毕换行。【样例输入】2011 20【样例输出】2011-1-20#include #include int main() int y,t,i,s=0; int month12=31,28,31,30,31,30,31,31,30,31,30,31; scanf(%d %d,&y,&t); if(y%4!=0)|(y%100=0)&(y%400!=0) month1=28; else month1=29; for(i=0;i12;i+) s=s+monthi; if(t=s) pri

35、ntf(%d-%d-%dn,y,i+1,t-(s-monthi); goto END; else ; END:system(pause);return 0;【设计型】8.20百灯熄灭【题目描述】有M盏灯,编号为1M,分别由相应的M个开关控制。开始时全部开关朝上(朝上为开,灯亮),然后进行以下操作:编号凡是1的倍数的灯反方向拨一次开关;是2的倍数的灯再反方向拨一次开关;是3的倍数的灯又反方向拨一次开关,.,直到是M的倍数的灯又方向拨一次开关。请从键盘输入一个整数n代表灯的数量,求出最后为熄灭状态的灯(不亮)的数量以及编号并输出。【输入】输入一个整数n(1=n=100)。【输出】输出为两行,第一行是熄灭状态的灯的数量;第二行是最后为熄灭状态的灯的编号(每个数据以4列的域宽显示)。【样例输入】100【样例输出】10 1 4 9 16 25 36 49 64 81 100【提示】输出控制为%4d#include #include int main() int a100=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

温馨提示

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

评论

0/150

提交评论