点击进入学习

仅供自己学习
其他学生看到此页请勿抄写,仅供参考学习
其他学生看到此页请勿抄写,仅供参考学习
其他学生看到此页请勿抄写,仅供参考学习

本人认为MOOC内的程序书写,不允许Tab键对齐,不允许复制粘贴,特别愚蠢
本来就是大水题,然后非要不允许Tab的情况下手打
复制粘贴可以是为了抄作业,也可以是我本地运行完以后再复制提交
本身这个文档编辑器可以说是没有任何编辑功能,却要逼着我用这个打字
对不起,我不会将就你,我找到了破解你的脚本
我只能说爽爆了
这里放出这个脚本并不是让同学们不思考抄答案,而是更加高效的学习,毕竟这个编辑器那么愚蠢还逼着我用,好比大胃王比赛,别人都吃美食,你摁着我的头吃翔,我要选择不吃了

再次声明,其他学生看到此页请勿抄写,仅供参考学习
再次声明,其他学生看到此页请勿抄写,仅供参考学习
再次声明,其他学生看到此页请勿抄写,仅供参考学习

第一章编程作业

题一:“Welcome to HDU!”

题目要求:
本题要求编写程序,输出一个短句“Welcome to HDU!”。
输入格式:
本题目没有输入。
输出格式:
在一行中输出短句“Welcome to HDU!”(引号无需输出)。

1
2
3
4
5
#include<stdio.h>
int main(){
printf("Welcome to HDU!");
return 0;
}

题二: 加法运算

题目内容:
输入两个整数,计算、输出两数之和
输入格式:
输入一行,包含用空格分隔的两个整数(32位int整数)
输出格式:
输出一个整数,表示两数之和(32位int整数)

1
2
3
4
5
6
7
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}

题三: 标准体重

题目内容:
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。现给定某人身高,请你计算其标准体重应该是多少?
输入格式:
输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为公斤,保留小数点后1位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main() {
int height; // 定义一个整型变量,用于存储身高
float standard_weight; // 定义一个浮点型变量,用于存储标准体重

// 读取身高值
scanf("%d", &height);

// 计算标准体重
standard_weight = (height - 100) * 0.9;

// 输出标准体重,保留小数点后一位
printf("%.1f\n", standard_weight);

return 0; // 返回 0 表示程序成功执行
}

第二章编程作业

面积公式

题目内容:
请编写程序,输入三角形的底 和高,计算并输出三角形的面积。
输入格式
一行包含两个正实数,空格分隔,表示底和高
输出格式
一个实数,2 位小数
输入样例
1.5 2.4
输出样例
1.80

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main() {
double base, height;
// 读取底边和高度
scanf("%lf %lf", &base, &height);
// 计算三角形的面积
double area = (base * height) / 2;
// 输出面积,保留两位小数
printf("%.2lf\n", area);
return 0;
}

加减乘除

题目内容:
本题要求编写程序,计算并输出2个正整数的和、差、积。题目保证输入和输出全部在整型范围内。输入格式:
输入在一行中给出2个正整数A和B。
输出格式:
分行按照格式“A 运算符 B=结果”顺序输出和、差、积。
输入样例:
7 8
输出样例:
7+8=15
7-8=-1
7*8=56

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d+%d=%d\n", a, b, a + b);
printf("%d-%d=%d\n", a, b, a - b);
printf("%d*%d=%d\n", a, b, a * b);
return 0;
}

欠债还钱

题目内容:
阿福打算向朋友借钱,请输入一个浮点数m和一个整数n,分别表示他想借的钱数和借期,程序输出他的意图。
输入格式:
输入在一行中给出1个浮点数和1个整数,二者均大于0。
输出格式:
输出的钱数保留两位小数,格式如下所示:
你好,可以借我XX.XX元钱吗?
X天后一定还!
输入样例:
166.66 7
输出样例
你好,可以借我166.66元钱吗?
7天后一定还!

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main(){
double m;
int n;
scanf("%lf%d",&m,&n);
printf("你好,可以借我%.2lf元钱吗?\n",m);
printf("%d天后一定还!",n);
return 0;
}

