当前位置: 首页 > news >正文

重庆邮电大学笔试F021 考纲解析

1. 加法器与累乘器

#include <stdio.h>// 加法器
int adder(int a, int b) {return a + b;
}// 累乘器
int multiplier(int a, int b) {return a * b;
}int main() {int a = 5, b = 3;printf("Sum: %d\n", adder(a, b));printf("Product: %d\n", multiplier(a, b));return 0;
}

2. 求最大数与最小数

#include <stdio.h>void findMaxMin(int arr[], int n, int *max, int *min) {*max = arr[0];*min = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > *max) *max = arr[i];if (arr[i] < *min) *min = arr[i];}
}int main() {int arr[] = {1, 2, 3, 4, 5};int max, min;findMaxMin(arr, 5, &max, &min);printf("Max: %d, Min: %d\n", max, min);return 0;
}

3. 排序(冒泡排序、选择排序等)

冒泡排序:
#include <stdio.h>void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int arr[] = {5, 2, 9, 1, 5, 6};int n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}

4. 大小写字母转换

#include <stdio.h>
#include <ctype.h>void convertCase(char *ch) {if (isupper(*ch)) *ch = tolower(*ch);else if (islower(*ch)) *ch = toupper(*ch);
}int main() {char ch = 'a';convertCase(&ch);printf("Converted case: %c\n", ch);return 0;
}

5. 判别键盘输入字符的类别

#include <stdio.h>
#include <ctype.h>void checkCharType(char ch) {if (isalpha(ch)) {if (isupper(ch)) printf("Uppercase letter\n");else printf("Lowercase letter\n");} else if (isdigit(ch)) {printf("Digit\n");} else if (isspace(ch)) {printf("Whitespace\n");} else {printf("Special character\n");}
}int main() {char ch = 'A';checkCharType(ch);return 0;
}

6. 判别闰年

#include <stdio.h>int isLeapYear(int year) {return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
}int main() {int year = 2020;if (isLeapYear(year)) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;
}

7. 百分制成绩与等级制成绩互相转换

#include <stdio.h>void percentToGrade(int percent) {if (percent >= 90) printf("A\n");else if (percent >= 80) printf("B\n");else if (percent >= 70) printf("C\n");else if (percent >= 60) printf("D\n");else printf("F\n");
}int main() {int percent = 85;percentToGrade(percent);return 0;
}

8. 求两个数的最大公因数和最小公倍数

#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}int lcm(int a, int b) {return a * b / gcd(a, b);
}int main() {int a = 15, b = 20;printf("GCD: %d, LCM: %d\n", gcd(a, b), lcm(a, b));return 0;
}

9. 求菲比拉契数列有限项

#include <stdio.h>void fibonacci(int n) {int a = 0, b = 1;for (int i = 0; i < n; i++) {printf("%d ", a);int temp = a;a = b;b = temp + b;}
}int main() {int n = 10;fibonacci(n);return 0;
}

10. 统计学生成绩,包括总成绩、平均成绩、各分数段人数等

#include <stdio.h>void analyzeScores(int scores[], int n) {int total = 0, A = 0, B = 0, C = 0, D = 0;for (int i = 0; i < n; i++) {total += scores[i];if (scores[i] >= 90) A++;else if (scores[i] >= 80) B++;else if (scores[i] >= 70) C++;else D++;}printf("Total: %d, Average: %.2f\n", total, total / (float)n);printf("Grade A: %d, Grade B: %d, Grade C: %d, Grade D: %d\n", A, B, C, D);
}int main() {int scores[] = {95, 85, 76, 65, 90};analyzeScores(scores, 5);return 0;
}

11. 验证哥德巴赫猜想

#include <stdio.h>int isPrime(int n) {if (n < 2) return 0;for (int i = 2; i * i <= n; i++) {if (n % i == 0) return 0;}return 1;
}void goldbachConjecture(int n) {for (int i = 2; i <= n / 2; i++) {if (isPrime(i) && isPrime(n - i)) {printf("%d = %d + %d\n", n, i, n - i);return;}}
}int main() {int n = 28;goldbachConjecture(n);return 0;
}

12. 用穷举法求某数段的素数、水仙花数、完全平方数等

