文档库 最新最全的文档下载
当前位置:文档库 › C语言程序设计大赛题目

C语言程序设计大赛题目

C语言程序设计大赛题目
C语言程序设计大赛题目

程序设计大赛训练题

(1)请写一个程式求出2个数的GCD(最大公因数) Input and Output

输入包含好几笔资料,每笔资料一行,包含2个整数a,b。(0

对每行输入,输出这2个数的GCD

Sample Input

12 36

25 24

0 0

Sample Output

GCD(12,36)=12

GCD(25,24)=1)

(2)联集

读入2个正整数a,b,请输出介于a,b之间(包含a,b)2,3,5倍数的联集大小。

Input(输入可能包含了好几列测试资料,每一列有2个整数a,b。

a=0 b=0 代表输入结束。)

Output(对每一列输入,请输出联集的大小。请参考Sample Output )Sample Input(1 10 ;10 20;0 0;)

Sample Output(8;7)

(3)Q100: The 3n + 1 problem

考虑以下的演算法:

1. 输入 n

2. 印出 n

3. 如果 n = 1 结束

4. 如果 n 是奇数那么 n=3*n+1

5. 否则 n=n/2

6. GOTO 2

例如输入 22, 得到的数列: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 据推测此演算法对任何整数而言会终止 (当列印出 1 的时候)。虽然此演算法很简单,但以上的推测是否真实却无法知道。然而对所有的n ( 0 < n < 1,000,000 )来说,以上的推测已经被验证是正确的。

给一个输入 n ,透过以上的演算法我们可以得到一个数列(1作为结尾)。此数列的长度称为n的cycle-length。上面提到的例子, 22的 cycle length为 16.

问题来了:对任意2个整数i,j我们想要知道介于i,j(包含i,j)之间的数所产生的数列中最大的cycle length是多少。

Input:输入可能包含了好几列测试资料,每一列有一对整数资料 i,j 。 ( 0< i,j < 10000 )

Output:对每一对输入 i , j你应该要输出 i, j和介于i, j之间的数所产生的数列中最大的cycle length。

Sample Input:1 10;10 1;100 200;201 210;900 1000;

Sample Output

1 10 20

10 1 20

100 200 125

201 210 89

900 1000 174

(4)Q101: The Blocks Problem

在早期人工智慧的领域中常常会用到机器人,在这个问题中有一支机器手臂接受指令来搬动积木,而你的任务就是输出最后积木的情形。一开始在一平坦的桌面上有n块积木(编号从0到n-1)0号积木放在0号位置上,1号积木放在1号位置上,依此类推,如下图。

机器手臂有以下几种合法搬积木的方式(a和b是积木的编号):

move a onto b

在将a搬到b上之前,先将a和b上的积木放回原来的位置(例如:1就放回1的最开始位罝)

?move a over b

在将a搬到b所在的那堆积木之上之前,先将a上的积木放回原来的位罝

(b所在的那堆积木不动)

?pile a onto b

将a本身和其上的积木一起放到b上,在搬之前b上方的积木放回原位?pile a over b

将a本身和其上的积木一起搬到到b所在的那堆积木之上?quit

动作结束

前四个动作中若a=b,或者a, b在同一堆积木中,那么这样的动作算是不合法的。所有不合法的动作应该被忽略,也就是对各积木均无改变。

Input输入含有多组测试资料,每组测试资料的第一列有一个正整数n(0 < n < 25),代表积木的数目(编号从0到n-1)。接下来为机器手臂的动作,每个动作一列。如果此动作为 quit ,代表此组测试资料输入结束。你可以假设所有的动作都符合上述的样式。请参考Sample Input。

Output每组测试资料输出桌面上各位置积木的情形(每个位置一列,也就是共有n列),格式请参考Sample Output。

Sample Input10

move 9 onto 1

move 8 over 1

move 7 over 1

move 6 over 1

pile 8 over 6

pile 8 over 5

move 2 over 1

move 4 over 9

quit

4

pile 0 over 1

pile 2 over 3

move 1 onto 3

quit

Sample Output

0: 0

1: 1 9 2 4

2:

3: 3

4:

5: 5 8 7 6

6:

7:

8:

9:

0: 0

1:

2: 2

3: 3 1

(5)Q102: Ecological Bin Packing

有3个桶子用来装回收的玻璃瓶,玻璃瓶的颜色有三种:棕色(Brown)、绿色(Green)、透明色(Clear)。在这个问题里我们会告诉你每个桶子里的玻璃瓶的颜色及数量,现在要搬移桶子里的玻璃瓶使得最后每个桶子里都只有单一颜色的玻璃瓶,以方便回收。你的任务就是要算出最小搬移的瓶子数。你可以假设每个桶子的容量无限大,并且总共搬移的瓶子数不会超过231。

Input每笔测试资料一行,每行有9个整数.前3个代表第1个桶子里Brown, Green, Clear颜色的瓶子数。接下来的3个数代表第2个桶子里Brown, Green, Clear颜色的瓶子数。最后的3个数代表第3个桶子里Brown, Green, Clear颜色的瓶子数。

例如:10 15 20 30 12 8 15 8 31

表示有20个Clear色的玻璃瓶在第1个桶子里,12个Green色的玻璃瓶在第2个桶子里,15个Brown色的玻璃瓶在第3个桶子里。

Output对每一笔测试资料,输出3个桶子内最后存放之玻璃瓶颜色,以及最小搬移的瓶子数。请以大写的'G'、 'B'、 'C' 分别代表绿色(Green)、棕色(Brown)、透明色(Clear)。

例如:BCG 30

代表最后搬移的结果第1个桶子内的玻璃瓶颜色为Brown,第2个桶子内的玻璃瓶颜色为Clear,第3个桶子内的玻璃瓶颜色为Green.并且总共搬移了30个玻璃瓶。

如果最小搬移瓶子数有一组以上的组合,请输出字典顺序最小的那一组答案。Sample input

1 2 3 4 5 6 7 8 9

5 10 5 20 10 5 10 20 10

Sample Output

BCG 30

CBG 50

(6)Q103: Stacking Boxes

在数学或电脑科学里,有些概念在一维或二维时还蛮简单的,但到 N 维就会显得非常复杂。试想一个n维的“盒子”:在二维空间里,盒子 ( 2 , 3 ) 可代表一个长为 2 个单位,宽为 3 个单位的盒子;在三维空间里,盒子 ( 4 , 8 ,

9 ) 则是一个 4*8*9(长、宽、高)的盒子。至于在六维空间里,也许我们不清楚 ( 4 , 5 , 6 , 7 , 8 , 9 ) 长得怎样,不过我们还是可以分析这些盒子的特性。

在此问题里,我们要算出一组 n 维盒子里,它们的“最长套入串列”: b