注意:题中要求输出的标点均为中文 脑瘫,记得保留两位小数

第三章编程作业

判断闰年

题目内容:
输入年份判断该年份是否是闰年。闰年的判定条件是能被400整除或能被4整除但不能被100整除的年份
输入格式:
输入年份,判断其是否闰年。
输出格式:
YES 或 NO
输入样例:
2000
输出样例:
YES

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main() {
int year;
scanf("%d", &year);
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}

移花接木

题目内容:
输入两个浮点数,将第二个数的小数部分拼接到第一个数的整数部分将第一个数的小数部分拼接到第二个数的整数部分。然后输出新生成的浮点数。
输入格式:
输入两个浮点数。(注意可能有负数)
输出格式:
输出新生成的两个浮点数。(输出保留6位小数)
输入样例1:
135.79 24.068
输出样例1:
135.068000 24.790000
输入样例2:
-1.23 4.56
输出样例2:
-1.560000 4.230000

我写的丑陋版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<math.h>
int main() {
double n1, n2; //原数
int i1 , i2; //取整数
double f1, f2; //取小数
scanf_s("%lf%lf", &n1, &n2);
i1 = (int)n1; //注意,强制转换成int,向零取整
i2 = (int)n2;
f1 = n1 - i1; //正数情况即直接就是小数
f2 = n2 - i2; //负数情况即为带符号的小数 即-1.23转化为0.23
//注意第一个数加上第二个数的小数部分,小数部分看第一个数的符号
n1 = i1+((n1 == fabs(n1)) * 2 - 1) * fabs(f2);
n2 = i2 + ((n2 == fabs(n2)) * 2 - 1) * fabs(f1);
printf("%lf %lf\n", n1, n2);
return 0;
}

陈怀宇同学的版本(很巧的思路)

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main() {
double a,b;
scanf("%lf %lf", &a, &b);
if (a*b >= 0){
printf("%.6lf %.6lf", (int)a+b-(int)b, (int)b+a-(int)a);
}
else {
printf("%.6lf %.6lf", (int) a - b + (int) b, (int) b - a + (int) a);
}
return 0;
}

陈冠亨同学的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <string.h>

#define MAX_LENGTH 100

void swap_integer_and_decimal(const char *num1, const char *num2, char *result) {
char int_part1[MAX_LENGTH], decimal_part1[MAX_LENGTH];
char int_part2[MAX_LENGTH], decimal_part2[MAX_LENGTH];

// 找到第一个数字的小数点
char *decimal1 = strchr(num1, '.');
char *decimal2 = strchr(num2, '.');

// 如果找到小数点
if (decimal1 != NULL && decimal2 != NULL) {
// 提取整数部分和小数部分
strncpy(int_part1, num1, decimal1 - num1);
int_part1[decimal1 - num1] = '\0';
strcpy(decimal_part1, decimal1 + 1);

strncpy(int_part2, num2, decimal2 - num2);
int_part2[decimal2 - num2] = '\0';
strcpy(decimal_part2, decimal2 + 1);

// 生成结果字符串
snprintf(result, MAX_LENGTH, "%s.%s %s.%s", int_part2, decimal_part1, int_part1, decimal_part2);
} else {
strcpy(result, "Invalid input format");
}
}

int main() {
char input1[MAX_LENGTH];
char input2[MAX_LENGTH];
char result[MAX_LENGTH];

// 从标准输入读取数据
printf("Enter two decimal numbers separated by space: ");
scanf("%s %s", input1, input2);

// 进行整数部分和小数部分的互换
swap_integer_and_decimal(input1, input2, result);

// 输出结果
printf("Swapped result: %s\n", result);

return 0;
}

三目运算

