跳过正文
P2 程序的基本结构和语句
  1. S/
  2. C/C++/
  3. C/
  4. C语言程序设计/

P2 程序的基本结构和语句

·2057 字·5 分钟· ·
Li
作者
Li
往前走,别回头!
目录
C 语言程序设计笔记 - 这篇文章属于一个选集。

知识点
#

3.1 程序的基本结构
#

  • @ 程序结构图
    • ![[白板/P4 程序结构.canvas|P4 程序结构]]

3.1.1 C 语言的语句
#

[!tip] C 语言语句

  • @ 语句: C 语言程序的基本执行单位,以分号 ; 结尾
  • % 语句分类:
    • 表达式语句
    • 函数调用语句
    • 控制语句
    • 复合语句
    • 空语句

语句的书写规则
#

  • ! 一行可以写多个语句,每个语句以 ; 结尾
  • ! 一个语句可以分多行写(当一行代码过长时)
printf("断点停止在\
这里\n");  // 语句分多行书写

3.1.2 程序的三种基本结构
#

[!tip] 结构化程序设计

  • @ 结构化程序设计: 使程序结构清晰、可读性强,提高程序设计的质量
  • % 三种基本结构:
    • 顺序结构
    • 选择结构
    • 循环结构

1. 顺序结构
#

  • @ 顺序结构: 先执行 A 操作,再执行 B 操作
  • ! 语句从上到下、从左到右逐条执行
printf("1\n");
printf("2\n"); 
printf("3\n");  // 输出: 1 2 3

2. 选择结构
#

  • @ 选择结构: 根据条件 P 选择执行 A 或 B 操作
  • ! 条件为真执行 A,条件为假执行 B
if(3 > 1)
    printf("3 > 1\n");   // 这行被执行
else
    printf("3 < 1\n");   // 这行不会被执行
多分支选择结构
#
  • % kk1, k2, …, kn 比较,选择执行对应的操作
  • % 典型语句: switch 语句
int k = 5;
switch(k) {
    case 1:
        printf("k = 1\n");   // 不会被执行
        break;
    case 2:
        printf("k = 2\n");   // 不会被执行
        break;
    case 5:
        printf("k = 5\n");   // 会被执行
        break;
}

3. 循环结构
#

当型循环结构 (while)
#
  • @ 当型循环: 先判断条件 P,再决定是否执行 A 操作
  • ! 条件 P 为真时反复执行 A,直到条件为假
int icount = 5;
while(icount >= 0) {
    printf("icount = %d\n", icount);  // 5,4,3,2,1,0
    icount = icount - 1;
}
直到型循环结构 (do-while)
#
  • @ 直到型循环: 先执行一次 A 操作,再判断条件 P
  • ! 至少执行一次 A 操作
  • ! 条件 P 为真时继续执行 A
int icount = 5;
do {
    printf("icount = %d\n", icount);  // 5,4,3,2,1,0
    icount = icount - 1;
} while(icount >= 0);

3.1.3 赋值语句的特殊写法
#

[!warning] 注意

  • ! 赋值表达式可以被包含在其他表达式中
  • ! 但不推荐这种写法,程序清晰性和易读性更重要
int x;
printf("x = 8的值是%d\n", x = 8);  // x = 8的值是8

int a = 3, b = 5, t = 1;
if((a = b) > 0) 
    t = a;  // 执行后 a = 5
printf("a = %d\n", a);  // a = 5

3.2 数据的输出与数据的输入
#

  • @ 输入输出图
    • ![[白板/P5 输入输出.canvas|P5 输入输出]]

3.2.1 数据的输出
#

1. putchar 函数
#

[!tip] putchar 函数

  • @ putchar: 向屏幕输出一个字符
  • 格式: putchar(c);
  • c 可以是字符型变量或整型变量
#include <stdio.h>

int main() {
    char a, b, c;
    a = 'F'; b = 'A'; c = 'T';
    putchar(a);    // F
    putchar(b);    // A
    putchar(c);    // T
    putchar('\n'); // 换行
    
    a = 97;  // 字符a的ASCII码
    b = 98;  // 字符b的ASCII码
    putchar(a);    // a
    putchar('\n'); // 换行
    putchar(b);    // b
    return 0;
}
#include 命令说明
#
  • ! #include <stdio.h> - 在系统目录中寻找头文件
  • ! #include "stdio.h" - 先在当前目录寻找,再到系统目录
  • % 系统头文件用 <>,自定义头文件用 ""

2. printf 函数
#