1

,

b 2, ......,b

k

,其中每个盒子 b

i

都可以“放入”盒子 b

i+1

中(1 <= i < k)

考虑两个盒子 D =( d

1, d

2

, ......,d

n

), E =( e

1

, e

2

, ......,e

n

)。如

果盒子 D 的 n 个维,能够存在一种重排,使得重排后, D 每一维的量度都比 E 中相对应的维的量度还要小,则我们说盒子 D 能“放入”盒子 E 。(用比较不严谨的讲法,这就好像我们将盒子 D 翻来翻去,看看能不能摆到 E 里面去。不过因为我们考虑的是任一重排,所以实际上盒子不只可转来转去,甚至还可以扭曲。)(还是看看下面的例子说明好了)。

譬如说,盒子 D = ( 2 , 6 ) 能够被放入盒子 E = ( 7 , 3 ) 里,因为 D 可以重排变为 ( 6 , 2 ) ,这样子 D 的每个维的量度都比 E 里对应的维还要小。而盒子 D = ( 9 , 5 , 7 , 3 ) 就没办法放进盒子 E = ( 2 , 10 , 6 , 8 ) ,因为就算再怎摸重排 D 里的维,还是没办法符合“放入”的条件。不过 F = ( 9 , 5 , 7 , 1 ) 就可以放入 E 了,因为 F 可以重排成 ( 1 , 9 , 5 , 7 ) ,这样就符合了放入的条件。

我们今定义“放入”如下:对于任两个盒子 D =( d

1, d

2

, ......,d

n

)和 E =

( e

1, e

2

, ......,e

n

),如果存在一种 1..n 的重排π,使得对于任何的 1 <=

i <= n,皆有 d

π(i) < e i,则我们说盒子 D 能“放入”盒子 E 。

Input输入包含多组测试资料。每组测试资料的第一列有两个数字:第一个是盒子的数量k,然后是盒子的维数n;接下来有k列,每列有n个整数表示一个盒子的n个维的量度,量度之间由一个以上的空白做区隔。第一列表示第一个盒子,第二列表示第二个盒子,依此类推;此问题里,盒子的维数最小是 1 ,最大是 10 ,并且每组测试资料中盒子的个数最多为 30 个。

Output对于每一组测试资料,你必须输出两列数字:第一列是“最长套入串列”的长度,第二列是按照内外顺序,印出“最长套入串列”里盒子的编号(其中编号是按照在输入档案的每组数列里所出现的顺序,例如第一个盒子就是 1

号 . . . 等等。)最里面的盒子(或是最小的)摆在第一个,再来是次小的,依此类推;如果对于每一组的盒子,存在两个以上的“最长套入串列”,输出任何一个均可。

Sample Input

5 2

3 7

8 10

5 2

9 11

21 18

8 6

5 2 20 1 30 10

23 15 7 9 11 3

40 50 34 24 14 4

9 10 11 12 13 14

31 4 18 8 27 17

44 32 13 19 41 19

1 2 3 4 5 6

80 37 47 18 21 9

Sample Output

5

3 1 2

4 5

4

7 2 5 6

(7)Q104: Arbitrage

所谓的“三角套汇(arbitrage)”就是在几种外币中做金钱的交易,期待从汇差中获取少许的利润。例如:1 元美金可以买 0.7 英镑,1 元英镑可以买 9.5 法朗,1 元法朗可以买 0.16 美金。所以如果我们把 1 元美金换成英镑,再把英镑换成法朗,最后再把法朗换回美金,那么最后得到的美金将是:

1*0.7*9.5*0.16=1.064 美元。也就是说我们可以从中获取汇差 0.064 美元,相当于赚了 6.4% 。

请你写一个程式找出是否有这样套汇的情况,可以获取如上所述的利益。要产生一个成功的套汇,在换外币的过程中,开始的币种一定得等于最后的币种。但是从哪一种开始都可以。

Input输入含有多组测试资料。

每组测试资料的第一列,有一个整数 n(2 <= n <= 20),代表共有多少种币种。接下来的 n 列代表这n种外币之间的汇率转换表。每列有 n-1 个数。这 n-1 个数分别代表该币种1元可以换取其他币种多少元(自己换自己当然是 1,所以不会出现)。所以第1列的 n-1 个数依序分别代表第1种外币1元可以换取,第2种外币,第3种外币,第4种外币...第n种外币各多少元。而第2列的 n-1 个数依序分别代表第2种外币1元可以换取,第1种外币,第3种外币,第4种外币...第n种外币各多少元。依此类推,第n列的 n-1 个数依序分别代表第n 种外币1元可以换取,第1种外币,第2种外币,第3种外币...第n-1种外币各多少元。请参考Sample Input。

Output:对每组测试资料输出一列,代表一连串币种转换的动作,并且套汇获利需大于 1%( > 0.01)。如果有不止一种转换可以获取超过 1%的利益,请输出

转换次数最少的。如果转换次数最少的不止一种,那么任何一种都可以。请注意:在这里只要求转换次数最少,并没有要求获利要最大,只要能大于 1% 就可以了。 另外,国税局还规定最多只能转换 n 次(n 是币种的数目)。像 1, 2, 1 这样的转换次数为 2。 如果在 n 次的转换内都无法获利超过 1%,请输出 no arbitrage sequence exists 。

(8)Q105: The Skyline Problem

由于高速绘图电脑工作站的出现,CAD (computer-aided design )和其他领域(CAM,VLSI 设计)都充分使用这些电脑的长处。而在本问题中,你必须帮助建筑师,根据他所提供给你都市中建筑物的位置,你得帮他找出这些建筑物的空中轮廓(skyline )。为了使问题容易处理一些,所有的建筑物都是矩形的,并且都建筑在同一个平面上。你可以把这城市看成一个二度平面空间。每一栋建筑物都以(L i H i R i )这样的序列来表示。其中L i 和 R i 分别是该建筑物左边和右边的位置,H i 则是建筑物的高度。下方左图就是(1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28)这八栋建筑物的位置图。而你的任务就是画出这些建筑物所构成的轮廓,并且以(1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0)这样的序列来表示如下方右图的轮廓。

Input只有一组测试资料。每列有一栋建筑物的资料。建筑物不会超过50栋。所有的数字都小于10000。并且建筑物已按照L

i

排好序。

Output输出为描述建筑物轮廓的向量。在轮廓向量(v

1,v

2

,v

3

,......,v

n-1

,v

n

)中,

在i为奇数的情形下,v

i 表示一条垂直线(x座标),在i为偶数的情形下,v

i

表示一条水平线(高度)。轮廓向量就像一只虫从最左边建筑物走起,沿著轮廓路径水平及垂直的行走的路径。所以最后轮廓向量的最后一个数一定为0。