题目内容:
输入四个浮点数,只用三目运算符(不能用if等条件语句或循环语句)找出其中的最大值和最小值。
输入格式:第一行输入四个数值;
输出格式:
最大值 最小值(结果保留两位小数)
输入样例:
5 9 3 7.0
输出样例:
9.00 3.00

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main() {
double a, b, c, d;
double max, min;
scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
max = a > b ? a : b;
max = max > c ? max : c;
max = max > d ? max : d;
min = a > b ? b : a;
min = min > c ? c : min;
min = min > d ? d : min;
printf("%.2f %.2f", max, min);
return 0;
}

输出时记得别忘空格

第四章编程作业

阿福家的电费

题目内容:
入秋了,家里的用电量也减少了许多。阿福收到了新一期的电费通知单,却发现本期电费与高温天的电费不相上下。杭州现行的阶梯电价是按照年用电量来划分的,这说明阿福家的低价电额度已用完,接下来可得节约用电咯。阿福想自己验证一下,今年以来代扣的总电费到底是否正确。请编写一个程序,已知今年1月份以来的各月用电量,根据电价规定,计算出今年应缴的总电费是多少。
杭州现行的阶梯电价标准分三档:
第一档:电量为年用电量2760度及以下部分,电价不作调整,标准电价为0.538元/度;
第二档:电量为年用电量2761至4800度的部分,电价在第一档基础上加价0.05元,为0.588元/度;
第三档:电量超过4800的部分,电价在第一档基础上加价0.3元,为0.838元/度。
输入格式:
输入占一行,给出若干个整数(以输入-1表示结束),分别表示从1月开始各个月份的用电量(单位是度),注意:-1不算用电量。
输出格式:
输出总电费(单位是元),结果保留1位小数。
输入样例:
468 489 370 363 397 380 712 679 484 453 462 -1
输出样例:
3067.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main() {
int use, use_sum = 0;
double money = 0.0;
while (1) {
scanf("%d", &use);
if (use != -1) {
use_sum += use;
} else {
break;
}
}
if (use_sum <= 2760) {
money = 0.538 * use_sum;
} else if (use_sum <= 4800) {
money = 0.538 * 2760 + 0.588 * (use_sum - 2760);
} else {
money = 0.538 * 2760 + 0.588 * 2040 + 0.838 * (use_sum - 4800);
}
printf("%.1lf\n", money);
return 0;
}

幂级数求近似值

题目内容:
已知函数 的幂级数展开式为 。现给定一个实数 和一个整数 ,利用此幂级数展开式的前n+1项之和,求 的近似值。
输入格式:
输入在一行中给出一个实数 x 和一个整数n。
输出格式:
输出展开式的前n+1项之和,保留4位小数。
输入样例:
1.2 10
输出样例:
3.3201

我的自定义函数复杂垃圾法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>

long long int jc(int n) { //用long long int 怕阶乘越界
long long int n_jc = 1;
for (int i = 1; i <= n; i++) {
n_jc *= i;
}
return n_jc;
}

int main() {
double x;
int n;
scanf("%lf%d", &x, &n);
double sum = 1.0;
for (int i = 1; i <= n; i++) {
sum += pow(x, i) / jc(i);
}
printf("%.4lf\n", sum);
return 0;
}

Chat-4o真的天才 我的思路还是太直接了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main() {
double x;
int n;
scanf("%lf%d", &x, &n);

double sum = 1.0; // e^x的泰勒展开第一项是1
double term = 1.0; // 存储每一项的值
int factorial = 1; // 存储阶乘的值

for (int i = 1; i <= n; i++) {
term *= x / i; // 逐项累积计算 x^i / i!
sum += term; // 累加到总和
}

printf("%.4lf\n", sum); // 输出结果保留4位小数
return 0;
}

素数口袋

