资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,*,*,第3章 C程序设计初步,YYH版,第3章 C/C+程序设计初步,3.1 结构化程序设计思想,3.2 C/C+语句概述,3.3 赋值语句,3.4 文件包含,3.5 输入输出,教材上的第二章2.1和2.4及2.5的一部分(2.5.1和2.5.2),2021/2/28,1,3.1 结构化程序设计思想,3.1.1 程序的质量标准,首先是程序的结构/可读性好,其次是的程序的时空优化,/,效率。,一个好的程序首先要有良好的结构,使程序清晰易懂。然后,才考虑使其,运行速度尽可能的快,,运行时,所占内存应尽量压缩,至合理的范围。也就是说,现在的,程序质量高易读性好是第一位,的,其次才是效率。因为从根本上说,只有程序具有了良好的结构,才易于设计和维护,减少软件成本,从整体来说才是真正提高了效率。,3.1.2 结构化程序设计方法,(1)一个大的程序开发应当采取“,自顶向下,逐步细化,模块(即结构)化,”的方法。,2021/2/28,2,(2)任何程序均由具有良好特性的三种基本模块(顺序,分支,循环)“堆积”搭成,即由基本小单元顺序组成一个大结构,从而避免了使用goto语句的缺点。,3.1.3 结构化程序的标准,(1)程序符合“清晰第一,效率第二”的质量标准。,(2)具有良好的特性。,只有一个入口。,只有一个出口(有些分支结构很容易写成多个出口)。,无死语句(永远执行不到的语句).,没有死循环(永远执行不完的无终止的循环)。,2021/2/28,3,3.1.4 三种基本模块,1.顺序结构,图 3.1 顺序结构,和其它模块的顺序关系,2021/2/28,4,2.分支结构,图 3.2 分支结构,和其它模块的顺序关系,2021/2/28,5,3.循环结构,图 3.3 当型循环结构,和其它模块的顺序关系,2021/2/28,6,图 3.4 直到型循环结构,和其它模块的顺序关系,2021/2/28,7,3.2 C/C+语 句 概 述,C/C+语言是函数式语言,每一个函数是由数据说明部分和执行语句部分组成。所有语句均是执行语句,无非执行语句。语句可分为单个语句,复合语句和空语句。根据结构化程序设计的三个模块大致可分为:,顺序结构中的表达式语句、赋值语句、函数调用语句等;,分支结构中的,if,语句、,switch,语句、转移语句、标号语句等;,循环结构中的,while,语句、,for,语句、,do-while,语句。另外在后两种结构中还可出现,break,语句、,continue,语句、复合语句和空语句等作为其中的一部,分。,2021/2/28,8,#include;,void main()/执行函数,C/C+程序结构(函数式语言,即主要是由语句函数组成):,程序编写注意事项:,2021/2/28,9,(1)每个语句最后都必须有一个分号(;),一个语句可分写成几行,几个语句也可合写成一行(但不提倡,因其不利于单步调试)。,(2)空语句直接由分号(;)组成,用于控制语句特殊要求,它无任何操作,只起到一个逻辑上的语句作用。,(3)复合语句由花括号 括起的若干个语句,语法上可以看成是一个语句。复合语句中最后一个语句的分号不能省略。如下面是一个复合语句:,z=x+y;,y=x/z;,x=z-y;,(4)表达式语句是在各种表达式后加一个分号(;)形成一个语句。如赋值语句由赋值表达式加一个分号构成:x=x+y;,z=x+y;y=x/z;x=z-y;,2021/2/28,10,再如表达式 x+后加一个分号构成表达式语句:x+;,表达式和表达式语句的区别是表达式后无分号,可以出现在其它语句中允许出现表达式的地方;而表达式语句后有分号,自己独立成一个语句,不能再出现在其它语句的表达式中。如:if(a=b)输入项1输入项2,cout输出项1输出项2,说明:这里输入项i为欲键入的数据所赋给的变量;输出项i为欲按指定的格式输出的数据(变量或表达式)。,2021/2/28,14,2.功能:对cin,执行cin时暂停,等待用户键入有序的数据(常数)赋给各变量(按序一一对应键入),每两个数据间空格,最后按回车键或每个数据按回车键即可。,用cout输出时:,1)可用n和endl换行;,2)用setw(n)和setfill(填充字符)(被包含在iomanip.h中)设置欲输出数据的宽度和填充字符;,3)用cout.width(n)和cout.precision(n)及cout.fill(填充字符)(被包含在iostream.h中)设置欲输出数据的宽度和精度及填充字符。,setw(i)指续上一输出的数据后所占的宽度i,2021/2/28,15,例如:,#include,#include,void main(),int a,b,c;,coutendl;/换行,cuotab;/键入两个整数,cout.fill(#);/设置填充字符#,c=sprt(a);/c=,a,coutsetw(3)asetw(4)bsetw(5)cendl;,输出:#9#3#3,注:若无cout.fill(#);则#处为空,a b,9 3,b占4列,2021/2/28,16,函数调用形式:,char ch;,putchar(ch);,例 3.1,字符数据的输出。,#include,void main(),char a,b;,a=b,b=o,putchar(a);putchar(b);,putchar(y);putchar(n);,3.5.2 C语言数据输出,1.putchar函数和putch(输出一个字符的函数),运行结果:boy,putchar函数(不换行)和putch(换行)类同,2.printf函数(格式输出函数),函数的调用形式:,printf(“格式控制”,输出项);,例如:,printf(“The output x=%dn”,x);,若x=10,则输出为“The output x=10”。,换行,十进制整数格式,2021/2/28,17,表 3.1 printf()的格式说明,2021/2/28,18,例 3.2,不同类型数据的输出。,程序:,格式说明(1),“s=%md”,先输出字样,“s=,”再 按长度为,m,输出十进制整数;(2)f,o,x,u分别为实数,8进制,16进制数输出,无符号数。,(3)%ms按长度(列数)为m输出字符串;(4)%m.ns输出占m列,但取左边n个字符;对(3),(4)m前加负号“,-,”则为左对齐;(5)%m.nf输出占m列、小数取n位。,2021/2/28,19,3.puts函数(字符串输出函数),函数的原型是:char*puts(char*s),函数的调用形式是:,puts(字符串数据/组);,puts函数将字符串数据(可以是字符串常量、字符指针或字,符数组名)写在屏幕上并换行。,3.5.3 C语言数据输入,1.getche函数与getchar()和getch(),getche()用于等待从键盘上键入一个字符,并在屏幕上显示该字符(e-echo),勿需按回车键就继续;而getch()同getche(),只是不显示该字符;getchar()类同getche(),只是需按回车键才继续。,注意:与输出一个字符的函数putchar和putch以及输出字符串的函数printf函数比较,2021/2/28,20,三个函数的调用形式(以getche()为例):,char ch;,ch=getche();,使用该函数必须在程序的头部使用文件包含命令:,#include,例 3.3,单个字符的输入和输出。,include,include,main(),char ch;,ch=getche();,putchar(ch);putchar(n);,经编译后运行,输入a,最后在屏幕上显示:,aa(第一个a是键入时显示的;第二个a是putchar(ch)的),2021/2/28,21,例 3.4 多个字符的输入和输出。,#include,#include,void main(),char a,b,c;,a=getch();b=getch();c=getch();,putchar(a);putchar(b);putchar(c);,putchar(n);,getch();,注意:用函数getche()函,数,getchar()和getch()必,须在程序的头部使用文,件包含命令:#include,(即console,input output);其它用,#include (即,standard input output),2021/2/28,22,2.scanf函数(格式输入函数),scanf函数的调用形式:,scanf(“格式控制”,&输入变量表);,如scanf(“a,b=%d,%d”,即要在键盘上输/键入12,-34,此时12送给变量a,-,34送给变量b,而控制字符串中a,b=为提示,用逗号隔开两个%d表示键入数据的类型(%d,一个十进制数)。,scanf函数括号中的控制字符串包含三类不同的字符内容:,(1)格式说明(见表 3.2 scanf()的格式说明)。,(2)空白字符。,(3)非空白字符。,功能:等待键入若干数据并按回车键有效,输出字符形式,2021/2/28,23,表 3.2 scanf()的格式说明,2021/2/28,24,3.gets函数(字符串输入函数),函数的原型是:char*gets(char*s),其中s是一个字符数组或有存贮空间的字符指针;,即:,gets(字符串数据/组/字符指针);,。,gets()函数用来从键盘读入一串字符,并把它们送到gets函数中的字符数组成字符型指针所指定地址的存贮单元中。,在输入字符串后,必须用回车作为输入结束,该回车符并不属于这串字符,由一个“空操作字符(0)”在串的最后来代替它。此时空格不能结束字符串的输入。gets函数返回一个指针。,功能:gets是等待键入一个数据并按回车键有效;注意与scanf(等待键入若干数据并按回车键有效)比较,2021/2/28,25,3.5.4 C语言数据输出程序举例,例3.5.4.1,字符串的输入和输出。程序:,#include,void main(),char str80;,gets(str);,puts(str);,运算结果:,ABC DEF ABC DEF,例 3.5.4.2,输入一个小写字母,按大写输出。程序一:,#include,#include,void main(),char ch;,ch=getche();/键入一字符,putchar(ch-32);,运行:,aA,注意:小写字母比大写字母的ASCII代码大32,2021/2/28,26,例 3.5.4.3,#include,#include,void main(),char ch;,ch=getch();/键入一字符但不显示,putchar(ch-32);,运行:,A,例 3.5.4.4,:,#include,void main(),char ch;,ch=getchar();,putchar(ch-32);,运行:,abcdefgA,2021/2/28,27,例 3.5.4.6,:,cout与printf输出重要比较,#include /包含cout与cin等,#include /包含printf与scan等,void main(),int a=1;/对下面输出均是从右至左计算而输出是,/从左至右,且printf先按序输出,而cout后按序输出,cout“cout1=+a a+an;,printf(printf1=%d%d%dn,+a,a+,+a);,coutcout2=+a a+an;,printf(printf2=%d%d%dn,+a,a+,+a);,cout最后的a=an;,printf1=6 5 5,printf2=12 11 11,cout1=4 2 2,cout2=10 8 8,最后的a=13,注意:执行顺序和输出顺序的区别;a+和+a的区别;,对cout从右至左逐项计算的;对printf是作为函数整体一项的形参从右至左逐个参数计算的;且+a是先自增1再算的而a+是算完后自增1;但对printf()中的,实例见“VC+实例/一般程序/cout和printf输出顺序”,输出结果,a+是待其全算完后再自增1的。,2021/2/28,28,例 3.5.4.6,输入三角形的三条边长,求三角形的面积。我们假设输入的三边能构成三角形。,分析:三角形面积的计算公式如下:s=(a+b+c)/2,程序:,#include,#include ,void main(),float a,b,c,s,area;,scanf(%f,%f,%f,s=0.5*(a+b+c);,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(a=%.2f,b=%.2f,c=%.2fn,a,b,c);,printf(area=%.2fn,area);,运行:,3,4,6,a=3.00,b=4.00,c=6.00,area=5.33,两位小数的十进制浮点数,本章作业:page 112,必做题:6(12-16),2021/2/28,29,
展开阅读全文