[!tip] printf 函数

  • @ printf: 向屏幕输出若干个任意类型数据
  • 格式: printf(格式控制字符串, 输出表列);
  • 格式控制字符串包含:
    • 原样输出的普通字符
    • 格式字符 (%d, %f, %c 等)
printf 格式字符
#
格式字符含义示例
%d十进制整数printf("%d", 10); → 10
%o八进制数printf("%o", 15); → 17
%x十六进制数printf("%x", 15); → f
%u无符号十进制printf("%u", 100); → 100
%c字符printf("%c", 'a'); → a
%s字符串printf("%s", "CHINA"); → CHINA
%f浮点数printf("%f", 2.15+3.12); → 5.270000
格式字符详细说明
#

%d 十进制整数

int a = 10;
printf("a = %d\n", a);  // a = 10

%o 八进制数

  • ! 输出的数字不能是负数
int abc = 15;
printf("abc = %o\n", abc);  // abc = 17 (八进制)

%x 十六进制数

  • ! 输出的数字不能是负数
int abc = 15;
printf("abc = %x\n", abc);  // abc = f (十六进制)

%u 无符号十进制

  • ! 用于输出 unsigned 类型数据
  • ! 无符号类型表示的数据范围比有符号类型大 1 倍
short aaa = -10000;
printf("aaa = %u\n", aaa);   // aaa = 4294957296 (意外值)
printf("aaa = %d\n", aaa);   // aaa = -10000 (正确)

%c 字符

  • ! 整数范围 0-255 可以用字符形式输出(ASCII码)
int a = 97;
printf("%c\n", a);   // a (输出ASCII码对应的字符)

char c = 'a';
printf("%d\n", c);   // 97 (输出字符对应的ASCII码)

%s 字符串

printf("中国的英文拼写是%s\n", "CHINA");  // 中国的英文拼写是CHINA

%f 浮点数

float x = 2.15f, y = 3.12f;
printf("%f\n", x + y);  // 5.270000

float abc = 0.789058f;
printf("%.4f\n", abc);  // 0.7891 (小数点后4位)
printf("%f\n", abc);    // 0.789058
printf 注意事项
#
  • ! 格式字符要与输出的数据类型相匹配
  • ! 输出 % 的三种方法:
printf("5%%\n");           // 5% (两个%输出一个%)
printf("%c\n", '%');       // %
printf("%%s\n");           // %s

3.2.2 数据的输入
#

[!warning] 注意

  • ! 数据输入不常用,实际项目中一般不从键盘输入数据
  • ! 输入错误可能导致程序异常

1. getchar 函数
#

[!tip] getchar 函数

  • @ getchar: 等待用户从键盘输入一个字符
  • 格式: getchar();
  • 按 Enter 键后程序才继续执行
char c;
c = getchar();  // 等待输入
putchar(c);     // 输出输入的字符

printf("%c", getchar());  // 直接输出输入的字符
getchar 的特殊用途
#
  • ! 可用于防止黑色执行窗口一闪而过
  • ! 放在 main 函数最后一行,等待用户输入
getchar 的注意事项
#
  • ! 用户输入字符后按回车,实际输入了两个字符
  • ! 第二次 getchar() 会读取回车符
  • ! 建议整个程序只使用一次 getchar()

2. scanf 函数
#

[!tip] scanf 函数

  • @ scanf: 格式化输入函数,从键盘输入任意类型数据
  • 格式: scanf(格式控制字符串, 地址表列);
  • ! 参数必须是变量的地址,使用 & 运算符
#pragma warning(disable:4996)  // 忽略scanf安全警告

int a, b, c;
scanf("%d%d%d", &a, &b, &c);  // 输入三个整数
printf("a + b + c = %d", a + b + c);
scanf 输入格式
#
  • ! 多个数据之间用空格、回车、Tab键分隔
  • ! 不能用逗号分隔(除非格式字符串中有逗号)
// 格式字符串中有逗号,输入时也要用逗号
scanf("%d,%d,%d", &a, &b, &c);  // 输入: 1,2,3

// 格式字符串中有冒号,输入时也要用冒号
scanf("%d:%d:%d", &a, &b, &c);  // 输入: 1:2:3
scanf 注意事项
#
注意点说明
地址运算符参数必须用 &,不要丢掉
验证输入建议在 scanf 后立即 printf 验证
输入结束按回车结束输入,未输完数据会出错
实用性学习有价值,实际工作几乎无实用价值
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
// 验证输入是否正确
printf("从scanf得到的三个变量值为%d, %d, %d\n", a, b, c);
printf("a + b + c = %d", a + b + c);
Reply by Email
C 语言程序设计笔记 - 这篇文章属于一个选集。

相关文章