题目内容:
阿福有一个口袋,可以用来装各个素数。他从2开始,依次判断各个自然数是不是素数,如果是素数就把这个数字装入口袋。口袋的承载量就是包里所有数字之和,但口袋的承载量有限。假设口袋的承载量是L,表示只能装得下总和不超过L的素数。现给出一个正整数L,请问口袋里能装下几个素数?将这些素数从小到大输出,再输出最多能装下的素数个数。
输入格式:
输入一个正整数L(2<=L<=10000),表示最大承载量。
输出格式:
输出包括两行,第一行从小到大输出能装下的所有素数,数与数之间用空格隔开(注意:行末无空格)
第二行输出”count = 素数个数”
输入样例:
100
输出样例:
2 3 5 7 11 13 17 19 23
count = 9

我写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>

int is_prime(int n){
if(n<2) return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}

int main(){
int l,i=3;
int sum=2;
int count=1;
scanf("%d",&l);
printf("2");
while (sum<=l){
if (sum+i>l){
break;
}else if (is_prime(i)){
sum+=i;
count++;
printf(" %d",i);
}
i++;
}
printf("\b");
printf("\n");
printf("count = %d",count);
return 0;
}

GPT写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdbool.h>

#define MAX 10000

// 使用埃拉托斯特尼筛法生成素数
void sieve(int limit, bool is_prime[]) {
for (int i = 2; i <= limit; i++) {
is_prime[i] = true;
}
for (int p = 2; p * p <= limit; p++) {
if (is_prime[p]) {
for (int i = p * p; i <= limit; i += p) {
is_prime[i] = false;
}
}
}
}

int main() {
int L;
scanf("%d", &L);
bool is_prime[MAX + 1] = {false};
sieve(MAX, is_prime);
int primes[MAX];
int count = 0;
int sum = 0;
// 收集所有素数
for (int i = 2; i <= MAX; i++) {
if (is_prime[i]) {
if (sum + i > L) break;
primes[count++] = i;
sum += i;
}
}
// 输出素数
for (int i = 0; i < count; i++) {
if (i > 0) printf(" ");
printf("%d", primes[i]);
}
printf("\n");
// 输出素数个数
printf("count = %d\n", count);
return 0;
}

第五章编程作业

支撑数

题目内容:
找出一个数列中全部的“支撑数”。
“支撑数”有这样的特征:它们不在第一个,也不在最后一个,而且比左边和右边相邻的数都大。
输入格式:
第一行输入一个整数n,表示数列中有n个整数。(3<=n<=100)
第二行输入n个整数。
输出格式:
分行输出所有的支撑数,每行输出一个支撑数(保证至少有一个)。
输入样例:
6
1 3 2 4 1 5
输出样例:
3
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
int n;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 1; i < n - 1; i++) {
if (a[i] > a[i - 1] && a[i] > a[i + 1]) {
printf("%d\n", a[i]);
}
}
return 0;
}

陈冠亨同学的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main() {
int num;
int data[101];

// 读取输入的数字个数
scanf("%d", &num);

// 初始化变量
int i = 0;
int R = 0; // 变量 R 未被使用,可能是多余的

// 读取数据到数组中
for (i = 0; i < num; i++) {
scanf("%d", &data[i]);

// 检查当前元素是否符合条件
if (i >= 2 && data[i - 1] > data[i - 2] && data[i] < data[i - 1]) {
// 打印符合条件的元素
printf("%d\n", data[i - 1]);
}
}

return 0;
}

上三角矩阵

题目内容:
上三角矩阵指主对角线以下的元素都为0的矩阵(不包括主对角线);主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数N(2≤N≤10)。
随后N行,每行给出N个整数,其间以空格分隔。
输出格式:
如果输入的矩阵是上三角矩阵,输出YES,否则输出NO。
输入样例:
5
1 2 3 4 5
0 1 2 3 4
0 0 1 2 3
0 0 0 1 2
0 0 0 0 1
输出样例:
YES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main() {
int N, is_upper = 1;
scanf("%d", &N);
int m[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &m[i][j]);
if (i > j && m[i][j] != 0) {
is_upper = 0;
}
}
}
if (is_upper) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}

按绝对值排序

题目内容:
输入n(n<=100)个整数,按照绝对值从大到小排序后输出
输入格式:
输入数据的第一个数字为n,接着是n个整数。
输出格式:
按照绝对值从大到小排序后输出n个整数,两数之间空格隔开,最后一个数后面无空格。
输入样例:
3 3 -4 2
输出样例:
-4 3 2