Sample Input

1 11 5

2 6 7

3 13 9

12 7 16

14 3 25

19 18 22

23 13 29

24 4 28

Sample Output

1 11 3 13 9 0 1

2 7 16

3 19 18 22 3 23 13 29 0

(9)Q107: The Cat in the Hat

一只神奇聪明猫走进了一间乱七八糟的房间,他不想自己动手收拾,他决定要找帮手来工作。于是他从他的帽子中变出了N只小猫来帮他(变出来的猫,高度为原来猫的 1/(N+1) )。这些小猫也有帽子,所以每一只小猫又从他的帽子中变出N只小小猫来帮他。如此一直下去,直到这些小小小....猫小到不能再小(高度=1),他们的帽子无法再变出更小的猫来帮忙,而这些最小的猫只得动手打扫房间。注意:所有猫的高度都是正整数。在这个问题中,给你一开始那只猫的高度,以及最后动手工作的猫的数目(也就是高度为1的猫的数目)。要请你求出有多少只猫是没有在工作的,以及所有猫的高度的总和。

Input每组测试资料一列,有2个正整数分别代表一开始那只猫的高度,以及最后动手工作的猫的数目。0 0代表输入结束。

Output每组测试资料输出一列,包含2个正整数分别代表有多少只猫是没有在工作的,以及所有猫的高度的总和。

Sample Input

216 125

5764801 1679616

64 1

0 0

Sample Output

31 671

335923 30275911

6 127

(10)Q108: Maximum Sum

给你一个NxN的阵列,请你找出有最大和的子区域(sub-rectangle)其和为多少。一个区域的和指的是该区域中所有元素值的和。一个区域是指相连的任意大小的子阵列。例如,对以下的二维阵列:

其最大和的子区域位于左下角,并且其和为15。如下所示:

Input只有一组测试资料,第一列有一个正整数N(N <= 100),代表此二维阵列大小为NxN。从第二列起有N2个整数,代表此阵列的内容。每个整数都介于-127到127之间,且以列为主(row-major)的顺序排列。Sample Input即为上图所示的阵列。

Output输出有最大和的子区域其和是多少。

Sample Input

0 -2 -7 0 9 2 -6 2

-4 1 -4 1 -1

8 0 -2

Sample Output

15

(11)Q111: History Grading

在资讯科学中有一些是关于在某些条件限制下,找出一些计算的最大值。以历史考试来说好了,学生被要求对一些历史事件根据其发生的年代顺序来排列。所有事件顺序都正确的学生无疑的可以得满分。但是那些没有全对的人又该如何给分呢?以下有2种可能的给分方式:每个与标准答案的顺序相同的事件得1分

1。每个在最长(但不一定要连续)的序列事件中,其相对的顺序亦可以在标准答案发现者,每个事件得1分。

举例说明:如果有4个事件其发生时间的顺序依次是1 2 3 4(就是标准答案啦,意思是第1个事件发生顺序为1,第2个事件发生的顺序为2,......)。所以如果学生回答此4个事件发生的顺序依次是1 3 2 4的话,根据上面第1种方法可以得2分(第1个及第4个事件)。但是如果以上面第2种方法可以得3分(1 2 4或者1 3 4其相对的顺序可以在标准答案发现)在本问题中,请你写一个程式以第2个方法算出学生该得多少分。

Input只考一次试,所以输入的第1列有一个整数n(2 <= n <= 20)代表此次

历史考试有多少个事件要排序。第2列为标准答案,有n个正整数c

1,c

2

,......c

n

(其内容为1到n的某种排列),c

1代表第1个事件发生的顺序,c

2

代表第2个

事件发生的顺序,依此类推。从第3列开始每列为一学生的答案,每列有n

个正整数r

1,r

2

,......r

n

,(其内容亦为1到n的某种排列),r

1

代表学生回答

第1个事件发生的顺序,r

2

代表学生回答第2个事件发生的顺序,依此类推。Output对每一学生的答案,输出其所得的分数。

Sample Input

10

3 1 2

4 9

5 10

6 8 7

1 2 3 4 5 6 7 8 9 10

4 7 2 3 10 6 9 1

5 8

3 1 2

4 9

5 10

6 8 7

2 10 1

3 8

4 9

5 7 6

Sample Output6 5 10 9

(12)Q112: Tree Summing

LISP是最早的高阶程式语言之一,而Lists则是LISP中最重要的资料结构。Lists可以很简单的用来表达其他的资料结构,例如:tree。在这个问题中,给你LISP中的S表示式(S-expression),请你写一个程式判断这表示式(整数的二元树)是否存在一条由根节点到树叶的路径,且路径上各节点的值的和为某一特定的数 n。例如:在以下的树中共有4条从根到树叶的路径。而各路径的和分别为27,22,26以及18。

在LISP中的S表示式有以下的格式empty tree ::= () ;tree ::= empty tree | (integer tree tree)

上图中的树若以S表示式表达为:(5 (4 (11 (7 () ()) (2 () ()) ) ()) (8 (13 () ()) (4 () (1 () ()) ) ) )注意:在树中所有的叶节点为 (integer () () )既然空树不存在任何根到叶的路径,任何对空树是否有某个和的询问,其答案都是否定的。

Input输入含有多组测试资料。每组测试资料的开头有一个整数 n。接下来为一S表示式。所有的S表示式一定是合法的,但是可能会跨多列,并且可能含有空白字元。请参考Sample Input。

Output对每一组测试资料输出一列。如果S表示式所表达的树存在一条由根到叶的路径,且路径上节点值的和为n的话,则输出yes,否则输出no。

Sample Input

22 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))

20 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))

10 (3

(2 (4 () () )

(8 () () ) )

(1 (6 () () )

(4 () () ) ) )

5 ()

Sample Output

Yes yes

No no

Q113: Power of Cryptography

给你两个整数 n(n >= 1)和 p(p >=1),你必须写一个程式来计算出 p 的正n 次方根。在这个问题里,p 皆可表成 k n的形式,其中 k 为整数。(k也就是你的程式所要求的)

Input每组测试资料2列,第1列有1个整数 n(1 <= n <= 200),第2列有1个整数 p(1 <= p <= 10101)。并且存在一个整数 k,(1 <= k <= 109),使得 k n=p。

Output每组测试资料请输出 k。

Sample Input

2

16

3

27

7

4357186184021382204544

Sample Output

4

3

1234

Q115: Climbing Trees

原翻译者:untitled

这个问题的目地在讨论两个人在所谓的“家庭树”(family tree 即族谱)里,他们的关系为何。给你两组名字:第一组里有若干对名字,就是所谓的“孩子,家长对”(child-parent pairs),也就是一对名字,前面的名字是孩子的名

