第4章 输入输出和简单的顺序结构.docx
- 文档编号:6317403
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:18
- 大小:58.80KB
第4章 输入输出和简单的顺序结构.docx
《第4章 输入输出和简单的顺序结构.docx》由会员分享,可在线阅读,更多相关《第4章 输入输出和简单的顺序结构.docx(18页珍藏版)》请在冰豆网上搜索。
第4章输入输出和简单的顺序结构
第4章格式化输入/输出和简单的顺序结构
4.1格式化输入和输出
一、格式化输出
1.printf函数的使用格式
printf("格式字符串",参数1,参数2,…,参数n);
说明:
(1)格式字符串中包含了普通字符和格式说明符。
每个格式说明符以%开始,以一个转换符结束,在%和转换符之间可以使用一个或多个标志。
(2)参数是表达式(包括常量、变量、带运算符的表达式和有返回值的函数的调用)。
(3)每个格式说明符都用相应的参数值替换。
格式说明符结尾的转换符将指示被格式化的数值类型:
例如,f表示浮点数,c表示字符,d表示十进制整数。
2.转换符
表4-1用于printf的转换符(实例均在VC6.0环境下运行)
转换符
类型
举例
%d或%i
有符号十进制整数
inta=-2009,b=-0x123;
printf("a=%i,b=%d,%d\n",a,b,0123);
输出:
a=-2009,b=-291,83
%x或%X
十六进制整数
inta=164,b=-164;
printf("a=%x,b=%X\n",a,b);
输出:
a=A4,b=ffffff5c
%o
八进制整数
inta=164,b=-164;
printf("a=%o,b=%o\n",a,b);
输出:
a=244,b=37777777534
%u
无符号十进制整数
inta=164,b=-164;
printf("a=%u,b=%u\n",a,b);
输出:
a=164,b=4294967132
unsignedu1=182,u2=-182;
printf("u1=%d,u1=%u\n",u1,u1);
printf("u2=%d,u2=%u\n",u2,u2);
输出:
u1=182,u1=182
u2=-182,u2=4294967114
%c
字符
charch='a';
printf("ch=%c,ch=%x\n",ch,ch);
输出:
ch=a,ch=61
%s
字符串
printf("ninetimes%s.","outoften.");
printf("ninetimesoutoften.\n");
输出:
ninetimesoutoften.
ninetimesoutoften.
%f
定点浮点数
floatf=123.1;
doubled=123.1;
printf("f=%f,d=%f\n",f,d);
输出:
f=f=123.099998,d=123.100000
说明:
转换符f打印一个浮点数的整数部分和6位小数。
%e或%E
指数浮点数
floatf=123.1;
doubled=123.1;
printf("f=%e,d=%E\n",f,d);
输出:
f=1.231000e+002,d=1.231000E+002
说明:
转换符e按规范化指数形式(科学记数法)打印
浮点数,共13位,其中字母“e”占1位,指数部分
占4位(1位是符号位),小数部分占据6位,整数数
字和小数点各占1位。
%g或%G
通用浮点数(e和f中较短的)
%p(相当于%X)
打印变量的地址
inta;
printf("&a=%#p,&a=%#X\n",&a,&a);
输出:
&a=0X0012FF7C,&a=0X12FF7C
%%
打印%
inta=15,b=-2;
printf("%d%%%d=%d\n",a,b,a%b);
输出:
15%-2=1
3.标志
表4-2用于printf的标志
标志
目的
举例
-
使数据左对齐,默认情况下数据右对齐
+
打印正数的符号(不管是否使用+,负数打印时总带符号)
inta=12;
printf("a=%+d,a=%d\n",a,a);
输出:
a=+12,a=12
宽度m
打印的数据(包括整数、字符和字符串)占m个位置,当数据的实际位数不足m,根据对齐情况打印空格;否则按数据的实际位数打印
inta=123,b=1234,c=-123;
printf("a=%6d,b=%3d,c=%-6d.\n",a,b,c);
输出:
a=123,b=1234,c=-123.
0
当打印整数、字符和字符串时,数据的
实际位数小于指定宽度时,在左边的空位上
补0(此时标志0和-冲突);否则按数据的实
际位数打印
inta=-123,b=1234,c=123;
printf("a=%-06d,b=%03d,c=%06d\n",a,b,c);
输出:
a=-123,b=1234,c=000123
精度.n
(1)当打印整数时,如果整数的位数比n少,就在左边的空位上补0;否则按实际位数打印
(2)当打印浮点数时,如果浮点数的位数比n少,就在右边的空位上补0;否则按实际位数打印
(3)当打印字符串时,如果字符串中字符个数比n少,就按实际字符数输出该串;否则就截断取字符串前n个字符打印
inta=-123456;
printf("a=%9d,a=%.9d\n",a,a);
输出:
a=-123456,a=-000123456
doublea=-123.1,b=123.1;
printf("a=%f,a=%.8f,b=%.4f\n",a,a,b);
输出:
a=-123.100000,a=-123.10000000,b=123.1000
l
打印long数据或double数据,默认情况下用%f也能打印double数据
longa=1234567;
printf("a=%d,a=%ld\n",a,a);
输出:
a=1234567,a=1234567
h
打印短整型数据
shorta=12345;
longb=123456;
printf("%hd,a=%hd,b=%hd\n",12345,a,b);
输出:
12345,a=-7616,b=-10617
续表4-2
#
(1)#对于转换符x(X)、o添加前缀0x(0X)
或0
(2)#对于转换符f包含小数点
inta=123;
doubled=123.5;
printf("a=%#o,a=%#X\n",a,a);
printf("d=%.0f,d=%#.0f\n",d,d);
输出:
a=0173,a=0X7B
d=124,d=124.
【例4.1】宽度标志和精度标志用于打印整数。
#include
main()
{
inta=-123,b=123;
printf("a=%8d,b=%-8d,a=%3d\n",a,b,a);
/*a=-123,b=123,a=-123*/
printf("a=%8.5d,b=%-8.5d,a=%3.5d\n",a,b,a);
}
【例4.2】宽度标志和精度标志用于打印字符和字符串。
#include
main()
{
charch='a';
printf("ch=%-5c,ch=%5c\n",ch,ch);
printf("%-7s,%7s\n","CHINA","CHINA");
printf("%-7.3s,%7.2s\n","CHINA","CHINA");
}
【例4.3】使用多种标志格式化输出浮点数。
#include
main()
{
floatf=-1.2345675f;
doubled=-153.4567885;
doubleaf=123.456e12;
printf("f=%f,d=%f\n",f,d);
printf("f=%-11f,d=%6f\n",f,d);
printf("f=%-11.3f,d=%6.9f\n",f,d);
printf("d=%e,d=%E\n",d,d);
printf("d=%18.6e,d=%2.4E\n",d,d);
printf("f=%f,f=%e,f=%g\n",f,f,f);
printf("af=%f,af=%e,af=%g\n",af,af,af);
}
4.printf格式说明符的语法图
二、格式化输入
1.scanf函数的使用格式
scanf("格式字符串",&变量名1,&变量名2,&变量名3,…,&变量名n);
说明:
(1)格式字符串的说明同printf,由普通字符和格式说明符组成,普通字符原样输入。
(2)scanf格式字符串后面要列出若干变量的地址,每个变量用于保存用户在对应的格式说明符的位置上输入的数据。
(3)转换符将指示用户在该格式说明符的位置上输入的数据的数值类型:
例如,f表示浮点数,c表示字符,d表示十进制整数。
2.转换符
表4-3用于scanf的转换符(实例均在VC6.0环境下运行)
转换符
类型
举例
%d或%i
输入十进制整数
inta,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
输入:
-365365
输出:
a=-365,b=365
%x或%X
输入十六进制整数
inta,b;
scanf("%x,%X",&a,&b);
printf("a=%d,a=%x\nb=%d,b=%x\n",a,a,b,b);
输入:
a4,-a4
输出:
a=164,a=a4
b=-164,b=ffffff5c
%o
用户输入八进制整数
inta;
scanf("a=%o",&a);
printf("a=%d,a=%o\n",a,a);
输入:
a=-244
输出:
a=-164,a=37777777534
%u
输入十进制无符号整数
unsignedu1,u2;
scanf("u1=%u,*u2=%u",&u1,&u2);
printf("u1=%d,u2=%u\n",u1,u2);
输入:
u1=182,*u2=-182
输出:
u1=182,u2=4294967114
%c
输入字符
charch;
scanf("ch:
%c",&ch);
printf("ch=%c\n",ch);
输入:
ch:
A
输出:
ch=A
%s
输入字符串
需要用字符数组来保存输入串
%f
输入定点浮点数
floatf;
doubled;
scanf("%f%lf",&f,&d);
printf("f=%f\nd=%f\n",f,d);
输入:
123.456789-123.456789
输出:
f=123.456787
d=-123.456789
%e或%E
输入指数浮点数
doubled1,d2;
scanf("%le%le",&d1,&d2);
printf("d1=%f\nd2=%e\n",d1,d2);
输入:
12.34e1123.4
输出:
d1=123.400000
d2=1.234000e+002
%g或%G
等价于%f、%e或%E
3.标志
表4-4用于scanf的标志
标志
目的
举例
宽度m
指定输入数据所占位数,遇空格或不可转换字符结束
inta,b;
scanf("%3d%2d",&a,&b);
printf("a=%d,b=%d\n",a,b);
输入:
12345678
输出:
a=123,b=45
输入:
12345678
输出:
a=123,b=4
*
表示跳过输入
inta,b;
scanf("%3d%*2d%2d",&a,&b);
printf("a=%d,b=%d\n",a,b);
输入:
123456789
输出:
a=123,b=67
输入:
123456789
输出:
a=123,b=67
l
用于转换符d、u、o、x(X)表示输入long整数;用于e(E)、f表示输入double实数
longli;
scanf("li:
%ld",&li);
printf("li=%d\n",li);
输入:
li:
-1234
输出:
li=-1234
输入:
li:
-1234L
输出:
li=1234
h
用于d、u、o、x(X)表示输入short整数
【例4.4】输入字符数据时要注意的问题。
#include
main()
{
charc1,c2,c3;
scanf("%c%c%c",&c1,&c2,&c3);
printf("c1=%c,c2=%c,c3=%c\n",c1,c2,c3);
}
4.scanf格式说明符的语法图
4.2常用库函数简介
一、字符数据输入/输出函数
C语言针对字符数据的输入/输出,向用户提供使用更为方getchar和putchar等函数。
【例4.5】getchar与putchar。
#include
main()
{
charch='\101';
putchar(ch);
putchar(0x61);
putchar('\n');
ch=getchar();
putchar(ch);
}
【例4.6】getche和getch。
#include
main()
{
charch1,ch2;
printf("pleasepresstwokey:
\n");
ch1=getche();
ch2=getch();
printf("you\'vepressed%cand%c\n",ch1,ch2);
}
说明:
(1)getche与getchar函数的作用基本相似,都用于输入字符。
差别在于,getche直接从键盘获取用户输入的字符,不等待用户按回车键,且getche还能将用户输入的字符回显在屏幕上。
(2)getch函数与getche类似,差别在于,getche要回显输入字符,而getch不回显输入字符。
二、常用数学函数简介
1.绝对值函数
【例4.7】abs和fabs函数。
#include
#include
main()
{
doubled=-3.1415926;
floatf=3.1416f;
inti=-3;
doubleresult;
printf("d=%f,|d|=%f\n",d,fabs(d));
printf("f=%f,|f|=%f\n",f,fabs(f));
result=fabs(d+3.0);
printf("%f\n",result);
printf("i=%d,|i|=%d\n",i,abs(i));
printf("|-2010|=%d\n",abs(-2010));
}
说明:
(1)要使用数学库函数,必须用#include指令包含头文件math.h。
(2)abs返回一个整型表达式的结果的绝对值。
(3)fabs返回一个浮点表达式的结果的绝对值。
【课内思考题4.1】假设a、b、c都是double变量,如何用函数fabs表示||a+b|-|c||?
2.平方根函数
【例4.8】sqrt函数。
#include
#include
main()
{
inti=3;
doubled=3.0;
doubleresult=sqrt(d);
printf("%f的平方根是%f\n",d,result);
printf("%d的平方根是%f\n",i,sqrt(i));
}
说明:
无论整数还是浮点数的平方根一律可以用sqrt函数计算。
【课内思考题4.2】假设a、b、c都是double变量,如何用函数sqrt表示
?
3.三角函数
【例4.9】符号常量的使用。
#include
#definePI3.1416
main()
{
doubler;
doublelength,area;
scanf("%lf",&r);
length=2*PI*r;
area=PI*r*r;
printf("length=%f,area=%f\n",length,area);
}
说明:
可以将一个程序中多次用到的常量通过#define指令用符号来表示。
【例4.10】sin、cos和tan函数。
#include
#include
#definePI3.1415926
main()
{
doubleangle=30.0;
doublex;
doubleresult;
printf("sin(%.0f)=%f\n",angle,sin(PI/180*angle));
angle=60.0;
printf("cos(%.0f)=%f\n",angle,cos(PI/180*angle));
angle=45.0;
printf("tan(%.0f)=%f\n",angle,tan(PI/180*angle));
}
说明:
使用三角函数求值时,需向这些函数提供弧度值,而非角度。
例如求30度的正弦值,必须将30度转换成弧度,即
。
4.反三角函数
【例4.11】asin、acos和atan函数。
#include
#include
#definePI3.1415926
main()
{
doublex;
doubleresult;
x=0.5;
result=asin(x);
printf("asin(%.1f)=%f\n",x,result*180/PI);
result=acos(x);
printf("acos(%.1f)=%f\n",x,result*180/PI);
printf("atan(%.1f)=%f\n",1.0,atan(1.0)*180/PI);
}
说明:
反三角函数的计算结果是弧度值,在程序中将弧度结果转换成了角度数。
5.对数函数和自然对数函数
【例4.11】log10和log函数。
#include
#include
#defineE2.71828183
main()
{
doubled=10.0;
printf("log10(%.1f)=%f\n",d,log10(d));
printf("log(e)=%f\n",log(E));
}
说明:
函数log10表示以10为底的对数函数,log表示以e为底的对数函数,即自然对数函数。
5.幂函数
【例4.12】pow函数。
#include
#include
main()
{
doublen=-2.0;
printf("%f\n",pow(2.0,n));
}
说明:
提供给函数pow的第一个参数是底数,第二个参数表示指数,两个参数均为double。
4.3简单的顺序程序设计
一、C语言程序的结构
由于C编译器采用一种称为分段编译的技术,所以我们可以将C语言代码分解到多个程序文件中,这些程序文件分为两类,一类是以.h作为扩展名的头文件,还有一类是以.c作为文件扩展名的源程序文件(每个源程序文件也称为一个编译单元)。
二、语句分类
1.声明语句
变量声明、类型声明和函数原型声明。
通常将变量定义语句视为变量声明语句的一类。
区别在于定义变量将引起系统对变量分配内存字节,而声明变量只是对定义在别处的变量进行引用性说明。
2.流程控制语句
(1)条件语句
i语句、if-else语句和switch语句。
(2)循环语句
wile语句、do-while语句和for语句。
(3)流程转移语句
break、continue、return和goto。
3.表达式语句(包括函数调用语句)
4.空语句
5.复合语句
用{}把上述语句(包括复合语句本身)括起来构成复合语句,也叫语句块。
例如:
{
inttemp=x;
x=y;
y=temp;
}
一个复合语句也可以包括在另一个复合语句中。
复合语句的作用在于把多条语句变成语法上的一条语句!
二、顺序程序设计
【例4.13】编写程序,键盘输入一个三位整数,逆序输出之。
#include
main()
{
intnum;
intbw,sw,gw;
scanf("%d",&num);
gw=num%10;
sw=num/10%10;
bw=num/100;
printf("%d\n",gw*100+sw*10+bw);
}
【例4.14】交换两个变量的值。
#include
main()
{
intx,y;
inttemp;
scanf("x=%d,y=%d",&x,&y);
temp=x;
x=y;
y=temp;
printf("x=%d,y=%d\n",x,y);
}
【例4.15】输入三角形的三边长,求三角形的面积。
为简单起见,设输入的三边长a、b、c能构成三角形。
根据海伦公式求三角形面积。
海伦公式为:
area=
,s=
。
#include
#include
main()
{
doublea,b,c;
doubles;
doublearea;
scanf("%lf,%lf,%lf",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%.2f\n",area);
}
【课后作业2】
(1)用C语言的数学函数表示下式:
。
(2)输入一个华氏温度,要求输出摄氏温度。
公式为
输出要有文字说明,取2位小数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 输入输出和简单的顺序结构 输入输出 简单 顺序 结构