自己写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>

int main() {
int n;
scanf("%d", &n);
int a[n], b[n];

// 读取数组并处理正负号
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
if (a[i] < 0) {
a[i] = -a[i]; // 取绝对值
b[i] = -1; // 记录负号
} else {
b[i] = 1; // 记录正号
}
}

// 按绝对值排序,同时调整正负号
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] < a[j]) {
// 交换绝对值
int temp = a[i];
a[i] = a[j];
a[j] = temp;

// 交换对应的正负号
int temp2 = b[i];
b[i] = b[j];
b[j] = temp2;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d", a[i] * b[i]);
if (i < n - 1) {
printf(" "); //记住最后一个数字没有空格,不要多输出哪怕一个空格
}
}
return 0;
}

GPT写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b) {
int abs_a = abs(*(int *)a);
int abs_b = abs(*(int *)b);
return abs_b - abs_a;
}

int main() {
int n;
scanf("%d", &n);

int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}

qsort(arr, n, sizeof(int), cmp);

for (int i = 0; i < n; i++) {
printf("%d", arr[i]);
if (i < n - 1) {
printf(" ");
}
}

return 0;
}

第六章编程作业

判断是否为完数

题目内容:
编写函数,判断一个正整数a是否为完数,如果是完数,函数返回值为1;否则为0.(完数:一个数的所有因子之和等于该本身,如6、28都是完数;6=1+2+3; 28=1+2+4+7+14)
输入格式:
输入一个正整数。
输出格式:
如果是,输出“是完数”,否则输出“不是完数”
输入样例1:
6
输出样例1:
是完数
输入样例2:
25
输出样例2:
不是完数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int is_perfect(int a) {
int sum = 0;
for (int i = 1; i <= a / 2; i++) {
if (a % i == 0) {
sum += i;
}
}
return sum == a;
}
int main() {
int num;
scanf("%d", &num);

if (is_perfect(num)) {
printf("是完数\n");
} else {
printf("不是完数\n");
}

return 0;
}

递归求Fabonacci数列

题目内容:
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
题目保证输入输出在长整型范围内。建议用递归实现.
输入格式:
输入一个正整数n
输出格式:
输出f(n)的值。
输入样例:
6
输出样例:
8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

long long fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
int n;
scanf("%d", &n);

printf("%lld\n", fibonacci(n));

return 0;
}

输出一个整数的逆序数

题目内容:
实现一个求整数的逆序数的简单函数。
输入格式:
输入一个整数(可正可负)。
输出格式:
输出它的逆序,注意考虑正负。
输入样例1:
1234
输出样例1:
4321
输入样例2:
-12340
输出样例2:
-4321

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int reverse(int n) {
int rev = 0;
int sign = n < 0 ? -1 : 1;
n *= sign; //相当于绝对值

while (n > 0) {
rev = rev * 10 + n % 10; //rev向左挪,加入n最后一位
n /= 10; //n去尾
}

return rev * sign;
}

int main() {
int num;
scanf("%d", &num);
printf("%d\n", reverse(num));
return 0;
}

第七章编程作业

删除数列中的指定数

题目内容:
请使用指针的方法编写程序,程序的功能是先输入10个整数存储到数组a中,再输入一个指定的数x,把数组中的x数据删除掉,并保证数组中剩余的数还是连续存储的。
比如输入10个整数:3 2 8 6 5 8 7 9 8 5,存入数组,然后输入一个数8,把数组中的8全部删除。最后数组中剩下的数:3 2 6 5 7 9 5,在数组a中还是连续存储的。
要求定义函数实现删除功能:int del_num(int *p, int n, int x);其中函数的返回值为删除指定数后数组中剩余数据的个数。
输入格式:
输入10个整数,和1个指定数。
输出格式:
输出剩余数,以空格隔开,最后一个数后面没有空格。
输入样例:
3 2 8 6 5 8 7 9 8 5
8
输出样例:
3 2 6 5 7 9 5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# include <stdio.h>
int del_num(int *p,int n,int x){
int i=0;
while(i<n) {
if(*(p+i)==x){
for(int j=i;j<n-1;j++){
//*(p+j)=*(p+j+1);
p[j]=p[j+1];
}
n--;
}else{
i++;
}

}
return n;
}

