高级语言程序设计课程第四次个人作业
高级语言程序设计课程第四次个人作业
这个作业属于哪个课程:2026高级语言程序设计
这个作业要求在哪里:第四次个人作业
学号:072506135
姓名:张锦程
运行给定程序(一):整数求和

运行给定程序(二):猜测圆周率

while 计算圆周率
#include <stdio.h>
#include <math.h>
int main(void) {
int n = 0; double term = 1.0, sum = 0.0;
while (fabs(term) >= 1e-4) {
sum += term; ++n;
term = (n % 2 ? -1.0 : 1.0) / (2 * n + 1);
}
printf("计算项数:%d,π 约为 %.8f\n", n, 4 * sum);
return 0;
}

do while 计算圆周率
#include <stdio.h>
#include <math.h>
int main(void) {
int n = 0; double term = 1.0, sum = 0.0;
do {
sum += term; ++n;
term = (n % 2 ? -1.0 : 1.0) / (2 * n + 1);
} while (fabs(term) >= 1e-4);
printf("计算项数:%d,π 约为 %.8f\n", n, 4 * sum);
return 0;
}

逻辑运算符的短路求值
#include <stdio.h>
int main(void) {
int a = 0, b = 0;
if (0 && ++a) puts("不会执行");
if (1 || ++b) puts("或表达式为真");
printf("短路后 a=%d,b=%d\n", a, b);
if (1 && ++a) puts("与表达式右侧被执行");
if (0 || ++b) puts("或表达式右侧被执行");
printf("求值后 a=%d,b=%d\n", a, b);
return 0;
}

六行递减字母
#include <stdio.h>
int main(void) {
const char letters[] = "FEDCBA";
for (int row = 6; row >= 1; --row) {
for (int i = 0; i < row; ++i) putchar(letters[i]);
putchar('\n');
}
return 0;
}

计算累加和
#include <stdio.h>
int main(void) {
int n; long long part = 0, sum = 0;
printf("请输入正整数 n:");
if (scanf("%d", &n) != 1 || n < 1 || n > 1000000) return 1;
for (int i = 1; i <= n; ++i) { part += i; sum += part; }
printf("结果:%lld\n", sum); return 0;
}

八个整数的赋值、输出和求和
#include <stdio.h>
int main(void) {
int a[8], sum = 0;
for (int i = 0; i < 8; ++i) a[i] = i + 1;
printf("数组:");
for (int i = 0; i < 8; ++i) { printf("%d ", a[i]); sum += a[i]; }
printf("\n总和:%d\n", sum); return 0;
}

if、switch 和条件运算符
#include <stdio.h>
int main(void) {
int score, grade;
printf("请输入 0 到 100 的成绩:");
if (scanf("%d", &score) != 1 || score < 0 || score > 100) return 1;
if (score >= 90) grade = 4;
else if (score >= 80) grade = 3;
else if (score >= 70) grade = 2;
else if (score >= 60) grade = 1;
else grade = 0;
printf("if 等级:%d\n", grade);
switch (score / 10) {
case 10: case 9: grade = 4; break;
case 8: grade = 3; break;
case 7: grade = 2; break;
case 6: grade = 1; break;
default: grade = 0;
}
printf("switch 等级:%d\n", grade);
printf("结果:%s\n", score >= 60 ? "及格" : "不及格"); return 0;
}

break 和 continue
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 10; ++i) {
if (i == 8) break;
if (i % 2 == 0) continue;
printf("%d ", i);
}
putchar('\n'); return 0;
}

100~200 之间的素数
#include <stdio.h>
int main(void) {
for (int n = 100; n <= 200; ++n) {
int prime = 1;
for (int d = 2; d * d <= n; ++d) {
if (n % d == 0) { prime = 0; break; }
}
if (prime) printf("%d ", n);
}
putchar('\n'); return 0;
}

传统流程图:
flowchart TD
A([开始]) --> B[n = 100]
B --> C{n <= 200?}
C -- 否 --> Z([结束])
C -- 是 --> D[d = 2]
D --> E{d * d <= n?}
E -- 否 --> F[输出 n]
E -- 是 --> G{n 能被 d 整除?}
G -- 是 --> H[n 加 1]
G -- 否 --> I[d 加 1]
I --> E
F --> H
H --> C
NS 流程图:
flowchart TB
subgraph OUTER["循环:n 从 100 到 200"]
direction TB
INIT["prime = 1;d = 2"]
subgraph INNER["循环:d × d ≤ n 且 prime = 1"]
direction TB
subgraph CHOICE["判断:n % d == 0"]
direction LR
YES["是:prime = 0"]
NO["否:d = d + 1"]
end
end
OUTPUT["如果 prime = 1,输出 n"]
INIT --> INNER --> OUTPUT
end
第 6 章练习 1:小写字母数组
#include <stdio.h>
int main(void) {
char letters[26];
for (int i = 0; i < 26; ++i) letters[i] = 'a' + i;
for (int i = 0; i < 26; ++i) putchar(letters[i]);
putchar('\n'); return 0;
}

