第3章简单程序设计21世纪高等学校精品规划教材Hanent整理掌握C语言中的语句类型、程序结构掌握赋值语句和基本输入/输出函数的使用学会用正确的格式进行简单的输入输出程序设计3.1C语言语句表达式语句表达式;例如:x=100/*表达式*/x=100;/*语句*/函数调用语句函数名(参数列表);例如:printf(HelloWorld!\n);3.1C语言语句控制语句控制语句用于完成一定的控制功能,以实现程序的结构化。C语言有9种控制语句,可分为以下3类:条件判断语句:if语句、switch语句。转向语句:break语句、continue语句、goto语句、return语句。循环语句:for语句、while语句、do-while语句。3.1C语言语句复合语句复合语句是用花括号将若干语句组合在一起,又称分程序例如,下面是一个复合语句:{i=5;printf(%d\n,i);}空语句;3.2程序结构3.2.1程序结构简介在C语言中,程序结构一般分为顺序结构、选择结构、循环结构。任何复杂的程序都是由这3种基本结构组成的。【例3-1】简单的程序结构。#includestdio.hvoidmain(){inta,b,c;/*声明部分,定义了3个整型变量*/a=100;/*执行部分开始,直到最后的花括号*/b=200;c=a+b;printf(a+b=%d\n,c);}3.2程序结构【例3-2】由多个函数构成的程序结构。#includestdio.hvoidmain()/*主函数*/{inta,b,c;/*声明部分,定义变量的类型*/scanf(%d,%d,&a,&b);/*通过输入函数,给变量a、b赋值*/c=sum(a,b);/*调用sum函数,将函数值赋给变量c*/printf(a+b=%d\n,c);/*输出变量c的值*/}intsum(inta,intb)/*定义一个sum函数*/{intc;c=a+b;return(c);/*将变量c的值通过返回语句带回调用处*/}3.2程序结构3.2.2顺序结构程序运行时按语句书写的次序依次执行最简单、最基本的结构【例3-3】分析下面程序结构。#includestdio.hvoidmain(){inta,b,c;scanf(%d,%d,&a,&b);c=a+b;printf(c=%d\n,c);}3.3赋值语句3.3.1基本赋值语句变量=表达式;正确的赋值语句:a=100;a=a+200;/*两个赋值语句,最后a变成300*/a=b=c=100;/*相当于a=(b=c=100);*/c=(a=100,b=a,a+b);/*右边是逗号表达式*/错误的赋值语句:c+2=a+b;/*左边不是变量名,是表达式*/赋值运算符“=”可以理解成,例如:c=a+b可以看成ca+b。3.3赋值语句3.3.2复合赋值语句a+=3;/*相当于a=a+3*/b-=6;/*相当于b=b-6*/c/=2;/*相当于c=c/2*/在构造以上赋值语句之前,变量必须已经初始化或赋值。下面的程序是错误的:inta;a+=10;因为a+=10相当于a=a+10,而右边表达式中的a是刚刚定义的,还没有具体的值。3.4数据输入与输出C语言本身不提供输入输出语句,其数据的输入和输出功能是由函数来实现的#includestdio.hprintf(格式输出)、scanf(格式输入)、putchar(输出字符),getchar(输入字符)TurboC中允许在使用这两个函数时不用#include命令使用数学函数库时,要用到math.h文件3.4数据输入与输出3.4.1格式化输出函数printf功能是向系统指定的设备输出若干个任意类型的数据调用形式printf(格式控制字符串,输出列表);格式控制字符串是用双引号括起来的字符串,它包括两个信息:格式说明。由“%”和格式字符组成,如%d、%c、%f等。它的作用是将要输出的数据转化成指定的格式输出,格式说明都是由“%”字符开始的。一般字符。或者称为非格式说明符,即按原样输出的字符。3.4数据输入与输出3.4.1格式化输出函数printf输出列表是需要输出的变量、函数、表达式。例如:printf(a+b=%d\n,c);“%d”是格式说明,用来控制输出项c的输出格式。“a+b=”和“\n”都是一般字符,原样输出,“\n”是转义字符,代表换行符。假设c为300,则输出结果为:a+b=3003.4数据输入与输出3.4.1格式化输出函数printf格式说明%[标志][最小宽度][.精度][长度]类型[]表示可选项[标志]可以是-、+、03.4数据输入与输出3.4.1格式化输出函数printf[最小宽度]:十进制整数,表示输出的最少位数。[.精度]:“.”加上十进制整数n,其含义是:如果输出的是数值,则该数表示小数位数,若实际小数位数大于该值,则超出部分四舍五入;如果输出的是字符,则表示输出字符的个数。[长度]:可以是h、l。h表示按短整型量输出,l表示按长整型量或双精度量输出。3.4数据输入与输出3.4.1格式化输出函数printf类型:格式说明符中必须要有的,它表示输出列表里要输出的数据类型【例3-4】分析下面程序运行结果#includestdio.hvoidmain(){charc='A';inta=65,b=-100;longd=100;floatx=3.141592631415,y=-3141592631.415;doubledx=3.141592631415;printf(c=%d,c=%c,c=%x\n,c,c,c);printf(a=%d,a=%x,a=%o,a=%c\n,a,a,a,a);printf(a=%d,a=%10d,a=%-10d,a=%+d\n,a,a,a,a);printf(b=%d,b=%10d,b=%-10d,b=%+d\n,b,b,b,b);printf(d=%d,d=%ld,d=%x,d=%lx\n,d,d,d,d);printf(x=%f,x=%6.f,x=%.3f,x=%6.3f,x=%10.3f\n,x,x,x,x,x);printf(y=%f,y=%6.f,y=%10.f\n,y,y,y);printf(dx=%f,dx=%6.f,dx=%.3f,dx=%6.3f,dx=%10.3f\n,dx,dx,dx,dx,dx);printf(x=%.8f,dx=%.8f\n,x,dx);}【例3-4】分析下面程序运行结果【例3-4】分析下面程序运行结果分析char型变量c分别用%d、%c、%x输出,结果分别为65、A、41。int型变量a当输出宽度大于其自身宽度2时,空余部分填充空格,附加字符“-”可以将默认的右对齐格式改成左对齐格式,附加字符“+”在正数65前加上符号“+”。负数b的符号位必须存在,默认比正数多出一个字符位置。long型变量d在16位机上的输出必须加l修饰,否则输出错误,但在VC下却可以忽略。TC下“%f”和“%6.f”输出float型变量x时意义相同,但在VC下,“%6.f”相当于“%6.0f”。float类型变量x和double类型变量dx的精度可以从输出结果中看出,用“%.8f”输出x时,其精度只能达到3.141592,后面的数字是不可知的。3.4.1格式化输出函数printf注意:可以在格式控制字符串中包含前面所讲的“转义字符”,如'\n'、'\t'、'\r'、'\b'、'\377'等。跟在%后面的格式符除X(表示输出的十六进制数用大写字母输出)、E(表示输出的指数e用大写字母E输出)、G(表示若选用指数形式输出,则用大写字母E输出)外,其余必须是小写字母。如%d不能写成%D。若想输出字符“%”,则在格式字符串中用连续两个%表示。如:printf(%f%%,1.0/4);输出:0.250000%。3.4数据输入与输出3.4.2格式化输入函数scanfscanf函数的功能是从键盘上将数据按用户指定的格式输入并赋给指定的变量调用的一般形式为:scanf(格式控制字符串,地址列表);其中格式控制字符串的定义与使用方法和printf函数相同,但不能显示非格式字符。地址列表是要赋值的各变量地址。地址是由地址运算符“&”后跟变量名组成,如&x表示变量x的地址。默认的分隔符有空格、回车符、Tab(跳格)键【例3-5】scanf函数的使用#includestdio.hvoidmain(){inta,b;scanf(%d%d,&a,&b);printf(a=%d,b=%d\n,a,b);}运行时按以下方式输入a、b的值:100-200程序将输出:a=100,b=-2003.4.2格式化输入函数scanf格式说明%[*][宽度][长度]类型[*]:表示输入的数值不赋给相应的变量,即跳过该数据不读。[宽度]:十进制正整数,表示输入数据的最大宽度。[长度]:长度格式符为l和h,l表示输入长整型数据或双精度实型数据;h表示输入短整型数据。3.4.2格式化输入函数scanf类型【例3-6】分析下面程序#includestdio.hvoidmain(){charc;inta,b;floatx,y;doubledx,dy;printf(1.Inputa,b(100-200):);scanf(%d%d,&a,&b);printf(a=%d,b=%d\n,a,b);printf(2.Inputa,b(100,-200):);scanf(%d,%d,&a,&b);printf(a=%d,b=%d\n,a,b);printf(3.Inputa,b,c(100-200A):);【例3-6】分析下面程序scanf(%d%d%c,&a,&b,&c);printf(a=%d,b=%d,c=%c\n,a,b,c);printf(4.Inputa,b,c(100,-200,9:);scanf(%d,%d,%c,&a,&b,&c);printf(a=%d,b=%d,c=%c\n,a,b,c);printf(5.Inputa,c,b(100A-200):);scanf(%d%c%d,&a,&c,&b);printf(a=%d,b=%d,c=%c\n,a,b,c);printf(6.Inputa,b(1112222):);scanf(%3d%4d,&a,&b);printf(a=%d,b=%d\n,a,b);printf(7.Inputa,b(1112223333):);【例3-6】分析下面程序scanf(%3d%*3d%4d,&a,&b);printf(a=%d,b=%d\n,a,b);printf(8.Inputx,y(3.141592631415926):);scanf(%f%f,&x,&y);printf(x=%f,y=%f\n,x,y);printf(9.Inputdx,dy(3.141592631415926):);scanf(%lf%lf,&dx,&dy);printf(dx=%lf,dy=%lf\n,dx,dy);printf(10.Inputx,c,y(3.1415926A31415926):);scanf(%f,%c,%f,&x,&c,&y);printf(x=%f,y=%f,c=%c\n,x,y,c);}【例3-6】分析下面程序运行结果【分析】默认空格作为分隔符。自定义逗号“,”作为分隔符。输入字符给变量c时,前面不能使用分隔符,因为分隔符也是字符,所以直接在-200后面输入字符A。为了避免默认分隔符可以被字符型变量(%c可以接受所有字符,包括转义字符)接收,采用自定义分隔符。不用分隔符的情况。由于字符A区别于数字字符,所以系统可以识别并分隔数据。【分析】采用长度限制,3个数字字符111和4个数字字符2222分别输入给变