1、模块二:三种基本结构及流程控制 C 程序的三种基本结构是 顺序结构、选择结构、循环结构。这 三种结构分别需要借助于特定的语句控制实现。 (1)顺序结构:赋值语句和函数调用语句是控制该结构的主要 语句。函数调用语句中最常用的是:scanf( )、printf( )、 getchar( )、putchar( )等用于控制输入输出的语句。注意用 scanf( )输入变量值时要严格按照格式控制串的形式要求输入, 用 printf( )输出时要进行相应的格式控制,需要熟记几种格式转 换说明符:%c 、%s、%d 、%f、%lf(当变量为 double 类型 时,在 scanf 中必须用 %lf,但输出时
2、用%f 就可以了) 。 练习: 1、已知 a、b、c 为 int 型变量,用于输入的语句为: scanf(“a=%d,b=%d,c=%d“,,若想使 a 的值为 1,b 的值为 2、c 的值为 3,应当怎样输入?如果提供的输 入方法为 1,2,3,则对应的输入语句是什么? 2、float v1234.5678;,输出格式为:输出总宽度为 10, 精度为 3,则应使用语句 printf(_);实现;若输出 语句为:printf(“%.3f”,v);,输出的内容为:_ (2)选择结构:用 if.else、switch 语句配合复合语句、 break 语句控制实现。If 语句有三种形式:单分支 if
3、、双分支 if、嵌 套 if,注意 else 应与其前最靠近的未匹配过的 if 相对应,而与 对齐的形式无关,每一个 else 实际上都隐含了一个条件,要充 分利用这些条件分析程序;if 后的条件通常是关系表达式,但 是实际上可以是任何表达式,仅以该表达式是 0 或非 0 来判断 条件的假和真。注意:if ( )及 else 后面都只能控制一条语句, 经常需要用到复合语句。 switch 语句中特别要注意的是:( 1)switch 后面的表达式类型 应当为整型、字符型、枚举型,而不可以是 float 或 double 型, 因为表达式的取值必须是离散值。 (2)找到与表达式匹配的常量后开始执行
4、,直到遇到 break 或 语句结束才会停止。因此每一个分支后如果没有及时用 break,则继续向下执行,这样,switch 结构可以选择多个分支 执行 (3)这些常量的顺序调整不影响程序的正确性,只要每个分支 执行的功能固定就可以了。 练习: 1、已知变量 tf 为整型,下面的条件语句中,五种表达有一种 与其它四个不等价,它是? A、 if (tf ) 语句 1; else 语句 2; B、if ( tf=0 ) 语句 2; else 语句 1; C、if (tf!=0 ) 语句 1; else 语句 2; D、if (!tf ) 语句 2; else 语句 1; E、if (tf=1 )
5、语句 1; else 语句 2; 2、设以下所有变量均为整型,下列程序所实现的分段函数是? if (x0) y=1; else y=0; if (xb) c=a; a=b; b=c; 4、设有声明 int a=1, b=2,则下面程序段的输出结果是? 如 果是内层的每个 case 后有 break,而外层没有 break,输出结果 是?switch (a) case 1: printf(“#n“); switch (b) case 1: printf(“*n“); case 2: printf(“*n“); case 3: printf(“*n“); break; case 2: printf
6、(“#n“); break; (3)循环结构:常用 while、dowhile、for 三种流程控制语 句实现,注意 while 和 for 属于当型循环,dowhile 属于直到 型循环,若 while 后的条件为非 0 则继续循环,若为 0 则结束, 三种循环是可以相互转化的。这里特别强调的是:循环的退出 一般是条件为 0(for 的表达式 2,如果表达式 2 缺省,则表示 永真条件、while 或 do while 后的表达式就可以表示条件,如: while (A) ,这就是一个永真条件)时不进入循环体,但是在 循环体内也可以用一定条件下的 break 语句退出本层循环。如 果表示条件的
7、表达式值永远不可能为 0,则为一个死循环,这 一点要注意! 在循环语句中可以用 break 表示退出本层次循环、continue 表 示忽略本次循环体中的后续语句,重新开始下一次循环条件的 判断,以便决定是否要继续循环。 循环体只有一条语句,注意复合语句的正确使用,不要误用分 号形成循环体为空语句,例如:for (i=0;i=1E-6),如果用 do.while 循环,条件也是 这样表示。 注意分子、分母、当前项、和分别用一个变量表示, 正确定义变量的类型,正确解决变符号问题:s=-s; (4)输出规则图形式问题 分析行号与当前行前导空格数、符号个数、符号形状之间 的关系,正确控制换行。 (5)利用循环可以控制输入数据的范围,这在实验三的 P23 页。 int a,b; do scanf(”%d%d”, while (ab|b1000); 实现输入的 a,b 范围是: 10=a=b=1000