来自网络,联系侵删
930 字
2 分钟
考试套题-第二套
C 语言考试套题 - 第二套
本套题包含填空题、改错题、程序设计题三个部分,涵盖穷举法、级数求和、字符串处理等核心考点。
一、填空题:百钱百鸡问题
题目说明
编程求解”百钱百鸡问题”:公鸡一只值 5 元钱,母鸡一只值 3 元钱,小鸡 3 只值一元钱,求解 100 元钱买 100 只鸡。
解题思路
这是一道经典的穷举法(枚举法)题目。设:
a为公鸡数量,每只 5 元,最多买100/5 = 20只b为母鸡数量,每只 3 元,最多买100/3 ≈ 33只c为小鸡数量,3 只 1 元,最多买 100 只
需要同时满足两个条件:
- 鸡的总数:
a + b + c == 100 - 钱的总数:
5a + 3b + c/3 == 100,为避免除法,两边同乘 3 得15a + 9b + c == 300
通过三重循环穷举所有可能的组合,找到满足条件的解。
完整代码
#include <stdio.h>
void main(){ int a, b, c; /* 公鸡每只5元,最多买20只 */ for (a = 1; a <= 20; a++) { /* 母鸡每只3元,最多买33只 */ for (b = 1; b <= 33; b++) { /* 小鸡总数不超过100只 */ for (c = 1; c <= 100; c++) { /* 条件1:鸡的总数为100只 */ /* 条件2:15a+9b+c=300(即5a+3b+c/3=100两边乘3) */ if ((a + b + c == 100) && (15 * a + 9 * b + 1 * c == 300)) { printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n", a, b, c); } } } }}关键考点
- 穷举法(枚举法):通过多重循环遍历所有可能解
- 循环边界确定:根据单价推算各变量上限
- 整数运算避免浮点误差:将
c/3转换为乘法等价形式 - 复合条件判断:同时满足数量和金额两个约束
二、改错题:级数求和
题目说明
下列给定程序中,fun 函数的功能是:根据形参 m,计算下列公式的值。
t = 1 + 1/2 + 1/3 + 1/4 + … + 1/m例如:若输入 5,则应输出 2.283333。
错误分析与修正
该程序有两处 FOUND 标记,对应两个错误点:
错误 1:整数除法问题
- 原错误写法:
t += 1 / i; - 修正写法:
t += 1.0 / i; - 错误原因:
1和i都是整数,1/i执行整数除法,当i > 1时结果为 0,导致求和错误。改为1.0 / i强制进行浮点除法。
错误 2:缺少返回值
- 原错误写法:缺少
return t;语句 - 修正写法:
return t; - 错误原因:函数声明返回
double类型,必须用return将计算结果返回给调用者。
完整代码
#include <stdlib.h>#include <conio.h>#include <stdio.h>
double fun(int m){ double t = 1.0; int i; for (i = 2; i <= m; i++) /* 修正1:使用1.0/i进行浮点除法,避免整数除法结果为0 */ t += 1.0 / i; /* 修正2:必须返回计算结果t */ return t;}
void main(){ int m; system("CLS"); printf("\nPlease enter 1integer number: "); scanf("%d", &m); printf("\nThe result is %1f\n", fun(m));}关键考点
- 整数除法与浮点除法的区别:
1/i与1.0/i结果完全不同 - 函数返回值:有返回值类型的函数必须有
return语句 - 循环累加求和:经典的级数求和模式
三、程序设计题:字符串数组合并
题目说明
请编写函数 fun,该函数的功能是:将放在字符串数组中的 M 个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。
例如:若字符串数组中的 M 个字符串为 {"AAAA","BBBBBBB","CC"},则合并后的字符串内容应该是 "AAAABBBBBBBCC"。
注意:请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。
解题思路
- 首先将目标字符串
b初始化为空字符串""(使用strcpy) - 遍历二维字符数组
a的每一行(每个字符串) - 使用
strcat将每个字符串依次追加到b的末尾 - 循环 M 次后,
b中即包含所有字符串按顺序拼接的结果
完整代码
#include <stdio.h>#include <conio.h>#include <string.h> /* 使用strcpy和strcat需要包含此头文件 */
#define M 3#define N 20
void fun(char a[M][N], char* b){ /**********Program**********/ int i; /* 第1步:将目标字符串b清空,初始化为空串 */ strcpy(b, ""); /* 第2步:遍历M个字符串,依次追加到b末尾 */ for (i = 0; i < M; i++) { strcat(b, a[i]); } /********** End **********/}
void main(){ char w[M][N] = { "AAAA", "BBBBBBB", "CC" }, i; char a[100] = { "##############################" }; printf("The string:\n "); for (i = 0; i < M; i++) puts(w[i]); printf("\n "); fun(w, a); printf("The A string:\n "); printf("%s ", a); printf("\n\n ");}关键考点
- 二维字符数组:
char a[M][N]表示 M 个长度为 N 的字符串 - 字符串处理函数:
strcpy(dest, src):将src复制到deststrcat(dest, src):将src追加到dest末尾
- 目标字符串初始化:拼接前必须先将目标串清空,否则会残留原有内容
- 指针作为输出参数:通过
char* b将结果传回主调函数
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐












