跳转至

明解C语言

  • 在这里有C语言学习的点滴,
  • 通过编写书籍📚内的课后代码,快速掌握基础知识🍀,
  • 快速查看对应代码,请看🫱目录。
  • 所有的C代码准遵循 C99标准
  • 豆瓣简介: https://book.douban.com/subject/23779374/

MinjieC.png


创建日期:2024-06-01 | 更新日期:2024-06-07

第1章 初识C语言

本章节的核心目标是熟悉 C 语言中的基本元素,包括常量、变量以及输出函数的应用。同时,练习基本的四则运算和掌握格式化输入输出的技巧。

Practic0101.c

题目1-1(p19): 编写一段程序,计算出15减去37的结果,并以“15减去37的结果是-22。”的格式进行显示。

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

int main(void)
{
    printf("15减去37的结果是%d。\n", 15 - 37);

    return 0;
}
Text Only
1
15减去37的结果是-22。

Practice0102.c

题目1-2(p21): 编写一段程序,调用一次printf函数,显示天\n地\n人\n(见输出)。

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

int main(void)
{
    printf("天\n\n\n");

    return 0;
}
Text Only
1
2
3

Practice0103.c

题目1-3(p21): 编写一段程序,调用一次printf函数,显示喂!\n\n您好!\n再见。\n(见输出)。

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

int main(void)
{
    printf("喂!\n\n您好!\n再见。\n");

    return 0;
}
Text Only
1
2
3
4
喂!

您好!
再见。

Practice0104.c

题目1-4(p26): 如果在 int 型变量的声明中为变量赋一个实数值的初始值(如3.14或5.7等)会怎样呢? 请试着生成程序并确认。

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

int main(void)
{
    int no, i;

    for (i = 0; i < 1; i++)
    {
        // 使用循环输入并输出不同的no值
        printf("请输入整数no: ");
        scanf("%d", &no);
        printf("您输入的no值为: %d\n", no);
    }

    return 0;
}
Text Only
1
2
3
4
5
请输入整数no: 3.14
您输入的no值为: 3

请输入整数no: 5.7
您输入的no值为: 5

恭喜🎉你,成功完成了这一章节的学习,是不是已经对C语言的编程熟悉了呢,这是一门适合初学者学习的面向过程的语言,今后在接触到面向过程的高级语言的时候,也别忘了回头复习一下!继续学吧,下一章节会接触到更多关于运算的知识,别怕!你一直都是最棒的!❤️

第2章 运算和数据类型

在本章中,重点探讨 C 语言中整型和浮点型数据类型之间的运算规则,以及如何通过 scanfprintf 函数实现数据的输入和输出。通过一系列实际的编程练习,深入分析不同数据类型在运算中的行为,并学习如何针对具体问题进行程序设计和调试。这些练习不仅强化了对基本算术运算的理解,还提高了解决实际问题时进行数据类型选择和操作的能力。

Practice0201.c

注意:Practice0205.c 由于效果和 Practice0201.c相同,故忽略。

题目2-1(p39): 编写一段程序,读取两个整数,显示整数1是整数2的百分之几。

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

int main(void){
    int vx,vy;
    printf("请输入两个整数。\n");

    printf("整数1: ");
    scanf("%d",&vx);
    printf("整数2: ");
    scanf("%d", &vy);

    // 百分比 = A / B * 100,要注意A或者B是 int 类型,先转化为double类型
    // 同时,输出的时候用%f输出,可以保留两位小数(%.2f)
    printf("%d 是 %d 的 %.2f%%。\n",vx,vy,(double)(vx)/vy*100);

    return 0;
}
Text Only
1
2
3
4
请输入两个整数。
整数1: 54
整数2: 84
54 是 84 的 64.29%。

Practice0202.c

题目2-2(p39): 编写一段程序,读取两个整数,然后输出它们的和以及积。

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

int main(void)
{
    int vx, vy;
    printf("请输入两个整数。\n");

    printf("整数1: ");
    scanf("%d", &vx);
    printf("整数2: ");
    scanf("%d", &vy);

    printf("%d + %d = %d。\n", vx, vy, vx + vy);
    printf("%d * %d = %d。\n", vx, vy, vx * vy);

    return 0;
}
Text Only
1
2
3
4
5
请输入两个整数。
整数1: 54
整数2: 12
54 + 12 = 66。
54 * 12 = 648。

Practice0203.c

题目2-3(p46): 编写一段程序,读取输入的实数,然后输出它。

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

int main(void)
{
    double no;
    printf("请输入一个实数: ");
    scanf("%lf", &no);  // 注意 double 类型输入要用 %lf

    printf("您输入的实数为: %f\n", no); // double 类型的输出用 %f

    return 0;
}
Text Only
1
2
请输入一个实数: 57.3
您输入的实数为: 57.300000

Practice0204.c

题目2-4(p48): 编写程序对整型常量、浮点数常量、int 型变量和 double 型变量进行乘除等各种运算,从而验证本节介绍的规则。

C
 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(void)
{
    int n1, n2;
    double k1, k2;

    // 常量赋值
    n1 = 6;    // int 常量赋值
    k1 = 3.14; // double 常量赋值

    // 变量赋值

    printf("请输入一个整数: ");
    scanf("%d", &n2);
    printf("请输入一个实数: ");
    scanf("%lf", &k2);

    printf("\n常量和变量的 加减法:\n");
    printf("\n%d + %d = %d。\n", n1, n2, n1 + n2);
    printf("%f + %f = %f。\n", k1, k2, k1 + k2);
    printf("%d + %f = %f。\n", n1, k2, n1 + k2);
    printf("%d + %f = %f。\n", n2, k1, n2 + k1);

    printf("\n%d - %d = %d。\n", n1, n2, n1 - n2);
    printf("%f - %f = %f。\n", k1, k2, k1 - k2);
    printf("%d - %f = %f。\n", n1, k2, n1 - k2);
    printf("%d - %f = %f。\n", n2, k1, n2 - k1);

    printf("\n常量和变量的 乘除法:\n");
    printf("\n%d * %d = %d。\n", n1, n2, n1 * n2);
    printf("%f * %f = %f。\n", k1, k2, k1 * k2);
    printf("%d * %f = %f。\n", n1, k2, n1 * k2);
    printf("%d * %f = %f。\n", n2, k1, n2 * k1);

    printf("\n%d / %d = %d。\n", n1, n2, n1 / n2);
    printf("%f / %f = %f。\n", k1, k2, k1 / k2);
    printf("%d / %f = %f。\n", n1, k2, n1 / k2);
    printf("%d / %f = %f。\n", n2, k1, n2 / k1);

    return 0;
}
Text Only
 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
请输入一个整数: 3
请输入一个实数: 4.31

常量和变量的 加减法:

6 + 3 = 9。
3.140000 + 4.310000 = 7.450000。
6 + 4.310000 = 10.310000。
3 + 3.140000 = 6.140000。

6 - 3 = 3。
3.140000 - 4.310000 = -1.170000。
6 - 4.310000 = 1.690000。
3 - 3.140000 = -0.140000。

常量和变量的 乘除法:

6 * 3 = 18。
3.140000 * 4.310000 = 13.533400。
6 * 4.310000 = 25.860000。
3 * 3.140000 = 9.420000。

6 / 3 = 2。
3.140000 / 4.310000 = 0.728538。
6 / 4.310000 = 1.392111。
3 / 3.140000 = 0.955414。

注意,上述👆代码中并没有添加判断被除数不为0的限制,所以运行调试需要避开0值。

Practice0206.c

题目2-6(p52): 编写一段程序,读取 User 的身高数值(建议用 double),显示出标准体重的实数值。

\[Normal(Weight)= (Height - 100) \times 0.9 \]
C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>

int main(void)
{
    double user_height, user_weight;

    printf("请输入您的身高: ");
    scanf("%lf", &user_height);

    user_weight = (user_height - 100) * 0.9;
    printf("您输入的身高为%.2fcm, 估计您的标准体重为%.2fkg。\n", user_height, user_weight);

    return 0;
}
Text Only
1
2
请输入您的身高: 187
您输入的身高为 187.00cm, 估计您的标准体重为 78.30kg。

恭喜🎉你,成功完成了这一章节的学习,现在是不是可以随意拿捏🫴 int(整型)和 double(浮点型)的基本操作啦,下一章就要学习分支结构啦,继续加油⛽️吧。

第3章 分支结构程序

在这一章节中,将学习到如何使用分支语句来控制程序的执行路径。通过条件判断语句,可以根据不同的条件选择不同的执行路径,从而实现对程序逻辑的细分和控制。此外,还将学习到如何构建嵌套的分支结构,使得程序能够根据复杂条件做出决策,这有助于提高程序的灵活性和可读性。

Practice0301.c

题目3-1(p60):编写一段程序,输入两个整数(如A:17,B:5),如果后者是前者的约数,则显示“B是A的约数”。如果不是,则显示“B不是A的约数”。

C
 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(void)
{
    int A, B;
    puts("请输入两个整数:");

    printf("整数A: ");
    scanf("%d", &A);
    printf("整数B: ");
    scanf("%d", &B);

    if (A % B == 0)
    {
        printf("B是A的约数。\n");
    }
    else
    {
        printf("B不是A的约数。\n");
    }

    return 0;
}
运行结果:

Text Only
1
2
3
4
请输入两个整数:
整数A: 17
整数B: 5
B不是A的约数。

Practice0302.c

题目3-2(p66): 请你考虑一下,如果把代码清单3-9最后的else变为else if(no < 0),结果会怎样呢?

C
 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(void)
{
    int no;
    printf("请输入一个整数: ");
    scanf("%d", &no);

    if (no == 0)
    {
        printf("该整数为0\n");
    }
    else if (no > 0)
    {
        printf("该整数是正数\n");
    }
    else if (no < 0)    // 修改后的代码内容
    {
        printf("该整数是负数\n");
    }
    return 0;
}

Text Only
1
2
3
4
5
6
7
8
请输入一个整数: 0
该整数为0

请输入一个整数: 35
该整数是正数

请输入一个整数: -4
该整数是负数
可以发现,最后else语句的条件修改后,原来的条件判断并没有改变,只改变了程序的可读性

Practice0303.c

题目3-3(p67): 编程一段程序,输入一个整数值,输出它绝对值。

C
 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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
    int no;
    int choose; // 选择不同的Method
    printf("请输入一个整数:");
    scanf("%d", &no);

    printf("请选择方法(1)或 方法(2): ");
    scanf("%d", &choose);

    if (choose == 1)
    {
        printf("%d的绝对值为%d", no, abs(no));
    }
    else if (choose == 2)
    {
        if (no >= 0)
        {
            printf("%d的绝对值为%d", no, no);
        }
        else
        {
            printf("%d的绝对值为%d", no, -no);
        }
    }

    return 0;
}
Text Only
1
2
3
4
5
6
7
请输入一个整数:-8
请选择方法(1)或 方法(2): 1
-8的绝对值为8

请输入一个整数:-8
请选择方法(1)或 方法(2): 2
-8的绝对值为8

Practice0304.c

题目3-4(p67): 编写一段程序,输入两个整数,如果两个数值相等,则显示“A和B相等”。如果A大于B,则显示“A大于B”。如果A小于B,则显示“A小于B”。

C
 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(void)
{
    int A, B;
    printf("请输入两个整数。\n");
    printf("整数A:");
    scanf("%d", &A);
    printf("整数B:");
    scanf("%d", &B);

    if (A == B)
    {
        printf("A和B相等\n");
    }
    else if (A > B)
    {
        printf("A大于B\n");
    }
    else
    {
        printf("A小于B\n");
    }

    return 0;
}
Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
请输入两个整数。
整数A:54
整数B:12
A大于B

请输入两个整数。
整数A:10
整数B:20
A小于B

请输入两个整数。
整数A:0
整数B:0
A和B相等

Practice0305.c

题目3-5(p69): 编写程序,确认 相等运算符 和 关系运算符 的运算结果是 1 和 0。

C
 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
#include <stdio.h>

