软件3+2复习
第1题

#include <stdio.h>
#include <math.h> // 用于sqrt函数(计算平方根)
int main() {
double x, y; // 用double存储,适配小数和大数场景
// 提示用户输入x的值
printf("请输入x的值:");
scanf("%lf", &x);
// 根据x的范围计算y
if (x < 0) {
y = x + 5;
} else if (x >= 0 && x < 5) {
y = x * x - 2;
} else { // x >= 5的情况
y = sqrt(x) + 1;
}
// 输出结果
printf("y = %.2lf\n", y);
return 0;
}
第2题

#include <stdio.h>
int main() {
double x, y;
// 提示输入x
printf("请输入x的值:");
scanf("%lf", &x);
// 根据x的范围计算y
if (x < 2) {
y = 2 * x - 1;
} else if (x >= 2 && x < 8) {
y = 3 * x + 4;
} else { // x >= 8
y = x - 6;
}
// 保留2位小数输出
printf("对应的y值为:%.2lf\n", y);
return 0;
}
第3题

#include <stdio.h>
int main() {
// 定义年份变量,遍历范围 2000 ~ 2666
int year;
printf("2000年 ~ 2666年之间的所有闰年:\n");
// 遍历指定区间的每一个年份
for (year = 2000; year <= 2666; year++)
{
// 闰年判断核心条件(二选一即可)
if ( (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) )
{
printf("%d ", year); // 输出符合条件的闰年
}
}
printf("\n"); // 换行优化输出格式
return 0;
}
第4题

#include <stdio.h>
int main() {
int num,i; // 存储输入的正整数
int is_prime = 1; // 标记是否为质数,1=是质数,0=不是质数
// 1. 输入一个正整数
printf("请输入一个正整数:");
scanf("%d", &num);
// 2. 合法性校验(质数必须>1)
if (num <= 1) {
printf("%d 不是质数\n", num);
return 0; // 直接结束程序
}
// 3. 核心判断:遍历2 到 num-1,检查是否能被整除
for (i = 2; i < num; i++) {
// 若能被整除 → 不是质数,直接跳出循环
if (num % i == 0) {
is_prime = 0;
break;
}
}
// 4. 根据标记输出结果
if (is_prime == 1) {
printf("%d 是质数\n", num);
} else {
printf("%d 不是质数\n", num);
}
return 0;
}
第5题:

#include <stdio.h>
// 计算长方形面积的函数(拼音命名)
float chang_fang_xing_mian_ji(float chang, float kuan) {
return chang * kuan;
}
// 计算长方形周长的函数(拼音命名)
float chang_fang_xing_zhou_chang(float chang, float kuan) {
return 2 * (chang + kuan);
}
int main() {
float chang, kuan; // 定义长、宽变量(拼音命名)
float mian_ji, zhou_chang; // 存储面积、周长的变量
// 输入长和宽
printf("请输入长方形的长:");
scanf("%f", &chang);
printf("请输入长方形的宽:");
scanf("%f", &kuan);
// 调用面积函数
mian_ji = chang_fang_xing_mian_ji(chang, kuan);
// 调用周长函数
zhou_chang = chang_fang_xing_zhou_chang(chang, kuan);
// 输出结果(保留2位小数)
printf("长方形的面积为:%.2f\n", mian_ji);
printf("长方形的周长为:%.2f\n", zhou_chang);
return 0;
}
第6题

#include <stdio.h>
// 定义圆周率常量,取值3.14159(精度足够日常计算)
#define PI 3.14159
// 函数1:求圆的面积,函数名纯拼音 yuan_de_mian_ji
// 参数:ban_jing(半径),返回值:计算后的面积
float yuan_de_mian_ji(float ban_jing) {
return PI * ban_jing * ban_jing; // 面积公式:π × 半径²
}
// 函数2:求圆的周长,函数名纯拼音 yuan_de_zhou_chang
// 参数:ban_jing(半径),返回值:计算后的周长
float yuan_de_zhou_chang(float ban_jing) {
return 2 * PI * ban_jing; // 周长公式:2 × π × 半径
}
// 程序入口main函数:调用两个函数,完成整体逻辑
int main() {
// 定义半径变量,拼音命名 ban_jing
float ban_jing;
// 定义接收结果的变量,拼音命名
float mian_ji, zhou_chang;
// 提示用户输入圆的半径(支持整数/小数)
printf("请输入圆的半径:");
scanf("%f", &ban_jing);
// 合法性校验:半径不能为负数
if (ban_jing < 0) {
printf("输入错误!圆的半径不能为负数\n");
return 0; // 终止程序
}
// 分别调用两个自定义函数,接收计算结果
mian_ji = yuan_de_mian_ji(ban_jing);
zhou_chang = yuan_de_zhou_chang(ban_jing);
// 输出结果,保留2位小数,格式清晰
printf("该圆的面积为:%.2f\n", mian_ji);
printf("该圆的周长为:%.2f\n", zhou_chang);
return 0;
}
第7题

