C语言顺序结构程序设计

职高C语言课程教学课件

2.8 顺序结构程序设计实例

计算机程序由若干条语句构成。语句主要有:

  • 赋值语句
  • 表达式语句
  • 输入/输出语句
  • 分支选择语句
  • 循环语句
  • 空语句
  • 函数调用语句

结构化程序的三种基本结构

一个结构化程序有3种基本结构:

  1. 顺序结构:一组按书写顺序执行的语句
  2. 选择结构:能根据运行时的情况(条件)自动选择要执行的语句组
  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 <stdio.h>
#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取余数得到十位数,最后将商作为百位数输出。

#include <stdio.h>

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

下列程序段的输出结果是()

int a = 456, b;
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。

本章小结与易错点

知识点总结

  1. C语言的基本数据类型有: char、short、int、long、float、double等几种。
  2. char为字符型,占1个字节,字符型数据可与整数类型通用。
  3. 每种类型的常量都有不同的表达方式。
  4. 与整型不同的是,浮点运算无法表示百分之百的精确,它受到精度的限制。
  5. 计算机中没有无限大或无穷大的数。各种类型数据的值域受到所占字节数和存储形式的限制。
  6. 运算符包括算术运算符、逻辑运算符、关系运算符、赋值运算符、逗号运算符、自增运算符、自减运算符等几种。
  7. 表达式是将变量、常量、函数调用通过运算符进行有意义的组合而形成的。
  8. 赋值语句可以在完成表达式运算的同时,对变量进行赋值,并能自动进行数据类型转换。
  9. 强制类型转换的运算符为(类型)。如:(float)1/2、(int)3.14等。
  10. 注意基本输入、输出函数getchar()、putchar()、scanf()、printf()等的使用。

易错点分析

  1. 混淆表达式和表达式语句:表达式末尾没有分号,表达式语句末尾有分号。
  2. 忘记变量声明:C语言中所有变量必须先声明后使用。
  3. 混淆赋值运算符(=)和相等运算符(==):这是最常见的错误之一。
  4. 忽略数据类型转换:特别是在整数除法和浮点数运算时。
  5. scanf函数使用时忘记取地址运算符(&):导致运行时错误。
  6. 使用数学函数时忘记包含math.h头文件。
  7. 混淆角度和弧度:三角函数使用弧度而非角度。
  8. 整数除法的截断问题:如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

解析:空语句是只有一个分号的语句,不执行任何操作。表达式语句是有分号的表达式,赋值语句和函数调用语句都属于表达式语句。