1、第三章 C程序设计初步,3.1 结构化程序设计思想 3.2 C语句概述 3.3 赋值语句 3.4 数据输出 3.5 数据输入 3.6 程序举例,总目录,3.1 结构化程序设计思想,3.1.1 程序的质量标准,一个好的程序在满足运行结果正确的基本条件之后,首先要有良好的结构,使程序清晰易懂。在此前提之下,才考虑使其运行速度尽可能的快, 运行时所占内存应尽量压缩至合理的范围。也就是说,现在的程序质量标准易读性好是第一位的,其次才是效率。因为从根本上说,只有程序具有了良好的结构,才易于设计和维护,减少软件成本,从整体来说才是真正提高了效率。,本章目录,3.1.2 结构化程序设计方法,(1) 一个大的
2、程序开发应当采取“自顶向下, 逐步细化, 模块化”的方法。 (2) 任何程序均由具有良好特性的三种基本模块(顺序, 分支,循环)“堆积”搭成,即由基本小单元顺序组成一个大结构,从而避免了使用goto语句的缺点。,本章目录,3.1.3 结构化程序的标准,(1) 程序符合“清晰第一,效率第二”的质量标准。 (2) 具有良好的特性。 只有一个入口。 只有一个出口(有些分支结构很容易写成多个出口)。 无死语句(永远执行不到的语句). 没有死循环(永远执行不完的无终止的循环)。,本章目录,3.1.4 三种基本模块,1. 顺序结构,图 3.1 顺序结构,本章目录,2. 分支结构,图 3.2 分支结构,本章
3、目录,3. 循环结构,图 3.3 当型循环结构,本章目录,图 3.4 直到型循环结构,本章目录,3.2 C 语 句 概 述,C语言是函数式语言,每一个函数是由数据说明部分和执行语句部分组成。C语言中的所有语句均是执行语句,没有非执行语句。根据C语言的句法, 语句可分为单个语句,复合语句和空语句。根据结构化程序设计的三个模块大致可分为: 用于顺序结构中的表达式语句、赋值语句、函数调用语句等; 用于分支结构中的if语句、switch语句、转移语句、标号语句等;用于循环结构中的while语句、for语句、do-while语句。 另外在后两种结构中还可出现break语句、continue语句、复合语句
4、和空语句等作为其中的一部分。,本章目录,(1) 逻辑上每个语句最后都必须有一个分号(;), 一个语句可分写成几行, 几个语句也可合写成一行(但不提倡, 因其不利于单步调试)。 (2) 空语句直接由分号(;)组成,常用于控制语句中必须出现语句之处,它不做任何操作,只在逻辑上起到有一个语句的作用。 (3) 复合语句由花括号 括起的若干个语句, 语法上可以看成是一个语句。复合语句中最后一个语句的分号不能省略。 如下面是一个复合语句: z=x+y; y=x/z; x=z-y; ,本章目录,(4) 表达式语句是在各种表达式后加一个分号(;)形成一个语句。如赋值语句由赋值表达式加一个分号构成: x=x+y
5、; 再如表达式x+后加一个分号构成表达式语句: x+; 表达式和表达式语句的区别是表达式后无分号, 可以出现在其它语句中允许出现表达式的地方;而表达式语句后有分号, 自己独立成一个语句,不能再出现在其它语句的表达式中。 如: if(a=b)0) min=a;,本章目录,(5) 控制语句有条件判断语句(if、 switch), 循环语句(for、 while、 do-while),转移语句(goto、 continue、 break、 return)。,本章目录,3.3 赋值语句,赋值语句是由赋值表达式加上一个分号构成。 如x=a+b;。 C语言的赋值语句具有其它高级语言中赋值语句的一切特点和功
6、能,也有C语言自己的特色: (1) C语言中赋值号“=”作为赋值运算符。 (2) 其它高级语言没有赋值表达式这个概念。作为赋值表达式可以出现在其它表达式能出现的地方,也可出现在其它表达式之中。 例如: if(x=a+b)! =0) t=10;,本章目录,3.4 数据输出,3.4.1 putchar函数(字符输出函数) 函数调用形式: char ch; putchar (ch);,本章目录,例 3.1 字符数据的输出。 include void main( ) char a, b;a=b; b=o; putchar(a); putchar(b); putchar(y); putchar(n);
7、经编译后运行, 在屏幕上显示: boy,本章目录,3.4.2 printf函数(格式输出函数),函数的调用形式:printf(控制字符串, 参量表);,例如: printf(The output x=%dn, x); 若x=10, 则输出为“The output x=10”。,本章目录,表 3.1 printf()的格式说明,本章目录,例 3.2 不同类型数据的输出。,程序:,本章目录,3.4.3 puts函数(字符串输出函数),函数的原型是:char *puts(char *s),函数的调用形式是: puts(字符串数据); puts函数将字符串数据(可以是字符串常量、 字符指针或字符数组名
8、)写在屏幕上并换行。,本章目录,3.5 数据输入,3.5.1 getche函数与getchar( )和getch( ),getche函数的调用形式: char ch; ch=getche( ); getche( )用于等待从键盘上键入一个字符, 返回它的值并在屏幕上自动回显该字符。使用该函数必须在程序的头部使用文件包含命令: include ,本章目录,例 3.3 单个字符的输入和输出。,include include void main( ) char ch; ch=getche( ); putchar(ch); putchar(n); 经编译后运行, 输入a, 最后在屏幕上显示: aa,本
9、章目录,自动回显,例 3.4 多个字符的输入和输出。,#include #include void main( ) char a, b, c;a=getch( ); b=getch( ); c=getch( );putchar(a); putchar(b); putchar(c);putchar(n);,本章目录,不回显,3.5.2 scanf函数(格式输入函数),scanf函数的调用形式: scanf(控制字符串,参量表); 如scanf(%d%d, 即要在键盘上输入12 -34 或12 -34此时12送给变量a,-34送给变量b。,本章目录,表 3.2 scanf()的格式说明,本章目录,
10、3.5.3 gets函数(字符串输入函数),函数的原型是: char *gets(char *s) 其中s是一个字符数组或有存贮空间的字符指针。 gets( )函数用来从键盘读入一串字符, 并把它们送到gets函数中的字符数组成字符型指针所指定地址的存贮单元中。 在输入字符串后,必须用回车作为输入结束,该回车符并不属于这串字符,由一个“空操作字符(0)”在串的最后来代替它。此时空格不能结束字符串的输入。gets函数返回一个指针。,本章目录,例 3.5 字符串的输入和输出。 程序: include void main( ) char str80; gets(str); puts(str); 运算
11、结果: ABC DEF ABC DEF,本章目录,3.6 程序举例,例 3.6 输入一个小写字母, 按大写输出。 程序一: include include void main() char ch; ch=getche( ); putchar(ch-32); 运行: aA,本章目录,回显,输入的a,输出的A,程序二: include include void main( ) char ch; ch=getch( ); putchar(ch-32); 运行: A,本章目录,不显示输入的a,程序三: include void main( ) char ch; ch=getchar( ); putchar(ch-32); 运行:,本章目录,等待回车才能输入,显示输入的abcdefg,A,abcdefg,例 3.7 输入三角形的三条边长,求三角形的面积。我们假设输入的三边能构成三角形。 分析: 三角形面积的计算公式如下:,s=(a+b+c)/2,本章目录,程序: include include void main( ) float a, b, c, s, area; scanf(%f, %f, %f, 运行: 3, 4, 6 a=3.00, b=4.00, c=6.00 area=5.33,本章目录,