高级语言程序设计课程第四次个人作业

高级语言程序设计课程第四次个人作业

这个作业属于哪个课程: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 和逻辑运算符短路求值的作用。编写程序时需要结合输入与结束条件选择合适的循环,并通过运行结果检查程序是否符合题目要求。

posted @ 2026-11-04 15:04  Pentyd  阅读(3)  评论(0)    收藏  举报