1、3.1 C语句概述,3.2 数据的输出,3.3 数据的输入,第三章 C语言简单 程序设计,3.1 C语句概述,C语言的语句概述:,程序对数据的处理是通过“语句”的执行来实现的。,一条语句完成一项操作(或功能)。,一个为实现特定目的的程序应包含若干条语句。,3.1.1 简单语句,1.表达式语句,由表达式组成的语句称为表达式语句,语句格式:,表达式;,分号(;)是语句结束的标志,功能:,计算表达式或改变变量的值。,分类:,运算符表达式语句,赋值语句,运算符表达式语句,运算符表达式后跟一个分号组成,例:,5;,i+; 语句的功能是,变量i的值增1。,(1),a+b; /*算术表达式语句,计算a与b之
2、和。*/,赋值语句,赋值表达式后跟一个分号组成,(2),例:,x=y+z (赋值表达式) x=y+z;/*赋值语句计算y+z的和并赋值给变量x.。*/,x=2; y=3;,注意不要和变量的赋初值混为一团。,如:int a=2; (变量的赋初值)int b;b=2; (赋值语句),3.1.2 复合语句,一对大括号 包围若干条语句组成,语法上视为一条语句。,格式:, 数据说明部分;执行语句部分;,注意:,(1) 在复合语句中的“内部数据描述语句”中定义的变量,是局部变量, 仅在复合语句中有效。,(2) 复合语句结束的“ ”之后,不需要分号。,(3) 复合语句可以出现在任何数据操作语句可以出现的地方
3、。,3.1.3 空语句,空语句就是一个分号。,格式:,;,功能:,执行该语句不做任何操作,3.2 数据输出,C语言本身不提供输入/输出语句。,C语言的输入/输出功能由C语言的标准I/O库函数提供。,C语言的输入/输出库函数名称不是保留字(或称关键字)。如printf,scanf。,在VC6.0中要使用输入输出函数,一定要在源程序 中包含头文件stdio.h的命令行。,#include 或#include “stdio.h”,3.2.1 printf函数的一般调用形式,printf函数是C语言提供的标准输出函数,用来 在终端上(显示器或打印机等)设备上按指定格式 进行输出。,printf函数一般
4、形式:,printf(“格式控制字符串“,输出项列表);,必须是英文状态下的双引号,1.格式控制字符串:,(1)组成:,格式说明、转义字符、普通字符,普通字符:,按原样输出,主要用于输出提示信息。,转义字符:,指明特定的操作, 如:转义字符n表示换行。,格式说明:,由“ % “ 和“格式字符“组成:%格式字符。 它表示按规定的格式输出数据。,2.输出项表 要输出的数据,也可以是表达式,printf(“%d %d”,a,b);,格式说明,输出项表,printf(“a=%d b=%d”,a,b);,格式说明,普通字符,输出项表,若a的值为3,b的值为4 则输出结果是:a=3 b=4,空格,若a,b
5、分别为12,13?,格式字符,对不同类型的数据使用不同的格式符,有以下几 种常见的格式字符: 1.d格式符 (用来输出十进制的整数) %d ,按整型数据的实际长度输出,(2)%md ,m为指定的输出宽度,若数据的位数小于m则,左补空格,若大于m则按实际长度输出,(3)%ld,输出长整型的数据,%hd输出短整型的数据。 long a=1298345; printf(“%ld”,a); 若用%d的形式输出就会发生错误。 那int 的数据可以用%ld的形式输出吗?,例如:,printf (“%dn“,100);,printf(“%5dn“,100);,printf(“%8dn%8d,100,100*
6、100);,2.o格式符以8进制的形式输出整数,将内存单元的各位的值按 8进制的形式输出,输出的数据不带符号(符号位也作 为8进制的形式输出)。 如:int a=-1;,1111111111111111,a在内存中的存储方式,printf(“%d,%o”,a,a); 输出结果是: -1,177777,对于长整型用%lo输出,3.x(X)格式符 以十六进制的形式输出整数 int a=-1; printf(“%d,%o,%x”,a,a,a); 输出结果是: -1,177777,ffff %lx用来输出长整型数据,4.u格式符 输出无符号的整型数据,例如:,printf (“%on“,-1);,pr
7、intf (“%x,%Xn“,-1,-1);,printf (“%u,%d“,-1,-1);,5.c格式符 用来输出一个字符。 如: char c=a; printf(“%c”,c);一个整数只要在0255之间就可以以字符的形式输出 ,在输出前,将该整数转化成相应的ASCII字符。反 之一个字符也可以以整数的形式输出。 如:,#include “stdio.h” main() char c=a;int i=97; printf(“%c,%cn”,c,i); printf(“%d,%dn”,c,i); ,输出结果,a,a 97,97,6.s格式符 输出一个字符串 %s 如:printf(“%s”
8、,“CHINA”); 输出结果:CHINA (不包含双引号) (2)%ms 输出的字符串占m列,如果字符串本身的长度大于m则突破限制,原样输出,否则,左补空格 (3)%-ms 输出的字符串占m列,如果字符串本身的长度大于m则突破限制,原样输出,否则,右补空格 (4)%m.ns 输出的字符串占m列,但只取字符串左边的n个字符 输出,若nm,则左补空格 (5)%-m.ns 输出的字符串占m列,但只取字符串左边的n个字符输出,若nm,则右补空格,printf (“%4c,%cn“,A, A);,printf (“%-8s,%8.2s“, “ Name “, “ Name “);,例如:,7.f格式符
9、 以小数的形式输出实数(单双精度) (1)%f,整数部分全部输出,小数部分输出6位,但并非 所有的数字都是有效数字。单精度一般为7位,#include “stdio.h” main() float x,y;x=111111.111;y=222222.222printf(“%f”,x+y); 输出结果是:333333.328125(只有前7位是有效数字),(2) %m.nf,输出的数据占m列,输出n位小数,若数 值长度小于m,则左补空格 (3)%-m.nf ,同上,只是数值长度小于m,右补空格,8.e(E)格式符 以指数形式输出浮点数(单精度,双精度) %e,不指定数据所占的宽度和数字部分小数的
10、位数 系统指定小数部分占6位,指数部分占5位(e+002). printf(“%f,%e”,123.456,123.456); 输出结果是:123.456001,1.234560e+002 数据占13列(2)%m.ne(%-m.ne),n数据的数字部分的小数位数,printf (“%fn%10.3fn“,100.7654321, 100.7654321);,例如:,float f=123.456; printf(“%en%10en%10.2en%-10.2en”,f,f,f,f);,9.g(G)格式符 输出实数,根据数值的大小自动选择%f或%e格式输 出(宽度较小的),且不输出无意义的0.,f
11、loat f=123.456; printf(“%fn%e%g”,f,f,f);,格式字符(type)一鉴表:,3.2.2 使用printf函数时的注意事项 (1)在格式控制字符串中,格式说明与输出项从左到右在类型上必须一一对应匹配。 int a=3;float b=2.5; printf(“a=%d,b=%fn”,a,b); (2)在格式控制字符串中,格式说明的个数应 与输出项的个数相同,若格式说明的个数少于输出项,则多余的输出项不输出,反之,多余的输出格式输出不定值 Printf(“%d,%f”,2,2.5,4); Printf(“%d,%f,%c”,2,2.5); (3)在格式控制中,可
12、以包含任意的合法字符 (4)如果要输出“%”,可在格式控制中用“%”表示,国家等级考试练习,1.以下程序运行后的结果是 main() char c; int n=100;float f=10;double x; x=f*=n/=(c=50); printf(“%d %fn”,n,x); ,2 20.000000,2.有以下程序 main() int a=0,b=0; a=10;b=20; printf(“a+b=%dn”,a+b); 程序运行的输出结果是,a+b=30,3.有以下程序 main() int m=0256,n=256;prinf(“%o %on”,m,n); 程序运行后的结果是
13、a.0256 0400 b.0256 256 c.256 400 d.400 400,C,4.以下程序运行的结果是 main() int a;a=-1; printf(“%dt%ut%on”,a,a,a); a.-1 65535 177777 b.-1 1 1 c. 1 32768 177777 d.1 32767 177777,A,5.以下程序运行后的输出结果是 main() int a,b,c;a=25;b=025;c=0x23;printf(“%d %d %dn”,a,b,c); ,25 21 35,1. scanf函数的一般形式:,scanf(“格式控制字符串“,地址列表);,必须用英
14、文的双引号括起来。,由普通字符和格式说明字符组成(不包含 转义字符)。,由若干个地址组成的列表。,变量的地址、字符串的首地址、指针变量等,以逗号(,)间隔。,3.3 格式输入函数(实现数据的输入),1.格式控制字符:,(1)组成:,普通字符、格式说明。,普通字符:,格式说明:,键盘输入时,要按原样输入,一般起分隔或提示作用。,但分隔或提示作用若由用户输入,就失去了本来的意义,一般采用printf来实现。,以%开始,以一个格式字符结束,中间可插入附加字符,(2)格式字符(type)一鉴表:,int i; scanf (“i=%d“,&i);printf (“i=%d“,i);,scanf (“%
15、d%d%d“, &a,&b,&c);,&:取地址运算符。 表示将所输入后的数据放入对应地址的存储单元中。,scanf (“%d,%d,%d“, &a,&b,&c);,说明:,(1)可以指定输入数据所占的列数,系统自动按它截取所需的数据scanf(“%3d%3d”,输入:1234567(回车)a的值123,b的值456,(2)%后的“*”号的附加说明表示跳过对应的输入数据 int x,y,z; scanf(“%d %*d %d %d”, 输入:12 34 56 78 输出:12 56 78,(3)输入时不能规定数据的精度 scanf(“%7.2f”,使用输入函数注意的事项:,scanf函数的输入
16、项表部分应是变量地址,而不是 变量名,scanf(“%d%d”,a,b),scanf(“%d%d”,(2)格式控制字符串中的普通字符应原样输入,scanf(“please input a,b:%d,%d”, 输入:please input a,b:2,3,若是如下形式,应如何输入: scanf(“%d:%d:%d”,表示两个空格,(3) c作为格式输入字符时 空格或回车也作为有效的字符输入,如:scanf(“%c%c%c”, 输入:abc 错误的输入方式:a b c,表示空格,若要a的值为2,c1的值为c应如何输入? scanf(“%d%c”, 以下那一个正确: 2c 2 c 2c,例3-8:
17、,#include “stdio.h“ void main() int a,b; printf(“input a,b:“); scanf(“%d%d“,input a,b: 78 a=7,b=8,等级考试练习,1.设变量均已正确定义,若要通过 scanf(“%d%c%d%c”,”语句为变量a1,a2赋数值为10,20,为变量c1,c2赋字符X,Y,以下输入形式正确的是(注:代表空格字符)(07.04) a.10 X 20 Y b.10 X20 Y c.10 X d.10X20Y 20Y,D,2.执行以下程序时输入1234567,则输出 结果是(07.09) #include main() in
18、t a=1,b;scanf(“%2d%2d”, ,12 34,3.有以下程序 main() int m,n,p; scanf(“m=%dn=%dp=%d”, 若想从键盘上输入数据,使变量m的值为123 ,n的值为456,p中的值为789,则正确的输入是_ a.m=123n=456p=789 b.m=123 n=456 p=789 c.m=123,n=456,p=789 d.123 456 789,A,#include “*.h” #define .,void main(),a、变量声明(1、几个?2、什么类型?),b、执行部分 (1、scanf()2、转化公式3、printf(),3.4 顺序
19、程序设计举例,例3-10:输入一个华氏温度,输出对应的摄氏温度。输出取1位小数。转换公式为,#include “stdio.h“ void main() float c,f; scanf(“%f“,注意数学表达式到C语言表达式的转换,例3-11:输入两个整数a、b,将它们交换,例如a为3,b为5,交换后a为5,b为3。,#include “stdio.h“ void main() int a,b,t; /*t就相当于空杯子*/ scanf(“%d,%d“, /*观察交换后的值*/ ,用于交换变量a、b的方法通常称为两两交换法。,例3-12:从键盘输入圆半径,求圆的面积和周长,结果保留两位小数 。,#include “stdio.h“ #include “math.h“ void main() float r,area,peri; scanf(“%f“, ,小 结,1、表达式与语句的区别,2、格式化输入/输出语句的使用,3、简单顺序程序的编写,