第 6 章练习 5:字母金字塔
#include <stdio.h>
int main(void) {
char last;
printf("请输入大写字母:");
if (scanf(" %c", &last) != 1 || last < 'A' || last > 'Z') return 1;
for (char row = 'A'; row <= last; ++row) {
for (int i = 0; i < last - row; ++i) putchar(' ');
for (char c = 'A'; c <= row; ++c) putchar(c);
for (char c = row - 1; c >= 'A'; --c) putchar(c);
putchar('\n');
} return 0;
}

第 6 章练习 7:倒序打印单词
#include <stdio.h>
#include <string.h>
int main(void) {
char word[101];
printf("请输入单词:");
if (scanf("%100s", word) != 1) return 1;
for (size_t i = strlen(word); i > 0; --i) putchar(word[i - 1]);
putchar('\n'); return 0;
}

第 6 章练习 10:区间平方和
#include <stdio.h>
int main(void) {
int lower, upper;
printf("请输入下限和上限(上限小于下限结束):");
while (scanf("%d%d", &lower, &upper) == 2 && upper >= lower) {
long long sum = 0;
for (int i = lower; i <= upper; ++i) sum += (long long)i * i;
printf("%d 到 %d 的平方和:%lld\n", lower, upper, sum);
printf("请输入下限和上限(上限小于下限结束):");
}
puts("结束"); return 0;
}

第 6 章练习 13:2 的前 8 次幂
#include <stdio.h>
int main(void) {
int a[8], value = 1, i = 0;
for (int j = 0; j < 8; ++j) { value *= 2; a[j] = value; }
do { printf("%d ", a[i++]); } while (i < 8);
putchar('\n'); return 0;
}

第 6 章练习 16:单利与复利
#include <stdio.h>
int main(void) {
double daphne = 100.0, deirdre = 100.0; int years = 0;
while (deirdre <= daphne) { daphne += 10.0; deirdre *= 1.05; ++years; }
printf("第 %d 年,Daphne:%.2f 美元,Deirdre:%.2f 美元\n", years, daphne, deirdre);
return 0;
}

第 6 章练习 18:社交圈人数
#include <stdio.h>
int main(void) {
int friends = 5, week = 0;
while (friends <= 150) {
++week; friends = (friends - week) * 2;
printf("第 %d 周:%d 人\n", week, friends);
} return 0;
}

第 7 章练习 1:统计字符
#include <stdio.h>
int main(void) {
int c, spaces = 0, lines = 0, others = 0;
printf("请输入字符(# 结束):");
while ((c = getchar()) != '#' && c != EOF) {
if (c == ' ') ++spaces; else if (c == '\n') ++lines; else ++others;
}
printf("空格:%d,换行:%d,其他字符:%d\n", spaces, lines, others);
return 0;
}

第 7 章练习 2:字符及 ASCII 码
#include <stdio.h>
int main(void) {
int c, count = 0;
printf("请输入字符(# 结束):");
while ((c = getchar()) != '#' && c != EOF) {
if (c == '\n') printf("[\\n]:%d ", c);
else if (c == ' ') printf("[空格]:%d ", c);
else printf("%c:%d ", c, c);
if (++count % 8 == 0) putchar('\n');
}
if (count % 8) putchar('\n'); return 0;
}

第 7 章练习 4:if else 替换标点
#include <stdio.h>
int main(void) {
int c, changes = 0;
printf("请输入文本(# 结束):");
while ((c = getchar()) != '#' && c != EOF) {
if (c == '.') { putchar('!'); ++changes; }
else if (c == '!') { printf("!!"); ++changes; }
else putchar(c);
}
printf("\n替换次数:%d\n", changes); return 0;
}

第 7 章练习 5:switch 替换标点
#include <stdio.h>
int main(void) {
int c, changes = 0;
printf("请输入文本(# 结束):");
while ((c = getchar()) != '#' && c != EOF) {
switch (c) {
case '.': putchar('!'); ++changes; break;
case '!': printf("!!"); ++changes; break;
default: putchar(c);
}
}
printf("\n替换次数:%d\n", changes); return 0;
}

第 7 章练习 7:工资与税金
#include <stdio.h>
#define RATE 1000.0
#define HOURS 40.0
#define OVERTIME 1.5
#define FIRST 300.0
#define SECOND 150.0
#define TAX1 0.15
#define TAX2 0.20
#define TAX3 0.25
int main(void) {
double hours, gross, tax;
printf("请输入一周工作小时数:");
if (scanf("%lf", &hours) != 1 || hours < 0) return 1;
gross = hours <= HOURS ? hours * RATE : (HOURS + (hours - HOURS) * OVERTIME) * RATE;
if (gross <= FIRST) tax = gross * TAX1;
else if (gross <= FIRST + SECOND) tax = FIRST * TAX1 + (gross - FIRST) * TAX2;
else tax = FIRST * TAX1 + SECOND * TAX2 + (gross - FIRST - SECOND) * TAX3;
printf("工资总额:%.2f,税金:%.2f,净收入:%.2f 美元\n", gross, tax, gross - tax);
return 0;
}

编写和运行过程中遇到的问题及解决方法
无
总结和思考
通过本次作业,我练习了循环、数组、条件分支和字符输入,进一步理解了 while 与 do while 的执行顺序,以及 break、continue 和逻辑运算符短路求值的作用。编写程序时需要结合输入与结束条件选择合适的循环,并通过运行结果检查程序是否符合题目要求。

浙公网安备 33010602011771号