第3章算法与程序设计基础
• 3.2.2流程图
结构化程序设计中采用三种基 本结构,即顺序结构、选 择结构和循环结构,这三 种基本结构有以下共同特 点: ① 只有一个入口。 ② 只有一个出口。 ③ 结构内的每一部分都有机 会被执行到。 ④ 结构内不存在“死循环” (无终止的循环)。
3.2.3 N-S结构流程图
3.2.4 伪代码表示法
• 2. 函数调用语句
由一个函数调用加一个分号构成函数调用语句
printf("\ns=%d",s);
• 3. 表达式语句
在C语言中,由一个表达式加上一个分号,就构成 了一条表达式语句。
如:s=s+i; i=i+2; if ((a=b=7)>5) x=y; j++;
4. 空语句
仅由一个分号构成的语句就是空语句。
1。 if (a==b ) printf(“Yes!”); else printf(“Yes!”); 2。 If(x) printf(“\n x=%d”,x);
• 说明:
1. if后面的表达式可以为任何类型的表达式, 只要表达式的结果为非零,则表示条件成立, 否则表示条件不成立。 2.if语句中的语句1,语句2可以是一条语句, 也可以是由{}构成的一个复合语句,如果在 该语句处需要写多条语句才能完成所必要的 功能时,就使用复合语句的形式。 3.在格式2中的else前面的语句必须要有一个分 号,整个语句结束处有一个分号。如例3.9中 的if语句。
3.1.2 算法的特性
• • • • • 1.有穷性 2.确定性 3.可行性 4.有零个或多个输入 5.有一个或多个输出
3.2算法的常用表示方法
3.2.1自然语言表示法
例3.2: 求m!
如果m=6,即求1×2×3×4×5×6。 我们先设s 代表累乘之积,以t代表乘数,自然 语言表示m!的算法为: (1)使s=1,t=1。 (2)使s×t, 得到的积仍放在s中。 (3) 使t的值加1。 (4) 如果t≤m,返回第②步重新执行。否则循环 结束,此时s中的值就是m!,输出s。
若:a=3,b=4,c=9 则结果为:1 若:a=3,b=4,c=9 则结果为:0 若: b=4,c=9 则a的值为:0
•3.5.2 逻辑运算符和逻辑表达式
• 1.逻辑运算符及优先次序
• 2. 逻辑表达式
用逻辑运算符将关系表达式或逻辑表达式连接起 来的式子称逻辑表达式。 例如:若a=4,b=2,x=6,y=7,则: a>b&&x>y 表达式的结果为:0 a==b||x==y 表达式的结果为:0 !a||a>b 表达式的结果为:1
•3.5.4 if语句的嵌套
• 例3.11: 求一元二次方程ax2+bx+c=0的实数 解,并显示结果。
• 说明:C语言规定,else总是与它上面最近的 且又没有配对的if语句进行配对。
if (表达式1) { if (表达式2) 语句1; } else if(表达式3) 语句2; else 语句3;
3.5.3 if语句
• C语言提供了两种格式:
• 格式1:
if (表达式) 语句; 该语句的功能是:首先计算表达式的值,然 后判断表达式的值是否为非零(真),若为非零 (真),则执行语句。其执行过程见图3-22所 示
例3.7: 输入一个字符,若是字母,则输出“Yes!”。
说明:对类似简单的问题,可以直接编写程
• 说明: (1)switch 后的表达式,可以是整型或字符型,也可以是枚 举类型,不能是上述三种类型以外的类型。 (2)每个case后的常量表达式只能是常量组成的表达式,当 switch后的表达式的值与某一个常量表达式的值一致时。程 序就转到此case后的语句开始执行。如果没有一个常量表达 式的值与switch后的值一致,就执行default后的语句。 (3)每个case后的常量表达式的值必须互不相同,否则程序 就无法判断应该执行哪个语句了。 (4)case的次序不影响执行结果,一般情况下,尽量将使用 几率大的case放在前面,default部分也不一定要放在最后。 5)在执行完一个case后面的语句后,程序流程转到下一个 case后的语句开始执行,直至整个switch语句结束。千万不 要理解成执行完一个 case后程序就转到switch后的语句去 执行了。若要执行完一个case的语句后,转到switch后的语 句去执行,则要在该case语句的最后加上break语句(跳转 语句,在下一节做详细讲解),跳转到switch后的语句去执 行。switch语句与break语句的执行过程的流程图如图3-29 所示。
伪代码(pseudo code) 是用介于自然语言和 计算机语言之间的文 字和符号来表示算法 即计算机程序设计语 言中具有的语句关键 字用英文表示,其他 的可用汉字,也可用 英文,只要便于书写 和阅读就可。
例3.3: 求m!,用伪代码表示 的算法如下: 开始 从键盘输入一个正整数给 m 置s的初值为1 置i的初值为1 当i<=m,重复执行下面的 操作: 使s=s×i 使i=i+1 (循环体到此结束) 打印s的值 结束
• 注意:
(1) 在C语言中规定:非零为“真”,“真” 用1表示;零为“假”,“假”用0表示。 (2) 对逻辑表达式的求解,并不是所有的逻 辑运算符都被执行,只是在必须执行下一个逻 辑运算符才能求出表达式的解时,才执行该运 算符。
• 例3.6: 运行下面的程序四次,若分别输入0 0 0,1 1 1,4 5 6,0 1 0,分别写出其对应的输出结果。
3.5.5 条件运算符和条件表达式
• 条件运算符(? : )是C语言中唯一一个三目运算符,条 件表达式的一般形式为:
表达式1?表达式2:表达式3 • 说明: 1.条件表达式的执行顺序:先计算表达式1的值,若表 达式1的值为真,则计算表达式2的值,并把该值作为 整个条件表达式的结果,表达式3不会计算;否则计 算表达式3的值,并把表达式3的值作为整个条件表达 式的结果,此时表达式2不会计算。 2.运算优先级:高于赋值运算符,低于算术运算符和关 系运算符。 如:max=(a>b)?a:b 相当于 max=((a>b)? a:b) a>b? a:b+1 相当于 a>b?a : (b+1) 3.条件运算符的结合方向为“自右至左”。 如:a>b?a:c>d?c:d 相当于 a>b?a: (c>d?c:d)
例3.1: 求 1+2+3+4+…+100=? 算法1 步骤1:1+2=3 步骤2:3+3=6 步骤3:6+4=10 … 步骤99: 4950+100=5050
算法3 步骤1:k=1,s=0 步骤2:如果k>100,则 算法结束,s即为所求的 和,输出s;否则转向步 骤3. 步骤3:s=s+k,k=k+1 步骤4:转向步骤2
C语言程序设计
第3章 算法与程序设计基础
• • • • • • • 3.1算法概述 3.2算法的常用表示方法 3.3结构化程序设计方法 3.4C语句概述 3.5选择结构程序设计 3.6循环程序设计 3.7综合程序应用举例
3.1算法概述
• 3.1.1算法的概念
为解决一个实际问题而采取的方法和步骤,称之为 “算法” 。
• 格式2: if (表达式) 语句1 ; else 语句2; 该语句的功能是:首先计算表达式的值, 然后判断表达式的值是否为非零(真),若为非 零(真),则执行语句1,否则执行语句2。其执 行过程见图3-24。
• 例3.9: 输入一个整数,判断该数是否为3的倍 数,并把结果显示出来。
请大家一起动手编写书上的两个例题: 1.输入两个数,并判断两数是否相等。 2.输入一个整数,若该数不为零,则输出。 说明:两题都存在分支,但什么情况 下用单分支什么时候用双分支,要能 够快速的作出判断。
控制语句用来规定语句执行的顺序,共 有9种控制语句:
3.5 选择结构程序设计
ห้องสมุดไป่ตู้
3.5.1 关系运算符和关系表达式
1.关系运算符 及优先次序
2.关系表达式
用关系运算符连接起来的表达式称为关系 表达式,关系表达式的结果为逻辑值真(用 “1”表示)和假(用“0”表示)。 例如: c>a+b a==b<c a=b>c
•3.5.7 选择结构程序设计举例
#include <math.h> #include <stdio.h> main() { float x,y,z; printf("\nx="); scanf("%f",&x); printf("\ny="); scanf("%f",&y); if((x<0)&&(y<0)) z=exp(x+y); if ((x>=0)&&(x<1)&&(y>=0)) z=exp(2*x-y); if(x>=1) z=log(x); printf("z=%5.2f\n",z); }
序。如果问题比较复杂,就要先写出算法或 流程图,然后再编写程序。
#include<stdio.h> main() { char x; x=getchar(); if (x>=„a‟&&x<=„z‟||x=„A‟&&x<=„Z‟ ) printf(“Yes!”); }
例3.8: 编写求一元二次方程ax2+bx+c=0 的实数解的程序。
3.3
结构化程序设计方法
要设计出结构化的程序,可采取以下的方法: 1。自顶向下 2。逐步细化 3。模块化 4。结构化编码