int main(){
int a[10];
int n=10;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int x;
scanf("%d", &x);
n=del_num(a,n,x);
for (int i = 0; i < n-1; i++) {
printf("%d ", a[i]);
}
printf("%d",a[n-1]);
return 0;
}

求一组数中的最大值、最小值及总和

题目内容:
求一组数中的最大值、最小值及总和。要求定义函数
int f(int a[],int n,int *pmax,int *pmin)
函数返回总和,并分别通过指针pmax 和 pmin将最大值、最小值赋值给主函数中的对应变量。
输入格式:
第1行为正整数n(n>2),表示一组数的个数 第2行包含n个整数,用空格分隔。
输出格式:
一行包含3个整数,分别为最大值、最小值及总和
输入样例:
10
2 5 4 8 6 9 1 3 7 0
输出样例:
9 0 45

自己写GPT加注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>

// 函数 f 用于计算数组中的最大值、最小值和总和
int f(int a[], int n, int *pmax, int *pmin) {
int max = a[0]; // 初始化最大值为数组的第一个元素
int min = a[0]; // 初始化最小值为数组的第一个元素

// 遍历数组,找到最大值和最小值
for (int i = 1; i < n; i++) {
if (a[i] > max) {
max = a[i]; // 更新最大值
*pmax = max; // 通过指针更新实际的 max 变量
}
if (a[i] < min) {
min = a[i]; // 更新最小值
*pmin = min; // 通过指针更新实际的 min 变量
}
}

// 计算数组元素的总和
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i];
}

// 返回总和
return sum;
}

int main() {
int n; // 数组的元素数量
int max, min; // 用于存储最大值和最小值
int *pmax = &max; // 指针 pmax 指向 max
int *pmin = &min; // 指针 pmin 指向 min

// 从标准输入读取数组的元素数量
scanf("%d", &n);

// 动态分配大小为 n 的整数数组
int a[n];

// 从标准输入读取数组的元素
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}

// 调用函数 f,传入数组、元素数量、最大值指针和最小值指针
int sum = f(a, n, pmax, pmin);

// 输出最大值、最小值和总和
printf("%d %d %d\n", *pmax, *pmin, sum);

return 0;
}

第八章编程作业

查找字符串

题目内容:
给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。
输入格式:
第一行包含一个正整数k,表示至少需要连续出现的次数。1 <= k <= 100。
第二行包含需要查找的字符串。字符串长度在1到100之间,且不包含任何空白符。
输出格式:
若存在连续出现至少k次的字符,输出该字符;否则输出NO。
输入样例1:
3
abcccaaab
输出样例1:
c
输入样例2:
3
abccaab
输出样例2:
NO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <string.h>
int main()
{
int n=0;
int count=1;
int is_printed=0;
char str[101];
scanf("%d",&n);
scanf("%s",str);
for (int i=0;i<strlen(str)-1;i++)
{
if (str[i]==str[i+1])
{
count+=1;
}else
{
count=1;
}
if (count==n)
{
printf("%c",str[i]);
return 0;
}
}
printf("NO\n");
return 0;
}

求最大字符串

题目内容:
本题要求编写程序,针对输入的N个字符串,输出其中最大的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
输出最大的字符串。
输入样例:
6
best
cat
east
a
free
day
输出样例:
free

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int main()
{
int n=0;
scanf("%d",&n);
char str[n][100];
for (int i=0;i<n;i++)
{
scanf("%s",str[i]);
}
char *pmax=str[0];
for (int i=0;i<n;i++)
{
if (strcmp(str[i],pmax)>0)
{
pmax=str[i];
}
}
printf("%s",pmax);
return 0;
}

