1、本章主要介绍的内容:本章主要介绍的内容:1.C 程序语句的分类2.C 程序结构的分类3.赋值语句4.数据输入与输出C程序结构:C 程序源程序文件1源程序文件i预编译命令函 数1函 数n说 明 部 分执行部分(语句)2.函数调用语句:如:Max(2,4);C 程序语句1.表达式语句如:i+;x+y;赋值语句赋值语句:i=i+1;3.空语句:任何事情都不做。C程序语句可分为五大类:如:;4.控制语句改变语句的执行顺序if()else(条件)for()(循环)while()(循环)dowhile(循环)switch(多分支选择)()表示条件,表示语句break(中止整个循环)return(函数返回)
2、限定转向(无条件转向)语句终止程序运行语句无条件转移语句gotoexit5.复合语句(语句体)用括起来的一系列语句。如:z=x+y;t=z/100;printf(“%d”,t);结构化程序设计概念从结构化程序设计角度出发,程序只有三种结构:顺序结构顺序结构选择结构选择结构循环结构循环结构1.顺序结构顺序结构表示ABAB先执行A,再执行B.例:例:main()/*主函数*/int a,b,c;/*定义变量*/scanf(%d,%d,&a,&b);/*输入变量a和b的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(max=%d,c);/*输出c的值*/2.选择结构
3、选择结构表示为ABPTFBTPFA存在某条件P,若P为真,则执行A,否则执行B。例例:if(xy)printf(“Max=%d”,x);elseprintf(“Max=%d”,y);另一种选择结构多分支结构.KK=K1A1A2AiAnK=K2K=Knswitch(grade)caseA:printf(85-100n“);break;caseB:printf(70-84n“);break;caseC:printf(60-69n“);break;caseD:printf(60n“);break;default:printf(Errorn“);3.循环结构循环结构表示为PFTAAP为T(1)当型结构
4、当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.有两种结构:当型和直到型例:例:while(i=100)sum=sum+i;i+;(2)直到型APTFA直到P为F先执行A,再判断P,若为F,再执行A,如此反复,直到P为F.已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。例:例:dosum=sum+i;i+;while(i=100);赋值运算符和赋值表达式赋值运算符和赋值表达式 赋值运算符:赋值符号赋值运算符:赋值符号“=”就是赋值运算符。就是赋值运算符。赋值表达式:由赋值运算符组成的表达式称为赋值表达式。一般形式:赋值表达式:由赋值运算符
5、组成的表达式称为赋值表达式。一般形式:变量赋值符表达式变量赋值符表达式 赋值的含义:将赋值运算符右边表达式的值存放到左边变量名标识的存储单元中。赋值的含义:将赋值运算符右边表达式的值存放到左边变量名标识的存储单元中。例如:例如:x=10+y;x=10+y;赋值表达式的求解过程是:赋值表达式的求解过程是:(1)先先计计算算赋赋值值运运算算符符右右侧侧的的“表表达达式式”的值的值l l(2)将将赋赋值值运运算算符符右右侧侧“表表达达式式”的值赋值给左侧的变量。的值赋值给左侧的变量。(3)(3)整个赋值表达式的值就是被赋值变量的整个赋值表达式的值就是被赋值变量的值。值。编译程序根据变量说明为其分配指
6、定字节的内存单元.地址0 x8400int a=10,b=-20,c;abc2字节2字节2字节地址0 x8402地址0 x8404.内存10-20随机数将将 表达式的值表达式的值 存放到存放到 变量名标识的存储单元中:变量名标识的存储单元中:输入输入/输出及其输出及其C C语言的实现语言的实现 计算机由主机(计算机由主机(CPUCPU、内存),外围设备(输入内存),外围设备(输入/输出设备),接口组成。输出设备),接口组成。C C语言本身不提供输入语言本身不提供输入/输出语句,输入输出语句,输入/输出操作由函数实现。输出操作由函数实现。C C函数库中有一批函数库中有一批“标准输入标准输入/输出
7、函数输出函数”,它是以标准的输入,它是以标准的输入/输出设备为输出设备为输入输入/输出对象的。其中有:输出对象的。其中有:putcharputchar(输出字符)输出字符),getchargetchar(输入字符)输入字符),printfprintf(格式化输出)格式化输出),scanfscanf(格式化输入)格式化输入),putsputs(输出字符串)输出字符串),getsgets(输入字符串)。输入字符串)。格式输入/输出 printf的一般形式 printf(格式控制序列,输出表列);输出表列用“,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。printf(p
8、rintf(格式控制,输出项表格式控制,输出项表格式控制,输出项表格式控制,输出项表););普通字符(原样输出)格式说明%+/-0 m.n l 格式字符右对齐左对齐最小宽度左补0小数位数长整型d符十整o无八整x无16整c字符s字串f小六e指六格式控制序列用双引号“.”括起来的格式符序列。格式控制序列由格式说明符和普通字符组成。2.普通字符原样输出,即需要原样输出的字符。例子中的逗号和换行符。1.格式说明符:由%加格式字符组成如:%f,%d等 它的作用是将输出的数据项转换为指定的格式输出。输出表列中的每个数据项对应一个格式说明项。是需要输出的一些数据项,可以是表达式是需要输出的一些数据项,可以是
9、表达式 输出列表输出列表:例如:例如:假如假如a=3,b=4a=3,b=4,那么那么printf(printf(“a=%d a=%d b=%db=%d”,a,b);,a,b);输出输出a=3 b=4a=3 b=4。其中两个其中两个“%d d”是格式是格式说明,表示输出两个整数,分别对应变量说明,表示输出两个整数,分别对应变量a,ba,b,“a=a=”,“b=b=”是普通字符,原样输出。是普通字符,原样输出。printf函数的一般形式可以表示为:函数的一般形式可以表示为:printf(参数参数1、参数、参数2、参数、参数3、参数参数n)printf函数的功能是将参数函数的功能是将参数2-2-参数
10、参数n n按照参数按照参数1 1给定的格式输出。给定的格式输出。格式字符格式字符:对于不同类型的数据项应当使用不同的格式字符对于不同类型的数据项应当使用不同的格式字符构成的格式说明项。常用的有以下几种格式字符:构成的格式说明项。常用的有以下几种格式字符:格式字符d用来输入十进制整数。oxcsfe用来输入八进制整数。用来输入十六进制整数。用来输入单个字符。说明用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志0作为其最后一个字符。用来输入实数,可以用小数形式或指数形式输入。以f作用相同,e与f可以互相替换。(1)d格式符。用来输出十进制
11、整数。有以下几种用法:格式符。用来输出十进制整数。有以下几种用法:l l%d,按照数据的实际长度输出按照数据的实际长度输出l l%md,m指定输出字段的宽度(整数)。如果数据的位数指定输出字段的宽度(整数)。如果数据的位数小于小于m,则左端补以空格(右对齐),若大于则左端补以空格(右对齐),若大于m,则按照实际位数输出。则按照实际位数输出。l l%-md,m指定输出字段的宽度(整数)。如果数据的位数指定输出字段的宽度(整数)。如果数据的位数小于小于m,则右端补以空格(左对齐),若大于则右端补以空格(左对齐),若大于m,则按照实际位数输出。则按照实际位数输出。%ldld,输出长整型数据,也可以指
12、定宽度输出长整型数据,也可以指定宽度%mldmld。(2)x格式符。以十六进制形式输出整数。与格式符。以十六进制形式输出整数。与o格式一样,不出现负号。格式一样,不出现负号。(3)u格式符。用来输出格式符。用来输出unsigned无符号型数据,即无符号数,以十进制无符号型数据,即无符号数,以十进制形式输出。形式输出。一个有符号整数可以用一个有符号整数可以用%u u形式输出,反之,一个形式输出,反之,一个unsignedunsigned型数据也可以用型数据也可以用%d d格式输出格式输出(4)O格式符。以八进制形式输出整数。注意是将内存单元中的各位的值格式符。以八进制形式输出整数。注意是将内存单
13、元中的各位的值按八进制形式输出,输出的数据不带符号,即将符号位也一起作为八进制按八进制形式输出,输出的数据不带符号,即将符号位也一起作为八进制的一部分输出。的一部分输出。例:例:int a=-1;printf(“%d,%o,%x”,a,a,a);-1的原码:的原码:1000,0000,0000,0001。-1在内存中的补码表示为:在内存中的补码表示为:1111,1111,1111,1111=1,111,111,111,111,111=1,7,7,7,7,7=ffff输出:输出:-1,177777,ffff-1是十进制,是十进制,177777是八进制,是八进制,ffff是十六进制是十六进制(5)
14、c格式符。用来输出一个字符。一个整数只要它的值在格式符。用来输出一个字符。一个整数只要它的值在0-255范围内,范围内,也可以用字符形式输出。反之,一个字符数据也可以用整数形式输出。也可以用字符形式输出。反之,一个字符数据也可以用整数形式输出。main()char c=a;int i=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);运行结果:运行结果:a,97a,97(6)s格式符。用来输出一个字符串。有几种用法:格式符。用来输出一个字符串。有几种用法:l l%s,输出字符串输出字符串l l%ms,输出的字符串占输出的字符串占m列,如果字符串长度大于列
15、,如果字符串长度大于m,则字符串全部输出;若字符串长度小于则字符串全部输出;若字符串长度小于m,则左补空格(右对齐)。则左补空格(右对齐)。l l%-ms,输出的字符串占输出的字符串占m列,如果字符串长度大于列,如果字符串长度大于m,则字符串全部输出;若字符串长度小于则字符串全部输出;若字符串长度小于m,则右补空格(左对齐)。则右补空格(左对齐)。l l%m.ns,输出占输出占m列,但只取字符串左端列,但只取字符串左端n个字符,左补个字符,左补空白(右对齐)。空白(右对齐)。%-%-m.nsm.ns,输出占输出占m m列,但只取字符串左端列,但只取字符串左端n n个字符,右补空白(左对齐)个字
16、符,右补空白(左对齐)。(7)f格式符。用来输出实数(包括单、双精度,单双精度格式符相同)格式符。用来输出实数(包括单、双精度,单双精度格式符相同),以小数形式输出。有以下几种用法,以小数形式输出。有以下几种用法%f f,不指定宽度,使整数部分全部输出,并输出不指定宽度,使整数部分全部输出,并输出6 6位小数。注意,位小数。注意,并非全部数字都是有效数字,单精度实数的有效位数一般为并非全部数字都是有效数字,单精度实数的有效位数一般为7 7位(双精位(双精度度1616位)。位)。%m.nf,指指定定数数据据占占m列列,其其中中有有n位位小小数数。如如果果数数值值长长度度小小于于m,左端补空格(右
17、对齐)。左端补空格(右对齐)。%-%-m.nfm.nf,指定数据占指定数据占m m列列,其中有其中有n n位小数。如果数值长度小于位小数。如果数值长度小于m,m,右端补空格(左对齐)。右端补空格(左对齐)。(8)e格式符,以指数形式输出实数。可用以下形式:格式符,以指数形式输出实数。可用以下形式:l l%e,不指定输出数据所占的宽度和小数位数,由系统自动不指定输出数据所占的宽度和小数位数,由系统自动指定,如指定,如6位小数,指数占位小数,指数占5位位-e占占1位,指数符号占位,指数符号占1位,指数占位,指数占3位。位。数值按照规格化指数形式输出(小数点前必须有而且只有数值按照规格化指数形式输出
18、(小数点前必须有而且只有1位非位非0数字)。数字)。例如:例如:1.234567e+002。(。(双精度)双精度)%m.nem.ne和和%-%-m.nem.ne,m m总的宽度,总的宽度,n n小数位数。小数位数。scanf函数n 1、scanf函数的一般格式:nscanf(格式控制字符串,地址列表)n其中:n(1)格式控制字符串的含义与printf类似,它指定输入数据项的类型和格式。(2)地址列表是由若干个地址组成的列表,可以是变量的地址(&变量名)或字符串的首地址。例:nmain()nn int a,b,c;n scanf(“%d%d%d”,&a,&b,&c);n printf(“%d,%
19、d,%dn”,a,b,c);n n&是地址运算符,&a指变量a的地址。scanf的作用是将键盘输入的数据保存到&a,&b,&c为地址的存储单元中,即变量a,b,c中。格式说明格式说明 与与printfprintf函数中的格式说函数中的格式说明相似,以明相似,以%开始,以一个格开始,以一个格式字符结束,中间可以插入式字符结束,中间可以插入附加字符。附加字符。其它输入/输出函数(#include)nputchar函数(字符输出函数)n一般形式:putchar(字符表达式);n功能:向终端(显示器)输出一个字符(可以是可显示的字符,也可以是控制字符或其它转义字符)。n例如:nputchar(y);p
20、utchar(n);putchar(101);putchar();ngetchar函数(字符输入函数)n一般形式:c=getchar();n功能:从终端(键盘)输入一个字符,以回车键确认。函数的返回值就是输入的字符。#includemain()char c;c=getchar();putchar(c);#includemain()putchar(getchar();nputs函数(字符串、字符数组中字符串输出函数)n一般形式:puts(char*str);n功能:将字符串或字符数组中存放的字符串输出到显示器上。n例如:putstr(“ChinanBeijingn”);ngets函数(字符串输入
21、函数)n一般形式:gets(char*str);n功能:接收从键盘输入的一个字符串,存放在字符数组中。n例如:nchar s81;ngets(s);getch()自键盘输入字符时,所输入字符不会显示在屏幕上,不需按“Enter“,字符会自动被接受getche()自键盘输入字符时,所输入字符会显示在屏幕上,不需按“Enter“,字符会自动被接受getchar()自键盘输入字符时,所输入字符会显示在屏幕上,需按“Enter“,字符才会被接受,且只有第一个字符被接受gets()自键盘接受一个字符串,按“Enter”结束,用0代替“Enter“顺序结构程序设计举例 n例:输入三角形的三边长,求三角形面
22、积。n为简单起见,设输入的三边长a,b,c能构成三角形。从数学知识已知求三角形面积的公式为:#include main()float a,b,c,s,area;scanf(%f%f%f,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);/*sqrt()求平方根的函数求平方根的函数*/printf(a=%7.2f,b=%7.2f,c=%7.2fn,a,b,c);printf(area=%8.3fn,area);【例】已知圆半径,圆柱高,求圆周长,圆柱体积。nmain()float r,h,l,v,pi;pi=3.1415926;scanf(“
23、%f,%f”,&r,&h);l=2*pi*r;v=pi*r*r*h;printf(“圆周长为:%6.2fn”,l);printf(“圆柱体积为:%6.2f”,v);逗号运算符逗号运算符逗号表达式:逗号表达式:用逗号运算符把两个或多个算术表达式连接起来构成逗号表达式。u 表达式表达式1,表达式,表达式2,n -注:求值过程从左到右,逐个求表达式的值,最后整个表达式的值取最右侧的表达式的值。n for 循环语句中常用。n-优先级别最低y=(b=2,3*2)(y=b=3,3*b)a=(b=2,+b,b+5)/y值为3,表达式值为9/y值为6,表达式值为6/a值为8,表达式值为8优先级运算符结合规则1 ()-.从左至右2!+-*&sizeof从右至左3*/%从左至右4+-从左至右5从左至右6 =从左至右7=!=从左至右8&从左至右9从左至右10|从左至右11&从左至右12|从左至右13?:从右至左14=+=-=*=/=%=&=|=从右至左15,从左至右作业1:n自己设计一个程序,并运行。n参考题目:(1)用程序过滤键盘输入的非英文字符。(2)在屏幕上打印2008年年历。