#include <stdio.h>
#include <math.h>// 判断是否为素数(质数)
// 质数定义为大于1且只能被1和自身整除的数
int isPrime(int n) {if (n <= 1)return 0;int i;// 只需判断到 sqrt(n) 即可int limit = (int)sqrt(n);for (i = 2; i <= limit; i++) {if (n % i == 0)return 0;}return 1;
}// 判断是否为水仙花数(阿姆斯壮数)
// 通常定义:一个n位数,其各位数字的n次幂之和等于该数本身
int isNarcissistic(int n) {int original = n;int sum = 0;int count = 0;int temp = n;// 计算数字的位数while (temp > 0) {count++;temp /= 10;}temp = n;while (temp > 0) {int digit = temp % 10;// pow 返回 double 类型,这里转为 int 进行累加sum += (int)pow(digit, count);temp /= 10;}return (sum == original);
}// 判断是否为完全平方数
// 完全平方数指存在整数 k,使得 k*k 等于 n
int isPerfectSquare(int n) {if (n < 0)return 0;int root = (int)sqrt(n);return (root * root == n);
}int main() {int lower, upper;int i;// 输入区间下界和上界printf("请输入区间的下界和上界(例如:1 1000):");scanf("%d%d", &lower, &upper);// 输出区间内所有的素数printf("\n区间内的素数:\n");for (i = lower; i <= upper; i++) {if (isPrime(i))printf("%d ", i);}printf("\n");// 输出区间内所有的水仙花数printf("\n区间内的水仙花数:\n");for (i = lower; i <= upper; i++) {if (isNarcissistic(i))printf("%d ", i);}printf("\n");// 输出区间内所有的完全平方数printf("\n区间内的完全平方数:\n");for (i = lower; i <= upper; i++) {if (isPerfectSquare(i))printf("%d ", i);}printf("\n");return 0;
}

13. 求近似数(如定积分、用牛顿迭代法或二分法或弦截法求多元方程的根)

弦截法(割线法)

#include <stdio.h>
#include <math.h>double f(double x) {return x * x * x - x - 2;
}double secant(double x0, double x1, double eps, int max_iter) {double x2;for (int i = 0; i < max_iter; i++) {if (fabs(f(x1) - f(x0)) < eps) break;x2 = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0));if (fabs(x2 - x1) < eps) return x2;x0 = x1;x1 = x2;}return x1;
}int main() {double root = secant(1, 2, 1e-6, 100);printf("Approximate root using Secant Method: %.6f\n", root);return 0;
}

14. 求两个矩阵之和、之积

#include <stdio.h>void matrixAdd(int a[2][2], int b[2][2], int result[2][2]) {for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {result[i][j] = a[i][j] + b[i][j];}}
}void matrixMultiply(int a[2][2], int b[2][2], int result[2][2]) {for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {result[i][j] = 0;for (int k = 0; k < 2; k++) {result[i][j] += a[i][k] * b[k][j];}}}
}int main() {int a[2][2] = {{1, 2}, {3, 4}};int b[2][2] = {{5, 6}, {7, 8}};int sum[2][2], prod[2][2];matrixAdd(a, b, sum);matrixMultiply(a, b, prod);printf("Matrix Sum:\n");for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {printf("%d ", sum[i][j]);}printf("\n");}printf("Matrix Product:\n");for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {printf("%d ", prod[i][j]);}printf("\n");}return 0;
}

15. 统计输入字符中的单词个数

#include <stdio.h>
#include <ctype.h>int countWords(char str[]) {int count = 0, inWord = 0;for (int i = 0; str[i]; i++) {if (isalpha(str[i])) {if (!inWord) {count++;inWord = 1;}} else {inWord = 0;}}return count;
}int main() {char str[] = "Hello, how are you today?";printf("Word count: %d\n", countWords(str));return 0;
}

16. 最近点对问题

最近点对问题通常使用分治法解决,这里给出一个暴力法的简单实现:通过计算每对点之间的距离来找出最近的两个点。

#include <stdio.h>
#include <math.h>struct Point {int x, y;
};double distance(struct Point p1, struct Point p2) {return sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
}void closestPair(struct Point points[], int n) {double minDist = distance(points[0], points[1]);int p1 = 0, p2 = 1;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {double dist = distance(points[i], points[j]);if (dist < minDist) {minDist = dist;p1 = i;p2 = j;}}}printf("Closest pair: (%d, %d) and (%d, %d) with distance: %.2f\n",points[p1].x, points[p1].y, points[p2].x, points[p2].y, minDist);
}int main() {struct Point points[] = {{1, 1}, {2, 3}, {3, 4}, {5, 7}, {8, 8}};int n = sizeof(points) / sizeof(points[0]);closestPair(points, n);return 0;
}

17. 背包问题(0-1背包问题)