int main(void)
{
    int A, B;
    printf("请输入两个整数。\n");
    printf("整数A:");
    scanf("%d", &A);
    printf("整数B:");
    scanf("%d", &B);

    if (A == B)
    // 相等运算符
    {
        printf("1\n");  // 1 表示条件成立
    }
    else if (A > B)
    // 关系运算符
    {
        printf("1\n");  // 1 表示条件成立
    }
    else if (A < B)
    // 关系运算符
    {
        printf("0\n");  // 0 表示条件不成立
    }

    return 0;
}
Text Only
1
2
3
4
5
6
7
8
9
请输入两个整数。
整数A:20
整数B:20
1

请输入两个整数。
整数A:19
整数B:20
0

Practice0306.c

题目3-6(p73): 编写一段程序,计算出输入的三个整数中的最小值并显示。 ⚠️ 注意使用if语句。

C
 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(void)
{
    int A, B, C, min;
    printf("请输入三个整数。\n");
    printf("整数A:");
    scanf("%d", &A);
    printf("整数B:");
    scanf("%d", &B);
    printf("整数C:");
    scanf("%d", &C);

    min = A;    // 先假设整数A最小
    if (min > B)
        min = B;
    if (min > C)
        min = C;
    printf("三个数中最小的为%d\n", min);

    return 0;
}
Text Only
1
2
3
4
5
请输入三个整数。
整数A:0
整数B:-21
整数C:33
三个数中最小的为-21

Practice0307.c

题目3-7(p73): 编写一段程序,计算出输入的四个整数中的最大值并显示。 ⚠️ 注意使用if语句。

C
 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>

int main(void)
{
    int A, B, C, D, maxium;
    printf("请输入四个整数。\n");

    printf("整数A:");
    scanf("%d", &A);
    printf("整数B:");
    scanf("%d", &B);
    printf("整数C:");
    scanf("%d", &C);
    printf("整数D:");
    scanf("%d", &D);

    maxium = A;     // 先假设整数A为最大值
    if (maxium < B)
        maxium = B;
    if (maxium < C)
        maxium = C;
    if (maxium < D)
        maxium = D;

    printf("四个数中最大的为%d\n", maxium);

    return 0;
}
Text Only
1
2
3
4
5
6
请输入四个整数。
整数A:0
整数B:999
整数C:203
整数D:-10000
四个数中最大的为999

Practice0308.c

题目3-8(p73): 使用if语句替换代码清单3-15程序中的条件运算符。 ⚠️ 清单3-15: 编写一段程序,计算出输入的两个整数的差值,使用条件运算符。

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

int main(void)
{
    int n1, n2, gap;
    printf("请输入两个整数。\n");

    printf("整数1: ");
    scanf("%d", &n1);
    printf("整数2: ");
    scanf("%d", &n2);

    // 👇使用当行if,要注意不是所有的分支语句都可以写成单行。
    // 代码会自动判断两个整数大小,可以使用abs代替。
    if (n1 > n2) gap = n1 - n2; else gap = n2 - n1;

    printf("%d和%d的差值为%d\n", n1, n2, gap);

    return 0;
}
Text Only
1
2
3
4
5
6
7
8
9
请输入两个整数。
整数1: 23
整数2: 18
23和18的差值为5

请输入两个整数。
整数1: -22
整数2: 30
-22和30的差值为52

Practice0309.c

Practice0306.c

题目3-9(p73): 使用条件运算符替换 Practice0306.c 的程序中的if语句,实现相同的功能。

C
 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(void)
{
    int A, B, C, min;
    printf("请输入三个整数。\n");

    printf("整数A:");
    scanf("%d", &A);
    printf("整数B:");
    scanf("%d", &B);
    printf("整数C:");
    scanf("%d", &C);

    min = A; // 先假设整数A最小
    min = (min > B) ? B : min;
    min = (min > C) ? C : min;

    printf("三个数中最小的为%d\n", min);

    return 0;
}
Text Only
1
2
3
4
5
请输入三个整数。
整数A:0
整数B:-21
整数C:33
三个数中最小的为-21

Practice0310.c

题目3-10(p79): 编写一个程序,判断出输入的三个整数相等的三种情况。(方法任意)if语句+逻辑运算: caseI:如果三个数值都相等,输出“三个值都相等”。 caseII:如果其中任意两个值相等,输出“有两个值相等”。 caseIII:如果上述两种情况都不满足,输出“三个值各不相同”。

C
 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>