字,而后面的名字为其家长的名字;第二组则也有若干对名字,是“欲查询对”(query pairs),其表达格式跟前面的“孩子,家长对”一样有两个名字。给你这两组若干对的名字,你必须写个程式来判断在“欲查询对”里,每对的那两个人彼此关系为何。在这里我们设定一个人只会有一个家长(虽然我们都知道每个人都有父、母亲二者,但是在本问题中,我们仅以其中一人代表)

在此问题里,我们说“孩子,家长对”p、q表示p是q的孩子。我们为了要表示出所谓的关系,我们先看下面的定义:

?当在输入档案的“孩子,家长对”里有 p q (或者 q p),我们说p是q的0 级子孙(或者0 级祖先)

?当在输入档案的“孩子,家长对”里有 p r (或者 q r),而且r是q 的 (k-1) 级子孙(或者p是r的 (k-1) 级祖先),则称p是q的k 级子孙(或者k 级祖先)

在这个问题里,任两个人p , q之间的关系一定可归类到下列四种的其中之一(如果他们有关系的话)

1.直系子孙类(child): child、grand child、great grand child、great

great grand child,依此类推。(即:孩子、孙子、曾孙、曾曾孙 ...)

根据定义,当输入档案里的“孩子,家长对”有 p q 存在(也就是p是q的 0 级子孙),则这时p是q的“child”─即是“孩子”;而当p 是q的 1 级子孙时,我们就称p是q的“grand child”─即是“孙

子”;当p是q的 (n+1) 级子孙,则p是q的“great great ...

great grand child”,其中有n个 " great ",然后后面接 " grand child ",也就是“曾曾...曾孙”的意思(其中有p个 " 曾 " )。

2.直系长辈类(parent): parent、grand parent、great grand parent、

great great grand parent,依此类推。(即:父(母)、祖父(母)、曾祖父(母)、曾曾祖父(母))

(注意:无论是男是女,每一个人如果有家长,则必然是恰有一个)

根据定义,当输入档案里的“孩子,家长对”有 q p 存在(也就是p是q的 0 级祖先),则这时p是q的“parent”─即是“父(母)”;

而当p是q的 1 级祖先时,我们就称p是q的“grand parent”─

即是“祖父(母)”;当p是q的 (n+1) 级祖先,则p是q的“great great ... great grand parent”,其中有n个 " great ",然后后面

接 " grand parent ",也就是“曾曾...曾祖父(母)”的意思(其中有p个 " 曾 " )。

3.旁系血亲类(就是非直系的远亲)( cousin ):

依两个人对其同祖先的辈分差距,可分为 0th cousin、 1st cousin、 2nd

cousin,依此类推;对于两个人彼此的辈分差距又可分为 once removed、twice removed、three times removed,依此类推。( removed 有类似

亲等远近关系之意)

根据定义,只要p和q有血缘关系,而且他们不是直系血亲关系,那他

们就是旁系血亲的关系。(或者也可以这样讲,如果把 family tree 当

作是一个无向图,则存在一条路径连通p与q)今天将p和q的共同

祖先里,辈份最小的称作r(也就是r的子孙里没有人既是p的祖先,又是q的祖先。),然后知道p是r的m级子孙,q是r的n级

子孙。则我们这样定义:p和q的关系有 '' k th cousins '',其中

k=min(n,m)(也就是k是p, q里面较小的那一个);而且p和q的

关系还有 '' cousins removed j times '' ,其中 j=| n-m|(也就是j

为n和m差的绝对值。)

4.兄弟姊妹类(sibling): 0th cousins removed 0 times 就是所谓的“兄

弟姊妹”。(也就是他们有同一个家长)

Input输入包括2个部分:第一部部分为“孩子,家长对”,每对一列。包含

孩子和家长的名字,名字由小写字母及.组成。若遇到孩子的名字为 no.child 代表这部分的输入结束。注意," no.child " 开头的这一对名字本身并不算在“孩子,家长对”里,它的作用只是拿来分隔“孩子,家长对”和“欲查询对”而已。另外,这部分的输入也不会含有循环矛盾的关系,也就是不会有人既是另一人的子孙又是其祖先。接著就是“欲查询对”,其格式与第一组一样,都是每列两个名字,由小写字母或句号组成,中间用一个以上的空白隔开。而“欲查询对”是以 end-of-file 作结尾。在输入中,不同的名字不会超过 300 个。每个名字皆不超过 31 个字母长。“欲查询对”里最多不会超过 100 对名字。请参考Sample Input。

Output对于查询对里的每对名字p q,都必须输出p是q的什么关系──用下面的格式:

?child, grand child, great grand child, great great ...great grand child

?parent, grand parent, great grand parent, great great ...great grand parent

?sibling

?n cousin removed m

?no relation

其中第四项,如果是 " n-cousin is removed 0 times " 则只需输出n cousin 即可。也就是说不能输出removed 0这个东西。另外,不要在数字的后面加上st, nd, rd, th等字样。请参考Sample Output。

Sample Input

alonzo.church oswald.veblen

stephen.kleene alonzo.church

dana.scott alonzo.church

martin.davis alonzo.church

pat.fischer hartley.rogers

mike.paterson david.park

dennis.ritchie pat.fischer

hartley.rogers alonzo.church

les.valiant mike.paterson

bob.constable stephen.kleene

david.park hartley.rogers

no.child no.parent

stephen.kleene bob.constable

hartley.rogers stephen.kleene

les.valiant alonzo.church

les.valiant dennis.ritchie

dennis.ritchie les.valiant

pat.fischer michael.rabin

mike.paterson dennis.ritchie

Sample Output

parent

sibling

great great grand child

1 cousin removed 1

1 cousin removed 1

no relation

1 cousin

Q116: Unidirectional TSP

给你一个由整数组成的 m*n 方阵,你必须要写个程式,来计算出“重量”

( weight )最小的路线。每条路线都是从第一直行的任何一格做为起点,走了若干步之后,至第n行(最后一行)的其中一格为终点。所谓的一步就是从第i行走至第i+1 行,其中移动的时候只能走到原本的或是相邻的一横列(也就是走平的或是斜一格)。另外要注意的是,第一横列和最后一横列(第m列)也算是相邻的,也可以这样想,就是整个方阵是上下“包”起来的,看起来像一个倒著的圆柱体。总之,对于任何一格能够走的下一步就如下图所示:

所谓一个路径的“重量”(weight)就是此路径经过的n个格子里,它们的整数总和。举个例子,下面有两个不同的5*6 方阵。(实际上你可以注意到它们的不同只在最后一列而已)

这两个方阵的“最小重量路径”( minimal-weight path )已经在上面分别标出来了。注意一下右边的方阵,其利用了第一列和最后一列是相邻的这个性质达到了最小的重量。

