高等职业院校教材C语言程序设计主编:王斌项目三顺序程序设计学习目标掌握顺序程序结构认识C语言程序结构,掌握C语言基本语句认识结构化程序设计了解算法的概念,掌握常用简单算法掌握用流程图表示算法主编:王斌C语言程序设计项目任务任务一三角形面积计算器任务二三位数数字拆分主编:王斌C语言程序设计任务一三角形面积计算器任务描述在实际应用及数学问题中经常需要按已知条件求三角形的面积,现已知三角形的三边长分别为a、b、c,求三角形的面积。任务分析三角形面积求法较多,任务中已知三角形的三边长,这里可以按公式(其中s=(a+b+c)/2)),求三角形的面积。在程序中需要先初始化三角形三边长a,b,c(可通过键盘输入三个数分别赋值给变量a,b,c),然后求出s=(a+b+c)/2,再求出,最后打印出三角形面积。主编:王斌C语言程序设计任务一三角形面积计算器任务实施1.程序源代码/*P3_Task1.c*/#includemath.hmain(){floata,b,c,s,area;printf(EnterSidelengthoftriangle:\n);scanf(%f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(a=%7.2f,b=%7.2f,c=%7.2f\n,a,b,c);printf(area=%7.2f\n,area);getch();}2.程序运行结果三角形面积计算器运行结果如图所示。主编:王斌C语言程序设计任务一三角形面积计算器相关知识一、顺序程序设计结构顺序程序设计结构是程序设计结构最简单最基本的结构,顺序程序结构中所在语句都是按先后出现的顺序依次执行。顺序结构的示意图,如图所示。前面任务程序及举例程序均为顺序结构程序。主编:王斌C语言程序设计任务一三角形面积计算器相关知识二、C语句1.C程序的结构一个完整的C程序可以存储于多个文件中,这些文件可以使用#include(*.*)预处理命令联系起来。C程序中最基本的组成是函数,C程序结构,如图所示。主编:王斌C语言程序设计任务一三角形面积计算器相关知识2.C语句C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语句可分为以下五类:简单语句、空语句、复合语句、结构化语句、非结构化语句。其分类,如图所示。主编:王斌C语言程序设计任务一三角形面积计算器相关知识(1)表达式语句表达式语句由表达式加上分号“;”组成。其一般形式为:表达式;执行表达式语句就是计算表达式的值。例如:x=y+z;赋值语句;y+z;加法运算语句,但计算结果不能保留,无实际意义;i++;自增1语句,i值增1。(2)函数调用语句函数调用语句由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调用函数体中的语句,返回函数值。例如:printf(CProgram);调用库函数,输出字符串。主编:王斌C语言程序设计任务一三角形面积计算器相关知识(3)控制语句控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句,可分成三类,如表3-1所示。分类控制语句条件判断语句if语句、switch语句循环执行语句dowhile语句、while语句、for语句转向语句break语句、goto语句、continue语句、return语句主编:王斌C语言程序设计任务一三角形面积计算器相关知识(4)复合语句复合语句是把多个语句用括号{}括起来组成的一个语句。在程序中应把复合语句看成是单条语句,而不是多条语句。例如:{x=y+z;a=b+c;printf(%d%d,x,a);}是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。(5)空语句只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如:while(getchar()!='\n');这里的循环体为空语句。它的功能是,只要从键盘输入的字符不是回车则重新输入。主编:王斌C语言程序设计任务一三角形面积计算器相关知识(6)赋值语句赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;赋值语句的功能和特点都与赋值表达式相同。它是程序中使用最多的语句之一。在赋值语句的使用中需要注意以下几点:①由于在赋值符“=”右边的表达式也可以又是一个赋值表达式,因此,下述形式:变量=(变量=表达式);是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=…=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右接合性,因此,实际上等效于:e=5;d=e;c=d;b=c;a=b;主编:王斌C语言程序设计任务一三角形面积计算器相关知识②注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。例如:inta=5,b,c;③在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的:inta=b=c=5;必须写为inta=5,b=5,c=5;而赋值语句允许连续赋值。④注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:if((x=y+5)0)z=x;语句的功能是,若表达式x=y+5大于0则z=x。下述语句是非法的:if((x=y+5;)0)z=x;因为x=y+5;是语句,不能出现在表达式中。主编:王斌C语言程序设计任务一三角形面积计算器相关知识三、结构化程序设计1.结构化程序设计概念结构化程序设计(structuredprogramming)是以模块功能和处理过程设计为主,采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构构造程序的程序设计方法。任何结构化程序都可由顺序、选择、循环三种基本控制结构构造,结构化程序设计主要强调的是程序的易读性。2.结构化程序设计三种基本结构结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。①顺序结构:表示程序中的各操作是按照它们出现的先后顺序执行的。②选择结构:表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。③循环结构:表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?(选择结构、循环结构将分别在项目四、项目五中详细介绍。)主编:王斌C语言程序设计任务二三位数数字拆分任务描述在进行数码处理、底层显示、键盘输入等程序中经常要对数据进行拆分,即要求求出一个数各个位数上的数字,如803,要求得到8,0,3三个数。为了使程序简单,这里假定数据为三位的十进制整数。任务分析一个十制数三位数数字拆分的基本思想是:首先把这个数除以10,其余数即为个位数数字,再把上一次的商除以10,其余数为十位数数字,商为百位数数字。这里我们以a3表示原数,a2表示原数除以10后的商,r0表示个位数;a1表示a2除以10后的商,r1表示十位数数字,r2表示百位数数字。按顺序结构进行程序设计,程序实现如下。主编:王斌C语言程序设计任务二三位数数字拆分任务实施1.程序源代码/*P3_Task2.c*/#includestdio.hintmain(intargc,char*argv[]){inta3,a2,a1,r0,r1,r2;printf(EnteraThree-digitinteger:\n);scanf(%d,&a3);r0=a3%10;a2=a3/10;r1=a2%10;a1=a2/10;r2=a1%10;printf(One-digitis%d\nTen-digtis%d\nHundred-digitis%d\n,r0,r1,r2);getch();return0;}2.程序运行结果三位数数字拆分程序运行结果如图所示。主编:王斌C语言程序设计任务二三位数数字拆分相关知识一、算法1.算法的概念做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,我们通常称之为流程、程序,用计算机解决问题,能够在计算机中被执行的流程称为计算机算法。2.简单算法举例例3.1求1×2×3×4×5。①直接用汉语描述的算法:步骤1:先求1×2,得到结果2。步骤2:将步骤1得到的乘积2乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。这样的算法没有错误,易懂,但是太繁杂,而且没有通用性,当要求1×2×3×4×5×6×7×……×n(n1000)。还用上述方法就很难描述了。主编:王斌C语言程序设计任务二三位数数字拆分相关知识②引进符号描述的算法:S1:设P=1;S2:设i=2;S3:求乘积P×i,并令P=P×i;S4:i的值+1,并令i=i+1;S5:如果i≤5,则重新从步骤S3做;否则,结束。这个算法比用直接用汉语描述的算法优越得多,它具有通用性,在S5中改i≤n,它则是求1×2×3×4×5×6×7×……×n的值。实际上,只要是有规律的数连乘都可以使用这个算法,在上面的算法上只需要改动i变化规律即可。例如:求1×3×5×7×9×11。算法改动如下:S1:P=1;S2:i=3;S3:P=P×i;S4:i=i+2;S5:若i≤11,返回S3,否则,结束。编写程序,不仅要找到解决问题的正确算法,而且找到的算法还要适合在计算机内执行。主编:王斌C语言程序设计任务二三位数数字拆分相关知识例3.2有50个学生,要求将他们之中成绩在80分以上者打印出来。如果,n表示学生学号,n[i]表示第i个学生学号;g表示学生成绩,g[i]表示第i个学生成绩;则算法可表示如下:S1:1→i;S2:如果g[i]≥80,则打印n[i]和g[i],否则不打印;S3:i+1→i;S4:若i≤50,返回S2,否则,结束。例3.3判定2000~2500年中的每一年是否闰年,将结果输出。润年的条件:能被4整除,但不能被100整除的年份;能被100整除,又能被400整除的年份;设y为被检测的年份,则算法可表示如下:S1:2000→y;S2:若y不能被4整除,则输出y“不是闰年”,然后转到S6;S3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到S6;S4:若y能被100整除,又能被400整除,输出y“是闰年”否则输出y“不是闰年”,然后转到S6;S5:输出y“不是闰年”;S6:y+1→y;S7:当y≤2500时,返回S2继续执行,否则,结束。主编:王斌C语言程序设计任务二三位数数字拆分相关知识例3.4求。算法可表示如下:S1:sigh=1;S2:sum=1;S3:deno=2;S4:sigh=(-1)×sigh;S5:term=sigh×(1/deno);S6:term=sum+term;S7:deno=deno+1;S8:若deno≤100,返回S4;否则,结束。例3.5对一个大于或等于3的正整数,判断它是不是一个素数。算法可表示如下:S1:输入n的值;S2:i=2;S3:n被i除,得余数r;S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5;S5:i+1→i;S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。主编:王斌C语言程序设计任务二三位数数字拆分相关知识3.算法的特性(如表所示)特性说明有穷性一个算法应包含有限的操作步骤而不能是无限的。确定性算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。输入有零个或多个输入。输出有一个或多个输出。有效性算法中每一个步骤应当能有效地执行,并得到确定的结果。对于程序设计人员,必须会设计算法,并根据算法写出程序。主编:王斌C语言程序设计任务二三位数数字拆分相关知识4.算