Skip to content

1.3 顺序程序设计

计算机程序设计 · C语言 · 1.3 顺序程序设计

顺序程序设计

🎯 一句话秒杀:顺序程序就是从上往下一条条执行,主要靠 printfscanf 搞定输入输出。


一、C语句分类

mermaid
flowchart TD
    A[C语句] --> B[控制语句]
    A --> C[函数调用语句]
    A --> D[表达式语句]
    A --> E[空语句]
    A --> F[复合语句]
    
    B --> G[if/else/switch/while/for/do...]
    D --> H[ a=3;  i++;  ]
    E --> I[  ;  // 什么都不做]
    F --> J[{...}  // 花括号括起来]

二、printf 输出函数(高频)

c
printf("格式控制字符串", 输出列表);

格式说明符

格式符用途示例
%d十进制 intprintf("%d", 10); → 10
%c单个字符printf("%c", 'A'); → A
%s字符串printf("%s", "hello"); → hello
%ffloat类型printf("%f", 3.14); → 3.140000
%lfdouble类型printf("%lf", 3.14);
%x十六进制printf("%x", 15); → f
%o八进制printf("%o", 8); → 10
%e科学计数法printf("%e", 100.0); → 1.000000e+02

附加格式

c
printf("%5d", 10);     // 右对齐,宽度5 → "   10"
printf("%-5d", 10);    // 左对齐,宽度5 → "10   "
printf("%.2f", 3.14159); // 保留2位小数 → 3.14
printf("%5.2f", 3.14); // 总宽度5,小数2位 → " 3.14"
printf("%#x", 255);    // 加前缀0x → 0xff

🚨 红牌警告

printf("%d", 3.14);类型不匹配! %d 要求int,给了float,输出是垃圾值 考试最爱考:格式说明符和数据类型必须一一对应

三、scanf 输入函数(高频)

c
scanf("格式控制字符串", 变量地址列表);

重点!变量前必须加 &

c
int a;
float b;
char c;
scanf("%d%f %c", &a, &b, &c);  // & 取地址,不能忘!

常见用法

c
scanf("%d", &a);                  // 输入整数
scanf("%f", &b);                  // 输入浮点数
scanf("%c", &c);                  // 输入字符(注意空格问题!)
scanf("%s", str);                 // 输入字符串(str是数组名,不需要&)

🔑 秒杀秘籍

什么时候要 &

  • 普通变量:scanf("%d", &a); ✅ 要 &
  • 数组名/指针:scanf("%s", str);&

规律: 只有数组名和指针变量不需要 &,其他都要

🚨 红牌警告——scanf的字符吸收问题

c
int a;
char ch;
scanf("%d", &a);
scanf("%c", &ch);  // ← 这里会把换行符'\n'读入ch!

解决方法:

c
scanf("%d", &a);
getchar();          // 吃掉换行符
scanf("%c", &ch);   // 现在才是正确输入

等价写法:scanf(" %c", &ch); — 格式串前加空格跳过空白字符

四、getchar 与 putchar

c
char ch;
ch = getchar();        // 从键盘读一个字符(可以吸收换行符)
putchar(ch);           // 输出一个字符
putchar('\n');         // 输出换行

五、数据类型转换

自动类型转换(隐式转换)

规则:低精度 → 高精度(向高看齐)
char → short → int → unsigned → long → float → double
c
float f = 10 / 3;       // ❌ 10/3=3(整数除法),f=3.0
float f = 10 / 3.0;     // ✅ 3.0→double,f=3.333333
int i = 3.14;           // ⚠️ 小数部分直接截断,i=3

强制类型转换

c
float f = (float)10 / 3;   // 10→10.0,f=3.333333
int x = 10, y = 3;
float f = (float)x / y;    // 先把x转float再除

🚨 红牌警告

整数除法截断: 1/2 = 0(不是0.5!) 想得到0.5:1.0/2(float)1/2 考试必考:int a=1/2; → a = 0


📝 闭卷真题挑战

(点击下方空白查看答案)

1. 写出以下代码的输出:
   int a=10; printf("%5d", a);

2. 写出以下代码的输出:
   int x=5, y=2; printf("%d", x/y);

3. scanf中什么情况下不需要加 & ?

4. 写出以下代码的问题:
   int a; char c; scanf("%d", &a); scanf("%c", &c);

5. float f = 5/2; f的值是?
👆 点击展开答案
  1. " 10"(右对齐宽度5,补3个空格)
  2. 2(整数除法截断,5/2=2)
  3. 数组名(如 char str[10]; scanf("%s", str);)和指针变量不需要 &
  4. 第二个 scanf 会读取第一个输入后的换行符,导致 ch = '\n' 解决:scanf(" %c", &c); 格式串前加空格
  5. 2.0(先算整数除法 5/2=2,再转float赋给f)

📖 教材习题对照

教材习题知识点难度
习题3.1~3.2printf 格式输出⭐⭐
习题3.4scanf 输入⭐⭐
习题3.5getchar 应用⭐⭐
习题3.6~3.7类型转换⭐⭐

对应教材:谭浩强《C程序设计》第5版 → 第3章 最简单的C程序设计 对应考试大纲:考点3 — 顺序程序设计

📺 配套视频

复习到本考点 → 先看视频补讲,再刷上面「闭卷挑战」。

仅供个人学习 · 考生回忆版 · 非考试院原卷