Input输入里包含多组测试资料,每组代表一个方阵。每组测试资料的第一列为2个正整数m与n(1 <= m <=10,1 <= n <= 100),依序表示这方阵有几横列和几直行。而后就是 m*n 个整数,这些整数是按照“列顺序”( row major order )来排列,也就是输入里的前n个数表示方阵的第一横列,再下来的n个数表示第二横列,依此类推。在输入里,同一列的数彼此间将会被一个以上的空白隔开。值得注意的是,这里说的整数并不一定是正的。输入以及计算的过程所出现的数均不会超过长整数(long)的范围。 Sample Input中前2组测试资料所表达的方阵就是上方的2个图,请参考。

Output对于每个方阵,你必须输出两列东西。第一列是“最小重量路径”

( minimal-weight path ),第二列则是其“重量”。对于第一列,你必须输出n个正整数,依序表示在每一行,此路径经过了第几列。如果存在两个以上的路径其“重量”皆为最小,则输出按照字典顺序( lexicographically )最小的那一个路径。请参考Sample Output。

Sample Input

5 6

3 4 1 2 8 6

6 1 8 2

7 4

5 9 3 9 9 5

8 4 1 3 2 6

3 7 2 8 6 4

5 6

3 4 1 2 8 6

6 1 8 2

7 4

5 9 3 9 9 5

8 4 1 3 2 6

3 7 2 1 2 3

2 2

9 10 9 10

Sample Output

1 2 3 4 4 5

16

1 2 1 5 4 5

11

1 1

19

Q127: "Accordian" Patience

你的任务是模拟一种叫“Accordian”的纸牌游戏,他的游戏规则如下:一副扑克牌有52张牌,首先把纸牌一张一张由左到右排好(不能有重叠,所以共有52堆牌,每堆一张),当某一张牌与他左边那张牌或者左边的第三张牌有“Match”的时候,就把这张牌移到那张牌上面去。在这里两张牌“Match”指的是这两张牌的花色(suit)或者点数(rank)一样。当你做了一个移动之后,要察看是否还可以做其他的移动。在任何时间,只有最上面那张牌可以被移动。如果因为移动一张牌使得产生一个空格(也就是被移动的那堆牌只有一张牌),你必须把右边所有的牌堆往左移一格。如此不断的寻找可移动的牌,直到没有一张牌可以移动游戏就结束了。在选择可以移动的牌的时候可能有些状况会发生。如果有两张牌都可以移动,你应该要移动最左边的那张牌。当一张牌可以被移动到左边一格,或左边三格的时候,你必须移动到左边三格。

Input输入包含多组测试资料。每组测试资料两列,每列有26张牌的资料。每张牌以2个字元代表。第一个字元代表牌的点数(A=Ace, 2~9, T=10, J=Jack, Q=Queen, K=King),第二个字元代表牌的花色(C=Clubs, D=Diamonds, H=Hearts, S=Spades)若遇到仅含#的一列代表输入结束。请参考Sample Input。

Output对每组测试资料输出游戏结束时剩下几堆牌,以及每堆牌有多少张牌。请注意如果只有1堆牌,pile后没有加s,请参考Sample Output。

Sample input

QD AD 8H 5S 3H 5H TC 4D JH KS 6H 8S JS AC AS 8D 2H QS TS 3S AH 4H TH TD 3C 6S

8C 7D 4C 4S 7S 9H 7C 5D 2S KD 2D QH JD 6D 9D JC 2C KH 3D QC 6C 9S KC 7H 9C 5C

AC 2C 3C 4C 5C 6C 7C 8C 9C TC JC QC KC AD 2D 3D 4D 5D 6D 7D 8D TD 9D JD QD KD

AH 2H 3H 4H 5H 6H 7H 8H 9H KH 6S QH TH AS 2S 3S 4S 5S JH 7S 8S 9S TS JS QS KS

#

Sample Output

6 piles remaining: 40 8 1 1 1 1

1 pile remaining: 52

Q128: Software CRC

你在一家有很多个人电脑的公司上班。你的老板,连一分都省博士,想要把这些个人电脑连线,但是他又不想要花钱买网路卡。由于你不小心告诉老板每台电脑出厂时就有一个非同步串列埠在上面,老板当然把脑筋动到这不用花钱的解决方案上。于是可怜的你被指派来完成这工作软体的需求,以使这些电脑之间可以连线。

你已经读了许多关于通讯的书并且知道在传送及接收讯息时,确保讯息的正确性是一个重点。典型的作法是在讯息的最后加上额外的错误检查码。这个资讯允许接收程式检查出传送的资讯是否有错误(在大多数的例子)。于是,你跑到图书馆借回了一本关于通讯厚厚的书,利用周末(当然没有加班费)研究错误检查的部分。

最后,你决定CRC(cyclic redundancy check)是最适合的错误检查方式。以下描述这个机制:

你也注意到,大部分建议采用的g值都是奇数,所以你决定用34943当作 g 的值。现在你迫切的任务就是对待传送的讯息,写一个程式算出这个CRC的值。

例如:若要传送的讯息为:AB(二进位的表示式为:01000001 01000010),你必须算出的CRC值应为60 1B(01100000 00011011的十六进位表示式),使得01000001 0100001001100000 00011011可以整除34943(10进位)。

Input

每组测试资料一列,含有一个待传送的讯息(不会超过1024个ASCII字元的长度),列结束字元(End of line)不被视为待传送讯息的一部份。若遇到只含 # 的一列,代表输入结束(此列无须输出)。请参考Sample Input。

Output

对每组测试资料输出一列,CRC的值(以十六进位表示)。请注意:CRC的值一定介于0到34942(十进位)之间。输出格式请参考Sample Output。

C语言程序设计第三版习题库答案

C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y);

}elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x);

C语言程序设计部分习题及例题参考程序

