1、c语言程序设计 第四章 输入输出和简单的顺序结构第四章 格式化输入/输出和简单的顺序结构4.1 格式化输入和输出一、格式化输出1. printf函数的使用格式printf(格式字符串,参数1,参数2,参数n);说明:(1) 格式字符串中包含了普通字符和格式说明符。每个格式说明符以%开始,以一个转换符结束,在%和转换符之间可以使用一个或多个标志。(2) 参数是表达式(包括常量、变量、带运算符的表达式和有返回值的函数的调用)。(3) 每个格式说明符都用相应的参数值替换。格式说明符结尾的转换符将指示被格式化的数值类型:例如,f表示浮点数,c表示字符,d表示十进制整数。2. 转换符 表4-1 用于pr
2、intf的转换符(实例均在VC6.0环境下运行)转换符类型举例%d或%i有符号十进制整数int a=-2009,b=-0x123;printf(a=%i,b=%d,%dn,a,b,0123);输出:a=-2009,b=-291,83%x或%X十六进制整数int a=164,b=-164;printf(a=%x,b=%Xn,a,b);输出:a=A4,b=ffffff5c%o八进制整数int a=164,b=-164;printf(a=%o,b=%on,a,b);输出:a=244,b=%u无符号十进制整数int a=164,b=-164;printf(a=%u,b=%un,a,b);输出:a=16
3、4,b=unsigned u1=182,u2=-182;printf(u1=%d,u1=%un,u1,u1);printf(u2=%d,u2=%un,u2,u2);输出:u1=182,u1=182u2=-182,u2=%c字符char ch=a;printf(ch=%c,ch=%xn,ch,ch);输出:ch=a,ch=61%s字符串printf(nine times %s.,out of ten.);printf(nine times out of ten.n);输出:nine times out of ten.nine times out of ten.%f定点浮点数float f=123
4、.1;double d=123.1;printf(f=%f,d=%fn,f,d);输出:f= f=123.,d=123.说明:转换符f打印一个浮点数的整数部分和6位小数。%e或%E指数浮点数float f=123.1;double d=123.1;printf(f=%e,d=%En,f,d);输出:f=1.e+002,d=1.E+002说明:转换符e按规范化指数形式(科学记数法)打印浮点数,共13位,其中字母“e”占1位,指数部分占4位(1位是符号位),小数部分占据6位,整数数字和小数点各占1位。%g或%G通用浮点数(e和f中较短的)%p(相当于%X)打印变量的地址int a;printf(&
5、a=%#p,&a=%#Xn,&a,&a);输出:&a=0X0012FF7C,&a=0X12FF7C%打印%int a=15,b=-2;printf(%d%d=%dn,a,b,a%b);输出:15%-2=13. 标志 表4-2 用于printf的标志标志目的举例-使数据左对齐,默认情况下数据右对齐+打印正数的符号(不管是否使用+,负数打印时总带符号)int a=12;printf(a=%+d,a=%dn,a,a);输出:a=+12,a=12宽度m打印的数据(包括整数、字符和字符串)占m个位置,当数据的实际位数不足m,根据对齐情况打印空格;否则按数据的实际位数打印 int a=123,b=1234
6、,c=-123;printf(a=%6d,b=%3d,c=%-6d.n,a,b,c);输出:a= 123,b=1234,c=-123 .0当打印整数、字符和字符串时,数据的实际位数小于指定宽度时,在左边的空位上补0(此时标志0和-冲突);否则按数据的实际位数打印int a=-123,b=1234,c=123;printf(a=%-06d,b=%03d,c=%06dn,a,b,c);输出:a=-123 ,b=1234,c=精度.n(1) 当打印整数时,如果整数的位数比n少,就在左边的空位上补0;否则按实际位数打印(2) 当打印浮点数时,如果浮点数的位数比n少,就在右边的空位上补0;否则按实际位数
7、打印(3) 当打印字符串时,如果字符串中字符个数比n少,就按实际字符数输出该串;否则就截断取字符串前n个字符打印int a=-;printf(a=%9d,a=%.9dn,a,a);输出:a= -,a=-double a=-123.1,b=123.1;printf(a=%f,a=%.8f,b=%.4fn,a,a,b);输出:a=-123.,a=-123.,b=123.1000l打印long数据或double数据,默认情况下用%f也能打印double数据long a=;printf(a=%d,a=%ldn,a,a);输出:a=,a=h打印短整型数据short a=12345;long b=;pri
8、ntf(%hd,a=%hd,b=%hdn,12345,a,b);输出:12345,a=-7616,b=-10617续表4-2#(1) #对于转换符x(X)、o添加前缀0x(0X)或0(2) #对于转换符f包含小数点int a=123;double d=123.5;printf(a=%#o,a=%#Xn,a,a);printf(d=%.0f,d=%#.0fn,d,d);输出:a=0173,a=0X7Bd=124,d=124.【例4.1】 宽度标志和精度标志用于打印整数。#include main() int a=-123,b=123; printf(a=%8d,a=%-8d,a=%3dn,a,a
9、,a); printf(a=%8.5d,a=%-8.5d,a=%3.5dn,a,a,a); printf(b=%x,b=%Xn,b,b); printf(b=%#x,b=%#Xn,b,b); printf(a=%x,a=%Xn,a,a); printf(b=%-#16.12x,a=%#16.12xn,b,a);【例4.2】 宽度标志和精度标志用于打印字符和字符串。#include main() char ch=a; printf(ch=%-5c,ch=%5cn,ch,ch); printf(%-7s,%7sn,CHINA,CHINA); printf(%-7.3s,%7.2sn,CHINA,C
10、HINA);【例4.3】 使用多种标志格式化输出浮点数。#include main() float f=-1.f; double d=-153.; double af=123.456e12; printf(f=%f,d=%fn,f,d); printf(f=%-11f,d=%6fn,f,d); printf(f=%-11.3f,d=%6.9fn,f,d); printf(d=%e,d=%En,d,d); printf(d=%18.6e,d=%2.4En,d,d); printf(f=%f,f=%e,f=%gn,f,f,f); printf(af=%f,af=%e,af=%gn,af,af,af
11、);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输入十进制整
12、数int a,b;scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);输入:-365 365输出:a=-365,b=365%x或%X输入十六进制整数int a,b;scanf(%x,%X,&a,&b);printf(a=%d,a=%xn b=%d,b=%xn,a,a,b,b);输入:a4,-a4输出:a=164,a=a4b=-164,b=ffffff5c%o用户输入八进制整数int a;scanf(a=%o,&a);printf(a=%d,a=%on,a,a);输入:a=-244输出:a=-164,a=%u输入十进制无符号整数unsigned u1,u2;scan
13、f(u1=%u, *u2=%u,&u1,&u2);printf(u1=%d, u2=%un,u1,u2);输入:u1=182, *u2=-182输出:u1=182, u2=%c输入字符char ch;scanf(ch: %c,&ch);printf(ch= %cn,ch);输入:ch: A输出:ch= A%s输入字符串需要用字符数组来保存输入串%f输入定点浮点数float f;double d;scanf(%f%lf,&f,&d);printf(f=%fnd=%fn,f,d);输入:123. -123.输出:f=123.d=-123.%e或%E输入指数浮点数double d1,d2;scanf
14、(%le %le,&d1,&d2);printf(d1=%fnd2=%en,d1,d2);输入:12.34e1 123.4 输出:d1=123.d2=1.e+002%g或%G等价于%f、%e或%E3. 标志表4-4 用于scanf的标志标志目的举例宽度m指定输入数据所占位数,遇空格或不可转换字符结束int a,b;scanf(%3d%2d,&a,&b);printf(a=%d,b=%dn,a,b);输入:输出:a=123,b=45输入:1234 5678输出:a=123,b=4*表示跳过输入int a,b;scanf(%3d%*2d%2d,&a,&b);printf(a=%d,b=%dn,a,
15、b);输入:输出:a=123,b=67输入:123 输出:a=123,b=67l用于转换符d、u、o、x(X)表示输入long整数;用于e(E)、f表示输入double实数long li;scanf(li: %ld,&li);printf(li=%dn,li);输入:li: -1234输出:li=-1234输入:li: -1234L输出:li=1234h用于d、u、o、x(X)表示输入short整数【例4.4】 输入字符数据时要注意的问题。 #include main() char c1,c2,c3; scanf(%c%c%c,&c1,&c2,&c3); printf(c1=%c,c2=%c,
16、c3=%cn,c1,c2,c3);4. scanf格式说明符的语法图4.2 常用库函数简介一、字符数据输入/输出函数C语言针对字符数据的输入/输出,向用户提供使用更为方getchar和putchar等函数。【例4.5】 getchar与putchar。#include main() char ch=101; putchar(ch); putchar(0x61); putchar(n); ch=getchar(); putchar(ch);【例4.6】 getche和getch。#include main() char ch1,ch2; printf(please press two key:n
17、); ch1=getche(); ch2=getch(); printf(youve pressed %c and %cn,ch1,ch2);说明:(1) getche与getchar函数的作用基本相似,都用于输入字符。差别在于,getche直接从键盘获取用户输入的字符,不等待用户按回车键,且getche还能将用户输入的字符回显在屏幕上。(2) getch函数与getche类似,差别在于,getche要回显输入字符,而getch不回显输入字符。二、常用数学函数简介1. 绝对值函数【例4.7】 abs和fabs函数。#include #include main() double d=-3.; f
18、loat f=3.1416f; int i=-3; double result; printf(d=%f, |d|=%fn,d,fabs(d); printf(f=%f, |f|=%fn,f,fabs(f); result=fabs(d+3.0); printf(%fn,result); printf(i=%d, |i|=%dn,i,abs(i); printf(|-2010|=%dn,abs(-2010);说明:(1) 要使用数学库函数,必须用#include指令包含头文件math.h。(2) abs返回一个整型表达式的结果的绝对值。(3) fabs返回一个浮点表达式的结果的绝对值。【课内思
19、考题4.1】 假设a、b、c都是double变量,如何用函数fabs表示|a+b|-|c|?2. 平方根函数【例4.8】 sqrt函数。#include #include main() int i=3; double d=3.0; double result=sqrt(d); printf(%f的平方根是%fn,d,result); printf(%d的平方根是%fn,i,sqrt(i);说明:无论整数还是浮点数的平方根一律可以用sqrt函数计算。【课内思考题4.2】 假设a、b、c都是double变量,如何用函数sqrt表示?sqrt(b*b-4*a*c)3. 三角函数【例4.9】 符号常量
20、的使用。#include #define PI 3.1416main() double r; double length,area; scanf(%lf,&r);length=2*PI*r; area=PI*r*r; printf(length=%f,area=%fn,length,area);说明:可以将一个程序中多次用到的常量通过#define指令用符号来表示。【例4.10】 sin、cos和tan函数。#include #include #define PI 3.main() double angle=30.0; double x; double result; printf(sin(%
21、.0f)=%fn,angle,sin(PI/180*angle); angle=60.0; printf(cos(%.0f)=%fn,angle,cos(PI/180*angle); angle=45.0; printf(tan(%.0f)=%fn,angle,tan(PI/180*angle);说明:使用三角函数求值时,需向这些函数提供弧度值,而非角度。例如求30度的正弦值,必须将30度转换成弧度,即。4. 反三角函数【例4.11】 asin、acos和atan函数。#include #include #define PI 3.main() double x; double result;
22、x=0.5; result=asin(x); printf(asin(%.1f)=%fn,x,result*180/PI); result=acos(x); printf(acos(%.1f)=%fn,x,result*180/PI); printf(atan(%.1f)=%fn,1.0,atan(1.0)*180/PI);说明:反三角函数的计算结果是弧度值,在程序中将弧度结果转换成了角度数。5. 对数函数和自然对数函数【例4.11】 log10和log函数。#include #include #define E 2.main() double d=10.0; printf(log10(%.1
23、f)=%fn,d,log10(d); printf(log(e)=%fn,log(E);说明:函数log10表示以10为底的对数函数,log表示以e为底的对数函数,即自然对数函数。5. 幂函数【例4.12】 pow函数。#include #include main() double n=-2.0; printf(%fn,pow(2.0,n);说明:提供给函数pow的第一个参数是底数,第二个参数表示指数,两个参数均为double。4.3 简单的顺序程序设计一、C语言程序的结构由于C编译器采用一种称为分段编译的技术,所以我们可以将C语言代码分解到多个程序文件中,这些程序文件分为两类,一类是以.h作
24、为扩展名的头文件,还有一类是以.c作为文件扩展名的源程序文件(每个源程序文件也称为一个编译单元)。二、语句分类1. 声明语句变量声明、类型声明和函数原型声明。通常将变量定义语句视为变量声明语句的一类。区别在于定义变量将引起系统对变量分配内存字节,而声明变量只是对定义在别处的变量进行引用性说明。2. 流程控制语句(1) 条件语句if语句、if-else语句和switch语句。(2) 循环语句while语句、do-while语句和for语句。(3) 流程转移语句break、continue、return和goto。3. 表达式语句(包括函数调用语句)4. 空语句5. 复合语句用把上述语句(包括复合
25、语句本身)括起来构成复合语句,也叫语句块。例如:int temp=x; x=y; y=temp;一个复合语句也可以包括在另一个复合语句中。复合语句的作用在于把多条语句变成语法上的一条语句!二、顺序程序设计【例4.13】 编写程序,键盘输入一个三位整数,逆序输出之。#include main() int num; int bw,sw,gw; scanf(%d,&num); gw=num%10; sw=num/10%10; bw=num/100; printf(%dn,gw*100+sw*10+bw);【例4.14】 交换两个变量的值。#include main() int x,y; int te
26、mp; scanf(x=%d,y=%d,&x,&y); temp=x; x=y; y=temp; printf(x=%d,y=%dn,x,y);【例4.15】 输入三角形的三边长,求三角形的面积。为简单起见,设输入的三边长a、b、c能构成三角形。根据海伦公式求三角形面积。海伦公式为:area=,s=。#include #include main() double a,b,c; double s; double area; scanf(%lf,%lf,%lf,&a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%.2fn,area);【课后作业2】 (1) 用C语言的数学函数表示下式:。(2) 输入一个华氏温度,要求输出摄氏温度。公式为输出要有文字说明,取2位小数。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1