1、程序设计考试复习题(课堂整理仅供参考)必考题 1:穷举法应用实例 2:百钱买百鸡 “百钱买百鸡” 是我国古代数学家张丘建提出的一个著名的数学问题。假设某人有钱百枚,希望买一百只鸡;不同的鸡价格不同,公鸡 5 枚钱一只,母鸡 3 枚钱一只,而小鸡 3 只 1枚钱。试问:如果用百枚钱买百只鸡,可以包含几只公鸡、几只母鸡和几只小鸡。 例 3:百钱买百鸡。 (1)问题分析从题目要求可知:公鸡、母鸡和小鸡的数量是有限的,都不会超过 100。通过对不同数量的公鸡、母鸡和小鸡进行组合,可以计算出购买这些鸡所用的花费,但这个题目要求找出那些花费正好 100 枚且鸡的总数也为 100 只的情况。因此,可以采用穷
2、举法,将不同的公鸡、母鸡和小鸡的数量枚举一遍,找出那些符合题目要求的解。 (2)算法描述 (3)程序代码 #include main( )N Y 开 始 条 件 判 断 x 加 1 结 束 zmain( )int item, ratio, sum,i;printf( “nEnter the first item and ratio: ” );scanf( “%ld%ld”, sum=item;for ( i=1; imain( ) long f1 = 1, f2 = 1, f3, i,n;scanf ( “%ld”, if (n开 始 ch=getchar() 输 出 统 计 结 果 相 应
3、累 加 器 加 1 结 束 是 大 写 是 小 写 相 应 累 加 器 加 1 ch!=n Y N Y N N Y Comment S4: 该题在原课件上进行了变形,不确定是否放在该处,此处5分Comment S5: 该题原课件上有错误,考试变形:改下评委人数#define NUM 26 main( )int letterNUM = 0; char ch; int i;printf(“nEnter text linen“); while (ch=getchar() != n) if (A#define NUM 13 main( )float scoreNUM; int i,minValue,
4、maxValue ;float sum;/* 输入 13位评委给出的分数 */printf(“nEnter 3 score:“);开 始 输 入 13位 评 委 的 分 数 输 出 歌 手 的 分 数 计 算 最 高 、 最 低 分 及 总 分 结 束 计 算 歌 手 的 最 终 分 数 Comment S6: 该题也在原课件上进行了变形:改为输出字符for (i=0; iscoremaxValue) maxValue = i;sum = sum+scorei;/* 计算并输出歌手的最终得分 */sum = (sum- scoreminValue-scoremaxValue)/(NUM-2);
5、printf(“nFinal score is %6.2f“, sum);必考题 4:例 6:假设用户通过键盘输入一个整型数列。请编写一个程序,将其按照从小到大的顺序重新排列。 (该题考试时变形为字符的排列,把原 ppt中的 int改为 char,把 c 改为 d,最终输出 c)(1)问题分析:l 首先从 n个数据中选择一个最小的数据,并将它交换到第 1个位置;然后再从后面 n-1个数据中选择一个最小的数据,并将它交换到第 2个位置;以此类推,直至最后从两个数据中选择一个最小的数据,并将它交换到第n-1个位置为止,整个排序操作结束。 (2)算法描述:选 择 最 小 值 minValue 0i
6、i#define NUM 10 /* 参与排序的数据个数 */main()char dataNUM; /* 存放参与排序的所有整数 */char i, j, minValue, temp;/* 通过键盘输入待排序的整型数列 */printf(“nEnter %c char.“, NUM);for (i=0; iNUM; i+) scanf(“%c“, /* 显示原始整型数列 */printf(“n%c char are:“, NUM);for (i=0; iNUM; i+) printf(“%5c“, datai);for (i=0; iNUM-1; i+) minValue = i;for (j=i+1; jNUM; j+) if (datajdataminValue)minValue = j;if (minValue!=i) /* 交换 */temp = datai;datai = dataminValue;dataminValue = temp;/* 输出排序后的结果 */printf(“nOrdering list is:n“);for (i=0; iNUM; i+) printf(“%5c“, datai);