1、 程序的结构:程序的结构:源程序文件1预处理命令全局变量声明函数首部局部变量声明执行语句函数体函数1函数n源程序文件2源程序文件nC程序C语句可分为以下三类:语句可分为以下三类:1.控制语句控制语句2.表达式语句表达式语句3.复合语句复合语句程序的程序的的。的。的。的。控制语句用于控制程序的流程,以实现控制语句用于控制程序的流程,以实现程序的各种结构方式。可分成以下三类:程序的各种结构方式。可分成以下三类:if else语句、语句、switch语句;语句;do while语句、语句、while语句、语句、for语句;语句;break语句、语句、goto语句、语句、continue语句、语句、r
2、eturn语句。语句。表达式语句由表达式加上分号表达式语句由表达式加上分号“;”组成。组成。其一般形式:其一般形式:例如:例如:x=y+z;y+z;i+;1)赋值语句是由赋值表达式再加上分号构成赋值语句是由赋值表达式再加上分号构成的表达式语句。的表达式语句。其一般形式为:其一般形式为:赋值符右边的表达式又是一个赋值表达式赋值符右边的表达式又是一个赋值表达式:展开之后的一般形式为:展开之后的一般形式为:例如:例如:a=b=c=d=e=5;按照赋值运算符的右接合性,等效于:按照赋值运算符的右接合性,等效于:e=5;d=e;c=d;b=c;a=b;给变量赋初值是变量说明的一部分,赋初值后的变给变量赋
3、初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。而赋值语句则必须用分号结尾。例如:例如:int a=5,b,c;如下述说明是错误的:如下述说明是错误的:int a=b=c=5;而赋值语句允许连续赋值:而赋值语句允许连续赋值:a=b=c=5;函数调用语句由函数名、实际参数加上分号函数调用语句由函数名、实际参数加上分号“;”组成。组成。其一般形式为:其一般形式为:例如:例如:printf(C Program);调用库函数,输出字符串。调用库函数,输出字符串。空语句只有分号空语句只有分号“;”组成
4、的语句称为空语组成的语句称为空语句。句。例如例如 while(getchar()!=n);复合语句把多个语句用括号复合语句把多个语句用括号括起来组成的一括起来组成的一个语句称复合语句。个语句称复合语句。例如:例如:x=y+z;a=b+c;printf(“%d%d”,x,a);按格式控制所指定的形式(向用户屏)输出按格式控制所指定的形式(向用户屏)输出输出项的值。输出项的值。例:例:void main()int a,b,sum;a=123;b=456;sum=a+b;printf(”a=%d,b=%d,c=%dn”,a,b,sum);输出项表列输出项表列:由一个或多个输出项组成由一个或多个输出项
5、组成(若多个、它们之间用逗若多个、它们之间用逗号隔开号隔开),常量、变量、函数、表达式、字符数组,常量、变量、函数、表达式、字符数组名等均可做输出项。名等均可做输出项。格式控制格式控制:是用双引号括起来的字符串,用来表示格式说明,是用双引号括起来的字符串,用来表示格式说明,也称为转换控制字符串。其中字符可由下面也称为转换控制字符串。其中字符可由下面3类组类组成成:a=%d n#includevoid main()int k=68;float t=56.3;printf(”%dt%dt%fn”,k,k+123,sqrt(t);控制对应输出项的输出形式(控制对应输出项的输出形式(),输出结果),输
6、出结果中格式说明被对应的输出项值取代。中格式说明被对应的输出项值取代。(1)格式说明基本形式:格式说明基本形式:%d(或或%i)、%o、%x(或或%X)、%u、%c 对应的输出项类型为对应的输出项类型为和和。例例:void main()int a=65;char c=!;printf(”%d,%cn”,a,a);printf(”c=%c,Its ASCII code=%dn”,c,c);nmain()nint a=-1;nprintf(%d,%o,%x,%u,a,a,a,a);n/*假设int占2个字节*/-1的原码:1000,0000,0000,0001。-1在内存中的补码表示为:1111,
7、1111,1111,1111=1,111,111,111,111,111=1,7,7,7,7,7=ffff输出:-1,177777,ffff,65535-1是十进制,177777是八进制,ffff是十六进制。voidprintf(”%s%s%cn”,”Who is ”,name,?);%f、%e(或或%E)、%g(或或%G)对应对应%lf、%le(或或%E)、%lg(或或%G)对应对应%f小数形式(小数形式()%e(或或%E)标准化指数形式标准化指数形式()%g(或或%G)让系统自动选取让系统自动选取%f(去掉小数点后去掉小数点后多余的零多余的零)或或%e中较短者中较短者例:例:main()f
8、loat f;f=123.46;printf(”%f,%e,%gn”,f,f,f)结果:结果:(2)在格式说明基本形式中加附加格式说明符在格式说明基本形式中加附加格式说明符 若输出项为若输出项为型或型或型,则用下型,则用下面格式说明控制:面格式说明控制:%ld、%lx、%lo、%lu 若输出项为若输出项为型或型或型,则用下型,则用下面格式说明控制:面格式说明控制:%hd、%hx、%ho、%hu在格式说明在格式说明%后加一个整数后加一个整数m指定宽度为指定宽度为位位:若实际需要的若实际需要的、则此、则此 若若,则,则 若若,则,则 若若,则,则 例:例:void main()int a=12;l
9、ong b=12345678;printf(”%6dn”,a);printf(”%-6dn”,a);printf(”%+6dn”,a);printf(”%12ldn”,b);printf(”%+8sn”,”book”);1 2 3 4 5 6 7 8b o o k在在%s中间插入中间插入m.n:m含义同含义同,此,此、表、表示只输出对应字符串中左边示只输出对应字符串中左边n个字符。个字符。例:例:void main()()printf(”%8.3sn”,”book”);printf(”%.3sn”,”book”);输出:输出:b o ob o o在在%f、%e(或或%E)、%g(或或%G)中间
10、插入中间插入m.n:m含义同含义同,此,此m可省略、若省略则可省略、若省略则m=n。n为无符号整数、表示为无符号整数、表示n位小数,其余四舍五位小数,其余四舍五例例8:printf(”a=%+10.3lfn”,123.45678);例例9:printf(”a=%+010.3lfn”,123.45678);a=+1 2 3.4 5 7a=+0 0 1 2 3.4 5 7在在%x、%o、%lx、%lo 的的%后加后加输出输出带前导的八进制或十六进制数据带前导的八进制或十六进制数据例例10:void main()int x=7281;printf(”%o,%#on”,x,x);printf(”%x,
11、%#xn”,x,x);nPrintf函数输出列表的运算顺序程序示例nmain()nnint i=1,j=2;nprintf(%d%d%d,i+j,+i,i);n4 2 1求值顺序自右至左 scanf(格式控制,输入项地址表列格式控制,输入项地址表列)地址:地址:1)变量名前加)变量名前加&变量在内存中的地址;变量在内存中的地址;2)数组名)数组名数组在内存中的首地址。数组在内存中的首地址。一个或多个地址一个或多个地址组成组成(若多个之间若多个之间用逗号隔开用逗号隔开)系统切换到用户屏、要求并等待用户按系统切换到用户屏、要求并等待用户按输入要赋给输入项的输入要赋给输入项的,按,按回车键结束,系统
12、立即把所输入的赋给相应输入项。回车键结束,系统立即把所输入的赋给相应输入项。它它是一个标准库函数,与是一个标准库函数,与printf函数相同,使用函数相同,使用scanf函数之前不必包含函数之前不必包含stdio.h文件。文件。格式控制字符串的作用与格式控制字符串的作用与printf函数相函数相同,但同,但,也就是,也就是。例:例:void 1)s c a n f 函 数 中 没 有 精 度 控 制,如:函 数 中 没 有 精 度 控 制,如:是非法的。不能用此是非法的。不能用此语句输入小数为语句输入小数为2位的实数。位的实数。2)scanf中要求给出变量地址,如给出变量中要求给出变量地址,如
13、给出变量名则会出错。如名则会出错。如 是非法的,是非法的,应改为应改为scnaf(%d,)。3)在输入多个数值数据时,若格式控制串中)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可没有非格式字符作输入数据之间的间隔则可用空格,用空格,TAB或回车作间隔。或回车作间隔。C编译在碰到编译在碰到这些符号这些符号即认为该数据结束。即认为该数据结束。4)在输入字符数据时,若格式控制串中无非)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有格式字符,则认为所有输入的字符均为有效字符。如:效字符。如:输入为:输入为:则赋值:则赋值:如果在格式控制中加入空格
14、作为间隔,如如果在格式控制中加入空格作为间隔,如:输入时数据之间可加空格。输入时数据之间可加空格。d efbcabcad efbcade 5)如果格式控制串中有非格式字符则输入时)如果格式控制串中有非格式字符则输入时也要输入该非格式字符。也要输入该非格式字符。输入时应为:输入时应为:则输入应为:则输入应为:5,6,7a=5,b=6,c=7 6)如输入的数据与输出的类型不一致,)如输入的数据与输出的类型不一致,输入:输入:虽然编译虽然编译能能够通过,但结果将不正确。够通过,但结果将不正确。应输入:应输入:a=5;b=6;c=7 应输入:应输入:应输入:应输入:123,4561应输入:应输入:或输
15、入:或输入:应输入:应输入:或输入:或输入:123456 123 456123456 123 456void main()char a,b;MNMMNM N1.格式控制中不包含附加格式说明符格式控制中不包含附加格式说明符m.n,一般不包,一般不包含转义字符(含转义字符()。)。2.double型输入项必须使用如下格式说明:型输入项必须使用如下格式说明:%lf、%le、%lg()3.在格式说明在格式说明%后插入后插入 表示跳过它所指定的表示跳过它所指定的列数,如:列数,如:输入输入:结果结果:%f 1 2 34 5 6 a值:值:123 b值:值:456void main()int a;scan
16、f(%d,&a);printf(%ld,a);main()long a;scanf(%ld,&a);printf(%ld,a);4、在格式说明基本形式中加附加格式说明符在格式说明基本形式中加附加格式说明符 l若输出项为若输出项为long 型或型或unsigned long型,则型,则用下面格式说明控制:用下面格式说明控制:%ld、%lx、%lo、%lu h若输出项为若输出项为short 型或型或unsigned short型,型,则则下面格式说明控制:下面格式说明控制:%hd、%hx、%ho、%hu。其它输入、输出函数其它输入、输出函数形式形式:getchar()功能功能:c=getchar(
17、);同同 scanf(”%c”,&c);注意注意:需在文件开头加需在文件开头加#include”stdio.h”例例:void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);输入:输入:结果:结果:输入:输入:结果:结果:换行换行使用使用getchar函数还应函数还应注意几个问题注意几个问题:1)getchar函数只能接受函数只能接受,输入,输入数字也按字符处理。输入多于一个字符时,数字也按字符处理。输入多于一个字符时,只接收第一个字符。只接收第一个字符。2)使用本函数
18、前必须包含文件)使用本函数前必须包含文件“stdio.h”。3)在)在TC屏幕下运行含本函数程序时,将退屏幕下运行含本函数程序时,将退出出TC 屏幕进入用户屏幕等待用户输入。输屏幕进入用户屏幕等待用户输入。输入完毕再返回入完毕再返回TC屏幕。屏幕。putchar(putchar(一个整形或字符型输出项一个整形或字符型输出项 )同同 printf(”%c”,printf(”%c”,输出项输出项 ),),在显示器在显示器上上 。putchar(A);putchar(A);(输出大写字母(输出大写字母A A)putchar(x);putchar(x);(输出字符变量(输出字符变量x x的值)的值)p
19、utchar(101);putchar(101);(也是输出字符(也是输出字符A A)putchar(n);putchar(n);(换行)(换行)例:例:void main()char c=A;putchar(66);putchar(53);putchar(c+2);putchar(n);putchar(7);putchar(n);3.puts函数nputs函数(字符串、字符数组中字符串输出函数)n一般形式:puts(char*str);n功能:将字符串或字符数组中存放的字符串输出到显示器上。n例如:putstr(“ChinanBeijingn”);4.gets函数(字符串输入函数)ngets
20、函数(字符串输入函数)n一般形式:gets(char*str);n功能:接收从键盘输入的一个字符串,存放在字符数组中。n例如:nchar s81;ngets(s);4.5 算法及其表示方法1 算法:算法:为解决一个问题而采取的方法和步骤称为为解决一个问题而采取的方法和步骤称为“算法算法”。2 算法的算法的5大特性大特性 (1)有穷性(有限的步骤)有穷性(有限的步骤)(2)确定性(确定性(不能有歧义)不能有歧义)(3)有有0个或多个输入个或多个输入 (4)有有1个或多个输出(即算法必须得到结果)个或多个输出(即算法必须得到结果)(5)有效性有效性:算法的每个步骤都应当能有效执行,并算法的每个步骤
21、都应当能有效执行,并能得到确定的结果。能得到确定的结果。3 算法的表示方法算法的表示方法 常用的算法表示方法:自然语言,传统流程图,结构化流程图(N-S流程图),伪代码、计算机语言等。(1)用自然语言表示算法(2)用流程图表示算法 流程图表示算法:用一些图框表示各种操作,用箭头表示算法流程。用图形表示算法直观形象,易于理解。美国标准化协会ANSI规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用。4.5算法及其表示方法起止框输入输出框处理框判断框流程线连接点注释框流程图符号4.6顺序结构程序设计举例 n例:输入三角形的三边长,求三角形面积。n为简单起见,设输入的三边长a,b,c能构成三
22、角形。从数学知识已知求三角形面积的公式为:开始输入a,b,c计算s计算area输出a,b,c,area结束n#include nmain()nn float a,b,c,s,area;n scanf(%f%f%f,&a,&b,&c);n s=(a+b+c)/2;n area=sqrt(s*(s-a)*(s-b)*(s-c);/*sqrt()求平方根的函数*/n printf(a=%7.2f,b=%7.2f,c=%7.2fn,a,b,c);n printf(area=%8.3fn,area);nn 3 4 6na=3.00,b=4.00,c=6.00narea=5.333 n求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac0。n一元二次方程的根为:n#include nmain()nn float a,b,c,disc,p,q,x1,x2;n scanf(%f%f%f,&a,&b,&c);/*输入a,b,c*/n disc=b*b-4*a*c;/*计算*/n p=-b/(2*a);n q=sqrt(disc)/(2*a);n x1=p+q;x2=p-q;/*计算2个方程的根*/n printf(x1=%fnx2=%fn,x1,x2);/*输出*/nn1 3 2nx1=-1.000000nx2=-2.000000