《C语言程序设计》部分例题及课后习题参考程序1.编程计算如下分段函数: y={2x+3 x≥10 4x 0≤x<10 5x?6 x<0 [参考程序] #include int main() { float x,y; printf("input x:"); scanf("%f",&x); if(x>=10) y=2*x+3; else if(x>=0) y=4*x; else y=5*x-6; printf("y=%.2f\n",y); } 2.编程将从键盘输入的百分制成绩转换为等级分,转换方法如下:90以上(大于或等于90,下同)为A,80分以上为B,70分以上为C,60分以上为D,60分以下,即低于60分为E。[参考程序] #include int main() { float score; char rank; printf("input a score:"); scanf("%f",&score); if(score>100||score<0) { printf("invalid score input\n"); exit(-1); } switch((int)score/10) { case 10: case 9: rank='A';break; case 8: rank='B';break; case 7: rank='C';break;

rank='D';break; default: rank='E'; } printf("%.2f:%c\n",score,rank); return 0; } 3.编程判断以从键盘输入的三个数为边长,是否能构成三角形。 [参考程序] #include int main() { float a,b,c; printf("input a,b,c:"); scanf("%f%f%f",&a,&b,&c); if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a) printf("(%.2f,%.2f,%.2f)能围成三角形\n",a,b,c); else printf("(%.2f,%2.2f,%.2f)不能围成三角形\n",a,b,c); } 4.编程实现将从键盘输入的一个正整数逆序输出,如输入1234,输出3421 [参考程序] #include int main() { int n; printf("input a number:"); scanf("%d",&n); do { printf("%d",n%10); n/=10; } while(n!=0); return 0; } 5.输入一个1~10范围内的整数,计算该数的阶乘。 [参考程序] #include int main() { int n,s=1,i; printf("input a number(1~10):"); scanf("%d",&n); for(i=2;i<=n;i++) s*=i;

C语言程序设计竞赛题及其答案

数学与统计学院 第三届计算机程序设计竞赛题 竞赛需知: 1、答案必须写在答题纸上。 2、程序采用C/JAVA/VB/VFP语言实现均可。 3、考虑到各种因素,程序的键盘输入和结果输出可以用伪代码或者自然语言表示。但是必 须说明输入变量和输出变量。 4、题目最好能用完整、正确的语言程序来解决问题,如确实无法编写完整语言程序的,可 以写出程序主要框架和流程,必要时可以用伪代码或者自然语言描述算法(程序)。 一、玫瑰花数(20分) 如果一个四位数等于它的每一位数的4次方之和,则称为玫瑰花数。例如: + + 1634+ =, 4^4 4^3 4^6 4^1 编程输出所有的玫瑰花数。 #include void main() { int i,j,k,l,m; for(i=999;i<=9999;i++) { j=i/1000; k=i%10; l=i/100-10*j; m=i/10-100*j-10*l; if(i==j*j*j*j+k*k*k*k+l*l*l*l+m*m*m*m) printf("%d\n",i); } } 二、菱形图案(20分) 对给定的奇数n,编程打印菱形图案。 输入样例: 7 输出样例: * *** ***** ******* ***** *** * #include #include void main() {

int i,j,k; int n; scanf("%d",&n); for(i=0;i #include void main() { int i,j,x,y; float r; int a,b,count=0; printf("请输入矩阵的行列i,j:"); scanf("%d%d",&i,&j); printf("请输入圆心的坐标点及半径x,y,r:"); scanf("%d%d%f",&x,&y,&r); for(a=0;a

C语言程序设计程序填空题库及答案

程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include <> main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); a= ①; b= ②; a= ③; printf("a=%d,b=%d\n",a,b); }

【】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include <> double pi(long n) { double s=; long i; for(i=1;i<=n;i++) s=s+ ①; return( ②); } 【】下面的程序的功能是求一维数组中的最小元素。 findmin(int *s,int t,int *k) { int p; for(p=0,*k=p;p

C语言程序设计试题集与答案解析

一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。

13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.

C语言程序设计

一、单选题 1. (4分)若调用fputc函数输出字符成功,则其返回值是( )。? A. EOF ? B. 1 ? C. 0 ? D. 输出的字符 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 2. (4分)若以下程序段: struct dent { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() { struct dent *p;

p=s; ….. } 则以下表达中值为2的是()。 ? A. (p++)->m ? B. *(P++)->m ? C. (*p).m ? D. *(++p)->m 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析 3. (4分)在一个c源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ). ? A. extern ? B. register ? C. auto ? D. static 得分:0知识点:C语言程序设计作业题收起解析 答案D 解析

4. (4分)若二维数组a有m列,则在a[i][j]前面的元素个数为()。? A. j*m+i ? B. i*m+j ? C. i*m+j-1 ? D. i*m+j+1 得分:0知识点:C语言程序设计作业题收起解析 答案B 解析 5. (4分)下面程序的运行结果是(). main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d ”,cnum[0].y/cnum[0].x*cnum[1].x); } ? A. 0 ? B. 1 ? C. 3

C语言程序设计 复习题库

一、填空 1. break 语句通常用于switch // 循环中。 2. C 语言对数组下标的引用一般从0 开始。 3. C 语言中,一个函数一般由两个部分组成,它们是函数首部和函数体。 4. C 标准库函数中,字符串的处理函数包含在string.h 头文件中,数学函数包含在 math.h 头文件中。 5. C 程序的运行需要经过编译和链接两步进行。 6. C 程序中用/**/ 括起来的内容是程序的注释语句。 7. C 语言函数是由函数首部和函数体两部分组成。其中,函数首部包括函数类型、函数 名和函数参数。 8. C 语言提供的三种逻辑运算符是& ,// ,!。 9. C 语言源程序经过编译后,生成文件的后缀名是.c 。 10. C 语言源程序经过连接后,生成文件的后缀名是.exe 。 11. C 语言中,关系表达式和逻辑表达式的值是1//0 。 12. C 语言中的标识符只能由三种字符组成,他们是字母,数字,下划线。 13. C 语言中的每条基本语句以;作为结束符,每条复合语句以} 作为结束符。 14. C 语言中函数返回值的类型是由函数类型决定的。 15. C 源程序的基本单位是函数。 16. int a = 2, b = 3; 表达式 a > b ? a ++ : ++ b 的值为 4 。 17. int x=1,y=1,z=1; x+=y+=z; 则表达式xb>c 的值是0 。 19. 定义一个指针p,它指向一个有 6 个整型元素的一维数组,定义语句为int *p=a[6] ; 。 20. 定义一个指针数组p ,它有 4 个元素,每个指针指向一个整型数据,定义语句为int *p[4]; 。 21. 赋值语句是由= 加上一个分号构成。 22. 构成数组的各个元素必须具有相同的类型。 23. 关系表达式x+y>5 的相反表达式为x+y !>5 。 24. 函数strlen("1234\0xy") 的值为:9 。 25. 函数的形参在未被调用前不分配空间,函数形参的数据类型要和实参相同。 26. 函数体用{ 开始,用} 结束。 27. 结构化设计中的三种基本结构是顺序,选择,循环。

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

C语言程序设计习题及答案

C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是() A、abc B、12AC C、sun D、 A2 3、设有语句int a=4;则执行了语句a+=a- =a*a后,变量a的值是() A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是() A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是() A、% B、/ C、%和/ D、 + 6、以下关于运算符的优先顺序的描述正确的是() A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是()sum=pad=5;pAd=sum++,pAd++,++pAd; printf(“%d\n”,pad);

