目录
1、算法
1.1算法的概念
1.2算法的表示方法
1.2.1自然语言
1.2.2流程图
1.2.3伪代码
1.2.4C语言
2、C语句
3、数据的输入输出
3.1格式输入输出函数
1、printf函数(print+format 格式输出)
2、scanf函数(scan+format格式输入)
4、字符输入输出函数
4.1putchar函数(字符输出函数)
4.2getchar函数(字符输入函数)
5、顺序结果程序设计
6、选择结构程序设计
6.1单分支选择结构
6.2多分支选择结构
6.3嵌套选择结构
7、循环结构程序设计
7.1while结构
7.2do while循环结构
7.3for结构
7.4循环嵌套结构
7.5有关循环语句的建议
8、break和continue辅助控制语句
8.1break语句
8.2continue语句
1、算法
1.1算法的概念
为解决一个问题而采取的方法、策略和步骤,称为算法 。
Pascal之父沃思提出一个公式:程序=数据结构+算法
其中数据结构是程序对数据的描述,指数据的类型和组织形式;算法是对操作的描述,指操作步骤。此公式更准确的表达是:程序=算法+数据结构+程序设计方法+语言环境,以树为例来解释此公式:
程序——种树
算法(程序的灵魂)——种树的步骤、方法:挖坑、放树苗、填土、浇水等
数据结构(加工对象)——各种树苗:松树、柏树等
程序设计方法——种树的规划,按行、列种树?一圈一圈种?交叉种?
语言环境(工具)——土地、铁锹、水桶等
计算机能够执行的算法称为计算机算法,可分为两类,一类是数值算法:数值运算的目的是求数值解,例如求平方根、求定积分等。针对这类算法的研究相对深入,算法较为成熟,已经做成“标准函数库”供用户直接使用。另一类是非数值算法:最常见的是用于事务管理领域,例如排序和检索(查找)。这类算法可以参考已有类似算法,重新设计。
1.2算法的表示方法
1.2.1自然语言
自然语言是算法的一种表示方法,一般文字冗长,语义丰富,通俗易懂。但是表达上容易有歧义性
例如:
(1)拿两个杯子a和b,分别转入酱油和醋
(2)再拿一个空杯子c,将a中的酱油倒入c中
(3)将b中的醋倒入a中
(4)将c中暂存的酱油倒入b中
1.2.2流程图
流程图是算法常用的一种表示方法,这种方法灵活、自由、形象、容易理解。使用时要记住常用的流程图符号、意义和名称。如下:
另一种新型流程图,也称为N-S图,它去掉了连接线,节省篇。N-S图将全部算法写在一个矩形框内,矩形框内划分成一些小框,框与框之间可以有前后顺序关系、选择关系和从属关系,特别适合结构化程序设计,如下:
假设0表示酱油,1表示醋
定义装入0的杯子a 定义装入1的杯子b 定义空杯子c | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
aa | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ca define b,1c bb 1.2.4C语言2、C语句c语言程序由一个或多个源程序文件(简称源文件)构成,每个源文件又由一个或多个函数加上相关的变量构成 。因此源程序的基本组成单位是函数。函数体可分为内部变量定义部分和可执行语句(简称语句)两个部分 可执行语句(简称语句)是程序最基本的执行单位,程序就是通过执行一系列语句来实现其功能的。C语言中的语句有多种形式: (1)表达式语句:表达式加分号。例如:用赋值运算符 (2)函数调用语句:由一次函数调用加上一个分号构成一个语句, 例如:printf(”Hello World!”); (3)控制语句:用来控制程序的流程,以实现程序的各种结构。主要有以下几种: 1、选择语句,也称分支语句:if()~else~ 2、多分支语句:switch()~case~ 3、循环语句:for()~、while()~、do~while() 4、辅助控制语句(与分支和循环语句搭配使用):continue、break、goto 5、返回语句(若函数本身需要得到一个结果,就必须由return语句将结果返回):return (4)复合语句:用{}将一些语义相关的语句括起来就构成了复合语句,又称为块和语句块。 例如:if(a>b){a++;b++;}用大括号括起来的就是复合语句,表示如果a<b成立,a++;和b++;都要执行。 (5)空语句:只有一个分号的语句,它什么也不做。有时用来做循环语句中的循环体。 例如:if(a<b);当a<b成立时执行分号表示的空语句。 3、数据的输入输出C语言中数据的输入输出都是指相对于计算机而言的输入和输出,数据输入指的是利用外部设备,包括键盘、鼠标、扫描仪等将数据输入到计算机中。数据输出指的是将数据从计算机中输出到外部设备中,如:显示器、打印机等。 C语言本身没有输入输出语句,它的输入输出是通过调用stdio.h文件的C标准函数库中完成输入输出功能的函数来完成。正是如此,如果程序中需要输入或输出数据,必须将stdio.h包含进来(注意有些编译器已经自动包含此头文件,不需要用户再写此文件的包含命令)。 3.1格式输入输出函数1、printf函数(print+format 格式输出)printf函数的作用是向系统指定的输出设备(一般指显示器)输出若干个任意类型的数据。 printf函数的使用格式为:printf(格式控制,输出列表); 例如:printf(“i=%d,c=%c\n”,i,c); printf函数的括号里面包含两部分的内容:
演示过程: 2、scanf函数(scan+format格式输入)scanf函数的作用是向系统指定的输入设备按地址输入若干个任意类型的数据。scanf函数的使用格式:scanf(格式控制,地址表列); 注意: 1、scanf函数中的格式控制后面应当是变量地址
(2)如果在格式控制字符串除了格式说明以外还有其他字符,则输入数据时应输入与这些字符相同的字符。
为简单起见,可以在格式控制中只写控制字符,输入时数据之间以空格字符、按Enter或tab健作为间隔。 (3)scanf的格式控制中不要包含转义字符,如\n、\t、\\等等 (4)若从键盘读入double类型变量的值,只能使用%lf,而不能使用%f (5)在用%c格式输入字符时,空格字符和转义字符都作为有效字符输入 (6)输入数据时,在遇到以下情况时认为该数据结束: 1、空格,或按回车或tab健 2、按指定的宽度结束,如%3d,只取3列 3、遇到非法输入 scanf(”%d%c%f”,&a,&b,&c);若输入:1234a123A.26最后回车 结果:a接受到1234,b接受到’a’,c接受到123 4、字符输入输出函数4.1putchar函数(字符输出函数)putchar函数的功能是在显示器上输出单个字符。putchar函数的使用格式为:putchar(字符变量或字符常量); 注意: (1)字符可以是单个普通字符或者转义字符。 (2)对字符变量ch执行:putchar(ch);与printf(”%c”,ch);两者等价 4.2getchar函数(字符输入函数)getchar函数的功能是在键盘上输入单个字符。getchar函数的使用格式为:字符变量=getchar(); 注意: (1)不管输入多少字符,getchar只能接收一个字符(输入的第一个字符) (2)对字符变量ch执行:ch=getchar();与scanf(”%c”,&ch);两者等价 注意:getchar函数会将空格、回车等字符作为有效字符存入字符变量中。 5、顺序结果程序设计计算机处理问题也一样要遵循先后顺序,所以设计程序时,一般都会按照处理问题的步骤,依次写出处理问题的语句。这些语句按照书写的先后顺序从前到后依次被C编译系统执行,无需进行选择、拐弯或者折回,这就属于顺序结果。 6、选择结构程序设计计算机处理问题时也可能需要判断,让计算机能够从岔路中选择执行合适的语句 ,这就是选择结构(也称为分支结构)。执行时会根据条件不同,选择执行不同的分支 6.1单分支选择结构面临的选择是:要么执行一个操作,要么跳过它 (1)处理两种情况的结构 if(表达式) 语句组1 else 语句组2 执行过程是:如果表达式为真,则执行语句组1,否则执行语句组2. (2)处理一种情况的结构 if(表达式) 语句组1 执行过程是:如果表达式为真,则执行语句组1
演示过程: 6.2多分支选择结构如果计算机面对的不是二选一,而是多选一的问题,程序中需要使用多分支结构。 if(表达式) 语句组1 else if(表达式2) 语句组2 …… else if(表达式n) 语句组n else 语句组n+1 还可以使用开关语句,即switch语句实现多分支结构。之所以将switch语句称为开关语句,是由每个case语句都相当于一个入口,即进入语句组的钥匙。 用switch语句实现多分支结构的语句格式为: switch(表达式) { case 常量表达式1:语句组1;break; case 常量表达式2:语句组2;break; ………………………………………… case 常量表达式n:语句组n;break; default:语句组n+1;break; } 题目1:编写一个程序,根据学生的得分判定其类别,判定规则:若小于60分判为E级,60到69分判别为D级,70到79分判别为C级,80到89分判别为B级,90到100分判为A级;
题目二:从键盘输入1-7之间的数字,输出此数字对应的是星期几。若输入的数字不在此范围,提示出错。 (1)if多分支结构实现,(2)用switch结构实现
6.3嵌套选择结构在分支语句中又多包含一个或多个分支语句称为嵌套选择结构。例如:if(或 if else)语句中又包含1个或多个if(或if else)语句就是if语句的嵌套,例如:
题目:按照下面的公式,输入x,输出相应的y 7.2do while循环结构do while结构常称为直到型循环结构。用do while语句实现循环结构的语句格式: do { 循环体 } while(表达式); 执行过程:执行循环体,然后计算表达式的值,当值为假时,结束循环,跳出循环结构,向下执行。当值为真时,执行循环体,重复判断表达式的值,执行循环体,直到表达式的值是假为止。 特点:先执行循环体,再判断表达式。 说明: (1)最少执行一次循环体,当第一次判断表达式的值为假,循环体已执行了 (2)除去必要的情况,尽量避免无限循环(也称死循环),如while(1)是死循环 (3)不要忘记while(表达式)处有分号 (4)循环体可为任意类型语句,若循环体不止一条语句,应使用一对大括号括起来 (5)当循环体内遇到关键字break,return,goto时,直接退出whlie循环,不再往下执行 题目:用do while循环求sum=1+2+3+……+100;
综述所述:while循环最少执行0次,do while循环最少执行1次。 7.3for结构for结构是三种循环结构中最常用的一种 用for语句实现循环结构的语句格式: for(初始化表达式;判断表达式;修正表达式) { 循环体 } 执行过程:先计算初始化表达式,然后计算判断表达式的值,如果其值为假,则结束循环,跳出循环,向下执行。如果其值为真,则执行循环体,重复计算判断表达式的值,执行循环体,计算修正表达式的值,直至表达式的值是假为止。 题目:用for循环求1+2+3……+100.
题目:水仙花数,指将一个3位数,其各位数字立方和等于该数本身。例如153= 注意: for语句中表达式1,表达式2,表达式3类型任意,都可省略,但之间的分号不可省略。 7.4循环嵌套结构一个循环体内又包含另一个完整的循环体结果,称为循环的嵌套。 while、do……while、for三种循环结构还可以互相嵌套。嵌套的格式繁多,不能一一列举,以for结构中嵌套for结构为例来说明: for(初始化表达式;判断表达式2;修正表达式1) { for(初始化表达式2;判断表达式2;修正表达式2) { 循环体 } } 执行过程:外循环每执行一次,内循环完全执行一遍到内循环判断表达式2的值是假为止,外循环再执行一次,内循环再完全执行一遍,反复一直到外循环条件不成立。
7.5有关循环语句的建议c和c++的循环语句中,for语句使用的频率最高,while语句其次,do语句用的最少 提高循环体效率的基本办法是降低循环体的复杂性,有以下几点建议: (1)在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,可以提高程序的效率,这是由于程序流程在内层循环和外层循环之间的跳转,每次跳转都会付出一定的开销,包括占用CPU和内存等。 (2)不可在for循环体内修改循环变量,防止for循环失去控制。 (3)建议for语句的循环控制变量的取值采取半闭半开的区间写法 8、break和continue辅助控制语句8.1break语句如果将循环结构视为一层壳,那么break的作用就是破壳而出,当程序流程执行到循环结构中的break语句时,循环被终止,程序流程跳出循环体,转到循环结构之后的语句执行。因此break语句被称为循环结束语句。 break语句的功能:在循环语句和switch语句中,终止并跳出循环体或开关体。 说明: (1)break只能终止并跳出最近一层的结构 (2)break只能用于循环语句和switch语句
8.2continue语句break语句结束的是整个循环结构,而continue语句结束的是本次循环,跳出循环体中尚未执行的语句,进行下一次是否执行循环体的判断,即“再来一次”。即:本次循环中的后续内容被continue短路了,因此continue语句被称为循环继续语句。 说明: (1)continue不是终止循环,而是将本次循环提前结束,常与if条件语句一起使用,用来加速循环。 (2)continue仅用于循环语句。
|