2.8 顺序结构程序设计实例
计算机程序由若干条语句构成。语句主要有:
- 赋值语句
- 表达式语句
- 输入/输出语句
- 分支选择语句
- 循环语句
- 空语句
- 函数调用语句
结构化程序的三种基本结构
一个结构化程序有3种基本结构:
- 顺序结构:一组按书写顺序执行的语句
- 选择结构:能根据运行时的情况(条件)自动选择要执行的语句组
- 循环结构:允许多次重复执行一组语句
练习题 1
以下关于C语言程序结构的说法中,正确的是()
A. C语言程序由函数组成,必须有且只能有一个main函数
B. C语言程序由过程组成,可以有多个过程
C. C语言程序由函数组成,可以没有main函数
D. C语言程序由语句组成,语句的顺序就是执行顺序
答案:A
解析:C语言程序由函数组成,必须有且只能有一个main函数,它是程序的入口点。程序从main函数开始执行,到main函数结束。
练习题 2
下列C语言语句中,属于表达式语句的是()
A. int a = 10;
B. a + b;
C. ;
D. printf("Hello");
答案:B
解析:表达式语句是在表达式后面加上分号构成的语句。选项A是声明语句,选项C是空语句,选项D是函数调用语句。
练习题 3
下列关于顺序结构的描述中,错误的是()
A. 顺序结构中的语句按照书写顺序执行
B. 顺序结构是三种基本结构中最简单的一种
C. 顺序结构程序中不能包含选择语句和循环语句
D. 顺序结构程序中的语句主要包括赋值语句、输入输出语句等
答案:C
解析:顺序结构程序中可以包含选择语句和循环语句,但这些语句本身作为整体仍然按照顺序执行。
语句类型详解
顺序结构程序中的语句绝大部分由以下语句组成:
- 赋值语句
- 表达式语句
- 输入/输出语句
- 函数调用语句
表达式语句
在C语言中,一个表达式以分号";"作为结尾就构成了表达式语句,可以在程序中作为语句单独出现。
int i, j, k;
float x, y;
// 逗号表达式语句
i = 1, j = 2, k = 3;
// 输入/输出语句(函数调用语句)
scanf("%f%f", &x, &y);
printf("x=%f; y=%f\n", x, y);
// 赋值语句
x = x + 4;
练习题 1
下列C语言语句中,正确的是()
A. int a = 10, b = 20, c = 30;
B. int a; b; c;
C. int a, b, c
D. int a = 10; int b = 20;
答案:A
解析:选项B中不能使用分号分隔变量声明,选项C缺少分号,选项D中重复使用int关键字是不必要的。
练习题 2
下列关于表达式语句的说法中,错误的是()
A. 表达式后面加上分号就构成表达式语句
B. 赋值语句是一种特殊的表达式语句
C. 函数调用语句不是表达式语句
D. 空语句是只有一个分号的语句
答案:C
解析:函数调用语句实际上是一种表达式语句,因为函数调用本身也是一个表达式。
练习题 3
下列语句中,不属于表达式语句的是()
A. i++;
B. a = b + c;
C. printf("Hello");
D. if (a > b) a = b;
答案:D
解析:选项D是条件语句(选择结构),不属于表达式语句。
顺序结构实例:三角形计算
例2-19:已知三角形的两边及其夹角,求第三边和面积
已知三角形的两边a、b及其夹角α,求第三边c及面积s。
$$ c=\sqrt{a^{2}+b^{2}-2ab\cos\alpha} $$
$$ s=\frac{1}{2}ab\sin\alpha $$
注意:如果α值以角度值输入,需要先将其转换成弧度,因为cos()和sin()函数的参数必须是弧度。
#include <math.h>
#define PI 3.1415926
int main()
{
float a, b, c, s, alfa;
double af;
printf("输入三角形的两边A、B及其夹角α:\n");
scanf("%f%f%f", &a, &b, &alfa);
af = alfa * PI / 180; // 角度转弧度
c = sqrt(a*a + b*b - 2*a*b*cos(af));
s = a * b * sin(af) / 2;
printf("\n第三边C=%.2f\n面积S=%.2f\n", c, s);
return 0;
}
练习题 1
在C语言中,用于数学计算的平方根函数是()
A. pow()
B. sqrt()
C. abs()
D. exp()
答案:B
解析:sqrt()函数用于计算平方根,pow()用于计算幂,abs()用于计算整数的绝对值,exp()用于计算指数函数。
练习题 2
下列关于#define命令的说法中,正确的是()
A. #define命令用于定义变量
B. #define命令在程序运行时起作用
C. #define命令用于定义符号常量
D. #define命令定义的内容可以在程序中被修改
答案:C
解析:#define命令用于定义符号常量,在编译前进行文本替换,不属于变量,不能在程序运行时修改。
练习题 3
在C语言中,三角函数sin()和cos()的参数单位是()
A. 角度
B. 弧度
C. 度分秒
D. 梯度
答案:B
解析:C语言中的三角函数sin()和cos()的参数单位是弧度,不是角度。
顺序结构实例:三位数反向输出
例2-20:从键盘输入一个3位数,然后反向输出
例如:输入123,则输出321。
分析:将输入的3位数(例如123)送入整型变量a中,将a除以10取余数得到个位数,将商再除以10取余数得到十位数,最后将商作为百位数输出。
int main()
{
int a, b;
printf("输入一个3位整数:");
scanf("%d", &a); // 假设输入123
b = a % 10; // b = 123 % 10 = 3, 得到个位数
printf("%d", b);
a = a / 10; // a = 123 / 10 = 12
b = a % 10; // b = 12 % 10 = 2, 得到十位数
printf("%d", b);
a = a / 10; // a = 12 / 10 = 1, 得到百位数
printf("%d\n", a);
return 0;
}
练习题 1
在C语言中,求余数的运算符是()
A. %
B. /
C. *
D. &
答案:A
解析:%是求余运算符,/是除法运算符,*是乘法运算符,&是按位与运算符或取地址运算符。
练习题 2
如果整型变量a的值为123,那么表达式a/10的值是()
A. 12.3
B. 12
C. 3
D. 13
答案:B
解析:在C语言中,整数相除结果仍然是整数,小数部分会被截断,所以123/10的结果是12。
练习题 3
下列程序段的输出结果是()
b = a % 10;
printf("%d", b);
a = a / 10;
b = a % 10;
printf("%d", b);
a = a / 10;
printf("%d", a);
A. 456
B. 654
C. 465
D. 645
答案:B
解析:第一次取个位数6,第二次取十位数5,第三次取百位数4,所以输出结果是654。
本章小结与易错点
知识点总结
- C语言的基本数据类型有: char、short、int、long、float、double等几种。
- char为字符型,占1个字节,字符型数据可与整数类型通用。
- 每种类型的常量都有不同的表达方式。
- 与整型不同的是,浮点运算无法表示百分之百的精确,它受到精度的限制。
- 计算机中没有无限大或无穷大的数。各种类型数据的值域受到所占字节数和存储形式的限制。
- 运算符包括算术运算符、逻辑运算符、关系运算符、赋值运算符、逗号运算符、自增运算符、自减运算符等几种。
- 表达式是将变量、常量、函数调用通过运算符进行有意义的组合而形成的。
- 赋值语句可以在完成表达式运算的同时,对变量进行赋值,并能自动进行数据类型转换。
- 强制类型转换的运算符为(类型)。如:(float)1/2、(int)3.14等。
- 注意基本输入、输出函数getchar()、putchar()、scanf()、printf()等的使用。
易错点分析
- 混淆表达式和表达式语句:表达式末尾没有分号,表达式语句末尾有分号。
- 忘记变量声明:C语言中所有变量必须先声明后使用。
- 混淆赋值运算符(=)和相等运算符(==):这是最常见的错误之一。
- 忽略数据类型转换:特别是在整数除法和浮点数运算时。
- scanf函数使用时忘记取地址运算符(&):导致运行时错误。
- 使用数学函数时忘记包含math.h头文件。
- 混淆角度和弧度:三角函数使用弧度而非角度。
- 整数除法的截断问题:如5/2结果是2而不是2.5。
练习题 1
下列关于C语言数据类型的说法中,错误的是()
A. char型数据占1个字节
B. float型数据精确表示所有实数
C. int型数据范围有限
D. double型数据比float型数据精度高
答案:B
解析:float型数据无法精确表示所有实数,它受到精度限制,只能表示一定范围内的实数。
练习题 2
下列选项中,不是C语言基本数据类型的是()
A. int
B. float
C. string
D. char
答案:C
解析:C语言中没有string基本数据类型,字符串是通过字符数组来表示的。
练习题 3
下列关于表达式语句的说法中,正确的是()
A. 表达式语句就是没有分号的表达式
B. 赋值语句不是表达式语句
C. 函数调用语句不是表达式语句
D. 空语句是只有一个分号的语句
答案:D
解析:空语句是只有一个分号的语句,不执行任何操作。表达式语句是有分号的表达式,赋值语句和函数调用语句都属于表达式语句。