第九章编程作业

最高分的学生

题目内容:
输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。
输入格式:
第一行输入一个正整数N(N <= 100),表示学生人数。接着输入N行,每行格式如下: 分数 姓名 分数是一个非负整数,且小于等于100; 姓名为一个连续的字符串,中间没有空格,长度不超过20。
输出格式:
输出最高分数的学生姓名。每行包含一个姓名
输入样例:
5
87 lilei
99 hanmeimei
97 lily
99 lucy
77 jim
输出样例:
hanmeimei
lucy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <string.h>

struct stus
{
int grade;
char name[20];
};
int main()
{
int n;
scanf("%d",&n);
struct stus stu[n];
for (int i=0;i<n;i++)
{
scanf("%d %s", &stu[i].grade, stu[i].name);
}
int *pmax=&stu[0].grade;
for (int i=0;i<n;i++)
{
if (stu[i].grade>*pmax)
{
pmax=&stu[i].grade;
}
}
for (int i=0;i<n;i++)
{
if (stu[i].grade==*pmax)
{
printf("%s\n",stu[i].name);
}
}
return 0;
}

计算平均成绩

题目内容:
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
输入样例:
5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60
输出样例:
80.00
zhang 00001
chen 21987

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <string.h>
struct stus
{
char num[6];
char name[10];
int grade;
};

int main()
{
int n;
float ave=0.0;
scanf("%d",&n);
struct stus stu[n];
for (int i=0;i<n;i++)
{
scanf("%s %s %d", stu[i].num, stu[i].name, &stu[i].grade);
}
for (int i=0;i<n;i++)
{
ave+=stu[i].grade;
}
ave=ave/n;
printf("%.2f\n",ave);
for(int i=0;i<n;i++)
{
if (stu[i].grade<ave)
{
printf("%s %s\n",stu[i].name,stu[i].num);
}
}
return 0;
}

线上期末考试编程题

计算行李费

题目内容:
乘坐飞机时,当乘客行李重量不超过10公斤时,可随身携带行李免费。当行李重量超过10公斤时,必须办理托运。行李费这样计算:如果行李重量大于10公斤且小于等于20公斤时,每公斤2元。如果行李重量大于20公斤时,每公斤3元。请编程计算行李费。
输入格式:
一个正整数(<100),乘客携带行李重量,单位公斤
输出格式:
一个整数,表示行李费用
输入样例:
11
输出样例:
22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(){
int n;
scanf("%d",&n);
if (n<=10){
printf("%d",0);
}else if (n<=20){
printf("%d",2*n);
}else
{
printf("%d",3*n);
}
return 0;
}

行程长度压缩

题目内容:
在数据压缩中,一个常用的途径是行程长度压缩。对于一个待压缩的字符串(只包含大写字母)而言,我们可以依次记录每个字符及重复的次数。这种压缩,对于相邻数据重复较多的情况比较有效。 例如,如果待压缩串为”AAABBBBCBB”,则压缩的结果是(A,3)(B,4)(C,1)(B,2)。当然,如果相邻字符重复情况较少,则压缩效率就较低。
现要求根据输入的字符串,得到压缩结果。
输入格式:
一个字符串,全部由大写字母组成。长度大于1,小于10000
输出格式:
输出为一行,表示压缩结果,形式为: (A,3)(B,4)(C,1)(B,2) 即每对括号内部分别为字符及重复出现的次数,不含任何空格。
输入样例:
AAABBBBCCCAAAAA
输出样例:
(A,3)(B,4)(C,3)(A,5)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
int main(){
char str[10001];
scanf("%s",str);
int len=strlen(str);
int cnt=1;
for (int i=0;i<len;i++){
if (str[i]==str[i+1]){
cnt++;
}else
{
printf("(%c,%d)",str[i],cnt);
cnt=1;
}
}
return 0;
}

未更新请发送邮件至 me@zyzblog.com

大概率在玩黑猴