220 likes | 360 Views
3.1 流程控制结构和语句. 3.1.1 算法 1 .什么是算法 编写一个程序,首先要设计算法,依据此算法进行编程。那么,什么是算法呢?著名计算机科学家沃思( N.Wirth )对程序有如下的描述: 程序=数据结构 + 算法 它说明一个程序由两部分组成: 对数据的描述和组织形式,即数据结构( Data Structure )。 对操作或行为的描述,即操作步骤,也就是算法( Algorithm )。. 2 .算法的特性 算法须具备如下 5 个特性: 有限性:一个算法必须总是在执行有限步之后结束。 确定性:算法中每条指令的含义必须明确,不允许有二义性。
E N D
3.1 流程控制结构和语句 3.1.1 算法 1.什么是算法 编写一个程序,首先要设计算法,依据此算法进行编程。那么,什么是算法呢?著名计算机科学家沃思(N.Wirth)对程序有如下的描述: 程序=数据结构+算法 它说明一个程序由两部分组成: 对数据的描述和组织形式,即数据结构(Data Structure)。 对操作或行为的描述,即操作步骤,也就是算法(Algorithm)。
2.算法的特性 算法须具备如下5个特性: 有限性:一个算法必须总是在执行有限步之后结束。 确定性:算法中每条指令的含义必须明确,不允许有二义性。 可行性:算法中的操作都是可以通过已经实现的基本运算执行有限次来完成。 输入:一个算法有零个或多个输入,即执行算法时需要从外界取得要处理的信息。 输出:一个算法有一个或多个输出。算法的目的就是为了求“解”,输出就是得到所求的“解”,输出是与输入存在某些特定关系的量。
3.算法的组成要素 算法含有如下两大要素: (1)操作:每个操作的确定不仅取决于问题的需求,还取决于它们取自哪个操作集,它与使用的工具系统有关。 (2)控制结构:每一个算法都是由一系列的操作组成。同一操作序列,不同的执行顺序,就会得出不同的结果。控制结构即如何控制组成算法的各操作执行的顺序。在结构化程序设计中,一个程序只能由3种基本控制结构组成。这3种基本控制结构可以组成任何结构的算法,解决任何问题。
4.算法的表示 (1)自然语言表示。 自然语言就是人们日常生活中使用的语言,可以用汉语、英语和数学符号等,它比较符合人们日常的思维习惯,通俗易懂,但文字冗长,不易直接转化为程序,且易产生歧义性。 (2)流程图表示。 流程图是一个描述程序的控制流程和指令执行情况的有向图,它是程序的一种比较直观的表示形式,美国国家标准化协会(ANSI)规定了符号作为常用流程图符号。
(3)N-S结构化流程图表示。 N-S结构化流程图是1973年美国学者I.Nassi和B.Schneiderman提出的一种新的流程图形式。 (4)伪码表示。 伪码是指介于自然语言与计算机语言之间的一种代码,是帮助程序设计者制定算法的智能化语言。常用的伪码是类C语言,它用起来灵活、易懂,与计算机语言接近,易转换为程序。
3.1.2 结构化程序设计方法简介 1.结构化程序设计 目前尚没有一个严格的、被所有人普遍接受的结构化程序的定义。1974年,D.Gries教授将已有的对结构化程序设计的不同解释归纳为13种;现在,一个比较流行的定义是:结构化程序设计是一种进行程序设计的原则和方法,按照这种原则和方法设计出的程序的特点是结构清晰、容易阅读、容易修改、容易验证。 按照结构化程序设计方法的要求,结构化的程序由3种基本控制结构组成:顺序结构、选择结构和循环结构。
2.结构化程序设计的基本思想 (1)采用顺序、选择和循环3种基本结构作为程序设计的基本单元,避免无限制地使用goto语句而使流程任意转向。 (2)3种基本结构具有如下良好特性: • 只有一个入口; • 只有一个出口; • 无死语句,即不存在永远都执行不到的语句; • 无死循环,即不存在永远都执行不完的循环。
(3)程序设计采用“自顶向下,逐步求精,模块化设计,结构化编码”的方法。程序设计时,首先考虑程序的总体结构,按程序实现的功能再细分若干个子问题,若干问题还包含子问题,再细化,直到每一个细节均可以用高级语言清楚表达为止。这种过程就是“自顶向下,逐步求精”。每个子问题都作为子程序,在C语言中用函数表示,又称之为模块。这种设计方法层次分明,思路清楚,有条不紊地一步一步进行设计,既严谨又方便。(3)程序设计采用“自顶向下,逐步求精,模块化设计,结构化编码”的方法。程序设计时,首先考虑程序的总体结构,按程序实现的功能再细分若干个子问题,若干问题还包含子问题,再细化,直到每一个细节均可以用高级语言清楚表达为止。这种过程就是“自顶向下,逐步求精”。每个子问题都作为子程序,在C语言中用函数表示,又称之为模块。这种设计方法层次分明,思路清楚,有条不紊地一步一步进行设计,既严谨又方便。
3.1.3 语句与分程序 1.表达式语句 表达式语句是最简单的可执行语句。只要在表达式后面加上分号就可以了。 2.函数调用语句 函数调用语句由函数名、实参以及分号构成。 3.控制语句 用于控制程序流程的语句,控制语句一般指那些改变了顺序结构的语句。 4.复合语句和分程序结构 复合语句由{和}把数据说明语句和若干个有序的执行语句组合在一起而构成。 5.空语句 C语言中有一个很特殊的语句,即空语句。
3.2 基本输入输出 C语言本身并不提供输入输出操作的语句,C程序中的输入和输出是用一组库函数来完成的。
3.2.1 printf()函数和scanf()函数的使用 (1)printf ()函数 printf ()函数的功能是按指定的格式控制要求把相应的参数值在标准输出设备(通常是屏幕)上显示出来。 printf ()的一般使用格式是: printf (格式控制串, 参数1, 参数2, …); (2)scanf ()函数 scanf ()函数的功能是接受用户从键盘上输入的数据,按照格式控制符的要求进行类型转换,然后送到由对应参数指示的变量单元中去。 scanf ()的一般使用格式是: scanf (格式控制串,参数1,参数2,…);
3.2.2 putchar()函数和getchar()函数的使用 1.字符输出函数putchar() putchar()函数的作用是把一个字符输出到标准输出设备(通常指显示器或打印机)上,putchar()函数的一般调用形式为: putchar (ch); 功能:向终端输出一个字符。 说明:putchar是函数名,ch是函数的参数,该参数必须是一个整型变量或一个字符型变量。ch也可以代表一个整型常量或字符常量(包括转义字符常量)。
2.字符输入函数getchar() getchar()函数的作用是从标准输入设备(通常指键盘)上读入一个字符,getchar()函数的一般调用形式: getchar(); 功能:从标准输入设备(如键盘)接收一个字符。 说明:getchar是函数名,函数本身没有参数,其函数值就是从输入设备得到的字符。等待输入字符的应答是键入一个需要的字符,按回车键,则程序执行下一个语句。
3.3 编写简单的C程序 3.3.1 C程序示例 1.题目 将输入的数据进行转换,实现数据加密。 2.分析 随着通信技术的广泛应用,信息(数据)被窃取的危险也在不断增加。数据加密就是一种信息保护技术,它使窃取者不能了解数据的真实内容,无法使用这些数据,从而减少数据失窃造成的危害。
3.程序 /*程序名:ex3-3-1*/ #include <stdio.h> #include <stdlib.h> /*含有对getch()函数的说明*/ void password(int keya); int main(void) { int key; printf("\n 请输入密钥:"); scanf("%d", &key); password(key); return(0); }
void password(int keya) { char ch; printf("\n 输入明文,将得到对应密文如下:"); while((ch=getch())!='\r') (ch+keya)>122?putchar(ch-122+33+keya): ((ch+keya)<33?putchar(ch+122+keya): putchar(ch+keya)); }
4.说明 (1)getch()函数 (2)while语句 (3)条件语句 (4)ASCII码表中字符的排列规律
3.3.2 C程序运行的一般步骤 用C语言编写的程序叫C源程序,从C源程序到在计算机上得到运行结果,其操作过程如图3-7所示。
3.4 上机实训 实验目的: 通过本次上机实训掌握printf()函数、scanf()函数、putchar()函数和getchar()函数的正确使用方法,理解结构化程序设计的基本思路。 实验内容: • 基本输入输出函数的应用 • 结构化程序设计方法
3.4.1 基本输入输出函数的应用 (1)用putchar ()函数输出单个字符,连接成字符串。 #include <stdio.h> main() { char a,b,c; a='B',b='O',c='Y'; putchar(a);putchar(b);putchar(c);putchar('\n'); } 输出结果如下: BOY (2)用getchar ()函数得到一个字符,然后用putchar ()函数将此字符输出。 #include <stdio.h> main() { char c; c=getchar(); putchar(c); putchar('\n'); } 输出结果如下: A A
(3)用户给出a,b,c三个系数的值,求解方程ax2+bx+c=0的根。(3)用户给出a,b,c三个系数的值,求解方程ax2+bx+c=0的根。 #include <stdio.h> #include <math.h> main() { float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); if (disc>=0) { q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2); } else printf("此方程无解"); } 输入2,6,3回车后得到的结果如下: 2,6,3 x1=-0.63 x2=-2.37
3.4.2 结构化程序设计方法 计算100~200之间不能被3整除的数,程序代码如下所示。 #include <stdio.h> main() { int n; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d ",n); } printf("\n"); } 程序运行结果如下所示: