跳转到内容

第 2 章 顺序结构程序设计

  • 2.1 C 源程序结构
  • 2.2 最简单的 C 程序
  • 2.3 整型数据
  • 2.4 实型数据
  • 2.5 字符型数据
  • 2.6 各种类型数据之间的混合运算
  • 2.7 C 语言的运算符、表达式和语句
  • 2.8 逗号运算符和逗号表达式

学完这一章,你应该能做到:

  • 看懂一个最简单的 C 程序。
  • 自己写出 main 函数。
  • 使用 intfloatdoublechar 定义变量。
  • scanf 输入数据,用 printf 输出结果。
  • 理解赋值、四则运算、整数除法和类型转换。
  • 写出“输入 -> 计算 -> 输出”的顺序程序。

顺序结构就是程序按照从上到下的顺序一条一条执行。

这是最基础的程序执行方式。只要你还没有写 ifforwhile,程序基本就是顺序执行。

#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}

先记住这几个点:

  • #include <stdio.h> 表示引入标准输入输出库。
  • main 是程序入口,程序从这里开始执行。
  • printf 用于输出。
  • return 0; 表示程序正常结束。
int age = 18;

用来存整数,比如年龄、数量、成绩、总和。

float price = 19.9f;
double pi = 3.1415926;

用来存小数。初学阶段你可以把 double 理解为比 float 更精确的小数类型。

char grade = 'A';

字符要用单引号包起来。

注意:

  • 'A' 是一个字符。
  • "A" 是一个字符串。
printf("%d\n", 10);
printf("%f\n", 3.14);
printf("%c\n", 'A');

常见格式符:

  • %d:输出整数
  • %f:输出小数
  • %c:输出字符
  • %s:输出字符串
int a;
scanf("%d", &a);

注意:

  • scanf 输入变量时,变量名前通常要加 &
  • 但字符数组输入字符串时,一般不加 &

例如:

int a, b;
scanf("%d%d", &a, &b);
int a;
a = 5;

赋值号 = 的意思是“把右边的值放进左边的变量”。

int a = 10, b = 3;
printf("%d\n", a + b);
printf("%d\n", a - b);
printf("%d\n", a * b);
printf("%d\n", a / b);
printf("%d\n", a % b);

其中:

  • / 是除法
  • % 是取余
int a = 5, b = 2;
printf("%d\n", a / b);

结果是 2,不是 2.5

因为整数除以整数,结果仍然是整数部分。

int a = 5;
float b = 2.0;
printf("%f\n", a / b);

这时结果是浮点数,因为参与运算的数据类型不同,程序会进行类型转换。

  • 表达式:有值的式子,比如 a + b
  • 语句:能执行的完整操作,比如 a = a + 1;
  • 分号:一条语句结束的标志

初学阶段你要养成一个习惯:每写完一条语句,检查一下有没有分号。

#include <stdio.h>
int main(void)
{
int a, b, sum;
scanf("%d%d", &a, &b);
sum = a + b;
printf("%d\n", sum);
return 0;
}
#include <stdio.h>
int main(void)
{
int length, width, area;
scanf("%d%d", &length, &width);
area = length * width;
printf("%d\n", area);
return 0;
}

7.3 输入一个三位数,拆出百位、十位、个位

Section titled “7.3 输入一个三位数,拆出百位、十位、个位”
#include <stdio.h>
int main(void)
{
int n, a, b, c;
scanf("%d", &n);
a = n / 100;
b = n / 10 % 10;
c = n % 10;
printf("%d %d %d\n", a, b, c);
return 0;
}
  • = 写成 ==,或者反过来。
  • scanf 忘记给变量加 &
  • 误以为 5 / 2 的结果是 2.5
  • 字符用成双引号,字符串用成单引号。
  • 输出格式符和变量类型不对应。
  • 一条语句结束后漏掉分号。
  1. 写出下面程序的输出结果。
#include <stdio.h>
int main(void)
{
int a = 10, b = 3;
printf("%d\n", a / b);
printf("%d\n", a % b);
return 0;
}
  1. 写出下面程序的输出结果。
#include <stdio.h>
int main(void)
{
char c = 'A';
printf("%c %d\n", c, c);
return 0;
}
  1. 写出下面程序的输出结果。
#include <stdio.h>
int main(void)
{
int a;
a = (3, 5, 7);
printf("%d\n", a);
return 0;
}
  1. 下面程序至少有 4 处错误,自己找出来并改正。
#include <stdio.h>
int main()
{
int a;
scanf("%d", a);
a = 3.5;
printf("%f\n", a);
}
  1. 修改下面程序,使它能正确输入半径并输出圆面积。
#include <stdio.h>
int main(void)
{
int r;
scanf("%f", &r);
printf("%d\n", 3.14 * r * r);
return 0;
}
  1. 输入两个整数,输出它们的和、差、积、商。
  2. 输入圆半径 r,输出圆面积和圆周长。
  3. 输入三个整数,输出它们的和与平均值。
  4. 输入摄氏温度,输出华氏温度。
  5. 输入一个三位数,输出各位数字之和。
  6. 输入秒数,换算成“几小时几分钟几秒”。
  7. 输入两个整数,交换后输出。
  8. 输入商品单价和数量,输出总价。
  9. 输入梯形上底、下底和高,输出面积。
  10. 输入一个字符,输出它对应的 ASCII 码值。

学完这章后,你检查自己能不能做到:

  • 我能不看资料写出一个最简单的 C 程序。
  • 我知道 printfscanf 分别做什么。
  • 我知道 %d%f%c 的基本用途。
  • 我能解释为什么 5 / 2 的结果是 2
  • 我能独立写出“输入 -> 计算 -> 输出”的程序。
  • 第 2 章不要急着做复杂题,先把最基础模板抄熟。
  • 手写题时,先写变量定义,再写输入,再写计算,再写输出。
  • 如果一道题老出错,就把变量每一步的值在纸上列出来。

学完这一章后,再去看第 3 章会非常顺,因为你已经会写最基础的程序骨架了。