您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C程序设计课件_第3章C语言程序的控制结构
第3章C语言程序的控制结构本章导读本章包括知识点:算法的描述方法数据的输入输出函数调用格式if语句及switch语句的使用3种循环结构break、continue和goto语句的作用常用算法:如递推法、穷举法等C程序的基本风格3.1算法3.1.1算法的概念3.1.2算法的表示方法3.1.1算法的概念著名的计算机科学家沃思(NikiklausWirth)曾经提出过:数据结构+算法=程序数据结构(datastructure):即对数据的描述和组织形式。算法(algorithm):对操作或行为的描述,即操作步骤。广义地说,算法就是做某一件事的步骤或程序。计算机解题的算法大致包括这两大类算法:非数值运算算法和数值运算算法。算法特性:①有穷性。算法的步骤必须是有限的,每个步骤都在有限的时间内做完,执行有限个步骤后终止。②确定性。算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许有多义性。例如:“如果成绩大于等于90分,则输出A;如果成绩小于等于90分,则输出B”,当成绩为90分时,既会输出A,又会输出B,这就产生了不确定性。③有效性。算法的每一步操作都应该能有效执行。如一个数被0除就是无效不可行的,应避免。算法特性④没有输入或有多个输入。例如:求1+2+3+…+100时,不需要输入任何信息就能求出结果;而要求1+2+3+…+n时,必须从键盘输入n的值,才能求出结果。⑤有一个或多个输出。算法的目的是为了求解,“解”就是算法的输出。没有输出的算法是没有意义的。3.1.2算法的表示方法常用方法有:自然语言、传统流程图、NS流程图、伪代码等1.用自然语言表示算法自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示算法,通俗易懂,但文字冗长,在表达上不够严格,引起理解上的歧义性,不易转化为程序,描述复杂的算法不很方便。因此,除了很简单的问题外,一般不用自然语言描述算法。用自然语言表示的求1+2+3+…+6的算法如下:算法1:S1:计算1+2得到3;S2:将第一步中的运算结果3与3相加得到6;S3:将第二步中的运算结果6与4相加得到10;S4:将第三步中的运算结果10与5相加得到15;S5:将第四步中的运算结果15与6相加得到21。算法2:S1:定义循环变量i=1,用于保存和的变量s,并置初值为0;S2:判断i的值是否小于等于6,若是则执行S3,否则跳转到S4执行;S3:将i的值累加到s,然后变量i自身加1,转到S2执行;S4:输出s的值。算法1是最原始的方法,最为繁琐,步骤较多,当加数较大时,比如1+2+3+…+10000,再用这种方法是行不通的;算法2是比较简单的算法,且易于在计算机上执行操作。2.用传统流程图表示算法流程图是一个描述程序的控制流程和指令执行情况的有向图,用流程图表示算法,直观形象,易于理解。美国国家标准化协会(ANSI)规定了一些常用符号如图所示用传统流程图描述计算1+2+3+…+6的算法3.用NS结构化流程图表示算法1973年美国学者I.Nassi和B.Schneiderman提出了一种新型流程图—NS结构化流程图,这种流程图一方面取消了带箭头的流程线,这样算法被迫只能从上到下顺序执行,避免了算法流程的任意转向,适于结构化程序设计;另一方面,这种流程图节省篇幅,因而很受欢迎。用NS流程图描述的计算1+2+3+…+6的算法4.用伪代码表示算法伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。它使用起来灵活,无固定格式和规范,无图形符号,只要写出来自己或别人能看懂就行,由于它与计算机语言比较接近,便于向计算机语言算法(即程序)过渡。用伪代码描述的1+2+3+…+6算法如下:begin/*算法开始*/1=i0=swhilei≤6{s+i=si+1=i}printsend/*算法结束*/在程序设计中读者可根据需要和习惯任意选用。3.2C语句的分类C语言的语句可分为5大类:控制语句函数调用语句表达式语句复合语句空语句1.控制语句控制语句用来实现对程序流程的选择、循环、转向和返回等进行控制。C语言中共有9种控制语句,包括12个关键字,可以分为以下几类:选择语句:if…else和switch(包括case和default)。循环语句:for、while和do…while。转向语句:continue、break和goto。返回语句:return。本章的3.5、3.6和3.7中将陆续介绍这些控制语句。2.函数调用语句函数调用语句是由一个函数调用加一个分号构成的语句。它的一般形式是:函数名(实参表);例如:printf(“ThisisaCProgram”);/*用于输出双引号中的字符串*/c=getchar();/*用于从键盘读入一个字符*/m=max(a,b,c);/*用于求取a、b、c三者之间的最大值并将结果赋给m*/3.表达式语句由一个表达式加上一个分号构成。如:A++;x=1;p+=q*4+5;y=42?6:1;用一对花括号,把若干条语句括起来,就形成了一条复合语句。形式如下:4.复合语句复合语句的形式为:{语句1;语句2;…语句n;}例如:{z=x+y;z++;u=z/100;printf(“%f”,u);}花括号中的语句,可以是简单语句、空语句、复合语句、流程控制语句,所有这些语句括在一起,在语法上看成是一条语句,执行时顺序执行花括号中的每条语句。复合语句多用于流程控制语句中。5.空语句仅仅以分号“;”作为标识。空语句的形式为:;/*空语句*/空语句本身没有实际功能,只是表示什么操作都不做。设置空语句的目的,一是在未完成的程序设计模块中,暂时放一条空语句,留待以后对模块逐步求精实现时再增加语句;二是实现空循环等待;三是实现跳转目标点等。例如:intmax(inta,intb)/*求两个整数的最大值*/{;/*此处的空语句表示在以后添加内容,保证当前的程序正常运行*/}例如:实现空循环while(getchar()!=’\n’);/*此语句表示只要从键盘输入的字符不是回车键则重新输入*/例如:实现跳转到目标点inti=0,sum=0;ex:;sum+=i++;if(x100)gotoex;…空语句出现的位置是有限制的。预处理命令、函数头和花括号“}”之后都不允许出现空语句。注意3.3输入和输出语句3.3.1字符的输入和输出3.3.2格式化输入和输出C语言不提供输入和输出语句,输入和输出通过调用C的标准库函数来实现。C的标准函数库中提供许多用于标准输入和输出的库函数(附录D),使用这些标准输入和输出库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令:#includestdio.h或#include“stdio.h”其中,h为head之意,std为standard之意,i为input之意,o为output之意。3.3.1字符的输入和输出计算机的控制台是键盘和显示器,从控制台输入和输出字符的最简单的函数是getchar()和putchar()。1.getchar函数使用格式:变量=getchar();功能:从键盘读入一个字符,返回该字符的ASCII值,可以将该结果赋值给字符变量或整型变量,并自动将用户击键结果回显到屏幕上。2.putchar函数使用格式:putchar(变量);功能:把字符写到屏幕的当前光标位置。例3.1演示如何使用getchar()和putchar()函数。#includestdio.hmain(){charc;c=getchar();/*从键盘读入一个字符,按回车键结束输入,该字符被存入变量c*/putchar(c);}①getchar函数无参数,它从标准输入设备(键盘)上读入一个字符,直到输入回车键才结束,回车前的所有输入字符都会逐个显示在屏幕上。函数值为从输入设备输入的第1个字符,空格、回车和Tab都能被读入。②putchar函数的参数是待输出的字符,这个字符可以是可打印字符,也可以是转义字符。例如:putchar('\x42');/*输出字母B*/putchar(0x42);/*直接用ASCII码值输出字母B*/注意3.3.2格式化输入和输出前面的getchar和putchar函数形式简单,使用方便,但只能输入输出一个字符,且不能定制输入输出格式。格式化输入输出函数既能输入输出各种类型的数据,又能定制输入输出格式。例3.2从屏幕上输出一个整数。#includestdio.hmain(){inta,b;a=10;b=20;printf(outputaandb:);/*输出双引号中的字符串*/printf(a=%d,b=%d\n,a,b);/*输出a和b的值*/}输出结果是:outputaandb:a=10,b=201.printf函数格式:printf(格式控制字符串);或printf(格式控制字符串,输出表列);功能:向计算机系统默认的输出设备输出若干个任意类型的数据。例如:格式转换说明符printf(a=%d,b=%d\n,a,b);普通字符输出表列一般情况下,格式控制字符串包括两种数据,一种是普通字符,这些字符在输出时照原样输出;另一种是格式转换说明符,用于控制要输出的内容以何种方式进行输出显示,格式转换说明符由“%”开始,并以一个格式字符结束。表3-1printf函数的格式转换说明符字符含义示例输出结果d(或i)十进制整数inta=65;printf(“%d”,a);65u十进制无符号整数inta=65000;printf(“%u”,a);65000o八进制无符号整数inta=65;printf(“%o”,a);101x(或X)十六进制无符号整数inta=65;printf(“%x”,a);41c单一字符inta=65;printf(“%c”,a);As字符串printf(“%s”,”Hello”);Hellof小数形式的浮点小数printf(“%f”,314.56);314.560000e(或E)指数形式的浮点小数printf(“%e”,314.56);3.145600e+002g(或G)e和f中较短的一种printf(“%g”,314.56);314.56%百分号本身printf(“%%”);%说明:①“输出表列”是需要输出的一些数据。可以是表达式,各个数据之间用逗号隔开。以下的printf函数都是合法的:printf(Iamastudent.\n);printf(%d,3+2);注意:输出数据的数据类型与格式转换说明符必须顺序匹配,否则会引起输出错误。如:printf(%d,%f,3.89,6);错误!②一般情况下,格式转换说明符与输出项个数相同。如果格式转换说明符的个数大于输出项的个数,则多余的格式将输出不定值。如果格式转换说明符的个数小于输出项的个数,则多余的输出项不输出。例3.3有以下程序#includestdio.hmain(){inta=666,b=888;printf(%d\n,a,b);}程序的输出结果是()。A)错误信息B)666C)888D)666,888思考:如果将输出语句改为printf(“%d,%d\n”,a);输出结果会怎样?格式转换说明符的完整形式如下:%-0#m.nl或h格式字符修饰字符含义英文字母l修饰d,u,o,x时,用于输出long型数据修饰f,e,g时,用于输出longdouble型数据英文字母h修饰d,o,x时,用于输出short型数据最小域宽m指定输出项输出时所占列数,数据长度m,左边补空格;否则按实际宽度输出显示精度.n对于实数,指定小数位数(四舍五入)对于字符串,指定从字符串左侧开始截取的子串字符个数-输出数据在域内左对齐(默认右对齐)+指定在有符号数的正数前加正号(+)0输出数值时,指定在左边不使用的空位置自动填0#在八进制和十六进制数前显示前导符0,0x例3.4printf函数修饰符的使用。#includestdio.hmain(){inta=12
本文标题:C程序设计课件_第3章C语言程序的控制结构
链接地址:https://www.777doc.com/doc-2907647 .html