### C语言上机练习题知识点解析 #### 一、题目概览 本次上机练习题主要针对清华大学计1年级《高级语言程序设计》课程期末考试,旨在检验学生对C语言编程的基本掌握情况及其解决实际问题的能力。总分为100分,考试时间为3小时(180分钟)。题目难度整体较高,特别是后半部分,类似在线编程竞赛平台(OJ)中的题目。 #### 二、考试规则及注意事项 1. **文件管理**:考生需在C盘根目录下创建一个以自己学号命名的子目录,并将所有程序文件保存于此目录内。例如,学号为010000的学生需创建`C:\010000`目录。 2. **备份机制**:为防止程序意外丢失,建议考生为每个程序文件创建一个备份副本,备份文件名应在原文件名后加上`bak`前缀,例如第一题的程序备份文件名为`1-1bak.c`。 3. **题目选择**:对于3-A和3-B两个题目,考生最多只能选择其中一题作答。若提交了两道题目的答案,则评卷时会随机选取一道进行评分。 4. **输入输出方式**:所有题目均采用键盘输入和屏幕输出的方式,不得使用任何文件读写操作。 5. **代码规范**:评分时将审查源程序代码,请严格按照题目要求编写程序,遵守各项限制条件。 #### 三、题目解析 ##### 1. 自我介绍 (1-1.c) - **目标**:在屏幕上输出学生的学号和姓名,各占一行。 - **实现思路**:利用`printf`函数输出字符串,其中包含学号和姓名的信息。 - **关键代码示例**: ```c #include <stdio.h> int main() { printf("学号: 010000\n"); printf("姓名: 张三\n"); return 0; } ``` ##### 2. 递归函数 (1-2.c) - **目标**:编写一个递归函数计算给定的数学表达式,输入为实数a和b(0<a,b<10),输出结果保留两位小数。 - **实现思路**:定义一个递归函数,根据题目给出的公式计算结果。 - **关键代码示例**: ```c #include <stdio.h> #include <math.h> double recursiveFunc(double x, double y) { if (x == 0 || y == 0) return 0; return pow(x, 2) + pow(y, 2) - 1 / (recursiveFunc(x - 1, y - 1)); } int main() { double a, b; scanf("%lf %lf", &a, &b); double result = recursiveFunc(a, b); printf("%.2f\n", result); return 0; } ``` ##### 3. 进制转换 (1-3.c) - **目标**:将一个n进制数转换为m进制数,不得使用标准的进制转换函数。 - **实现思路**:首先将n进制数转换为十进制数,然后再将十进制数转换为m进制数。 - **关键代码示例**: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> char *ntom(int n, int m, const char *num) { int decimalValue = 0, base = 1; int len = strlen(num); for (int i = len - 1; i >= 0; i--) { if (isdigit(num[i])) { decimalValue += (num[i] - '0') * base; } else { decimalValue += (toupper(num[i]) - 'A' + 10) * base; } base *= n; } char *result = malloc(sizeof(char) * (len + 1)); int index = 0; while (decimalValue > 0) { int remainder = decimalValue % m; if (remainder < 10) { result[index++] = remainder + '0'; } else { result[index++] = remainder - 10 + 'A'; } decimalValue /= m; } result[index] = '\0'; // Reverse the string for (int i = 0; i < index / 2; i++) { char temp = result[i]; result[i] = result[index - i - 1]; result[index - i - 1] = temp; } return result; } int main() { int n, m; char num[100]; scanf("%d %d %s", &n, &m, num); char *result = ntom(n, m, num); printf("%s\n", result); free(result); return 0; } ``` ##### 4. 竖式打印 (1-4.c) - **目标**:输入两个两位正整数a和b,输出a与b相乘的竖式。 - **实现思路**:通过循环逐位相乘,并正确对齐输出。 - **关键代码示例**: ```c #include <stdio.h> void printVerticalMultiplication(int a, int b) { int carry = 0, product, result = 0; int i = 0, j = 0; // First part of multiplication while (b > 0) { product = ((a % 10) * (b % 10)) + carry; carry = product / 10; result += (product % 10) * pow(10, i++); b /= 10; } result += carry * pow(10, i); // Second part of multiplication while (a > 0) { product = ((a % 10) * b) + carry; carry = product / 10; result += (product % 10) * pow(10, i++); a /= 10; } result += carry * pow(10, i); // Printing the result in vertical format printf("%d\n", a); printf("*%d\n", b); printf("------\n"); for (int k = 0; k < i; k++) { printf("%d", (result / pow(10, i - k - 1)) % 10); } printf("\n"); } int main() { int a, b; scanf("%d %d", &a, &b); printVerticalMultiplication(a, b); return 0; } ``` ##### 5. 铅笔工厂 (1-5.c) - **目标**:计算给定条件下四种铅笔的数量。 - **实现思路**:根据题目描述,可以列出方程组求解。 - **关键代码示例**: ```c #include <stdio.h> void pencilFactory(int n, int m, int k) { int fullyPainted = 0, paintedColorOnly = 0, paintedClearOnly = 0, notPainted = 0; // Calculate the number of pencils for each category for (int i = 1; i <= k; i++) { if (i % n != 0 && i % m != 0) notPainted++; else if (i % n == 0 && i % m != 0) paintedColorOnly++; else if (i % n != 0 && i % m == 0) paintedClearOnly++; else fullyPainted++; } printf("Fully Painted: %d\n", fullyPainted); printf("Color Only: %d\n", paintedColorOnly); printf("Clear Only: %d\n", paintedClearOnly); printf("Not Painted: %d\n", notPainted); } int main() { int n, m, k; scanf("%d %d %d", &n, &m, &k); pencilFactory(n, m, k); return 0; } ``` 以上是对题目要求的详细解析及实现思路。通过这些题目,不仅可以巩固C语言的基础知识,还能提高解决实际问题的能力。希望每位同学都能认真对待这次考试,充分发挥自己的水平。
- 堇色90122013-08-23很有用,是清华的C语言考试题
- pxlau772016-06-18还算好用吧,不过下载很久了 ,都忘了
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 污水监控 环境监测 云平台
- JAVA实现捡金币闯关小游戏(附源码).zip
- FPGA滤波器设计教程,教你快速设计FIR滤波器并利用IP Core实现 清单: 教程文档一份,示例代码工程一份 文档性质产品
- 视频录制和实时流OBS-Studio-30.2.3-Windows
- 农业经济学名词解释.doc
- 汽车百年发展史.doc
- 浅析幼儿园利用乡土教育资源开发园本课程内容的尝试.doc
- 热电厂锅炉试题.doc
- 三年级数学[下册]脱式计算题300题.doc
- 生物圈是最大的生态系统教学案.doc
- 上学期期末考试七年级语文试卷.doc
- 摄影基础试题-学生版[多选].doc
- 税收不安全因素管理指标+解释.doc
- 水利工程概论复习试题及答案.doc
- 统编版二年级上册语文教学计划.doc
- 污染控制微生物学试题.doc