C语言程序的流程控制
c语言的三种流程控制语句及语法格式
![c语言的三种流程控制语句及语法格式](https://img.taocdn.com/s3/m/2e02b4c26429647d27284b73f242336c1eb93000.png)
C语言是一种广泛应用的编程语言,其流程控制语句是编写程序中的重要部分。
流程控制语句用于控制程序的执行流程,包括顺序执行、条件执行和循环执行。
C语言中常用的流程控制语句主要包括顺序结构、选择结构和循环结构,下面将分别介绍它们的语法格式及使用方法。
1. 顺序结构顺序结构是程序中最简单的流程控制结构,也是最基本的结构。
顺序结构指的是按照代码的编写顺序依次执行,没有跳跃或分支。
在C语言中,顺序结构是程序的默认执行方式,没有特定的关键字或语法格式。
程序中的语句按照编写的顺序依次执行,直到程序结束。
例如:```cint m本人n() {int a = 1;int b = 2;int c = a + b;printf("The result is d\n", c);return 0;}```以上代码中的语句就是按照顺序依次执行的,没有条件判断或循环。
2. 选择结构选择结构是根据条件判断的结果决定程序执行的流程控制结构。
在C 语言中,选择结构有两种形式,分别是if语句和switch语句。
(1)if语句if语句用于根据条件判断的结果决定程序的执行流程。
其基本语法格式如下:```cif (condition) {// 当条件为真(非0)时执行此处的语句块} else {// 当条件为假(0)时执行此处的语句块}```在if语句中,condition代表一个表达式或逻辑判断,如果condition 的值为真(非0),则执行if后面的语句块;否则执行else后面的语句块。
例如:```cint score = 80;if (score >= 60) {printf("Pass\n");} else {printf("F本人l\n");}```以上代码中,根据score的值来判断是否及格,如果score大于等于60,则输出Pass,否则输出F本人l。
除了if和else关键字,还可以使用else if语句来实现多重条件判断:```cint score = 75;if (score >= 90) {printf("Excellent\n");} else if (score >= 80) {printf("Good\n");} else if (score >= 70) {printf("Average\n");} else {printf("F本人l\n");}```(2)switch语句switch语句也是一种选择结构,适用于有多个条件判断的情况。
C语言实验四
![C语言实验四](https://img.taocdn.com/s3/m/8d4e4787d4d8d15abe234e56.png)
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
·…·
·…·
·…·
1 2 3…8 9 8…3 2 1
对应答案:实验4程序流程控制
1.参考程序
#define PI 3.14159
main()
{
float r,c,s1,s2,v;
printf("Enter r:");
scanf("%f",&r);
exit(0);
}
do
{
printf("%d",x%10);
i++;
x=x/10;
}while(x!=0);
printf("\ni=%d\n",i);
}
5.参考答案
(1)2 2 3 3 4 4 5 5 5 6 6 7 7 7 7
(2)Chi(注意:回车符“↙”也作为一个字符)
(3)x=13
6.分析
方法一:借助最大公约数。两个数的最小公倍数等于这两个数的积除以其最大公约数,这样,可以先利用辗转相除法求出最大公约数,进而求出最小公倍数。
3.先分析下面程序的功能,然后输入一个3位整数进行调试,看一看分析的结果是否正确。
main()
{
int n,x1,x2,x3,y;
printf("Enter n:");
scanf("%3d",&n);
x1=n/100;
x2=n/10%10;
x3=n/100;
y=x3*100+x2*10+x1;
printf("y=%d",y);
C语言程序 第三章流程控制
![C语言程序 第三章流程控制](https://img.taocdn.com/s3/m/4e3a917f02768e9951e73841.png)
6.输出斐波那契(Fibonacci)数列的前20项。该数列的第1项和第2项为1,从第3项开始,每一项均为其前面2项之各和,即:1,1,2,3,5,8,......。
7.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。问第一天共摘了多少。
第三章流程控制
习题:
1.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
2.求Sn =a+aa+aaa+…aa…a之值,其中a是一个数字,n表示a的位数,例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
3.求 (即求1!+2!+3!+4!+…+20!
4.求 。
10.出x的差的绝对值小于10-5。
(1)设定一个x的初值。
(2)用以上公式求出的下一个值x1
(3)再将x1代入以上公式右侧的xn,求出x的下一个值x2;
如此继续下去,直到前后两次求出的x值(xn和xn+1)满足以下关系:|
9.用二分法求下面方程在(-10,10)之间的根:
C语言流程控制
![C语言流程控制](https://img.taocdn.com/s3/m/27d9a3820408763231126edb6f1aff00bed570eb.png)
C语言流程控制
C语言是一种面向过程的编程语言,它提供了多种流程控制结构来
控制程序的执行流程。
流程控制可以让程序根据条件进行分支执行,
或者进行循环执行,以实现不同的逻辑功能。
本文将介绍C语言中常
用的流程控制语句以及它们的用法和应用场景。
条件语句
条件语句用于根据条件判断是否执行某个代码块。
C语言中的条件
语句有两种形式:if语句和switch语句。
if语句
if语句用于在满足某个条件时执行某段代码。
其根本语法如下所示:if (condition) {
// code to be executed if condition is true
}
如果条件为真,那么执行花括号中的代码块;如果条件为假,那么跳过代码块,继续执行后续语句。
可以通过多个if语句的嵌套来实现多个条件判断。
下面是一个简单的例如:
```c #include <stdio.h>
int main() { int num = 10;
if (num > 0) {
printf(\。
C51流程控制语句
![C51流程控制语句](https://img.taocdn.com/s3/m/302230ec998fcc22bcd10d03.png)
C语句分类
表达式语句:表达式加分号;构成。 空语句: ;
程序控制语句(9种):
if( )~else~ switch for( )~ 循环 while( )~ do~while( ) continue break 辅助控制 goto return
分支
1
4.4.1 C程序的三种基本结构
24
一般形式: do { 循环体语句; } while(表达式); 执行流程:
循环体 真(非0)
while 表达式 假(0)
特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 17
:
3.for语句
for(循环变量赋初值;循环条件;修改循环变量) { 循环体语句; }
说明: for语句中表达式1,表达 式2 ,表达式3 都可省略, 但分号;不可省 无限循环: for(;;)
实现if ~ else 正确配对方法:加{ }
10
4. switch语句(开关分支语句)
一般形式:
switch 表达式 case E1 语句组1 E2 语句组2 En
…...
语句组n
执行过程:
switch( 表达式) { case E1: 语句组 1; break; case E2: 语句组 2; break; default ……. 语句组n+1 case En: 语句组 n; break; [default: 语句组n+1 ; break;] } 11
格式:if (表达式)
{
真(非0)
语句组; }
例:if (x>y) printf(“%d”,x);
5
4.4.2 选择语句
流程控制实验报告
![流程控制实验报告](https://img.taocdn.com/s3/m/4ed9c100960590c69fc376b4.png)
C语言程序设计实验报告一、实验名称流程控制实验二、实验目的1.掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。
2.练习循环结构for、while、do-while语句的使用。
3.练习转移语句和标号语句的使用。
4.使用codeblocks开发环境中的调试功能:单步执行、设置断点、观察变量值。
三、实验任务1.源程序改错题下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。
例如,8!=40320。
#include <stdio.h>void main(){int i,n,s=1;printf("Please enter n:");scanf("%d",n);for(i=1,i<=n,i++)s=s*i;printf("%d! = %d",n,s);}2.源程序修改替换题(1)修改第1题,分别用while 和do-while 语句替换for 语句。
(2)修改第1题,输入改为“整数S ”,输出改为“满足n !≥S 的最小整数n ”。
例如输入整数40310,输出结果为n=8。
3.编程设计题(1)假设工资税金按以下计算方法计算:x<1000元,不收税金;1000<=x<2000,收取5%的税金;2000<=x<3000,收取10%的税金;3000<=x<4000,收取15%的税金;4000<=x<5000,收取20%的税金;x>5000, 收取25%的税金。
编写一个程序,输入工资金额,输出应收取的税金,要求用if 和switch 语句来实现。
(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格字符代替。
C语言03.1 流程控制(1 输入输出函数)
![C语言03.1 流程控制(1 输入输出函数)](https://img.taocdn.com/s3/m/ff9efcfa3c1ec5da51e27045.png)
注意
在输入字符型数据时,若格式控制串中没有 非格式字符,则认为所有输入的字符均为有 效字符。
如: scanf("%c%c%c",&a,&b,&c);
只有当输入为:def 时(即:不能有间隔),才能 把‘d’赋于a,‘e’赋予b,'f'赋予c
字符输入输出函数
例:
#include <stdio.h> void main() { char c; c=getchar(); ++c; putchar(c); putchar('\n'); return; }
作业
参照课堂举例,编写程序,练习 printf()和scanf()函数的各种格式符, 显示并观察运算结果
格式字符
d,i o x,X u f e,E g,G c s
意义 以带符号的十进制形式输出整数(正数不输出符号) 以八进制形式输出无符号整数(不输出前缀0) 以十六进制无符号形式输出整数(不输出前缀Ox) 以无符号十进制形式输出整数 以小数形式输出单、双精度实数,隐含输出6位小数 以指数形式输出单、双精度实数 以%f或%e中较短的输出宽度输出单、双精度实数 输出单个字符 输出字符串
如:scanf(“%f”, a); ×
scanf("%f", &a); √
不能用格式控制来规定输入数据的精度
如: scanf("%7.2f",&a);
×
scanf("%f", &a);
√
C语言常见几种流程控制语句
![C语言常见几种流程控制语句](https://img.taocdn.com/s3/m/a2370e63dc36a32d7375a417866fb84ae45cc39a.png)
C语言常见几种流程控制语句
1.顺序结构:程序按照代码的先后顺序依次执行,没有特殊的控制语句。
2.选择结构:根据条件的真假选择是否执行段代码,常见的选择结构有:
- if语句:根据条件判断是否执行段代码。
- switch语句:根据不同的取值执行不同的代码。
3.循环结构:根据条件的真假重复执行段代码
- for语句:根据循环条件重复执行段代码,一般用于已知循环次数的情况。
- while语句:根据循环条件重复执行段代码,一般用于不知道具体循环次数的情况。
- do-while语句:先执行一次代码,再根据循环条件重复执行段代码,一般用于至少需要执行一次的情况。
除了以上常见的流程控制语句,C语言还提供了一些其他的流程控制语句,如break语句用于结束当前循环,continue语句用于跳过本次循环的剩余代码等。
程序流程控制
![程序流程控制](https://img.taocdn.com/s3/m/deb871af83d049649b6658d6.png)
去执行该条件下的操作,其余部分被跳过;若无条件为真,就执
行最后一个else所指定的操作。
5.else与if的配对规则
请观察以下程序段和流程图,完成问题。 流程图:
假
x>7
程序段: if(x>7) if(x<13) printf(“left!\n”); else printf(“right!\n”);
输出“一种形式)
(1)请观察下面的流程图:
x>0
(3)归纳if语句的流程图:
表达式
x=x+1
语句 该图用if语句表示为:if(x>0) x=x+1;
(2)试写出if语句的一般形式:
if(表达式) 语句
知识盘点:
对“表达式”进行判断,如果计算结果为“真” ,那么执行“语句” ,
6.if语句的嵌套
(1)按else与if的配对规则划分下列关系。 if(条件1) if(条件2) 语句1 else 语句2 else if(条件3) 语句3 else 语句4
(2)题目:有一个函数:
-1(x<0) 编程,输入一个x值, y= 0(x=0) 1(x>0)
输出y值。
请判断下列哪些写法是正确的?为什么?
写法1: main() { int x,y; scanf(“%d”,&x); if(x<0) y=-1; else if(x>0) y=1; else y=0; printf(“x=%d,y=%d\n”,x,y); } 原因:
正确。
写法2: if(x>=0) if(x>0) else else y=-1; y=1; y=0;
原因:
正确。
写法3: y=-1; if(x!=0) if(x>0) else y=1; y=0;
C语言(第三章)(上)
![C语言(第三章)(上)](https://img.taocdn.com/s3/m/c91e5348767f5acfa1c7cd0a.png)
• 早期 语言不提供专门的逻辑(布尔)类型,规定用非 值表示“真”,用0 早期C语言不提供专门的逻辑 布尔)类型,规定用非0值表示 语言不提供专门的逻辑( 值表示“ 值表示“ 值表示“假”。 • 表达式,只要值为非 (包括负数),就说明其为“真”;只要其值为 ,就 表达式,只要值为非0(包括负数),就说明其为“ ),就说明其为 只要其值为0, 说明其为“假”。从而给判断带来很大的灵活性。 说明其为“ 从而给判断带来很大的灵活性。 • 在C99中,增加了_Bool类型,并增加了头文件<stdbool.h>,在其中定义了 中 增加了 类型,并增加了头文件 , 类型 存储1, 存储0。 宏bool、true和false,用true存储 ,用false存储 。 、 和 , 存储 存储
注意: 注意:
•
中是允许的。 (1)表达式 >2>7>8在C中是允许的。 )表达式5> > > 在 中是允许的 整个关系表达式的值为多少?? 整个关系表达式的值为多少?? (2)关系表达式的值是整型数 或1,可以看成是一种整型表 )关系表达式的值是整型数0或 , 达式。 达式。 若有: 如,若有: int i=1, j=7,a; a=i+(j%4!=0); 则a的值为?? 的值为?? 的值为 值参与运算: (3)字符在关系表达式中出现按照其 )字符在关系表达式中出现按照其ASCII值参与运算: 值参与运算 的值分别为?? 如:‘a’>’A’ ‘b’==‘B’-32的值分别为?? 的值分别为 不相等”的判别, (4)避免对两个实数表达式作“相等”或“不相等”的判别, )避免对两个实数表达式作“相等” 考虑用其差绝对值之差小于一个很小的值的形式: 考虑用其差绝对值之差小于一个很小的值的形式: 如: fabs (1.0/3.0* 3.0-1.0)<1e-5 < 在区间[ ] 使用a< (5)表示 在区间[a,b]中,使用 <=x && x<=b )表示x在区间 < 例如: 例如: -10<=x && x<=10 < < 若使用: 若使用:-10≤x≤10。 。 若x=10,结果为?? ,结果为?? 若x=100,结果为?? ,结果为?? 若x=-100,结果为?? ,结果为??
c语言第3章
![c语言第3章](https://img.taocdn.com/s3/m/e6ec488b192e45361166f570.png)
3.2.2 例题与分析
例题3.3 根据输入的加或减运算符,输出任意两个
分析本题的含义是根据用户从键盘输入的加运算符 或减运算符,在屏幕上输出相应的运算结果。首先 对题目进行分析和分解,然后再进行代码设计。问 题分析如图3.1
整型变量iop1, iop2 整型变量result 字符型变量operator
1 (x 0) y 0 (x 0)
1 (x 0)
为了避免此种情况,采用办法与情况1相似。改变 if...else的匹配关系,将情况2的代码修改如下,即 可正确表示符号函数。
if(x < 0) y = -1;
else if (x!=0) y = 1;
else y = 0;
例题3.6 求一元二次方程ax2+bx+ c = 0 分析由代数知识可知,方程的解有3种不同的情况,
/* 获得运算符 */
printf("please enter tow numbers:");/* 获得操作数 */
scanf("%d%d", &iop1, &iop2); if(operator == '+')/*由运算符决定不同运算*/
result = iop1 + iop2;
else
result = iop1 - iop2; printf("\n%d %c %d = %d\n", iop1, operator, iop2, result); /* 输出结果 */ }
方法1 main() {
int x, y; printf("please input a integer:"); scanf("%d", &x); if (x > 0) y = 1; else if (x == 0)
c语言程序流程控制的三个常用结构
![c语言程序流程控制的三个常用结构](https://img.taocdn.com/s3/m/aa1c6262b80d6c85ec3a87c24028915f804d8431.png)
c语言程序流程控制的三个常用结构下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!1. 顺序结构。
c语言中的顺序结构是程序自上而下按照代码顺序依次执行的结构。
C语言流程控制结构—顺序结构、选择结构
![C语言流程控制结构—顺序结构、选择结构](https://img.taocdn.com/s3/m/8afbc83eb5daa58da0116c175f0e7cd1842518b8.png)
C语⾔流程控制结构—顺序结构、选择结构C语⾔3种流程控制结构:顺序结构、选择结构、循环结构。
顺序结构 最简单的结构,不需要关键字。
安照代码顺序⼀步步执⾏。
选择结构 (⼀)if简单使⽤ 1) 第⼀种结构:if a) 如果条件为真,就执⾏后⾯的语句,否则不执⾏。
if(条件) { 语句1; 语句2; } 2) 第⼆种结构:if - else a) 如果条件成⽴就执⾏语句1,否则执⾏语句2。
if(条件) { 语句1; } else { 语句2; } 3) 第三种结构:if - else if - else... a) 先判断条件1,若成⽴则执⾏语句1,其它不执⾏;若条件1不成⽴,则检查条件2···,【注意】如果条件3成⽴,则说明前⾯的都不成⽴。
所有的语句块只有⼀个会被执⾏。
if(条件1) { 语句1; } else if(条件2) { 语句2; } else (条件3) { 语句3; } (⼆)选择结构-switch Switch(值) //通常是变量 { Case 数值1: 语句1; Break; Case 数值2: 语句2; Break; Case 数值3: 语句3; Break; Default : 语句4; Break; } 解说:该结构把数值与数值1进⾏⽐较,若相等,则执⾏后⾯的所有语句,直到遇见break语句跳出整个循环,若前⾯的条件都不满⾜,则最终会执⾏default后⾯的语句。
如果不写break语句,则后⾯的语句会接连执⾏,直到遇到break语句或者是全部语句执⾏完毕,只要前⾯的条件成⽴,则后⾯的判断就直接被忽略。
。
C语言程序设计课件:C 程序基本结构
![C语言程序设计课件:C 程序基本结构](https://img.taocdn.com/s3/m/a255ef31f11dc281e53a580216fc700abb6852bd.png)
值,然后利用printf()进行输出。
# include <stdio.h>
int main()
{
/* 定义字符型变量,并给它们赋初值 */
char c1, c2, c3, c4, c5, c6, c7;
c1 = 'C';
c2 = 'h';
c3 = 'i';
入和输出函数,
函数scanf()和printf()来完成数据的格式输
入和输出操作,其作用是向默认的输入设备
(键盘)和输出设备(终端或显示器)输入
或输出若干个任意类型的数据。
1.printf()函数的功能
printf()函数称为格式输出函数,最末一个字母
f 即为“格式”(format)之意,格式输出函
控制语句、复合语句、空语句与类.
介绍这些基本语句及其在顺序结构中的应用,
可以使读者对C 程序有一个初步的认识,为
以后的学习打下基础
(1)表达式语句:表达式语句由表达式加上分号“;”组成,运
行结果可以得到表达式的值。其一般形式为:
表达式;
例如:x=y+z; 赋值语句;
i++; 自增1 语句,i 值增1
/* 输出原码 */
printf("原码是:%c%c%c \n", c1, c2, c3);
/* 对字符进行译码运算 */
c1 = c1 + 6;
c2 = c2 + 6;
c3 = c3 + 6;
/* 输出译码结果 */
printf("密码是:%c%c%c \n", c1, c2, c3);
C语言常见几种流程控制语句
![C语言常见几种流程控制语句](https://img.taocdn.com/s3/m/19618108fc4ffe473368ab24.png)
while循环与do-while 循环
while循环的一般形式为: while(条件) 语句; while循环表示当条件为真时, 便执行语句。直到条件为假才结束循环。并继续 执行循环程序外的后续语句.
#include<stdio.h> main() { char c; c='\0'; /*初始化c*/ while(c!='\X0D') /*回车结束循环*/ c=getche(); /*带回显的从键盘接收字符*/ } 上例中, while循环是以检查c是否为回车符开始, 因其事先被初始化为空,所以条件为真, 进入循环等待 键盘输入字符; 一旦输入回车, 则c='\X0D', 条件为假, 循环便告结束。 与for循环一样, while循环总是在循环的头部检验条件, 这就意味着循环可能什么也不执行就退出。
For语句
for(<初始化>; <条件表过式>; <增量>
(1)初始化总是一个赋值语句, 它用来给循环控制变量赋初值; (2) 条件表达式是一个关系表达式, 它决定什么时候退出循环; (3) 增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间 用";"分开。 例如: for(i=1; i<=10; i++) 语句; 上例中先给i赋初值1, 判断i是否小于等于10, 若是则执行语句, 之后值增加1。 再重新判断, 直到条件为假, 即i>10时, 结束循环。
注意事项:
1. 条件执行语句中"else 语句2;"部分是选择项, 可以缺省, 此时条件语句变成: if(表达式) 语句1; 表示若表达式的值为非0则执行语句1 , 否则跳过语句1继续执行。 2. 如果语句1或语句2有多于一条语句要执行时, 必须使用"{"和"}" 把这些语句 包括在其中, 此时条件语句形式为: if(表达式) { 语句体1; } else { 语句体2; }
C语言控制流程与循环结构
![C语言控制流程与循环结构](https://img.taocdn.com/s3/m/6ece18461611cc7931b765ce0508763230127446.png)
C语言控制流程与循环结构在计算机编程领域中,控制流程和循环结构起着至关重要的作用。
掌握C语言中的控制流程和循环结构,将帮助程序员更好地组织和管理代码,实现复杂的逻辑功能。
本文将深入探讨C语言中的控制流程和循环结构的基本概念、用法和应用。
1. 控制流程控制流程是指程序中代码的执行顺序。
C语言提供了三种基本的控制流程:顺序结构、选择结构和循环结构。
1.1 顺序结构顺序结构是指按照代码的编写顺序,依次执行每一条语句的流程。
编写的代码将按照从上到下的顺序依次执行,每条语句执行完毕后再执行下一条语句。
以下是一个顺序结构的简单示例:```c#include <stdio.h>int main() {printf("Hello, World!\n");printf("Welcome to C programming!\n");return 0;}```在这个示例中,两条printf语句将按照顺序执行,先输出"Hello, World!",然后输出"Welcome to C programming!"。
1.2 选择结构选择结构通过条件语句来决定代码的执行路径。
根据条件的真假,决定执行哪个代码块。
C语言中的选择结构主要包括if语句、if-else语句和switch语句。
1.2.1 if语句if语句用于判断给定的条件是否满足,如果条件为真,则执行if语句块中的代码。
以下是一个if语句的示例:```c#include <stdio.h>int main() {int num = 10;if (num > 0) {printf("The number is positive.\n");}return 0;}```在这个示例中,如果num大于0,则输出"The number is positive."。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章C语言程序的流程控制利用计算机进行程序设计时,不仅仅只处理一些简单的数据,在大部分的程序设计里处理的问题还是相当复杂的。
对于那些复杂的程序设计,读者不可能直接就能写出程序的源代码,而是要通过一些具体的设计方法(如用程序流程图)把程序设计思想先写出来,然后根据程序流程图编写代码。
本章将具体介绍进行程序设计时使用的基本方法和C程序的流程控制。
3.1程序设计的基本知识3.1.1程序流程图在描述一个程序的基本结构思想时有很多种方法,其中程序流程图是最常用也是最基本的方法。
1.传统程序流程图传统流程图表示法的特点是用一些图框表示各种类型的操作,用线表示这些操作的执行顺序。
美国国家标准化协会ANSI规定了一些常用的流程图符号,现已为世界各国普遍采用。
我国也有自己的国家标准GB 1526-89与该标准基本相同,本书就参照ANSI标准做具体介绍。
标准中各种图示如图所示。
起止框输入输出框判断框处理框或流程线连接点注释框图传统流程图表示法下面对其中一些主要符号作简要说明:(1)起止框是用来标识程序的开始和结束位置的。
规定流程图以起止框开始,以起止框结束。
(2)输入输出框也叫数据框,其中可以注明数据名称、来源、用途或其它的文字说明。
(3)菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。
(4)处理框用矩形表示各种处理功能。
例如,执行一个或一组特定的操作,从而使信息的值、信息的形式或所在位置发生变化。
另外在矩形框内可注明特定处理名称或其简要功能。
(5)流程线用带箭头的直线表示程序的执行顺序。
当流程自左向右或自上向下时流程线可以不带箭头,其它情况应加箭头表示流程。
(6)连接点用小圆圈表示将画在不同地方的流程线连接起来。
下图中有两个以①为标志的连接点,它表示这两个点是互联在一起的,实际它们是同一个点。
这种连接通常用在图形画不下而需要分开画时。
①①(7)注释框不是流程图的必要部分,其不反映流程操作,只是为了流程图中某些操作做解释补充的,以帮助阅读流程图的人更好的理解流程图的作用。
2.N-S流程图灵活的流程线在程序设计中有它自己的优点,但也隐藏着许多导致错误的祸根。
因为它允许用流程线使流程任意转移,这对程序设计是一个隐患,它使程序流程看起来很乱,使程序难以理解和维护。
针对这一弊病,1973年美国学者I . Nassi和B . Shneiderman 提出了一种无流程线的流程图,称为N-S图。
它的基本表示方法是用一个矩形框,把整个程序算法像堆积木一样组成。
其基本结构如图、、、所示。
3.1.2 程序的三种基本结构结构化的程序设计方法是面向过程的程序设计的基本方法。
1996年意大利Bobra 和Jacopini 提出了三种基本程序结构。
已经证明,这三种算法可以解决任何复杂的问题。
1. 顺序结构N-S 流程图表示)(N-S 流程图表示)当型循环结构流程图循环结构当条件P 成立 语句组(N-S 流程图表示)图 直到型流程图例 画出求s=1+2+3+ … +100的传统流程图和N-S 流程图。
赋值语句由赋值表达式加一个分号组成。
例如:i = 1 ;2. 函数调用语句函数调用语句由函数调用表达式后跟一个分号组成。
例如:strcpy( s1, "student", 4 );printf("good afternoon\n " );3.空语句空语句是只有一个分号而没有其他表达式的语句。
例如:;它不产生任何操作运算,只作为形式上的语句,被填充在控制结构之中。
3.2.2复合语句C语言还允许把一组语句放在一对花括号之中,称为复合语句。
要特别强调一点,一个复合语句的后花括号之后不应再写分号。
例如:{c = getchar();b = b +c ;putchar();}3.2.3流程控制语句选择型结构语句循环控制结构语句流程转向语句……3.3选择结构程序设计在C语言中实现选择结构的语句有两大类:if语句和switch语句。
3.3.1if语句(1)简单if语句格式:if(表达式)语句;功能:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
其N-S流程图如图表示。
功能:如果表达式值为真,则执行语句1,否则执行语句2。
其执行过程如图所示。
图例值并输出。
# include<>{int x;printf(" please enter a number: ");scanf("%d",&x);if(x<0)x=-x;elsex=x;printf("number abs is d%",x);}(3)if语句的嵌套当if语句中执行的语句又是if语句时,那么就构成了if语句的嵌套。
其一般形式可以表示如下:if(表达式)if 语句1;else 语句2;elseif 语句3;else 语句4;在if语句的三种形式中,如果所要执行的语句超过一条必须用花括号括起来,构成一条复合语句,才能被完全执行。
例如:if(a>b){ a++;b++; }else{ a=10;b=100;}3.3.2switch语句一种用于多分支选择的语句——switch 语句,用该语句编写的程序简洁、易懂。
而且,其执行效率要比同样功能的阶梯式if …else if …else语句要高的多。
1.switch语句的一般形式switch语句的一般形式如下:switch(表达式){case 常量表达式1:语句组1;case 常量表达式2:语句组2;···case 常量表达式n:语句组n;default :语句组n+1;}2.switch语句的执行过程系统首先计算“表达式”的值,并逐个与其后的“常量表达式”的值相比较,当“表达式”的值与某个“常量表达式”的值相等时,就以此作为程序执行的入口,执行switch 结构中后面的各语句。
如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组)。
例用switch语句实现例3.4的功能。
# include<>main(){int score;printf("please input score(0-100):");scanf(" %d ",&score); /*从键盘输入学生成绩*/switch(score/10);{case 10:case 9:printf("excellent\n");break;case 8:printf("good\n"); break;case 7:printf("medium\n"); break;case 6:printf("pass\n"); break;default:printf("fail\n");}}3.4循环结构程序设计C语言提供了循环控制的三种语句:while语句、do…while循环语句和for循环语句。
3.4.1while语句while语句是一种条件循环结构,其控制结构如下:while(条件表达式)循环体例计算并输出从1加到100的和:s = 1+2+3+┅100。
# include<>main(){int sum = 0 , i = 1; /*设置和与循环变量*/while(i<=100){ sum = sum+i;i++;}printf(" Sum=%d ", sum);}程序执行结果如下:The sum of 1 to 100 equals is:50503.4.2do…while循环语句do…while结构在C语言中用于实现“直到型”循环。
其一般形式为:do循环体while(条件表达式);例用do...while语句求1+2+3+ (100)和。
# include<>main(){int i =1 , sum=0;do{ sum = sum+i;i++;}while(i<=100);printf("sum= %d",sum);}3.4.3for循环语句for语句的使用最为灵活,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。
for语句的一般形式如下:for(表达式1;表达式2;表达式3)循环体如图所示,for语句的执行流程是:例法,对凡是能够整除nfor 语句。
# include<>main(){int n, k;printf("Please input a positive integer:");scanf(" %d ",&n);printf(" Number %d Factors:",n);for(k=1;k<=n;k++)if(n%k= =0)printf(" %d",k);printf("\n");}程序某次的运行结果如下:Please input a positive integer:36↙Number 36 Factors:1 2 3 4 6 9 12 18 363.4.4循环嵌套一个循环体内又可以包含另外一个完整的循环结构,从而构成多重循环结构,这就是循环的嵌套。
3.4.5continue和break语句1.continue语句continue语句可以出现在循环体中,其作用是结束本次循环,但不退出循环结构。
它跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。
例输出60~600之间所有不能被9整除的数。
# include<>main(){int m;for(m=60; m<=600 ; m++){if(m%9= =0)continue ;printf("%d\n",m);}}由这个程序可以看出,当某个自然数m 被9整除时,就利用continue语句结束本次循环(其后的输出语句不执行),但不退出for循环结构,接着对下一个数进行判断。
2.break语句break语句只能用在switch结构或循环结构,而不能用于其他结构。
但用在循环结构中时,只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环。
本章小结从程序执行的流程来看,程序可分为三种最基本的结构:顺序结构、分支结构以及循环结构。
本章从学习程序的流程图画法入手系统的介绍了这三种基本结构。
程序中执行部分最基本的单位是语句。