A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() A、 INPUT x、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、 scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456< 回车 >,下面程序的输出结果是:() void main ( ) { int m,n; scanf(“%2d%3d”,&m,&n); printf(“m=%d n=%d\n”,m,n); } A、m=23 n=45 B、m=234 n=56 C、m=23 n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是() main( ) { int x,y; scanf(“%d”,&x); y=x>12x+10:x-12; printf(“%d\n”,y); } A、 0 B、 22 C、 12 D、10 11、C语言中while和do-while循环的主要区别() A、do-while的循环体至少执行一次 B、while 的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内

第五届全国ITAT教育工程就业技能大赛复赛试题C语言程序设计(A卷)

第五届全国ITAT教育工程就业技能大赛复赛试题 C语言程序设计(A卷) 请考生仔细阅读并严格遵守题目中关于文件保存和命名的要求。 请务必按照试卷要求为文件命名。 考生答题完毕后,首先创建以“准考证号”命名的文件夹(形式如:433034683),并将考试结果严格按题目上的命名要求进行命名并直接保存在该文件夹下。 注意:考生不得在该文件夹下创建任何子文件夹,所有考试结果均直接保存在该文件夹根目录下。 然后选中整个文件夹,用Winrar压缩工具打包后存放在本考场指定的考试结果存放地址,经监考老师确认上传无误后方可离开考场。 注意:在提交答案时,请务必选中上述存放作品的文件夹(如前面创建的433034683文件夹,而不是文件夹下的全部文件)进行压缩,在完成答案提交后,请确保上述压缩包仍保存在本地计算机中。 请务必按照试卷要求提交指定的文件,不得包含非题目要求的过程文件和临时文件,不得包含本试题文件和试题素材。 注意:凡违反上述规定的考生,其成绩一律按零分处理。 题目命名要求:请将编写好的源程序以题号命名,例如第1题的源程序保存为“1.C” )。 重要提示:由于时间有限,请考生首先保证编写的程序在Wintc环境下可以编译通过并执行,并在此基础上完成考题要求的全部功能,以免因编译不通过影响考生的考试成绩。 1、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两 个6升?要求以如下格式打印出分水步骤。(20分) a12 b8 c5 12 0 0 * * * (“*”表示当前状态下每个容器的盛水量) ...... 0 6 6 #include "stdio.h" #include "conio.h" int a,b,c; void move(int *x,int *y,int ymax)

c语言程序设计文档格式

封面 此页统一购买注意本页以下两项的填写 指导老师:李筠虞闯 完成日期:2016-6-5

成绩评定表

课程设计任务书

目录 1、内容及要求 ................................................ 错误!未定义书签。 2、功能分析 .................................................... 错误!未定义书签。 3、设计 ............................................................ 错误!未定义书签。 4、运行与测试 ................................................ 错误!未定义书签。 5、总结 ............................................................ 错误!未定义书签。参考文献 .......................................................... 错误!未定义书签。

1、内容及要求 1.1内容: 人事档案管理:建立数据文件(职工、部门、职称)完成:①数据录入②查询③插入、删除、修改④排序等功能。 1.2要求: 1.程序代码完成,编译运行成功。 2.数据输入首选采用文件的方式,其次键盘输入。 3.分析采用哪种合适的存储结构来储存数据 4.设计一定的用户界面,简洁。 2、功能分析 2.1. 程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在人事管理过程中,由于预计记录对于一个单位的人事数来说太大,操作除了能够增加、删除、修改、保存等外,更多的情况是查询,且能够实现快速查询。特别是当需要动态变化时利用指针,例如插入和删除数据等操作时,为方便插入和删除人事记录,通过数据的自动的移动数据,实现动态管理。 2.2本系统涉及的模块主要有:开始、系统管理、人事管理、信息查询等四大模块。 (1)开始界面主要包括: 各个功能的选择。 (1)人事管理主要包括: (编号、姓名等)基本内容的录入,增加等。 (2) 系统管理主要包括:员工信息的修改,排序等。 (3) 信息查询主要包括:员工信息的查找、删除等。 2.3功能模块图

第五届大赛C语言程序设计预赛

第五届全国ITAT教育工程就业技能大赛预赛试题 C语言程序设计 一、单选题(共计60题) (1)在下述程序中,if (i>j)语句共执行的次数是()。C main() { int i=0,j=14,k=2,s=0; for(;;) { i+= k ; if(i>j) { printf(“%d”,s); break ; } s+=i ; } } A、6 B、9 C、7 D、12 (2)若要用fopen函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件 打开方式应是()。C A、"ab+" B、"rb+" C、"wb+" D、"ab" (3)下列程序的输出结果是()。C struct student { int a, b, c; }; main() { struct student stu[2]={{2,3,4},{5,6,7}}; int t; t=stu[0].a+stu[1].b%stu[0].c; printf("%d \n",t); } A、0 B、1 C、4 D、5 (4)对于浮点型变量f,能实现对f中的值在小数点后第四位进行四舍五入的表达式是()。C A、f=(f*1000+0.5)/1000.0 B、f=(f*1000+0.5)/1000 C、f=(int)(f*1000+0.5)/1000.0 D、f=(f/1000+0.5)*1000 (5)现已定义整型变量int i=1; 执行循环语句“while(i++<5);”后,i的值为()。C A、1 B、5 C、6 D、以上三个答案均不正确 (6)下列程序的输出结果是()。C struct LH { int n;struct LH *m;}p[4]; main() { int i; for(i=0;i<2;i++) {p[i].n=i;p[i].m=&p[i+1];}

C语言程序设计考试题库

一、判断题 1、所谓常量,就是在程序运行过程中其值可以改变的量。() 2、一个C程序可以由多个源程序文件构成,但其中只能有一个main()函数。() 3、在C语言中do-while 语句和for循环均是先执行循环体语句,再判断表达式。() 4、在函数调用中将变量的地址作为实参传递给对应形参时,实现的是单向的值传递。() 5、C语言中所有字符串都是以‘\0’结束的。() 6、do-while构成的循环语句中的循环体最少执行1次。() 7、数组名在C语言中表示的是数组的首地址。() 8、使用gets()函数输入字符串时可以在字符串中输入空格。() 9、算术运算符中‘/’的优先级高于‘%’。() 10、char a[5];该语句表明数组a中的第五个元素为a[5]。() 11、C语言源程序文件的扩展名均为.c。() 12、char a[5];数组a中有a[1]、a[2]、a[3]、a[4]、a[5]共5个元素。() 13、C语言程序区分大小写,字符常量必须定义为大写。() 14、若int i=10,j=2;则执行i*=j+8;后i的值为28。() 15、若int x=100,y=200;则语句printf("%d",(x,y));输出结果为100。() 16、c语言中的标识符只能由字母,数字和下划线三种字符组成。() 17、函数getchar()的作用是:输出一个字符。() 18、一个C语言程序总是从第一个函数开始执行。() 19、在c语言中,char型数据在内存中是以ASCII码形式存储的。() 20、在C语言中switch语句必须使用break语句。() 二、选择题 1、以下说法正确的是()。 A、C语言程序总是从第一个函数开始执行。 B、C语言程序中要调用的函数必须在main()函数中定义。 C、C语言程序总是从main()函数开始执行。

C语言程序设计大赛题目

日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。 题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include int main() { int n,count=0; printf("Please enter number:"); scanf("%d",&n); /*输入任一整数*/ do{ if(n%2) { n=n*3+1; /*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2; /*若为偶数n除以2*/ printf("[%d]: %d/2=%d\n",++count,2*n,n); } }while(n!=1); /*n不等于1则继续以上过程*/ }

数论中著名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 #include #include int main() { int number,i,j,k,l; printf("Please enter a number="); scanf("%d",&number); /*输入整数*/ for(i=1;i int main() { int a,b,c,d; printf("Please enter a number:"); scanf("%d",&a); /*输入整数*/ b=a*a*a; /*求整数的三次方*/ printf("%d*%d*%d=%d=",a,a,a,b); for(d=0,c=0;c

C语言程序设计复习题

《C语言程序设计》复习题 一、判断题(本大题共60个小题) 1.C程序执行的入口是main()函数,所以main函数必须放在程序的开头。 2.定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。 3.注释内容太多会影响程序的执行效率。 4.变量要“先定义,后使用”。 5.字符常量'a'与字符串常量"a"没有区别。 6.数学公式y=-6xz+5[2(a-5)+3]写成C语言表达式是y=-6*x*z+5*[2*(a-5)+3]。 7.数学公式y=|x|+ab-c写成C语言表达式是y=fabs(x)+a*b-c。 8.表达式5/2+5.0/2+7%6 的值为5.5。 9.设int b=7;float a=2.5,c=4.7;则表达式a+(int)(b/2*(int)(a+c)/2)%4 的值为:4.5。 10.设int a=12; 则表达式a/=a+a的值是0.5。 11.在C语言中,运算符!比&&的优先级高。 12.在C语言中,运算符的优先级最小的是逗号运算符。 13.scanf("%d,%d",&x,&y);的输入格式:3,4<回车>。 14.以下程序运行结果是:1,7,0 void main() { int x=1,y=1,z=10; if(z< 0) if(y> 0) x=3; else x=5; printf(" %d," ,x); if(z=y< 0) x=3; else if(y==0) x=5; else x=7; printf(" %d,%d" ,x,z); } 15.该程序运行结果是:BCother void main()

{ char x=‘B’; switch(x) { case ‘A’: printf(“A”); case ‘B’: printf(“B”); case ‘C’: printf(“C”); default: printf(“other”); } } 16.下面程序段运行时输出结果是a=2,b=8 void main() { int x=1,y=1,a=2,b=7; switch(x) { case 1: switch(y) { case 0: a++;break; case 1: b++;break; } case 2: a++;b++;break; case 3: a++;b++; } printf("a=%d,b=%d\n",a,b); } 17.下面程序,当输入为:"abc?" 时,执行结果是:abc void main() { char c; c=getchar(); while (c!='?' ) { putchar(c); c=getchar();} }

C语言程序设计试题及答案

C语言程序设计试题及 答案 内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)

C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是() A、abc B、12AC C、sun D、 A2 3、设有语句int a=4;则执行了语句a+=a- =a*a后,变量a的值是() A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是() A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是() A、% B、/ C、%和/ D、 + 6、以下关于运算符的优先顺序的描述正确的是() A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是() sum=pad=5;pAd=sum++,pAd++,++pAd;

printf(“%d\n”,pad); A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() A、 INPUT x、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、 scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456< 回车 >,下面程序的输出结果是:() void main ( ) { int m,n; scanf(“%2d%3d”,&m,&n); printf(“m=%d n=%d\n”,m,n); } A、m=23 n=45 B、m=234 n=56 C、m=23 n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是() main( ) { int x,y; scanf(“%d”,&x); y=x>12?x+10:x-12; printf(“%d\n”,y); } A、 0 B、 22 C、 12 D、10 11、C语言中while和do-while循环的主要区别()

C语言程序设计大赛题目

C语言程序设计大赛题 目 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1.角谷猜想 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。 题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include<> intmain() { intn,count=0; printf("Pleaseenternumber:"); scanf("%d",&n);/*输入任一整数*/ do{ if(n%2) { n=n*3+1;/*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2;/*若为偶数n除以2*/ printf("[%d]:%d/2=%d\n",++count,2*n,n); } }while(n!=1);/*n不等于1则继续以上过程*/

}

2.四方定理 数论中着名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。 请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 #include<> #include<> intmain() { intnumber,i,j,k,l; printf("Pleaseenteranumber="); scanf("%d",&number);/*输入整数*/ for(i=1;i intmain() { inta,b,c,d; printf("Pleaseenteranumber:"); scanf("%d",&a);/*输入整数*/

C语言课程设计报告—歌星大奖赛评分系统

C语言课程实习报告课程名称:歌星大奖赛 学院:信息工程学院 专业:通信工程 班级: 学号: 姓名: 指导老师: 第一部分:课程设计编号、名称、内容 名称:歌星大奖赛 内容: 【要求】 (1)在歌星大奖赛中,有十个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均植。请编写一个程序实现。 (2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。 【提示】 一、需求分析 这个问题的第一个要求算法比较简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。第二个要求为了考虑效率,要用到排序技术。 第二部分:程序总体设计思路 由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。

在编写本程序的过程中,首先我借助购买的指导材料,了解了一些目标程序运行的次序与界面的操作方法,然后按照题目的具体要求进行思考和设计。 具体的设计思路如下: 程序的要求是根据十个评委对歌手的打分情况,求出这个歌手的平均成绩和最公平及最不公平的裁判。首先,我先考虑到程序的数据输入,可以用scanf函数来解决,并将输入的数据存放于数组中。随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。将排好序的数组中间的八个数求平均值即为此歌手的成绩,可见排序法可大大的简化程序。接下来是最后一个任务就是找最公平的裁判,此过程我使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。为了方便管理员更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。 整个程序的设计思路到此结束。 第三部分:程序功能划分、图示及流程图 【功能模块划分及其流程图】 本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这6个部分来完成。这6个部分依次是: 1.分数的输入部分; 2.对分数进行的排序部分; 3.计算平均值的部分; 4.找出最不公平裁判部分; 5.找出最公平裁判部分; 6.数据的输出部分 总体设计: 系统功能模块图 程序流程

相关文档
相关文档 最新文档