#include <stdio.h>
int main() {
// 定义包含10个成绩的数组(你可以根据需要修改具体数值)
int score[10] = {85, 92, 78, 90, 88, 76, 95, 89, 81, 87};
// 定义变量存储统计结果
int i;
int max_score; // 最高分
int min_score; // 最低分
int sum_score = 0;// 总成绩,初始化为0
float avg_score; // 平均分(用浮点型保证精度)
// 初始化最高分和最低分为数组第一个元素
max_score = score[0];
min_score = score[0];
// 遍历数组,计算总成绩、最高分、最低分
for (i = 0; i < 10; i++) {
// 累加计算总成绩
sum_score += score[i];
// 更新最高分:如果当前成绩大于当前最高分,则替换
if (score[i] > max_score) {
max_score = score[i];
}
// 更新最低分:如果当前成绩小于当前最低分,则替换
if (score[i] < min_score) {
min_score = score[i];
}
}
// 计算平均分(总成绩除以人数,注意转换为浮点型避免整数除法)
avg_score = (float)sum_score / 10;
// 输出结果
printf("成绩数组:");
for (int i = 0; i < 10; i++) {
printf("%d ", score[i]);
}
printf("\n");
printf("最高分:%d\n", max_score);
printf("最低分:%d\n", min_score);
printf("总成绩:%d\n", sum_score);
// 保留两位小数输出平均分,更符合实际使用场景
printf("平均分:%.2f\n", avg_score);
return 0;
}
第8题