0-1背包问题的常见解法是动态规划。

#include <stdio.h>int knapsack(int weights[], int values[], int n, int W) {int dp[n + 1][W + 1];// 初始化动态规划表for (int i = 0; i <= n; i++) {for (int w = 0; w <= W; w++) {if (i == 0 || w == 0)dp[i][w] = 0;else if (weights[i - 1] <= w)dp[i][w] = (values[i - 1] + dp[i - 1][w - weights[i - 1]] > dp[i - 1][w]) ?(values[i - 1] + dp[i - 1][w - weights[i - 1]]) : dp[i - 1][w];elsedp[i][w] = dp[i - 1][w];}}return dp[n][W];
}int main() {int weights[] = {2, 3, 4, 5};int values[] = {3, 4, 5, 6};int W = 5;  // 背包的最大重量int n = sizeof(values) / sizeof(values[0]);printf("Maximum value: %d\n", knapsack(weights, values, n, W));return 0;
}

18. 多机调度问题

此问题可以通过贪心算法来解决,假设每个任务可以分配给多个机器,并尽量使任务分配平衡。

#include <stdio.h>void multiMachineScheduling(int jobs[], int n, int m) {int machine[m];  // 记录每个机器的总工作量for (int i = 0; i < m; i++) {machine[i] = 0;  // 初始化所有机器的工作量为0}for (int i = 0; i < n; i++) {int minMachine = 0;for (int j = 1; j < m; j++) {if (machine[j] < machine[minMachine]) {minMachine = j;}}machine[minMachine] += jobs[i];  // 将工作分配给最空闲的机器}// 输出每个机器的总工作量for (int i = 0; i < m; i++) {printf("Machine %d: %d units\n", i + 1, machine[i]);}
}int main() {int jobs[] = {5, 10, 15, 20, 25};int n = sizeof(jobs) / sizeof(jobs[0]);int m = 3;  // 机器数目multiMachineScheduling(jobs, n, m);return 0;
}

19. 最长公共子序列

使用动态规划来求解最长公共子序列问题。

#include <stdio.h>
#include <string.h>int lcs(char *X, char *Y, int m, int n) {int dp[m + 1][n + 1];for (int i = 0; i <= m; i++) {for (int j = 0; j <= n; j++) {if (i == 0 || j == 0)dp[i][j] = 0;else if (X[i - 1] == Y[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;elsedp[i][j] = (dp[i - 1][j] > dp[i][j - 1]) ? dp[i - 1][j] : dp[i][j - 1];}}return dp[m][n];
}int main() {char X[] = "ABCBDAB";char Y[] = "BDCABB";int m = strlen(X);int n = strlen(Y);printf("Length of LCS: %d\n", lcs(X, Y, m, n));return 0;
}

20. 连续子数组最大乘积

通过动态规划可以求解连续子数组的最大乘积问题。

#include <stdio.h>int maxProductSubarray(int arr[], int n) {int max_prod = arr[0], min_prod = arr[0], result = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < 0) {// 交换最大值和最小值int temp = max_prod;max_prod = min_prod;min_prod = temp;}max_prod = (arr[i] > max_prod * arr[i]) ? arr[i] : max_prod * arr[i];min_prod = (arr[i] < min_prod * arr[i]) ? arr[i] : min_prod * arr[i];result = (result > max_prod) ? result : max_prod;}return result;
}int main() {int arr[] = {2, 3, -2, 4};int n = sizeof(arr) / sizeof(arr[0]);printf("Maximum product subarray: %d\n", maxProductSubarray(arr, n));return 0;
}


http://www.mrgr.cn/news/95808.html

相关文章:

  • QT编程之PCM音频播放与采集
  • 【Javaweb】b站黑马视频学习笔记(导览)
  • Can Large Language Models be Anomaly Detectors for Time Series? 解读
  • Docker 镜像构建与优化
  • uv - Guides 指南 [官方文档翻译]
  • C语言 【实现电脑关机小游戏】非常好玩
  • 1.NextJS基础
  • WHAM 人体3d重建部署笔记 vitpose
  • Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南
  • C++11QT复习(二)
  • 数据结构之优先级队列
  • Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8
  • Go常见问题与回答(下)
  • poetry安装与使用
  • 华为交换相关
  • vmwaretools解压失败|vmware tools distrib cannot mkdir read only file system|bug汇总
  • Linux 练习一 NFS和DNS
  • Floyd 算法--多源最短路
  • 利用dify打造命令行助手
  • Spring Boot整合Activiti工作流详解