📐

第3章 顺序结构程序设计

谭浩强《C程序设计》第五版 · 交互式教学演示

C程序的基本结构

/* 第一个C程序 */
#include <stdio.h>

int main() {
    int a, b, sum;        /* 变量声明 */
    a = 3;
    b = 4;
    sum = a + b;
    printf("sum = %d\n", sum);
    return 0;
}

程序组成要素

  • 1
    #include 预处理
    引入标准输入输出头文件
  • 2
    main 函数
    程序执行的入口,有且只有一个
  • 3
    变量声明
    在使用前必须先声明
  • 4
    语句序列
    顺序执行,分号结束
  • 5
    return 0
    向操作系统返回正常退出码

顺序结构流程图

点击"单步执行"观察程序流程

开始
输入 a, b
sum = a + b
输出 sum
结束

⬅️ 点击下方按钮开始演示

aint?0x1000
bint?0x1004
sumint?0x1008

C语言字符集与标识符规则

✅ 合法标识符

sum _count student1 MAX_SIZE myFunc

❌ 非法标识符

2abc my-var int for a b

命名规则

  • 只能包含:字母、数字、下划线
  • 不能以数字开头
  • 不能是C语言关键字
  • 区分大小写:Sumsum
  • 长度一般不超过63个字符

基本数据类型

类型关键字位数范围(典型32位)示例
短整型short16-32768 ~ 32767short s = 100;
整型int32-2147483648 ~ 2147483647int n = 42;
长整型long32/64依平台而定long l = 1000000L;
单精度浮点float32±3.4×10⁻³⁸ ~ ±3.4×10³⁸float f = 3.14f;
双精度浮点double64±1.7×10⁻³⁰⁸ ~ ±1.7×10³⁰⁸double d = 3.14;
字符型char80 ~ 255(无符号)char c = 'A';

进制表示与转换

C语言常量写法: 十进制 255 = 八进制 0377(前缀0)= 十六进制 0xFF(前缀0x)

字符与ASCII码对照

ASCII = 65,0x41,'A'
要点: 'A' = 65,'a' = 97,'0' = 48,'\n' = 10(转义字符)

自动类型转换规则

当不同类型数据参与运算时,系统自动向"精度高"方向转换
char short int long float double
示例1 int a=3; float b=1.5; a+bfloat 3.0 + 1.5 = 4.5(int→float)
示例2 char c='A'; int n=c+1;65 + 1 = 66(char→int)
强制转换 (int)3.9 = 3(截断小数),(float)7/2 = 3.5
⚠️ 注意: 7/2 = 3(整数除法截断),7.0/2 = 3.5(浮点除法)

赋值运算符演示

运算符优先级(交互查询)

输入一个C表达式,查看求值顺序

最高优先级
() [] ->
括号、下标、成员
单目
! ~ ++ -- *
逻辑非、自增减等
算术1
* / %
乘、除、取模
算术2
+ -
加、减
移位
<< >>
左移、右移
关系
< <= > >=
大小比较
相等
== !=
等于、不等于
位运算
& ^ |
位与、异或、位或
逻辑
&& ||
逻辑与、逻辑或
条件
?:
三目运算符
赋值
= += -= ...
赋值运算
最低
,
逗号运算符

自增/自减运算符

前置 ++i(先自增后使用)

i5
j=++i?
int i=5, j;
j = ++i;  /* i先+1=6,再赋给j */
/* i=6, j=6 */

后置 i++(先使用后自增)

i5
j=i++?
int i=5, j;
j = i++;  /* j先=5,再i+1=6 */
/* i=6, j=5 */
⚠️ 注意: printf("%d %d", i, i++) 的结果是未定义行为,不要在同一表达式中多次修改同一变量!

printf 格式输出演示

格式说明符对照
%d十进制整数
%o八进制整数
%x十六进制整数(小写)
%f浮点数(默认6位小数)
%.2f保留2位小数
%8.2f宽度8,右对齐,保留2位小数
%-8d宽度8,左对齐
%c字符
%s字符串
%e科学计数法

交互演示

printf 与 scanf 工作原理

📤 printf 输出

程序显示器

📥 scanf 输入

键盘程序
scanf 重要规则:
• 变量前必须加 &scanf("%d", &n)(取地址)
• 输入 float 用 %f,double 用 %lf
• 字符串用数组名,不加 &scanf("%s", str)

常用转义字符

转义字符含义ASCII示例
\n换行10printf("Hello\n")
\t水平制表符9printf("%d\t%d",a,b)
\\反斜杠92printf("C:\\path")
\"双引号34printf("He said \"Hi\"")
\'单引号39char c='\''
\0空字符(字符串结束标志)0char s[]="abc\0"
\r回车13移到行首

getchar / putchar 字符I/O

/* 读一个字符并输出 */
char c;
c = getchar();
putchar(c);
putchar('\n');
交互演示:

顺序结构:交换两个变量

经典算法:借助中间变量交换 a 和 b 的值

int a = 3, b = 5, temp;
temp = a;
a = b;
b = temp;
printf("a=%d, b=%d", a, b);
a3
b5
temp?
点击"开始"观察交换过程

顺序结构:计算圆的面积和周长

#define PI 3.14159265
double r, area, peri;
scanf("%lf", &r);
area = PI * r * r;
peri = 2 * PI * r;
printf("面积=%.2f 周长=%.2f", area, peri);

顺序结构:华氏温度转摄氏温度

/* C = (F - 32) × 5 / 9 */
float F, C;
scanf("%f", &F);
C = (F - 32) * 5.0 / 9.0;
printf("C = %.2f\n", C);
°F

🎯 综合练习:个人信息录入与格式化输出

模拟 scanf + printf 完成信息采集与格式化显示

输入信息

程序输出

(等待输入...)

对应C代码

#include <stdio.h>
int main() {
    char name[] = "张三";
    int  age = 20;
    float height = 1.75f;
    float score = 95.5f;
    printf("姓名: %-10s 年龄: %3d\n", name, age);
    printf("身高: %.2f m  成绩: %.1f\n", height, score);
    return 0;
}

📝 本章知识点回顾

💾
数据类型
int/float/double/char,各自的范围和用法
运算符
算术、赋值、++/--,注意优先级与整数除法
📥
输入输出
printf/scanf,格式符,转义字符
🔄
类型转换
自动转换向高精度,强制转换(type)可能丢精度