03第三章 顺序结构
- 格式:doc
- 大小:83.00 KB
- 文档页数:7
第三章顺序结构程序设计一、输出函数printf的使用使用的格式:printf(“输出格式串”,表达式表); /*printf要小写*/重点掌握输出格式符① 格式符:%d 以普通整型输出(不可以写成%D)%md 以普通整型输出,数据占m位,右对齐%+md 以普通整型输出,数据占m位,右对齐(正数的前面有+号)%-md 以普通整型输出,数据占m位,左对齐%hd 以短整型输出%ld(或%Ld) 以长整型输出%u 以无符号整型输出%o 以八进制形势输出%x(或%X) 以十六进制形势输出%f 以单精度小数形势输出,点后6位小数%lf(或%Lf或%f) 以双精度小数形势输出,%±m.nf 以单精度小数形势输出,点后n位小数,且进行四舍五入%.nf 以单精度小数形势输出,点后n位小数,且进行四舍五入%c 以字符形式输出%s 以字符串形式输出说明:以上的常用格式符必须和后面的变量一一对应,并且后面的变量是什么类型前面就必须用相应的格式符例:int a=-2;unsigned int b=30;float c=3.1456;printf(“%d%u%5.2f”,a,b,c); 问:输出结果是什么?(-230 3.15)②普通字符普通字符原样输出,它不控制变量的输出。
printf(“a=%d,b=%u,c=%5.2f”,a,b,c); 问:输出结果是什么?③转义字符\n 回车且换行\r 回车但不换行\b 退一个字符\t 走一个制表位(8个字符)\\ 转译成\\’转译成’\”转译成”%% 转译成%\ddd 转译成1~3位八进制所对应的ascii码值所代表的字符\xdd 转译成1~2位十六进制所对应的ascii码值所代表的字符二、输入函数scanf的使用格式:scanf(“格式串”,变量地址列表);重点掌握输入格式(有格式符和普通字符,没有转义字符)① 格式符:%d 以普通整型输入%ld(%Ld) 以长整型输入%hd 以短整形输入%md 取整型的m位%u 以无符号型输入%o 以八进制输入%x(%X) 以十六进制输入%f 以单精度小数输入%lf(%Lf) 以双精度小数输入%mf 以单精度小数输入(但是不能规定它的精度。
第三章顺序结构程序设计3.1 基本要求z掌握C语言中使用最多的一种语句——赋值语句的使用方法。
z掌握各种类型数据的输入输出的方法,并能正确使用各种格式转换符。
z掌握文件包含预处理命令#include。
3.2 内容小结本章主要介绍了一些为编写简单程序所必须的语句及基本的输入输出方法。
它们是C语言中5类基本语句:控制语句、函数调用语句、表达式语句、空语句和复合语句。
格式输入输出函数scanf( )和printf( ):在C语言中没有专用的输入输出语句,但可通过调用输入输出函数及C系统提供的9种格式字符,进行各种类型数据、各种格式的输入输出。
单个字符的输入输出函数getchar( )和putchar( )。
文件的包含:函数是C程序的构成单元,C程序中的函数调用可分为两类,本源程序中函数的调用和非本源程序中函数的调用,如是后者需用#include 文件包含预处理命令把该函数所在的源文件包含到本源文件中来。
3.3 典型例题分析z例题1 printf( )函数的功能main( ){ int a , b;a=10;b=25;printf(“a=%d b=%d\n”,a,b);printf(“a+b=%d\na-b=%d\n”,a+b,a-b);}运行结果:a=10 b=2529a+b=35a-b=-15从上例中可以看出,转换说明符不仅规定了输出格式,而且也决定了输出项在整个输出信息中的位置。
此外,从上例也可以看出,输出项还可以是运算表达式,这时输出的是它的运算结果值。
z例题2 scanf( )函数的功能main( ){ int x, y;printf(“Enter integer x:”);scanf(“%d”,&x);printf(“Enter integer y:”);scanf(“%d”,&y);printf(“x+y=%d\n”,x+y);printf(“x-y=%d\n”,x-y);}该程序是以人机对话方式给变量x和y赋值,它的某次运行情况如下所示:Enter integer x:16〈CR〉Enter integer y:25〈CR〉x+y=41x- y=-9其中划有下横线的部分是从键盘打入的字符,其中〈CR〉表示回车键。
第三章顺序结构C++的程序采用了结构化程序设计.结构化程序设计要求的顺序、选择、循环的控制结构,使编写的程序结构清晰。
顺序结构就是按照语句的先后顺序来执行的方式。
第一节赋值语句赋值语句的一般形式: <变量名>= <表达式>变量名必须在变量说明部分已经定义过。
“=”与“==”(两个等号连接在一起)的区别:“=”赋值号是将其右边的表达式的值赋给左边的变量。
例如:X=X+1是将X的当前值加上1,再赋给X。
而“==”双等号是两边值比较的结果。
赋值号左边不能是表达式、常量,只能是变量名。
表达式是由常量、变量、函数、运算符和圆括号组成的式子。
应用举例:Y=0.5;X=Y;X=Y+2.5;在C++中对于赋值语句提供了缩写的形式,即当一变量既出现在赋值符号的左边又出现在右边时,可以缩写:x=x*y; 缩写为: x*=y;x=x+y; 缩写为: x+=y;其他的算术运算“-”、“/”、“%”都可依照同样的规则在赋值中缩写。
缩写格式通常更为有效,可读性也比较强。
根据每个表达式所得的值的类型,表达式可分为数值表达式(值是实型或整型)、字符表达式(值是字符型)、和布尔表达式(值是布尔型),单独一个常量、一个变量或一个函数都可看作是简单的表达式。
赋值语句的功能:首先计算表达式的值,再赋给赋值号左边的变量。
对任意一个变量必须先赋值,然后才能引用,否则未赋值的变量将以一个随机值参与运算。
另外需要强调一点的是赋值构成了一个表达式,因而它是有值的,赋值表达式的值为赋值符左边表达式的值。
例如:cout<<(i=1)<<endl;将输出1,与此同时i也将被赋值为1。
[例3.1]关于变量赋值的应用。
交换两个变量的值。
程序如下:#include<iostream>using namespace std;int main (){ int a=3,b=2;cout<<"a = "<<a<<" "<<"b = "<<b<<endl;//输出未交换的值a = a+b;b = a-b;a = a-b;cout<<"a = "<<a<<" "<<"b = "<<b<<endl;//输出交换后的值system("pause");return 0;}分析:用下表说明程序的运行情况. 在程序的第一行,将3赋给a,将2赋给b.第二行输出变量a、b的值. 第三行将a和b的当前值相加,其和赋给a;即对变量a的值更新.第四行用a的当前值减去b的当前值,再赋给b,对b的值进行更新.同理,下一行对a进行更新程序中整型变量是分别赋值 3,2 ,接着a的值加b的值为 5,仍赋给a.a的值改为5,再接下去的两条赋值语句同样使b的值改为3.a的值又改为2.最后输出的a,b的值分别为2,3.交换两个变量的值的常用方法是:假如有A、B两盘磁带,分别装有两种不同的内容。
第三章顺序结构3.30 编写程序,把560 分钟换算成用小时和分钟表示,然后进行输出。
※程序如下※main( ){int hour,minute;hour=560/60;minute=560%60;printf("hour=%d,minute=%d",hour,minute);}3.31 编写程序,输入两个整数:1500 和350,求出它们的商数和余数并进行输出。
※程序如下※#include<stdio.h>main( ){int numl,num2,i,j; /* 定义变量i—商,j —余数*/printf("input num1 and num2:\n");scanf("%d%d",&num1,&num2);i=n}3.32 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。
※程序如下※main( ){double a,b,c,average=0;printf("input a,b,c(double):\n");scanf("%lf%lf%lf",&a,&b,&c);average=(a+b+c)/3;average=average*10;average=average+0.5;average=(int)average;average=average/10;printf("average=%lf",average);}3.33编写程序,读入三个整数给a, b , c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中的值给a。
※程序如下※main( ){int a,b,c,t=0; printf("input ab c:\n"); scanf("%d%d%d",&a,&b,&c); t=c;c=b;b=a;a=t;printf("a=%d b=%d c=%d",a,b,c);}dO );并输入当前的日第四章 选择结构4.21 当 a>0 时,请将以下语句改写成 switch 语句。
第三章顺序结构按语句出现的顺序逐条执行,由这样的语句构成的程序结构称为顺序结构。
3.1语句赋值语句在赋值表达式后加一个“;”,构成赋值语句。
复合语句1.形式{语句1 语句2 ······语句n}2.说明①一个复合语句在语法上视为一条语句例:{char a1='M', a2='m';printf("%c\n", (a1, a2) );}可以理解为一条语句②复合语句“ } ”后不加分号③花括号内的语句数量不限空语句只有一个分号,如:main(){ ;}执行时不产生任何操作。
3.2数据输出1.输出:计算机内部→计算机外部设备的操作2.输入:计算机外部设备→计算机内部3.输入输出函数:C语言本身没有输入输出语句,通过调用标准库函数中提供的输入和输出函数来实现输入和输出。
#include<stdio.h>3.2.1 printf函数的一般调用形式1.printf函数的调用形式printf(格式控制,输出项1,输出项2,···)加上“;”,构成输出语句例如:printf( “a = %d, b = %d” , a, b);2.说明①格式控制:字符串形式,指定输出格式②输出项:用逗号隔开的变量,常量或表达式※printf可以没有输出项:printf(格式控制),输出结果就是格式控制中的固定字符串。
如:printf(“OK!”);3.格式控制串普通字符:原样输出格式字符:%[修饰符]格式字符,按照指定的格式输出数据转义字符:输出特定字符,如\n表示换行3.2.2printf函数中常用的格式说明1.格式字符格式字符说明%d 有符号十进制整数%u 无符号十进制整数%o(O) 无符号八进制整数%x(X) 无符号十六进制整数%f 以小数形式输出单精度(双精度实数),默认6位小数%e(E) 以指数形式输出实数,小数点前有一位有效数字,小数部分占6位,符号占一位,指数部分占3位,123.456以%e控制输出,显示是:1.234560e+002 %c 一个字符%s 一个字符串% 也就是%%,输出一个%2.输出数据所占的宽度说明人为控制输出数据所占的宽度(1)在%和格式字符之间插入一个整数常数来指定输出的宽度①n < 数据实际宽度:自动突破,保证数据完整输出②n >例:int k = 1234;float f = 123.456;printf(“%d\n”,k);printf(“%6d\n”,k);printf(“%2d\n”,k);(2)对于float和double类型的实数,用“n1.n2”的形式来指定输出宽度n1指定输出数据的宽度(包括小数点)n2指定小数点后小数位的位数①小数位> n2:截去右边多余的小数,并对截去部分的第一位小数做四舍五入float f = 123.456;printf(“%f\n”,f);printf(“%12.2f\n”,f);②小数位< n2n2printf(“%12.5f\n”,f);③n1 < 整数位数+ 小数点+ n2:自动突破printf(“%2.5f\n”,f);④n1 > 整数位数+ 小数点+ n2printf(“%12.5f\n”,f);⑤“. n2”格式:不指定总宽度,仅指定小数部分的输出位数,由系统自动突破,按照实际宽度输出printf(“%.5f\n”,f);⑥“n1.0”或“. 0”格式:不输出小数点和小数部分printf(“%12.0f\n”,f);printf(“%.0f\n”,f);3.输出数据左对齐格式:%-加格式字符printf(“%-6d\n”,k);printf(“%-12.2f\n”,f);4.使输出数据总带+ 号或–号格式:%+加格式字符printf(“%+-6d%+-12.2f\n”,k,-f);3.2.3 使用printf函数时的注意事项(1)数据之间用逗号、空格或回车作为间隔符printf(“%d%d%f\n”,k,k,f);(2)格式说明个数与输出项个数要相同,类型要匹配。
①类型不一一对应匹配:编译不报错,不能正确输出②格式说明个数< 输出项个数:多余输出项不输出③格式说明个数> 输出项个数:输出无意义数字(3)尽量不要在输出语句中改变输出变量的值printf(“%d,%d\n”,k,++k);已知矩形的长,宽,高分别为25,10,5,求矩形的体积并输出。
例:1.(2009年3月选择第15题)程序段的输出结果是()int x=12 ;double y=3.141593;printf(“%d%8.6f”,x,y);A )123.141593 B)12 3.141593 C)12,3.141593 D)123.14159302.2007年4月选择第19题)有以下程序,其中%u表示按无符号整数输出main(){unsigned int x=0xFFFF; /* x的初值为十六进制数*/printf(“%u\n”,x);}程序运行后的输出结果是A)-1 B)65535 C)32767 D)0XFFFF3.main(){ char a1='M', a2='m';printf("%c\n", (a1, a2) );}以下叙述中正确的是A.程序输出大写字母MB.程序输出小写字母mC.格式说明符不足,编译出错D.程序运行时产生出错信息4.int a,b,c;a=1;b=2;c=3;printf(“%d,%d,%d”,(a,b,c),b,c);输出结果5.main( ){int x=102,y=012;printf(“%2d,%2d\n”,x,y);}执行后输出结果是()A)10,01 B)002,12 C)102,10 D)02,103.3 数据输入3.3.1 scanf函数的一般调用形式1.输入函数scanf(格式控制,输入项1,输入项2,···)加上“;”,构成输入语句例:scanf(“%d%f%lf”, &k, &a, &y);3.格式控制①格式:%加格式字符②作用:指定输入时的数据转换格式3.3.2 scanf函数中常用的格式说明格式字符说明%d 有符号十进制整数%u 无符号十进制整数%o 无符号八进制整数%x 无符号十六进制整数%f(lf) 以带小数点的数学形式或指数形式输入浮点数(单精度数用f,双精度数用lf)%e(le) 同上%c 一个字符%s 一个字符串说明:(1)若格式说明与输入项的类型不一一对应匹配,则不能正确输入,编译时也不会报错。
①格式说明个数< 输入项:多余的输入项无法得到正确的输入值①格式说明个数> 输入项:多余的数据作废(2)在格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可对实数指定小数位的宽度。
3.3.3 通过scanf函数从键盘输入数据1.输入数值数据输入的数据之间必须用空格、回车、制表符(Tab键)等间隔符隔开,间隔符个数不限。
例:int k;float a;double y;scanf(“%d%f%le”, &k, &a, &y);要给k赋值10,a赋值12.3,y赋值1234567.892.指定输入数据所占的宽度在格式字符前加入一个正整数指定输入数据所占的宽度。
例:scanf(“%3d%5f%5le”, &k, &a, &y);输入:123456.789.123用printf(“%d %f %f\n”,k,a,y);输出结果:123 456.700000 89.1200003.在格式控制字符串中插入其他字符普通字符:原样输入例:int x, y, z;scanf(“Please input x, y, z: %d%d%d”,&x,&y,&z);scanf(“%d,%d,%d”,&x,&y,&z);输入:12,34,56 正确12,34,56 正确12 ,34 ,56 错误1.若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d ”,&a,&b,&c);给a赋值1,给b赋值2, 给c赋值3, 以下输入形式中错误的是(u代表一个空格符)A)uuu1,2,3<回车> B)1u2u3<回车>C)1,uuu2, uuu3<回车> D)1,2,3<回车>2.设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:scanf("i=%d,f=%f",&i,&f);为了把100和765.12分别赋给i和f,则正确的输入为A) 100765.12 B) i=100,f=765.12C) 100765.12 D) x=100y=765.123.有以下程序main(){ int a1,a2;char c1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);printf(“%d,%c,%d,%c”,a1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的是为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b,则正确的输入格式是(以下代表空格,<CR>代表回车)A)12a34b<CR>B)12 a 34 b<CR>C)12,a,34,b<CR>D)12 a34 b<CR>1.由终端输入两个整数给变量x和y;然后输出x和y;交换x和y的值后,再输出x和y。
验证两个变量中的数是否正确地进行了交换。
2.输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,以便验证处理是否正确。