int main(void)
{
    int A, B, C;
    puts("请输入三个整数。");
    printf("整数1: ");
    scanf("%d", &A);
    printf("整数2: ");
    scanf("%d", &B);
    printf("整数3: ");
    scanf("%d", &C);

    if (A == B && B == C)
    {
        printf("三个值都相等。\n");
    }
    else if ((A == B && B != C) || (A != B && B == C) || (A == C && B != A))
    {
        printf("有两个值相等。\n");
    }
    else
    {
        printf("三个值各不相同。\n");
    }

    return 0;
}
Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
请输入三个整数。
整数1: 11
整数2: 11
整数3: 11
三个值都相等。

请输入三个整数。
整数1: 21
整数2: 0
整数3: 21
有两个值相等。

请输入三个整数。
整数1: 0
整数2: -1
整数3: 1
三个值各不相同。

Practice0311.c

题目3-11(p79): 编写一段程序,输入两个整数。 如果它们的差值小于等于10,显示“它们的差值小于等于10”。 否则,显示“它们的差值大于等于11”。

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

int main(void)
{
    int A, B, gap;
    puts("请输入两个个整数。");
    printf("整数1: ");
    scanf("%d", &A);
    printf("整数2: ");
    scanf("%d", &B);

    // 为了方便,直接使用条件判断运算符。
    gap = (A > B) ? (A - B) : (B - A);

    printf("%s", (gap < 11) ? "它们的差值小于等于10," : "它们的差值大于等于11。");
    printf("差值为%d。", gap);
    return 0;
}
Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
请输入两个个整数。
整数1: 12
整数2: 7
它们的差值小于等于10,差值为5。

请输入两个个整数。
整数1: -12
整数2: 23
它们的差值大于等于11。差值为35。

整数1: 0
整数2: 99
它们的差值大于等于11。差值为99。

Practice0312.c

题目3-12: 对代码清单3-4中的程序进行修改,不使用if语句,而是改用switch语句来实现。

C
 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(void)
{
    int no;
    printf("请输入一个整数: ");
    scanf("%d", &no);

    switch (no % 2)
    {
    // 除2的余数只有1 或者 0,所以只给一个case即可
    case 1:
        printf("%d是奇数。\n", no);
        break;
    // 此处的default就是case 0 的情况!(给一个default是为了代码的健壮性)
    default:
        printf(" %d是偶数。\n", no);
        break;
    }

    return 0;
}

Practice0313.c

题目3-13: 对代码清单3-17中的程序进行修改,不使用if语句,而是改用switch语句来实现。

C
 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
#include <stdio.h>

int main(void)
{
    int month;

    printf("请输入当前月份: ");
    scanf("%d", &month);

    while (month < 1 || month > 12)
    // 添加月份判断,如果输入错误需要重新输入
    {
        puts("您输入的月份无效!请重新输入。");
        printf("您输入的月份: ");
        scanf("%d", &month);
    }

    switch (month)
    {
    case 3:
    case 4:
    case 5:
        printf("%d月是春季\n", month);
        break;
    case 6:
    case 7:
    case 8:
        printf("%d月是夏季\n", month);
        break;
    case 9:
    case 10:
    case 11:
        printf("%d月是秋季\n", month);
        break;
    default:
        printf("%d月是冬季\n", month);
        break;
    }

    return 0;
}
Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
请输入当前月份: 3
3月是春季

请输入当前月份: 6
6月是夏季

请输入当前月份: 9
9月是秋季

请输入当前月份: 12
12月是冬季
```$$

```terminal
请输入一个整数: 17
17是奇数。

请输入一个整数: 0
 0是偶数。

恭喜🎉你,成功完成✅了这一阶段的学习,相信在接下去的第四章的内容学习中,🙆肯定可以继续完美拿捏🫴。

第4章 程序的循环控制

在本章节,会接触到循环的概念,从do-while到while再到for循环等不同的循环模式,在不同的实际应用中体会不同循环的妙用。

Practice0401.c

题目4-1(p95): 代码清单3-9是“判断输入的整数是0、正数还是负数”,请将其改写为可以将输入x,显示这一过程循环任意次。

C
 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
#include <stdio.h>