#include <stdio.h>
int main() {
// 1. 定义成绩数组 + 手动指定数组长度(替代sizeof,核心要求)
int cj[] = {75, 82, 96, 68, 90, 55, 88};
int changdu = 7; // 数组有7个元素,直接写长度,不用sizeof
// 2. 定义变量:输入的成绩、循环变量、位置标记(-1代表初始未找到)
int cha_zhao_cj, i, wei_zhi = -1;
// 3. 输入要查找的成绩
printf("请输入要查找的成绩:");
scanf("%d", &cha_zhao_cj);
// 4. 遍历数组查找(核心逻辑)
for(i = 0; i < changdu; i++) {
if(cj[i] == cha_zhao_cj) { // 匹配到成绩
wei_zhi = i; // 记录数组下标位置
break; // 找到立即退出循环,提升效率
}
}
// 5. 输出结果:找到则显示位置,否则显示“没找到”
if(wei_zhi != -1) {
printf("成绩在数组的第%d个位置\n", wei_zhi + 1); // 按日常习惯从1开始计数
} else {
printf("没找到\n");
}
return 0;
}
C语言期末考点模拟题目汇总
一、单选题(10题)
- 题目:关于C语言中
main函数,以下说法正确的是( )- A.
main函数必须放在程序开头 - B. 一个程序可以有多个
main函数 - C.
main函数的位置可以任意,但只能有一个 - D.
main函数不能调用其他函数 - 核心考点:C程序结构中
main函数的位置规则与唯一性。 - 注意事项:牢记
main函数位置任意且程序仅有一个main函数。
- A.
- 题目:表达式
z = 5 + 4 / 3的值为( )- A. 6
- B. 5
- C. 5.333333
- D. 6.333333
- 核心考点:整型运算中的整数除法规则,结果取整。
- 注意事项:先计算
4 / 3得1(取整),再与5相加。
- 题目:以下不属于C语言关键字的是( )
- A.
typedef - B.
print - C.
do - D.
volatile - 核心考点:对C语言关键字的熟悉程度。
- 注意事项:准确记忆关键字,
print不是关键字,可能与printf混淆。
- A.
- 题目:数学表达式
- 5 <= x <= 5对应的C语言表达式是( )- A.
(x >= - 5) && (x <= 5) - B.
(x >= - 5) || (x <= 5) - C.
- 5 <= x && x <= 5 - D.
- 5 <= x || x <= 5 - 核心考点:分支表达式中逻辑运算符
&&的使用,C语言需分开写条件并用&&连接。 - 注意事项:不能按数学形式连写,
&&表示逻辑与。
- A.
- 题目:下列符合C语言语法的表达式是( )
- A.
a = (b = 3) * (a = 2) - B.
a = a + 3 = 7 - C.
x % = 3.5 - D.
y = int(x) - 核心考点:C语法规范,如赋值运算、
%运算符和强制类型转换的规则。 - 注意事项:赋值左边需为左值,
%运算符两边为整型,强制类型转换格式为(类型)变量。
- A.
- 题目:已知
int a = 0, b = 1, c = 0;,则表达式(a++ || b++) && c++运算后,a、b、c的值分别为( )- A. 1, 1, 0
- B. 1, 2, 1
- C. 0, 2, 1
- D. 0, 1, 0
- 核心考点:逻辑运算的短路求值规则,
||和&&的运算特点。 - 注意事项:
||左边为真则右边不执行,&&左边为假则右边不执行。
- 题目:表达式
'a' + 1.5 - 2的数据类型是( )- A.
int - B.
float - C.
double - D.
char - 核心考点:数据类型提升规则,字符与浮点型运算时的类型转换。
- 注意事项:字符会转换为整型参与运算,最终结果类型为
double(因有1.5)。
- A.
- 题目:
for (int i = 2; i < 8; i += 3)循环执行次数为( )- A. 2次
- B. 3次
- C. 4次
- D. 5次
- 核心考点:
for循环的条件判断与更新表达式的执行逻辑。 - 注意事项:每次循环
i按步长3增加,判断i < 8是否成立。
- 题目:对于数组
int arr[5];,以下能正确表示数组第一个元素的是( )- A.
arr + 1 - B.
&arr[0] - C.
arr[1] - D.
arr[0] - 核心考点:数组元素的表示方法,数组名与下标的关系。
- 注意事项:数组下标从0开始,
arr[0]表示第一个元素,arr + 1是第二个元素地址,&arr[0]是第一个元素地址。
- A.
- 题目:当数组名作为函数实参传递时,实际传递的是( )
- A. 数组的第一个元素值
- B. 数组的所有元素值
- C. 数组的元素个数
- D. 数组的首地址
- 核心考点:函数参数传递中数组名传参的本质。
- 注意事项:记住数组名传参传递的是首地址,不是元素值或个数。
二、程序补全题(5题)
- 题目:将输入的大写字母转换为小写字母(通过ASCII码转换)。
#include <stdio.h>
int main() {
char ch;
scanf("%c", &ch);
// ① 补全判断条件,判断是否为大写字母
if (____________________) {
// ② 将大写字母转换为小写字母
ch = ____________________;
}
printf("%c\n", ch);
return 0;
}
- **核心考点**:字符运算中ASCII码的转换,大写字母与小写字母ASCII码的差值关系。
- **注意事项**:大写字母ASCII码范围及与小写字母差值为32,注意条件判断和转换公式。
2. 题目:输入学生成绩,统计其中的最高分和最低分,输入负数结束输入。
#include <stdio.h>
int main() {
float score, max, min;
scanf("%f", &score);
max = score;
min = score;
while (____________________) {
if (score > max) {
max = score;
}
if (score < min) {
min = score;
}
// ③ 继续输入成绩
scanf("%f", &score);
}
printf("最高分: %.2f, 最低分: %.2f\n", max, min);
return 0;
}
- **核心考点**:循环(`while`循环)与分支结构结合实现最值更新,循环条件控制。
- **注意事项**:设置正确的循环条件,保证能正确更新最值并持续输入成绩。
3. 题目:对有序数组进行折半查找。
#include <stdio.h>
int main() {
int arr[10] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int target, left = 0, right = 9, mid;
scanf("%d", &target);
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] == target) {
// ④ 找到目标,输出结果并结束循环
printf("找到目标,下标为: %d\n", mid);
____________________;
} else if (arr[mid] > target) {
// ⑤ 调整右边界
right = ____________________;
} else {
// ⑥ 调整左边界
left = ____________________;
}
}
if (left > right) {
printf("未找到目标\n");
}
return 0;
}
- **核心考点**:数组操作与循环结合的折半查找逻辑,边界调整和循环终止条件。
- **注意事项**:理解折半查找原理,准确调整左右边界,设置好循环终止条件。
4. 题目:在数组中查找最大值和最小值。
#include <stdio.h>
int main() {
int arr[8] = {5, 3, 9, 1, 7, 4, 6, 2};
int max, min;
// ⑦ 初始化最大值和最小值
max = arr[0];
min = arr[0];
for (int i = 1; i < 8; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("最大值: %d, 最小值: %d\n", max, min);
return 0;
}
- **核心考点**:数组遍历与循环实现最值查找,初始化和遍历过程中的比较逻辑。
- **注意事项**:通常先初始化最值为数组首元素,遍历中正确比较更新最值。
5. 题目:计算分段函数的值。
#include <stdio.h>
#include <math.h>
int main() {
double x, y;
scanf("%lf", &x);
if (x < - 1) {
y = 2 * x + 1;
} else if (____________________) {
y = x * x;
} else {
y = 3 * x - 2;
}
printf("y = %.2f\n", y);
return 0;
}
- **核心考点**:分支结构(`if - else`多分支),根据不同条件计算函数值。
- **注意事项**:准确分析每个分支条件,避免遗漏或重复,注意条件顺序。
三、程序阅读题(2题)
- 题目:分析以下程序的输出结果。
#include <stdio.h>
int main() {
int arr[6] = {1, 2, 3, 4, 5, 6};
int sum = 0;
for (int i = 1; i < 6; i += 2) {
sum += arr[i];
}
printf("sum = %d\n", sum);
return 0;
}
- **核心考点**:数组与循环结合的`for`循环遍历数组,对特定下标的元素进行累加。
- **注意事项**:关注循环变量与数组下标的关系,明确循环范围和累加的元素。
2. 题目:分析以下程序的输出结果。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello\0World";
printf("%d\n", strlen(str));
return 0;
}
- **核心考点**:字符串处理中`strlen`函数对字符串结束符`\0`的识别规则。
- **注意事项**:`strlen`统计到`\0`结束且不包含`\0`本身。
四、基础概念题(2题)
- 题目:将二进制数1010转换为十进制数。
- 核心考点:进制转换中按位权展开计算的方法。
- 注意事项:从右到左依次用二进制位乘以2的相应幂次,幂次从0开始。
- 题目:已知数组
int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};,求该数组第一维的大小。- 核心考点:根据元素总数和第二维大小计算二维数组第一维大小的方法。
- 注意事项:元素总数除以第二维大小,若有余数则第一维大小需向上取整。
五、编程题(4题)
- 题目:编写程序计算分段函数。

