mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
930 字
2 分钟
考试套题-第二套
2026-06-15

C 语言考试套题 - 第二套#

本套题包含填空题、改错题、程序设计题三个部分,涵盖穷举法、级数求和、字符串处理等核心考点。


一、填空题:百钱百鸡问题#

题目说明#

编程求解”百钱百鸡问题”:公鸡一只值 5 元钱,母鸡一只值 3 元钱,小鸡 3 只值一元钱,求解 100 元钱买 100 只鸡。

解题思路#

这是一道经典的穷举法(枚举法)题目。设:

  • a 为公鸡数量,每只 5 元,最多买 100/5 = 20
  • b 为母鸡数量,每只 3 元,最多买 100/3 ≈ 33
  • c 为小鸡数量,3 只 1 元,最多买 100 只

需要同时满足两个条件:

  1. 鸡的总数:a + b + c == 100
  2. 钱的总数: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;
  • 错误原因:1i 都是整数,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/i1.0/i 结果完全不同
  • 函数返回值:有返回值类型的函数必须有 return 语句
  • 循环累加求和:经典的级数求和模式

三、程序设计题:字符串数组合并#

题目说明#

请编写函数 fun,该函数的功能是:将放在字符串数组中的 M 个字符串(每串的长度不超过 N),按顺序合并组成一个新的字符串。

例如:若字符串数组中的 M 个字符串为 {"AAAA","BBBBBBB","CC"},则合并后的字符串内容应该是 "AAAABBBBBBBCC"

注意:请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。

解题思路#

  1. 首先将目标字符串 b 初始化为空字符串 ""(使用 strcpy
  2. 遍历二维字符数组 a 的每一行(每个字符串)
  3. 使用 strcat 将每个字符串依次追加到 b 的末尾
  4. 循环 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 复制到 dest
    • strcat(dest, src):将 src 追加到 dest 末尾
  • 目标字符串初始化:拼接前必须先将目标串清空,否则会残留原有内容
  • 指针作为输出参数:通过 char* b 将结果传回主调函数
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

考试套题-第二套
https://blog.radarweb.top/posts/c/考试套题-第二套/
作者
Sherry
发布于
2026-06-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录