入门必做的题
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
3. 打印一个 N*N 的方阵,N为每边N=15打印出下面图形
字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT
起每层依次打印数字 1,2,3,... TJ11111111111JT
(右图以N为15为例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
4. 在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅
出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。
编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
5. 输入一个十进数,将其转换成 N 进制数(0 6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数: ①倒填,例如N=5 ②蛇形填数③回转填数 ┌─┬─┬─┬─┬─┐┌─┬─┬─┬─┬─┐┌─┬─┬─┬─┬─┐ │25│24│23│22│21││ 1│ 3│ 4│10│11││ 1│16│15│14│13│ ├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤ │20│19│18│17│16││ 2│ 5│ 9│12│19││ 2│17│24│23│12│ ├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤ │15│14│13│12│11││ 6│ 8│13│18│20││ 3│18│25│22│11│ ├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤ │10│ 9│ 8│ 7│ 6││ 7│14│17│21│24││ 4│19│20│21│10│ ├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤├─┼─┼─┼─┼─┤ │ 5│ 4│ 3│ 2│ 1││15│16│22│23│25││ 5│ 6│ 7│ 8│ 9│ └─┴─┴─┴─┴─┘└─┴─┴─┴─┴─┘└─┴─┴─┴─┴─┘ 7. 读入一行文本,包含若干个单词(以空格间隔,%结尾)。将其中以 A 开头的 单词与以 N 结尾的单词,用头尾交换的办法予以置换。 8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进制加法运算,再将结果化为十进制数输出。 9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,每人恰好输过一次,而且每人手中都正好有16根火柴。问此四人做游戏前手中各有多少根火柴? 编程解决此问题。 10. 如图1所示,编写程序计算┎┰┰┰┰┰┰┰┰┰┒ 大大小小正方形共有多少?当最小┠╂╂╂╂╂╂╂╂╂┨ 正方行边长为1时,它们的总面积┠╂╂╂╂╂╂╂╂╂┨ 共为多少?┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┠╂╂╂╂╂╂╂╂╂┨ ┖┸┸┸┸┸┸┸┸┸┚ 11. 巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之 和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。 12. 下图是一个集装箱仓库,阴影部分表示有集装箱存放不能通过,无阴影处为临时通道。当有人要从入口处到达出口处时,必须寻找可通过路线,请你找出可完成这个过程的最方便(即用最短路线)到达出口处的路径。 ┎┰┰┰入口┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┒ ┠╂╂╂──╂╂╂╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂╂┸┸╂╂╂┨ ┠╂╂╂──╂┸┸╂──╂┰┰╂┰┰╂──╂╂╂╂──╂╂╂┨ ┠╂╂╂──╂┰┰╂┰┰╂╂╂╂╂╂╂──╂┸┸╂──╂╂╂┨ ┠╂╂╂──╂╂╂╂╂╂╂╂╂╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂┨ ┠╂╂╂──╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂┨ ┠╂╂╂──╂┰┰╂┰┰╂┰┰╂──╂┰┰╂──╂┰┰╂╂╂┨ ┠╂╂╂──╂╂╂╂╂╂╂╂╂╂──╂╂╂╂──╂╂╂╂╂╂┨ ┠╂╂╂──╂╂╂╂┸┸╂┸┸╂──╂╂╂╂──╂┸┸╂╂╂┨ ┠╂╂╂──╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂╂┰┰╂──╂╂╂┨ ┖┸┸┸──┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸出口┸┸┸┚ 13. 有N个硬币(N为偶数)正面朝上排成一排,每次将 N-1 个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。编程让计算机把 翻币的最简过程及翻币次数打印出来(用*代表正面,O 代表反面)。 14. 有黑白棋子各有N个(分别用*和O代替),按下图方式排列 ***...***OOO...OOO N个黑棋N个白棋 允许将相邻两个棋子互换位置,最后使队形成黑白交替排列,试编程实现该操作。 15. 已知6个城市,用c[i,j]表示从i城市到城市j是否有单向的直达汽车 (1=<i〈=6,1〈=j〈=6), c[i,j]=1 表示城市i到城市j有单向直达汽车;否则c[i,j]=0. 试编制程序,对于给出的城市代号i,打印出从该城市出 发乘车(包括转车)可以到达的所有城市 16. 设有8枚硬币a,b,c,d,e,f,g,h,其中有一枚硬币是伪造的。 真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最少的比较次数挑出伪造硬币,并鉴定它是重还是轻。 17. 编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同。例如: 输入: THEPRICEOFBREADIS¥125PERPOUND 输出: ABCDDEEEEFHIINOOP¥125PPRRRSTU 并且要求只对A到Z的字母重新排列,其它字符保持原来的状态。 18. 在一线性七个格位置的图上有两种不同颜色的棋子A,B. 排列如下图所示,中间格的位置为空。 ┎─┰─┰─┰─┰─┰─┰─┒ ┃A┃A┃A┃┃B┃B┃B┃ ┖─┸─┸─┸─┸─┸─┸─┚ 要求将A,B的现行位置交换,形成下图中的排列: ┎─┰─┰─┰─┰─┰─┰─┒ ┃B┃B┃B┃┃A┃A┃A┃ ┖─┸─┸─┸─┸─┸─┸─┚ 移动棋子的条件: (1) 每个格中只准放一个棋子。 (2) 任意一个棋子均可移动一格放入空格内。 (3) 一方的棋子均可跳过另一方的一个棋子进入空格。 (4) 任何棋子不得跳跃两个或两个以上棋子(无论颜色同异) (5) 任何一个颜色棋子只能向前跳,不准向后跳。 编程完成有关的移动,并且完成具有2N+1个格子的情形. 其中两种颜色各有N个棋子,且中间为空格. 19. (背包问题) 有 N 件物品 d1,......dN,每件物品重量为 W1,..., WN (Wi > 0),每件物品价值为 V1,......VN (Vi>0)。用这N件物品的某个子集 填空背包,使得所取物品的总重量<=TOTAL,并设法使得背包中物品的价值尽可能高。 20. (N皇后) 在国际象棋的棋盘上放置N个皇后,使其不能互相攻击,即任意 两个皇后不能处在棋盘的同一行,同一列,同一斜线上,试问共有多少种摆法? 21. 请设计一个程序,由计算机把1.. ̄.8的八个自然数填入图中,使得横、竖、对角任何两个相邻的小方格中的两个数是不连续的。(下图右侧的 4 个图 为禁止的情形). ┌─┐┌─┐┌─┐ │││4││8│ ┌─┼─┼─┐└─┼─┐┌─┼─┘ │││││5││7│ ├─┼─┼─┤└─┘└─┘ ││││┌─┐ └─┼─┼─┘│6│┌─┬─┐ ││├─┤│1│2│ └─┘│7│└─┴─┘ └─┘ 22. 在一个4*4的小方格(如图所示)中放置8个*号,使得每行每列放且 仅放两个*号。 ┌─┬─┬─┬─┐ │*│*│││ ├─┼─┼─┼─┤ │*││*││ ├─┼─┼─┼─┤ ││*││*│ ├─┼─┼─┼─┤ │││*│*│ └─┴─┴─┴─┘ 求出所有的基本解。 23. (覆盖问题) 有边长为N(N为偶数)的正方形,请你用N^2/2个长为2, 宽为1的长方形,将它全部覆盖。编程打印出所有覆盖方法。如:N=4 ┌─┬──┬─┐┌──┬──┐ ││││1224│││1122 │├──┤│├──┼──┤ ││││1334│││3344 ├─┼──┼─┤├──┼──┤ ││││5668│││5566 │├──┤│├──┼──┤ ││││5778│││7788 └─┴──┴─┘└──┴──┘ 24. 某地街道把城市分割成矩形方格,每一方格叫作块,某人从家中出发上班,向东要走M块,向北要走N块,(见图)。请设计一个程序,由计算机寻找并 打印出所有的上班的路径。 单位 ┬┌─┬─┬─┬─┬─┬─┬─┐ │││││││││ │├─┼─┼─┼─┼─┼─┼─┤ ↓││││││││ N├─┼─┼─┼─┼─┼─┼─┤ ↑││││││││ │├─┼─┼─┼─┼─┼─┼─┤ │││││││││ ┴└─┴─┴─┴─┴─┴─┴─┘ 家├─────→M←─────┤ 25. (量水) 用存水为M,N升的两个罐子,量出A升水。 26. (八数码问题) 8个编有数码1 ̄8的滑牌,能在3*3的井字格中滑动。 井字格中有一格是空格,用0表示,因而空格周围的数码滑牌都可能滑到空格中去. 下图是数码滑牌在井字格中的两种状态: ┎─┬─┬─┒┏━┯━┯━┓ ┃2 │8 │3 ┃┃1 │2 │3 ┃ ┠─┼─┼─┨┠─┼─┼─┨ ┃1 │6 │4 ┃---->┃8 │0 │4 ┃ ┠─┼─┼─┨┠─┼─┼─┨ ┃7 │0 │5 ┃┃7 │6 │5 ┃ ┗━┷━┷━┛┗━┷━┷━┛ 初始状态目标状态 以左图为初始状态,右图为目标状态,请找出从初始状态到目标状态的滑牌移步 序列,具体要求: (1)输入初始状态和目标状态的数据; a、分别用两行输入上述两项数据: 例:Enter the initial state:2 8 3 1 6 4 7 0 5 Enter the final state:1 2 3 8 0 4 7 6 5 b、对输入数据应有查错和示错功能; (2)实现从初始状态到目标状态的转换(如不能实现,程序应输出不能实现的提示信息); (3)输出结果,每移动一步都必须在屏幕上显示: a、移动每一步时的序号,最后一步的序号即为移动总步数; b、每一步移动后以3*3表格形式显示状态。 (4)要求能使移动步数尽可能少; 27. 给出一个有8个格子的表格,除3个格子外,每个格子中可放入一个数字,这些数字取自自然数 1 到 5,放入格子中的数字不得相同,剩余的3个格子是空格(用O表示)。图1是一个放数字与空格的特例。现要求编程实现从初始表格状态变化到目标表格状态。初始状态和目标状态都是可变的(图1,图2所示的状态仅 是一个特例),由键盘输入格子中的数字(0 ̄5)。 移动规则: (1) 每一个数字只可以通过虚线移入相邻空格。如图1中,允许“2”左移入空 格,而不能上移进入上面空格。 (2) 只允许水平移动或垂直移动,不允许斜移。 (3) 移动后,该数字原先所在的格子变成空格。 实现目标: (1) 输入初始表格状态和目标表格状态的数据。 ①分别在一行内输入上述两项数据; ②对输入的数据应有查错和报错功能; (2) 实现从初始状态到目标状态的转换(如不能实现也应给出必要的说明)。 (3) 显示结果:每移动一步都应在屏幕上有如下信息: ①显示每一步移动的序号。所以最后一步的序号就是移动的总步数。 ②显示每一步移动前后的表格状态。 (4) 以最少的移动步数达到目标。 ┎─┰─┰─┒┎─┰─┰─┒ ┃3┃4┃0┃┃0┃0┃0┃ ┎─╂─╂╂─╂─┒┎─╂─╂╂─╂─┒ ┃01025┃┃12345┃ ┖─┸─┸─┸─┸─┚┖─┸─┸─┸─┸─┚ 图10-1图10-2 初始状态A目标状态B 28. n枚银币 C1,C2,...,Cn, 其中有一块不合格,不合格的银币比正常的要重。现用 一天平找出不合格的一块,要求在最坏的情况下,用的天平次数最少。 29. 把一段文章按要求排版。文章的输入方式为:由键盘输入一段以回车符结束的文章(最大长度 2000 个字符)。排版时以单词为基本单位。单词由不含空格的任意字符组成,是长度小于20个字符的串。空格符是分隔单词的唯一字符,在输入时连续的空格符在处理时应先化简为单个空格符。在排版前应先输入,排版后每行的字符数为N,排版后将整理好的文章按行输出。输出时不能将一个完整的单词截断,并要求输出的总行数最小。将每个不足N个字符的行用空格补足,填充空格符的方式有以下三种。 1)将填充的空格符置于每行的末尾,并要求每行的起始为单词。 2)将填充的空格符置于每行的开始,并要求每行的末尾为单词。 3)将填充的空格符平均分配在每行中,并保证行的起始和末尾均为单词。 30. 某机要部门安装了电子锁。M个工作人员每人发一张磁卡,卡上有开锁的密码特征。 为了确保安全,规定至少要有N个人同时使用各自的磁卡才能将锁打开。问电子锁上至少要有多少种特征? 每个人的磁卡上至少要有多少特征? 如果特征的编号以小写英文字母表示,将每个人的磁卡的特征编号打印出来,要求输出的电子锁的总特征数最少。 设 3<=M<=7, 1<=N<=4, M与N由键盘输入,工作人员编号用 1#,2#,...表示. 31. 甲乙两人从24枚棋子中轮流取子,甲先取,规定每次所取的枚数不能多于上 一个人所取的枚数,也不可不取。 (1)甲第一次取多少枚才能保证甲取得最后一枚,当然,他也不能第一次就把 所有棋子都取走。 (2)讨论棋子总数N(一定是偶数)从6到30的各种情况。讨论内容包括: 对各个N,是否存在一个小于N的枚数M,甲第一次取M枚后就能保证甲如果策略 正确,一定能取到最后一枚棋子。 32. ( 走棋 ) 一个4*4的方阵如图。有一个小卒从上往下走。走至格子1后就 不能走动,走至0后,若下方为1,则向左或向右走,下方为0,则向下走。求所 有走法。 ┌─┬─┬─┬─┐ │1 │0 │0 │0 │ ├─┼─┼─┼─┤ │0 │0 │1 │0 │ ├─┼─┼─┼─┤ │0 │1 │0 │0 │ ├─┼─┼─┼─┤ │1 │0 │0 │0 │ └─┴─┴─┴─┘ 33. ( 野人与传教士 ) 设有三个传教士和三个野人来到河边,打算乘一只船从右 岸渡到左岸去。该船最大负载能力为两人,在任何时候,如果野人人数超过传教士 人数,那么野人就会把传教士吃掉。他们怎样才能用这条船安全地把所有人都渡过 河去呢? 34. ( 取棋子 ) 设有N颗棋子,由人和计算机轮流从中取走若干颗。每方每次最 多取K颗,最少取1颗 (K值不能超过总数的一半,也不能小于1)。试编写一程 序使计算机有较多的获胜机会。 屏幕输入提示: (1) 输入竞赛规则:A. 取最后一颗棋子的那一方为败. B. 取最后一颗棋子的那一方为胜. (2) 总共有多少颗棋子? (3) 一次最多取几颗? (4) 谁先取? (5) 每个回合都应显示: A. 你取几颗? B. 我取走......颗,还剩......颗. (6) 竞赛过程中发生违例时,打印出: 竞赛无法进行下去! (7) 竞赛结束后打印: I win!(我胜!)或 You win!(你胜!)。 35. ( Grundy博弈 ) 在两位选手面前放着一堆铜币。第一位选手把原堆分成不相 等的两堆。然后每个选手轮流地这样做,即当轮到某一方分时, 他把已被分开的任一堆再分成不相等的两堆。博弈这样一直进行下去,直到每一堆都只剩下一个或两个铜币为止,这时博弈结束。规定首先遇到这种情况的选手为输。 36. 猴子选大王: ① N 只猴子站成一行,每隔 M 只从头到尾报数,反复进行,报过数的退出,打 印每次退出的猴子的编号,直到剩下一只为止。 ② N 只猴子站成一行,每 M 只报数。先从头到尾,报到尾后,再返回从尾到头 报数,打印每次方向及过程,直到剩下二只时,以排到后面的(指报数方向)为大王。 ③ N 只猴子围成一圈,从第 P 个开始,每隔 M 只报数,打印每次过程,只剩下一个时为大王。 37. 已知 N 个正整数满足 K1+K2+...+Kn=M。求一组最佳的分解,使得 K1*K2*....*Kn 为最大。 例如:N=2时,给定 K1+K2=6,当 K1=3,K2=3 时,K1*K2=9 为最大 38. 有一集合中有 N 个元素,每个元素均为自然数。给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total。 39. 一个集合满足如下条件: (1)1是集合的元素; (2) 若 P 是集合的元素,则 2*P+1,4*P+5 也是集合的元素。 求:此集合中最小的 K 个元素。 ③对ABC作全排列而得的六个三位数之和为 2886。 40. 一个整型变量只能用来存贮较小的 N!的值,当 N 较大时,可将阶乘值中的每一个数字放在一个一维数组的一个元素中。使用这方法,打印: ①N!的值; ②N!-M!(M>N); ③N!+M! 41. (合并链表) 已知两个链表 AN={a1,a2,...an}, BN={b1,b2,...bm}, 将其合并 为一个链表 CN={a1,b1,a2,b2,...} 42. (算术表达式求值) 输入一个由数字、+,-,*,/ 及括号组成的算术表达式,求其值。 43. 对于次数很高,但项目很少的多项式,可用链表来表示。 例如:X^1000-76*X^76+3*X^3-7可表示为 ┌─┬──┬─┐┌──┬─┬─┐┌─┬─┬─┐┌─┬─┬──┐ │1 │1000│┼→│-76 │78│┼→│3 │3 │┼→│-7│0 │ NIL│ └─┴──┴─┘└──┴─┴─┘└─┴─┴─┘└─┴─┴──┘ 在此方式下,编程完成两个多项式的加法与乘法。 44. (一元多项式加法) 实现两个整系数一元多项式的加法。例如, 对于多项式 5*X^6+4*X^3-7*X^4+1 与多项式 50*X^2+4*X, 运算结果为: 5*X^6-7*X^4+4*X^3+50*X^2+4*X+1。 程序要求:键盘输入多项式的各项系数及指数,每项系数及指数为一组数据(系数及指数之一可为零),以'0,0'结束一个多项式的输入,结果按降幂排列,同类项要合并(指数最大不超过30)。 上例第一式的输入为: 5,6 4,3 -7,4 1,0 0,0 输出结果应为:5*x^6-7*x^4+4*x^3+50*x^2+4*x+1. 45. (数列的最小代价) 给定一个正整数序列,例如:4,1,2,3, 不改变数的位置把 它们相加,并且由括号来标记每一次加法所得到的和。例如:((4+1)+(2+3))= ((5)+(5))=10. 除去原数4、1、2、3之外,其余都为中间结果,如:5,5,10, 将中间结果相加,得到:5+5+10=20, 数 20 称为此数列的一个代价。对于另一种算法: (4+((1+2)+3))=(4+((3+3))=(4+(6))=10, 得到数列的另一个代价为:3+6+10=19. 若给出 N 个数的数列,求出此数列的最小代价。 46. 设有一个字符串,长度小于 100,且全部以英文字母组成。对字串中的每个字 母可用 0,1,2 三个数字进行编码,且数字可以重复使用。 程序要求:(1) 输入字符串,并能判断输入是否有错; (2) 输出对应的编码表及码长,要求字串的编码总长度为最短; (3) 根据上述编码表,给出一些编码,然后求出其原字符串。 例如:输入的字符为:ABCBAAADDEF 其对应的编码表为: A: 2 B: 10 C: 11 D: 12 E: 00 F: O1 对应的编码为:210111022212120001 总码长为:18 根据该编码,给出编码:010001121110222 则输出字串:FEFDCBAAAA. 47. 某些密码由 N 个英文字母组成(N〈26), 每个字母的平均使用率为:W1,W2,... ,Wn, 要求编程完成下列任务: ①键入英文字母及个数; ②键入N个英文字母的使用频率; ③用二进制数对该N个英文字母进行编码(最短,无二义性); ④键入字母短文(单词用空格区分),输出相应编码; ⑤键入二进制编码短文,输出译文。 48. 将4个红球,3个白球与3个黄球排成一排,共有多少种排法? 49. 有面值为 M..N 的邮票各一枚,共能拼出多少不同的面额。 50. 有一个四阶方阵,随机产生 1..16 这 16 个自然数(不重复),依次填入每 个方格中。要求用最少的对调次数,使每一行、每一列以及对角线上的四个数之和均相等。打印每一次对调的过程。 51. 微型蓝球赛. 甲,乙两队进行蓝球比赛,结果甲队以S:T 获胜.(T 由键盘输入). 比赛中, 甲队得分始终领先(严格大于乙队). 规定以任何方式进一 球都只得一分. 编程序打印该比赛的每一种可能的不同的得分过程, 以及所有不同 过程的总数. 52. 求两整型数组错位相加的最大面积. 设整型数组 C 具有 N 个分量: C=(C1,C2,...,CN), 两相连分量(C[I],C[I+1]) 可计算一个面积: 若C[I],C[I+1]同号, 则面积 SI=abs(C[I]+C[I+1])/2, 否则,面积等于 (abs(a*C[I])+abs(b*C[I+1]))/2, 其中, a>0,b>0,a+b=1 (详见下图),数组 C 的面积 A=S[1]+S[2]+...+S[N-1]. 编程要求如下: 从键盘输入 N, 再输入两个具有 N 个分量的数组: A1,A2:ARRAY [1..N] OF INTEGER; 将 A1,A2 错位相加(详见后面的例子)得数组A3, 求 A3 的面积.编程给出一个错位相加的方案, 使 A3 的面积最大. 例: 设 N=3, A1=(3,7,2), A2=(-5,7,-4), 则应考虑 9 种情况: (1) (2) A1 3 7 2 3 7 2 A2 -5 7 -4 -5 7 -4 A3 3 7 2 0 -5 7 -4 3 7 2 -5 7 -4 (3) (9) A1 3 7 2 3 7 2 A2 -5 7 -4 ...... -5 7 -4 A3 3 7 -3 7 -4 -5 7 -4 0 3 7 2 53. (工作安排问题) 现有 N (N≤8)件工作, 分别由 N 个人完成, 每人都完成一件,且只完成一件, 每人完成不同工作的时间不同. 试设计一种分配工作方案, 使完成 N 件工作所需的总时间最少. 原始数据由文本文件 EXAM1.TXT 给出, 其格式如下: 第 1 行: 工作任务数(N) 第 2 -- N+1 行: 第 i+1 行为第 i 个人完成各件工作所需的时间. 以上各数 均为不超过 1000 的正整数. 计算结果可直接在屏幕上输出: 第一行为工作分配方案, 共 N 组, 每组数据的形式为 a-b, 其中 a 为工作人员编号, b 为他应完成的工作序号. 例: 设 EXAM1.TXT 的数据为: 4 2 15 1 3 4 10 4 14 15 9 14 16 13 7 8 11 9 对此, 一个正确的输出可以是 1-4, 2-2, 3-1, 4-3 TOTAL=28 54. 求N个字符串的最长公共子串,N<=20,字符串长度不超过255。 例如:N=3,由键盘依次输入三个字符串为 What is local bus ? Name some local buses. local bus is a high speed I/O bus close to the processer. 则最长公共子串为"local bus"。 ( 参看程序 9 ) 55. (液晶显示) 下图是用液晶七笔阿拉数字表示的十个数字,我们把横和竖的一个短划都称为一笔,即7有3笔,8有7笔等。请把这十个数字重新排列,要做到两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如7→3是允许的,7→2不允许。编程打印出所有可能的排列。 如:4107395682。 56. (N阶梵塔) 有K根棒,第一根上放N片大小不等的圆盘,并保持上小下大的顺序。现将N片圆盘从第1根移至第K根,移动中均保持上小下大的顺序,问最少移几次方得结果,求出移动方案。 57. 某一印刷厂有六项加工任务,对印刷车间和装订车间所需时间见下表(时间单位:天) 任务│J1 J2 J3 J4 J5 J6 ─────┼─────────────── 印刷车间│31252911 装订车间│8109631 如何安排加工顺序,使加工时间最少。 58. 将7万元投资到A,B,C三项目上,其利润见下表: 投资额(万元)│1234567 ──────┼──────────────────── 项A│0.11 0.13 0.15 0.24 0.24 0.30 0.35 B│0.12 0.16 0.21 0.25 0.25 0.29 0.34 目C│0.08 0.12 0.20 0.26 0.26 0.30 0.35 如何分配投资额,使获得的利润最大。 59. 无根树与通常所说的树(有根树)很相似,它包含有节点和枝,但不含有根。无根树节点之间只有相邻关系。如图一所示,是一棵有七个节点的无根树,以图一的A为根节点得到图二所示的有根树,以B为根节点得到图三所示的有根树,但从无根树的角度看,图一、二、三是结构相同的无根树,同时无根树的结构与节点的名称无关。 有根树可以用字符串的形式表示,其递归表示方法是: 根节点(子树1子树2子树3...) 图一,图二的有根树可表示为 A(B(CF(EGD))) 和 B(ACF(EGD))。由于子树的表示顺序可以不同,所以一棵有根树可以有多种表示方法,如图三又可表示成 B(F(EGD)CA) 或 B(ACF(DE(G)) 等。表示无根树时,可以以它任一节点为根节点,将其看作有根树,从而可以利用有根树的字符串表示形式来表示无根树。 任务一:由键盘读入一个字符串表示的无根树,无根树的各节点的名称用互不相同的大写英文字母表示。由用户输入一个节点的名称,程序应能够输出一种以该节点为根节点的字符串形式。程序输出无根树的字符串形式时,各个节点的名称无关紧要,所有节点都以P表示,以后的各种输出也采用这种形式。例如:输入无根树的字符串形式:A(B(CD(EF))),指定根节点为D,程序应能输出 P(P(PP)PP),P(PP(PP)P),P(PPP(PP))中的任意 一种即可。 任务二:输入两个串表示的无根树,判断其结构是否一样。注意它与节点名称 无关,只考虑结构。 任务三:输入无根树的总枝数N(1<=N<=11),输出所有枝数为N的互不相同的无根树,并记录总数。以字符串形式输出,例如:N=5 时共有6种不同结构的无根树。 注意:各种树结构的字符串表达形式不唯一。 60. 用N*N(1<=N<=8)的格点阵代表海,其中*号代表岛。给你一组编码信息,让你重构一张地图。这组信息是按垂直方向,水平方向岛的情况摘取的。下例中,每行右边的数字按顺序表示该行中“岛组”的大小,如第一行数字为 “12”,表示该行第一“岛组”由一个岛组成,第二“岛组”由两个岛组成,而 第四列下面的“23”则表示本列由两个“岛组”组成,第一个“岛组”由两个岛 组成,第二个“岛组”由三个岛组成。 任务:编程执行以下步骤,直到给定的输入 (ASCII) 文件中的信息组全部读完 为止,步骤如下: (1)从输入文件 (ASCII 文件)中读入下一个信息块,并将它显示在屏幕上。每个信息块组成为: 格点阵大小 (N),以后是行的约束条件(N行的),列的约束条件(N列的), 每行(或每列)的约束条件是 一行数字,数字间有空格,最后用0结束。上面的例子如图所示。 (2)重构这张地图(若有多个解,要逐个构成地图),并显示。 (3)将重构的地图以ASCII文件形式输出。每岛以*后加一个空格表示;空白处用连续的两个空格表示。若同一已知条件可画出多张地图,相互间用空行隔开;若一组已知条件画不出地图,用“NOMAP(占一行)表示。由不同的信息组求得的解用“NEXTPROBLEM”(占一行表示)1<=N<=8. 61. 一个餐厅在相继的N天里,第 i 天需要 Ri 块餐巾(i=1,2,...,N)。餐厅 可以从三种途径得到餐巾: (1) 购买新的餐巾,每块需P分; (2) 把用过的餐巾送到快洗部,洗一块需M天,费用需F分(F<P); (3) 把餐巾送到慢洗部,洗一块需N天(N>M),费用需S分(S<F)。 在每天结束时,餐厅必须决定将多少块用过的餐巾送到快洗部,多少块送慢洗部,多少块保存起来延期送洗。在每天开始时,餐厅必须决定是否购买新餐巾及购买多少,使洗好的和新购的餐巾之和满足当天的需求量Ri,并使N天总的费用最小。请编程输入总天数,每天所需的餐巾块数以及每块餐巾的新购费用P,快,慢洗费用F,S,和所需天数M,N,输出每天开始时需购新餐巾数,结束时送快,慢洗部和延期送洗的餐巾数。 62. ( 旅行商 ) 一个推销员计划做一次旅行,他必须访问如图所示每个城市。每 两个城市的路径旁标有路径。要求从城市A出发,访问每个城市一次,且只访问一次,最后返回城市A,求一条距离最短的路线。 63. (tic__tac__toe 游戏) tic__tac__toe 游戏的规则是:从一个空的 (N*N) 的 棋盘(例如N=3)开始,甲乙二人轮流将棋子放置在棋盘上未被占据的方格中,例如甲第一个放,他把棋子放在中央的方格里,然后轮到乙放,他把棋子放在第 一行中间的方格里。于是又轮到甲放,......如此进行下去。判定胜负的方法是:若某一游戏者有N枚棋子占据了一横行,或一竖列,或一对角线,则此人获胜;若直至整个棋盘被占满还没有一方获胜,则为平局。 ┏━┯━┯━┓┏━┯━┯━┓┏━┯━┯━┓ ┃││┃┃││┃┃│O│┃ ┠─┼─┼─┨┠─┼─┼─┨┠─┼─┼─┨ ┃││┃┃│X│┃┃│X│┃ ┠─┼─┼─┨┠─┼─┼─┨┠─┼─┼─┨ ┃││┃┃││┃┃││┃ ┗━┷━┷━┛┗━┷━┷━┛┗━┷━┷━┛ 64. 以字符串形式由键盘输入两个高精度的8进制正整数,串长小于255,以第一个数为被除数,第二个数为除数,进行高精度除法运算,并显示按 8 进制表示的商和余数。 ( 参看程序 8 ) 65. ( NOI'94.1_1 ) 键盘输入一个仅由小写字母组成的字符串,输出以该串中任 取M个字母的所有排列及排列总数。 66. ( NOI'94.1_2 ) 编程实现两个高精度实数减法,两数分别由键盘输入,均不 超过240位。 ( 参看程序 5 ) 67. ( NOI'94.1_3 ) 一个实数数列共有N项,已知a(i)=(a(i-1)-a(i+1))/2+d, (1〈i〈N)(N<60) , 键盘输入N,d,a(1),a(n),m,输出 a(m)。 68. ( NOI'94.1_4 ) 键盘输入一个高精度的正整数N,去掉其中任意S个数字后 剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过240位) 69. 在两个文本文件中各存有一个以西文制表符制成的未填入任何表项的表结构,分别称之为表1和表2,要求编程将表1和表2下述规则合并成表3:规则:表1在表2之上,表1和表2的左边框对齐,将表1的最低行与表2的最顶行合并。例:在你的C盘根目录下有两个文件 t0.1 和 t0.2,分别存放上述 的表1和表2,经上述规则合并后得到表3,放在文件中。三张表见下图: ┎─┰─┰─┰─┒┎─┰─┰─┰─┒ ┃┃┃┃┃┎┰─┰─┒┃┃┃┃┃ ┠─╂─╂─╂─┨┃┃┃┃┠─╂─╂─╂─┨ ┃┃┃┃┃┖┸─┸─┚┃┃┃┃┃ ┖─┸─┸─┸─┚┠┰┸┰┸┰┸─┚ ┃┃┃┃ ┖┸─┸─┚ 表1表2表3 编程要求: (1) 程序应能自给定的文件中读入两个源表并显示。 (2) 若源表有错,应能指出其错。 (3) 将表1和表2规则合并成表3,并显示之。 (4) 所有制表符的ASCII码应由选手自己从给出的示例文件中截取。 70. (圆盘问题) 从左向右依次安放 4 根细柱 A,B,C,D. 在 A 上套有 N (N≤20) 个直径相同的圆盘, 从下到上依次用连续的小写字母 a,b,c,...编号, 将这些圆盘经过 B, C 单向地移入 D (即不允许从右向左移动). 圆盘可在 B,C 中暂存. 从键 盘输入 N, 及前 N 个小写字母的一个排列, 它表示最后在 D 盘上形成的一个从下到上的圆盘序列. 请用文本文件 ANS2.TXT 输出形成这一排列的操作过程. 该文件的每一行为一个形如 "k M L" 的字母序列, 其中 k 为圆盘编号, M 为 k 盘原先的柱号, L 为新柱号. 或者直接在屏幕上输出"No",表示不能生成这种排列. 例: ┃┃┃┃ 键盘输入: ┃┃┃┃ 3 d ━╋━┃┃┃ acb c ━╋━┃┃┃ 则一个正确的输出文件 b ━╋━┃┃┃ 可以是: a ━╋━┃┃┃ c A B ━━┻━━━┻━━━┻━━━┻━ b A C A B C D a A D b C D c B D 71. (最长连线) 设有一个 N×N 的方格图形,且 N 为 3 的倍数。要求在图形中 存放 0 或 1,相邻的 1 可以连成一条连线,连接的方法可以是行,也可以是列;同时约定一条连线只能有一个起点和一个终点,图形上的点最多只能访问一次。编程求最长连线. 例如 N=6 时,有下图: 123456 ┌─┬─┬─┬─┬─┬─┐ 1│1│1│1│0│0│1│ ├─┼─┼─┼─┼─┼─┤ 2│1│1│0│1│1│1│ ├─┼─┼─┼─┼─┼─┤ 3│0│0│0│1│0│1│ ├─┼─┼─┼─┼─┼─┤ 4│1│1│0│1│1│1│ ├─┼─┼─┼─┼─┼─┤ 5│0│1│0│0│0│0│ ├─┼─┼─┼─┼─┼─┤ 6│1│1│1│1│0│0│ └─┴─┴─┴─┴─┴─┘ 在该图中,包含有如下的一些连线: 1←1←11←11 ↓↓↓ 1→111→11 ↓↑↓ 1→1→111 ↑↓ 1←1←1 在以上的连线中,最长的连线为:表示方法: 1最长连线长度:LMAX=9 ↓连线:(1,6)→(2,6)→ 1→11 (3,6)→(4,6)→ ↑↓ (4,5)→(4,4)→ 11 (3,4)→(2,4)→ ↑↓ (2,5) 1←1←1连线的表示不是唯一的,仅给出一种即可。 72. (NOI'95.1_2)在一个园形操场的四周摆放 N 堆石子(N≤100),现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 编一程序,由文件读入堆数 N 及每堆的石子数(≤20), ①选择一种合并石子的方案, 使得做N-1次合并, 得分的总和最小; ②选择一种合并石子的方案, 使得做N-1次合并, 得分的总和最大. 例如, 图 2-1 所示的4堆石子,每堆的石子数(从最上面的一堆数起, 顺时针数) 依次为4 5 9 4. 则 3 次合并得分总和最小的方案为图2-2,得分总和最大的方案为图 2-3. (加图) 输入数据: 文件名由键盘输入,该文件内容为; 第一行为石子堆数 N; 第二行为每堆的石子数, 每两个数之间用一个空格符分隔 输出数据: 输出文件名为 OUTPUT.TXT 第 1 至 N-1 行为得分最小的合并过程. 每行包含两个数, 表示应该合并的两 堆石子的数目, 小数在前, 大数在后, 第 N 行为合并成一堆后的最小得分总和; 第 N+1 行为空行, 第 N+2 至 2N+1 行为得分最大合并过程(格式同前). 第 2N+2 行为最大得分总和. 73. (NOI'95.1_4) N 位由 0 和 1 组成的字符串 A、B 可分别表示为 A=aNaN-1…ai…a2a1 B=bNbN-1…bi…b2b1 其中, ai=0或1, bi=0或1, 1≤i≤N,N≤15. 如果存在某一位j(j?1…N),在该位上两串不同, 即aj≠bj, 而其余N-1位 上的两串相同, 即ai=bi(i?1…N,i≠j),则称 A、B 两串“互邻”。 比如,在N=4时, A=1100, B=1000, A、B 两串“互邻”,而 C=1100, D= 1010, C、D 两串不“互邻”。 编程要求: 寻找一个含有 2N 个上述01串的序列, 该序列满足以下要求: ①组成该序列的每一个01串都与其它串不同; ②第k个串与第k-1个串有“互邻”关系,2≤k≤2N; ③该序列首项由输入指定. 例如 N=2, 指定首项为01, 则一个满足上述要求的序列为 01 11 10 00 输入数据┏━━━━━━┓┏━━━━━┓ 文件名由键盘输入┃EXAMPLE4.TXT┃┃MODEL4.TXT┃ 该文件共有两行┠──────┨┠─────┨ 第一行为 N ┃2 ┃┃2 ┃ 第二行为指定的序列首项┃01 ┃┃01 ┃ ┃┃┃11 ┃ 输出数据┗━━━━━━┛┃10 ┃ 输出文件为 OUTPUT.TXT ┃00 ┃ 第一行为 N ┃┃ 第二行至第2N+1行依次输出序列的每一个串. ┗━━━━━┛ 输入输出举例 参考输入文件: EXAMPLE4.TXT 参考输出文件: MODEL4.TXT 74. (NOI'95.1_5) m、n为整数,且满足下列两个条件: ① m、n?{1, 2, …, k}, (1≤k≤109) ② (n^2-m*n-m^2)^2=1 编一程序, 由键盘输入k, 求一组满足上述两个条件的 m、n, 并且使m^2+n^2 的值最大. 例如, 若 k=1995, 则 m=987, n=1597 时, 则 m、n 满足条件, 且可使 m^2+n^2的值最大. 75. (钱币系统问题) 某钱币系统由 k (k≤20)种硬币组成, 币值依次为 a[1], a[2],...,a[k], 其中 a[i] (i=1,2,...,k) 为互不相同的正整数, 且依降序排列, a[1]≤200.给定某整数币值n(n≤3000),要求用最少枚数的硬币表示这个币值. 输入: 用文件输入已知数据, 格式为: 第 1 行: k (硬币种数) 第 2 行: a[1] a[2] ... a[k] (各币值用空格隔开,已按降序排列好) 第 3 行: n (给定的币值) 输出: 直接在屏幕上输出结果. 如果该钱币系统无法表示币值 n,应输出'No', 否则按以下格式输出: 第 1 行: 最少钱币枚数 r. 第 2 行: 输出若干形如 m*n 的表达式, m 为币值, n为使用该币值的枚数. 各式第 2 个因子之和应等于 r, 各式乘积之和应等于 n. 例: 设 (a[1],a[2],a[3])=(5,2,1), n=12, 则应输出 3 5*2 2*1. 76. (省刻度尺问题)给定长度为 L 的直尺, L 为整数, 且L≤40.为了能一次直接 量出 1,2,...,L 的各种长度, 该尺内部至少要有多少条刻度 ? 请输出最少刻度 数( 不含两端点)及每个刻度的位置. 测量长度时可利用两端点, 其位置分别为 0, L. 输入: 由键盘输入 L. 输出: 用文本文件按以下格式输出结果(文件名: ANS2.TXT): 第 1 行: S ( 最少刻度数 ) 第 2 行: 尺内 S 个刻度的位置 第 3 行至第 L+2 行: 每行输出 3 个用空格隔开的整数 t m n, 其中 1≤t≤L为要测量的各长度, m,n 依次为该长度的起止刻度 (m 例: 如果 L=6, 则一个正确的输出是: 2 1 4 提示: (1) 最少刻度数 S 应满足: 1 0 1 C[S+2,2]=(S+2)*(S+1)/2≥L. 2 4 6 (2) 除两端点外, 第一个刻度可取为 3 1 4 A[1]=1, 第二个刻度可在 1, L-2, L-1 这 4 0 4 三个数中选取. 5 1 6 6 0 6 第一章C语言基础知识 1.1 选择题 1. 以下不是C语言的特点的是()。B A、语言简洁紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件操作 D、C语言移植性好 2. 下列字符序列中,不可用作C语言标识符的是()。B A.abc123 B.no.1 C._123_ D._ok 3. 正确的C语言标识符是()。A A._buy_2 B.2_buy C.?_buy D.buy? 4. 请选出可用作C语言用户标识符的一组标识符()。B A.void B.a3_b3 C.For D.2a define _123 -abc DO WORD IF Case sizeof 5. 下列符号中,不属于转义字符的是()。B A.\\ B.\0xAA C.\t D.\0 6. 不属于C语言关键字的是()。d A.int B.break C.while D.character 7. 是C语言提供的合法关键字的是()。b A.Float B.signed C.integer D.Char 8. 以下不能定义为用户标示符的是()。b A.scanf B.Void C._3com_ D.int 9. 一个C程序是由()。 b A.一个主程序和若干子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 10. C语言程序的基本单位是()。 c A.程序行 B.语句 C.函数 D.字符 11. 下列说法中,错误的是()。 a A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号B.每个函数都有一个函数头和一个函数体,主函数也不例外 C.主函数只能调用用户函数或系统函数,用户函数可以相互调用 D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数 12. 以下说法中正确的是()。 c A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行 1.在C语言程序中,可以用作变量名的是____B_____。 A.1 B.a1 C.int D.*p 2.设有如下的变量定义: int i =8,k ,a,b ; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是____A______。 A.a+=a-=(b=4)*(a=3) B.x%(-3) C.a=a*3=2 D.w=float(i) 3.设整型变量a的初值为12,执行完a+=a-=a*a后,a的值为_D___。 A.522 B.144 C.264 D.-264 4.C语言中要求参加运算的数必须是整数的运算符是__C______。 A./ B.!C.% D.= =我iuf 5.下面程序的输出是__C_____ 第 1 页共9 页 main() { int x=10,y=3; printf(“%d\n”,y=x/y); } A.0 B.1 C.3 D.不确定的值 6.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为__C_____。 A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2 7.已知i=5,写出语句i-=0x12; 执行后整型变量i 的值是__A______。 A.-13 B.5 C.12 D.10 8.C语言规定:在-个源程序中,main函数的位置___C____。 A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后 9.putchar函数可以向终端输出一个___D_______ A.整型变量表达式值B.实型变量值 C.字符串D.字符或字符型变量值 10.printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列?如果字符串长度大于5,则输出按方式___B_____。 A.从左起输出该字串,右补空格 B.按原字符长从左向右全部输出 C.右对齐输出该字串,左补空格 D.输出错误信息 11.已有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第-列开始输入数据12345 678(回车),则x 的值为___B_______。A.12345 B.123 C.45 D.345 12.C语言程序中,当调用函数时___A_______。 第 2 页共9 页 1.下列四组选项中,均不是C语言关健字的选项是( A )。 A) define B) gect C) include D) while IF char scanf go type printf case pow 2.下面四个选项中,均是合法整型常量的选项是( A )。 A)160 B)-0xcdf C) -01 D)-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x 3.下面四个选项中,均是不合法的转义符的选项是( B )。 A) '\"' B) '\1011' C) '\011' D) '\abc' '\\' '\' '\f' '\101' 'xf' '\A' '\}' 'x1f' 4.下面不正确的字符串常量是( A )。 A)'abc' B)"12'12" C)"0" D)" " 5.以下选项中不合法的用户标识符是( A )。 A)abc.c B)file C)Main D)PRINT 6.C语言提供的合法关键字是( D )。 A) swith B) cher C) Case D)default 7.下列标识符组中,合法的用户标识符为 A A)_0123与ssiped B)del-word与signed C)list与*jer D) keep%与wind 8.在C语言中,逻辑值"真"的表示是用( C )。 A) true B) 整型值0 C)非另整型值 D) T 9若有以下定义 char s='\092'; 则该语句( b ) A)使s的值包含一个字符 B)定义不合法,s的值不确定 C)使s的值包含4个字符 D)使s的值包含3个字符 10设C语言中,int类型数据占2个字节,则float类型数据占( D )个字节。 A)1 B)2 C)8 D)4 11已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的值为( A )。 A)D B)68 C)不确定的值 D)C 12逻辑运算符两侧运算对象的数据类型是 ( D )。 A) 只是0或1 B) 只能是0或非0正数 C) 只能是整型或字符型数据 D) 可以是任何合法的类型数据 13TURBO C中int类型变量所占字节数是( B )。 c语言程序基础练习题道(附答案) ————————————————————————————————作者:————————————————————————————————日期: 1.下列四组选项中,均不是C语言关健字的选项是( A )。 A) define B) gect C) include D) while IF char scanf go type printf case pow 2.下面四个选项中,均是合法整型常量的选项是( A )。 A)160 B)-0xcdf C) -01 D)-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x 3.下面四个选项中,均是不合法的转义符的选项是( B )。 A) '\"' B) '\1011' C) '\011' D) '\abc' '\\' '\' '\f' '\101' 'xf' '\A' '\}' 'x1f' 4.下面不正确的字符串常量是( A )。 A)'abc' B)"12'12" C)"0" D)" " 5.以下选项中不合法的用户标识符是( A )。 A)abc.c B)file C)Main D)PRINT 6.C语言提供的合法关键字是( D )。 A) swith B) cher C) Case D)default 7.下列标识符组中,合法的用户标识符为 A A)_0123与ssiped B)del-word与signed C)list与*jer D) keep%与wind 8.在C语言中,逻辑值"真"的表示是用( C )。 A) true B) 整型值0 C)非另整型值D) T 9若有以下定义 char s='\092'; 则该语句( b ) A)使s的值包含一个字符B)定义不合法,s的值不确定 C)使s的值包含4个字符D)使s的值包含3个字符 10设C语言中,int类型数据占2个字节,则float类型数据占(D )个字节。 A)1 B)2 C)8 D)4 11已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的值为( A )。 A)D B)68 C)不确定的值D)C 12逻辑运算符两侧运算对象的数据类型是( D )。 A) 只是0或1 B) 只能是0或非0正数 C) 只能是整型或字符型数据D) 可以是任何合法的类型数据 13TURBO C中int类型变量所占字节数是( B )。 A)1 B)2 C)3 D)4 1. (N阶梵塔) 有K根棒,第一根上放N片大小不等的圆盘,并保持上小下大的 顺序。现将N片圆盘从第1根移至第K根,移动中均保持上小下大的顺序,问最少移几次方得结果,求出移动方案。 2. 某一印刷厂有六项加工任务,对印刷车间和装订车间所需时间见下表(时间单位:天) 任务│J1 J2 J3 J4 J5 J6 ─────┼─────────────── 印刷车间│31252911 装订车间│8109631 如何安排加工顺序,使加工时间最少。 3. 将7万元投资到A,B,C三项目上,其利润见下表: 投资额(万元)│1234567 ──────┼──────────────────── 项A│0.11 0.13 0.15 0.24 0.24 0.30 0.35 B│0.12 0.16 0.21 0.25 0.25 0.29 0.34 目C│0.08 0.12 0.20 0.26 0.26 0.30 0.35 如何分配投资额,使获得的利润最大。 4. 无根树与通常所说的树(有根树)很相似,它包含有节点和枝,但不含有根。无根树节点之间只有相邻关系。如图一所示,是一棵有七个节点的无根树,以图一的A为根节点得到图二所示的有根树,以B为根节点得到图三所示的有根树,但从无根树的角度看,图一、二、三是结构相同的无根树,同时无根树的结构与节点的名称无关。 有根树可以用字符串的形式表示,其递归表示方法是: 根节点(子树1子树2子树3...) 图一,图二的有根树可表示为 A(B(CF(EGD))) 和 B(ACF(EGD))。由于子树的表示顺序可以不同,所以一棵有根树可以有多种表示方法,如图三又可表示成 B(F(EGD)CA) 或 B(ACF(DE(G)) 等。表示无根树时,可以以它任一节点为根节点,将其看作有根树,从而可以利用有根树的字符串表示形式来表示无根树。 任务一:由键盘读入一个字符串表示的无根树,无根树的各节点的名称用互不相同的大写英文字母表示。由用户输入一个节点的名称,程序应能够输出一种以该 节点为根节点的字符串形式。程序输出无根树的字符串形式时,各个节点的名称无 关紧要,所有节点都以P表示,以后的各种输出也采用这种形式。例如:输入无根 树的字符串形式:A(B(CD(EF))),指定根节点为D,程序应能输出 P(P(PP)PP),P(PP(PP)P),P(PPP(PP))中的任意 一种即可。 任务二:输入两个串表示的无根树,判断其结构是否一样。注意它与节点名称 无关,只考虑结构。 1.求两个数的最小公倍数: #include 1、加法练习程序:由用户通过键盘输入加数和被加数,程序显示加法式子,用户通过键盘作答后,程序给出正确与错误提示信息。要求:利用C的选择语句if条件语句或switch 开关语句,键盘输入数据前,程序会出被输入数据的信息提示。 #include 第一章:程序设计基础知识 一、单项选择题 1、以下( )是面向过程的程序设计语言。 A)机器语言B)汇编语言C)高级语言D)第四代语言 2、程序设计一般包含以下四个步骤,其中其中首先应该完成的是( )。 A)设计数据结构和算法B)建立数学模型 C)编写程序D)调试和运行程序 3、以下常用算法中适合计算等差级数的算法是( )。 A)枚举法B)递推法C)分治法D)排序法 4、以下不属于算法基本特征的是( )。 A)有穷性B)有效性C)可靠性D)有一个或多各输出 5、以下描述中不正确的是( )。 A)程序就是软件,但软件不紧紧是程序。 B)程序是指令的集合,计算机语言是编写程序的工具。 C)计算机语言都是形式化的语言,它有一个语法规则和定义。 D)计算机语言只能编写程序而不能表示算法。 6、下面描述中,正确的是( ) A)结构化程序设计方法是面向过程程序设计的主流。 B)算法就是计算方法。 C)一个正确的程序就是指程序书写正确。 D)计算机语言就是编写程序的工具而不是表示算法的工具。 7、下面描述中,不正确的是( )。 A)递归法的关键是必须有一个递归终止的条件。 B)递归算法要求语言具有反复自我调用子程序的能力。 C)对于同一个问题,递推算法比递归算法的执行时间要长。 D)递推算法总可以转换为一个递归算法。 8、N-S图与传统流程图比较,主要优点是( )。 A)杜绝了程序的无条件转移。 B)具有顺序、选择和循环三种基本结构。 C)简单、只管。 D)有利于编写程序。 A)B)C)D) 二、填空题 1、在流程图符号中,判断框中应该填写的的是________。(判断条件) 2、结构化程序设计是__________应遵循的方法和原则。(面向过程编程) 3、结构化程序必须用__________程序设计语言来编写。(具有结构化控制语句) 4、可以被连续执行的一条条指令的集合称为计算机的________。(程序) 5、只描述程序应该“做什么”,而不必描述“怎样做”的语言被称为________。(面向对象) 6、任何简单或复杂的算法都是由_____和_____这两个要素组成。(数据结构算法) 7、算法的_______特征是指:一个算法必须在执行有限个操作步骤后终止。(有穷性) 8、在三种基本结构中,先执行后判断的结构被称为_________。(直到型循环结构) 9、在程序设计中,把解决问题确定的方法和有限的步骤称为______。(算法) 10、程序设计风格主要影响程序的________。(可读性) 11、用模块组装起来的程序被成为________结构化程序。(模块化) 12、采用自上而下,逐步求精的设计方法便于____________。(结构化和模块化) 三、应用题 目录 第1-3章 C语言基础知识习题 1 选择题 1. 以下不是C语言的特点的是()。 A、语言简洁紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件操作 D、C语言移植性好 2.下列字符序列中,不可用作C语言标识符的是()。 A.abc123 B.no.1 C._123_ D._ok 3.正确的C语言标识符是()。 A._buy_2 B.2_buy C.?_buy D.buy? 4. 请选出可用作C语言用户标识符的一组标识符()。 A.void B.a3_b3 C.For D.2a define _123 -abc DO WORD IF Case sizeof 5. 下列符号中,不属于转义字符的是()。 A.\\ B.\0xAA C.\t D.\0 6.不属于C语言关键字的是()。 A.int B.break C.while D.character 7.是C语言提供的合法关键字的是()。 A.Float B.signed C.integer D.Char 8.以下不能定义为用户标示符的是()。 A.scanf B.Void C._3com_ D.int 9.一个C程序是由()。 A.一个主程序和若干子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 10. C语言程序的基本单位是()。 A.程序行 B.语句 C.函数 D.字符 11.下列说法中,错误的是()。 A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号B.每个函数都有一个函数头和一个函数体,主函数也不例外 C.主函数只能调用用户函数或系统函数,用户函数可以相互调用 D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数 12.以下说法中正确的是()。 A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行 C语言基础选择试题(一) 2123 答案 :C 所谓“裸机”是指( )。 a:没有安装机箱 b:没有安装应用软件 c:没有安装任何软件的计算机 c:只安装操作系统的计算机 2145 答案 :D 可用于大小写字母转换的键是( )。 a:Esc b:CapsLock c:Shift c:CapsLock或Shift 1068 答案 :D 计算机病毒的主要特征是()。 a:只会感染不会致病 b:造成计算机器件永久失效 c:格式化磁盘 c:传染性、隐蔽性、破坏性和潜伏性 1054 答案 :D 个人计算机属于( ) 。 a:小型计算机 b:中型计算机 c:巨型计算机 d:微型计算机 1080 答案 :B 用汉语拼音输入“长沙”两个汉字,输入“changsha”8个字符,那么,“长沙”两字的内码所占用的字节数是()。 a:2 b:4 c:8 c:16 1053 答案 :A 操作系统的功能是( )。 a:提高系统资源的利用率,方便用户使用计算机 b:负责给程序和数据分配内存空间 c:负责各种文件的管理 c:管理磁盘文件和I/O设备管理 1055 答案 :C 组建以太网时,通常都是用双绞线把若干台计算机连到一个中心的设备上,这个设备叫做()。 a:网络适配器 b:服务器 c:集线器 c:总线 1057 答案 :D 应用软件是指( )。 a:所有能够使用的软件 b:能被各应用单位共同使用的某种软件 c:所有微机上都应用的基本软件 c:专门为某一应用目的而编制的软件 1078 答案 :B 为网络提供共享资源并对这些资源进行管理的计算机称之为()。 a:网卡 b:服务器 c:工作站 c:网桥 1082 答案 :B 在Windows98中运行应用程序时,下列哪个操作调不出帮助信息()。 a:按F1键 b:按F10键 c:单击“帮助”菜单 c:单击窗口右上角“”按钮 1068 答案 :A ISO/ OSI参考模型七层协议中第一层是()。 a:物理层 b:数据链路层 c:网络层 c:传输层 2083 答案 :A 解释程序的功能是()。 a:解释执行高级语言程序 b:解释执行汇编语言程序 c:将汇编语言程序翻译成目标程序 c:将高级语言程序翻译成目标程序 1071 答案 :B 在计算机网络术语中,WAN的中文意义是()。 a:以太网 b:广域网 c:互联网 c:局域网 1055 答案 :C 主存储器又称为()。 a:RAM b:ROM c:内存 c:外存 1056 答案 :D 把同种或异种类型的网络相互连接起来称为()。 a:广域网 b:万维网(WWW c:城域网 c:互联网 C语言基础编程题 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() {long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ }} ================================= =======【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 2.程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1;} printf("\nThe total is %d",h);} ================================= ======= 【程序3】 题目:打印出所有的“水仙花数”,所谓“水仙花 数”是指一个三位数,其各位数字立方和等于该数本 身。例如:153是一个“水仙花数”,因为153=1的 三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数 分解出个位,十位,百位。 2.程序源代码: main() {int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%-5d",n); } } printf("\n");} ================================= =======【程序4】 题目:将一个正整数分解质因数。例如:输入90,打 印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小 的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程 已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值, 并用n除以k的商,作为新的正整数你n,重复执行第 一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复 执行第一步。 2.程序源代码: /* zheng int is divided yinshu*/ main() {int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n!=i) {if(n%i==0) { printf("%d*",i); n=n/i; } else break; } } printf("%d",n);} ================================= =======【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成 绩>=90分的同学用A表示,60-89分之间的用B表 示,60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 2.程序源代码: main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); grade=score>=90?'A':(score>=60?'B':'C'); printf("%d belongs to %c",score,grade);} ================================= =======【程序6】 题目:输入两个正整数m和n,求其最大公约数和最 小公倍数。 1.程序分析:利用辗除法。 2.程序源代码: 第一种做法: #include "stdio.h" void main() { int m,n,i; printf("请输入两个正整数:"); scanf("%d%d",&m,&n); if(m C语言的学习其实很简单的,下面是我整理的关于C语言的试题,希望对C语言的初学者有所帮助! 1. (数列的最小代价) 给定一个正整数序列,例如:4,1,2,3, 不改变数的位置把 它们相加,并且由括号来标记每一次加法所得到的和。例如:((4+1)+(2+3))= ((5)+(5))=10. 除去原数4、1、2、3之外,其余都为中间结果,如:5,5,10, 将中 间结果相加,得到:5+5+10=20, 数20 称为此数列的一个代价。对于另一种算法: (4+((1+2)+3))=(4+((3+3))=(4+(6))=10, 得到数列的另一个代价为:3+6+10=19. 若给出N 个数的数列,求出此数列的最小代价。 2. 设有一个字符串,长度小于100,且全部以英文字母组成。对字串中的每个字母可用0,1,2 三个数字进行编码,且数字可以重复使用。 程序要求:(1) 输入字符串,并能判断输入是否有错; (2) 输出对应的编码表及码长,要求字串的编码总长度为最短; (3) 根据上述编码表,给出一些编码,然后求出其原字符串。 例如:输入的字符为:ABCBAAADDEF 其对应的编码表为: A: 2 B: 10 C: 11 D: 12 E: 00 F: O1 对应的编码为:210111022212120001 总码长为:18 3. 某些密码由N 个英文字母组成(N〈26), 每个字母的平均使用率为:W1,W2,... ,Wn, 要求编程完成下列任务: ①键入英文字母及个数; ②键入N个英文字母的使用频率; ③用二进制数对该N个英文字母进行编码(最短,无二义性); ④键入字母短文(单词用空格区分),输出相应编码; ⑤键入二进制编码短文,输出译文。 4. 将4个红球,3个白球与3个黄球排成一排,共有多少种排法? 5. 有面值为M..N 的邮票各一枚,共能拼出多少不同的面额。 6. 有一个四阶方阵,随机产生1..16 这16 个自然数(不重复),依次填入每 个方格中。要求用最少的对调次数,使每一行、每一列以及对角线上的四个数之和均相等。打印每一次对调的过程。 7. 微型蓝球赛. 甲,乙两队进行蓝球比赛,结果甲队以S:T 获胜.(T C语言上机150道题及参考答案 1.某一门课程考试之后,需要统计考生(10人)的平均成绩,并找出其中的最高分和最低分。 2.从键盘输入两个正整数,输出这两个整数的商,要求商的小数点后保留5位。例如输入355和113,输出 3.14159。 3.用while循环结构编写程序打印ASCII码为33-127的字符。 4.用do-while,for循环结构编写程序打印ASCII码为33-127的字符。 5.用for循环结构编写程序打印ASCII码为33-127字符。 6.在1-500中,找出能同时满足用3除余2,用5除余3,用7除余4的所有整数,用循环结构。 7.输入一个整数将其倒着输出,如54321——12345。 8.计算s=1+1/3+1/5+…+1/n,截止到1/n<10-4。 9.从键盘输入一整数n,计算1*1+2*2+...+n*n的值。 10.用while 循环计算1+2+……+100的和。 11.用do while循环计算1+2+……+100的和。 12.用for 循环计算1+2+……+100的和。 13.输入一个小于等于10的整数n ,计算n!。 14.输入两个正整数m和n,计算m!+n!,m和n的值均小于10。 15.用循环语句,计算1~100之间的所有3的倍数之和。 16.用循环语句,计算100-200之间的所有7的倍数之和。 17.输出1-100之间,7的整数倍数或数字尾数为7的数字,统计出这些数字个数。 18.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。 19.输入一个整数,统计它有几位数。如输入367,则该数有3位数。 20.编写程序,输出1到50中间所有能被3整除的正整数。 21.把100~200之间不能被3整除的输出。 22.编程Y=1+3+5+7+...111。 23.编程y=1*1/2*1/3*1/4*1/5*1/6*...前十项之积。 24.编程输出九九乘法表。 25.求1到100奇数和。 26.求1到100偶数和。 27.编程求200以内所有质数(素数)。 28.从键盘输入一个整数,求该数的绝对值。 29.从键盘输入+、-、*、/中的任一个,输出对应的英文单词:plus、minus、mutiply、divide,如输入的不是这4个字符中的任一个,则输出“sorry,you are wrong”。 30.从键盘输入一个字符,判断其是否为a,r,或f,并输出相应的信息(不区分大小写)。 31.求解一元二次方程ax2+bx+c=0的跟(a不等于0),a,b,c均为实数,其值由键盘输入。 32.编一程序,对于给定的一个百分制成绩,输出用像'A','B','C','D','E'表示的等级成绩。设:90分以上为'A',80~89分为'B',70~79分为'C',60~69分'D',60分 C语言 第一题 在屏幕上显示一个短句“Programming in C is fun!” #include 第一题求平方根(基础) 程序填空,不要改变与输入输出有关的语句。 输入1个实数x,计算并输出其平方根(保留1位小数)。 例:输入17输出The square root of 17.0 is 4.1 #include 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: #include “stdio.h” #include “conio.h” main() { inti,j,k; printf(“\n”); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k 三位互不相同*/ printf(“%d,%d,%d\n”,i,j,k); } getch(); } 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: #include “stdio.h” #include “conio.h” main() { longinti; int bonus1,bonus2,bonus4,bonus6,bonus10, bonus; sc anf(“%ld”,&i); bonus1=100000*0. 1; bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; 1、编写程序,把560分钟换算成用小时和分钟表示,然后输出。解:其所编程序如下 #include"stdio.h" void main() {int a=560,b=60,c,d; c=a/b; d=a%b; printf("560分钟=%d小时%d分钟",c,d); } 2、编写程序,输入两个整数:1500和350,求出它们的商和余数并进行输出。 解:所编程序如下 #include"stdio.h" void main() {int a,b,c,d; printf("Input two numbers:"); scanf("%d%d",&a,&b); c=a/b; d=a%b; printf("c=%d,d=%d\n",c,d); } 3、编写程序,读入三个双精度数,求出它们的平均值并保留此平均 值小数点后一位数,对小数点后的第二位数进行四舍五入,最后输出结果。 解:所编程序如下 #include"stdio.h" void main() {double a,b,c,ave; printf("Enter three numbers:"); scanf("%lf%lf%lf",&a,&b,&c); ave=(a+b+c)/3; printf("(1)ave=%f\n",ave); ave=(int)(ave*10+0.5)/10.0; printf("(2)ave=%f\n",ave); } 4、编写程序,读入三个整数给a、b、c,然后交换它们中的数,把a 中原来的值给b,把b中原来的值给c,把c中原来的值给a,然后输出a、b、c。 解:所编程序如下 #include"stdio.h" void main() {int a,b,c,m,n,t; printf("Enter three numbers:"); scanf("%d%d%d",&a,&b,&c);C语言基础练习题(含答案)Word版
C语言习题
c语言程序基础练习题00道(附答案)
c语言程序基础练习题道(附标准答案)
C语言入门必做习题100例(四)
C语言初学者的几个经典习题
C语言程序设计入门经典例题
C语言程序设计基础知识 习题一及参考答案
C语言基础练习题(含答案)
C语言基础选择试题(一)
40个C语言的基础编程题
C语言入门必做习题100例(三)
C语言上机150道题
大学生C语言期末考试必做题库
C语言经典编程练习题和答案详解入门必备
简单的C语言编程题例题