从键盘输入x的值,输出对应的y值。
- 核心考点:分支结构(if - else)的运用,根据不同条件计算函数值。
- 注意事项:准确判断每个条件分支,注意条件边界,表达式书写准确。
2. 题目:统计200以内的所有孪生素数(相差为2的一对素数),并输出它们。
- 核心考点:循环结构(for循环)、条件判断以及素数的判断逻辑。
- 注意事项:掌握素数判断方法,通过循环遍历查找孪生素数,注意循环范围和判断逻辑。
3. 题目:在一个整型数组中查找某个特定元素,如果找到,输出该元素在数组中的下标;如果未找到,输出“Not Found”。数组元素通过键盘输入。
- 核心考点:数组的遍历、分支结构判断元素是否存在。
- 注意事项:清楚数组下标的范围,遍历数组时注意边界条件,判断元素存在与否的逻辑要清晰。
4. 题目:编写两个函数,一个用于计算三角形的面积,另一个用于计算三角形的周长。在主函数中输入三角形的三条边,当三条边能构成三角形时(任意两边之和大于第三边),调用这两个函数分别计算并输出面积和周长;否则提示“无法构成三角形”。
- 核心考点:函数的定义、声明与调用,参数传递,条件判断(三角形三边关系)以及基本数学运算的实现。
- 注意事项:函数定义时参数类型和返回值类型要明确,调用函数时参数传递要匹配,注意判断三边能否构成三角形以及数学公式的正确实现。
评论区