int main(void)
{
    int no;       /* 输入的整数 */
    int flag = 0; /* 定义一个判断变量 */

    do
    {
        printf("\n请输入一个整数: ");
        scanf("%d", &no);

        if (no > 0)
        {
            printf("该整数是正数\n");
        }else if(no < 0)
        {
            printf("该整数是负数\n");
        }else{
            flag = 1;   /* 若输入的为0,则停止循环 */
        }
    } while (no);

    // 读取到最后一次输入为 0
    if (flag == 1)
    {
        printf("该整数为0\n");
    }

    return 0;
}
    // 读取到最后一次输入为 0
Text Only
1
2
3
4
5
6
7
8
请输入一个整数: 199
该整数是正数

请输入一个整数: -99
该整数是负数

请输入一个整数: 0
该整数为0

Practice0402.c

题目4-2(p95): 编写一段程序,读取两个整数,分别为27和38,计算27到38之间到所有整数和,包括27和38本身。

C
 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 main(void)
{
    int a1, a2; /* 定义两个整数 */
    int ai;     /* 用来装变动的数列每一项的值 */
    int Sn = 0; /* 定义求和变量, 以等差数列Sn为求和变量 */
    int count;  /* 定义累加器 */

    printf("请输入两个整数。\n");
    printf("整数1: ");
    scanf("%d", &a1);
    printf("整数2: ");
    scanf("%d", &a2);

    ai = a1; /* 让ai从首项开始 */

    // 先判断输入两个数的大小,然后计算一共要累加的数的数量。
    /* 这里参考小学数学种树问题 */
    count = (a1 > a2) ? a1 - a2 + 1 : a2 - a1 + 1;  // 条件判断

    do
    {
        Sn += a1;   // 让sum从a1 + a1+1 + a1+2 + ... + a2
        ai += 1;    // 下个数变成 a1+1, a1+2,...,a2
        count -= 1; // 每加了一个数,数列里的数就少一个。
    } while (count); /* 当count==0时,累加结束,数列求和问题结束 */

    // 这里的首项a1 和 尾项 an 都是通过条件判断得出的。
    printf("首项为 %d, 公差为1, 尾项为 %d 的等差数列的 Sn = %d。\n", (a1 > a2) ? a2 : a1, (a1 > a2) ? a1 : a2, Sn);

    return 0;
}
Text Only
1
2
3
4
请输入两个整数。
整数1: 38
整数2: 27
首项为 27, 公差为1, 尾项为 38 的等差数列的 Sn = 456。

Practice0403.c

题目4-3(p99): 从输入数开始到0,输出每一项,while语句版。当输入为负数,就不输出换行。

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

int main(void)
{
    int num; /* 定义一个整数 */
    int k;   /* 用来暂时存储 num,避免变量使用后数值变了 */

    printf("请输入一个整数:");
    scanf("%d", &num);
    k = num; // 让k和num的值相等

    while (k >= 0)
    {
        printf("%d ", k);
        k--;
    }

    if (num >= 0)
    {
        printf("\n----我换行啦----\n"); // 为了显示出效果,增加一点符号
    }

    return 0;
}
Text Only
1
2
3
4
5
6
7
8
9
请输入一个整数:5
5 4 3 2 1 0
----我换行啦----

请输入一个整数:0
0
----我换行啦----

请输入一个整数:-1

Practice0404.c

题目4-4(p101): 从输入数开始递减,输出每一项,while语句版。1.当输入为负数,就不输出换行;2.递减到1而非0。

C
 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(void)
{
    int num; /* 定义一个整数 */
    int k;   /* 用来暂时存储 num,避免变量使用后数值变了 */

    printf("请输入一个整数:");
    scanf("%d", &num);
    k = num; // 让k和num的值相等

    while (k > 0) // 只需要修改此处即可以
    {
        printf("%d ", k--); // 这里可以合并到printf函数里面
    }

    if (num >= 0)
    {
        printf("\n----我换行啦----\n"); // 为了显示出效果,增加一点符号
    }

    return 0;
}
Text Only
1
2
3
4
5
6
7
8
9
请输入一个整数:5
5 4 3 2 1
----我换行啦----

请输入一个整数:0

----我换行啦----

请输入一个整数:-1