? 第一章 C语言概述
? 第二章 数据类型、运算符与表达式
? 第三章 最简单的 C程序设计
? 第四章 逻辑运算和判断选取控制
? 第五章 循环控制
? 第六章 数组
? 第八章 编译预处理
? 第九章 指针
? 第十章 结构体与共用体
? 第十二章 文件的基本操作
? 第十三章 位运算
§ 3.3 赋值语句
由赋值表达式加分号 ;构成,与其它高级
语言相比有以下不同点,
?,=”为一运算符,由此,构成一赋值表达式,可
出现于表达式能出现的任何地方,
if ( (a=b)>0) t=a;
§ 3.4 数据输出
前面已论述, C语言本身无输入 / 出语句,
由函数实现,如 printf.等。
一般,C语言提供了一些标准的输入 /出
函数 –––系统函数。
形式, putchar (c );
功能, 向终端 (一般为显示器 )输出一个字符,
其中 c为 字符型或整型变量
注意, 用该函数时,须用预编译命令,
#include "stdio.h "
3.4.1 putchar 函数 —字符输出函数
例, #include "stdio.h"
结果, BOY
main( )
{ char a,b,c;
a='B' ; b='O' ; c='Y';
putchar(a); putchar(b); putchar (c );
}
putchar(a); putchar(' \n '); putchar(b); putchar(' \n ');
putchar(c); putchar(' \n ');
*利用 putchar还可输出其它转义字符
结果, B
O
Y
putchar(' \101 '); 输出 A
putchar(' \ ’ ' ); 输出’
putchar(' \015 '); 输出 ↙
*若将最后一行改为,
3.4.2 printf 函数 ––格式输出函数
一,printf的一般形式
是 C语言中使用得最多的一种输出函数,它可一
次按格式输出多个不同类型的数据。
printf(格式控制序列,输出表列 );
输出表列 ––– 用“,”号隔开的变量或表达式序列,
其变量的值按对应的格式控制符所
指定的格式输出。
格式控制序列 –––用双引号,...”括起来的格式符
序列。
格式控制序列由格式说明符和普通字符组成。
2,普通字符
原样输出
1,格式说明符,
由 %加 –格式字符组成
如, %f,%d等
例, a=3; b=4;
printf("a=%d,b=%d",a,b);
输出结果, a=3,b=4
无论 a,b中位数多少,均为上述形式,
若,a=123,b=45
则,printf("a=%d,b=%d",a,b);
输出结果, a=123,b=45
而,printf("%d%d",a,b);
则输出结果为, 12345
二、格式字符
不同类型的数据输出,用不同格式字符,共有十种格式
1,d格式符 ––十进制整数输出。
(1) %d,按数据的实际长度输出。
(2) %md,m表示输出字段宽度。若实际位数
<m,左边补空格。
如, int i=12345;
printf("i=%10d\ni=%d",i,i);
则输出结果为,
i= 12345
i=12345
如直接用 %d,则将出错。
(3) %ld,输出长整型数
如要指定宽度,则用 %mld即可。
例, long a=1234567l;
printf(" %ld",a);
2,o格式符 ––– 按八进制形式输出,
1 1 11 11 11 11 11 11 11
以 1的补码形式
int a= –1;
printf(" %d,%o",a,a);
则输出结果,
–1,177777
注, 连符号位一起组成八进制数输出
特例, –1存于 int单元
如以长整型输出,在 %后加 l,也可指定宽度 m,%mo
若 a= ?65537;
printf("%d,%o",a,a);
则输出结果为,
–1,177777
3,x格式符 –––以十六进制形式输出整数,
例, int a= –1;
printf("%x,%o,%d”,a,a,a)
输出结果,
ffff,177777,–1
例, main( )
{ unsigned int a=65535;
int b= –2;
printf ("a=%d,%o,%x,%u\n",a,a,a,a);
printf ("b=%d,%o,%x,%u\n",b,b,b,b);
}
4,u格式符 –––无符号格式输出整数,
a=–1,177777,ffff,65535
11 11 11 11 11 11 11 11
11 11 11 11 11 11 11 11
a=65535
b= –2
b=–2,177776,fffe,65534
运行结果为,
5,c格式符 –––输出一个字符,
注, ? 若有一整型变量,其值在 0~255之间,则可以
字符形式输出,
? 一个字符型变量亦可以一个整型数据输出,
char c=' a';
printf("%c",c);
例,main ( )
{ char c='a';
int i=97;
printf ("%c,%d\n",c,c);
printf ("%c,%d\n",i,i);
}
运行结果为,
a,97
a,97
也可以指定输出字符宽度,如果有
print ("%3c",c)
则输出," a ",即 c变量输出占 3列,前 2列补空格,
6,s格式符 –––用来输出一个字符串,
允许一定的编辑即允许 %ms,%–ms,%m.ns,
%–m.ns四种形式,每一形式的意义如下,
例, printf("%s","CHINA");
结果, CHINA
(1)%ms,输出的字符串占 m列,如字符串本身长度
大于 m,则突破 m的限制,将字符串全部输出。若
串长小于 m,则左补空格。
(2)%–ms,如果串长小于 m,则在 m列范围内,字
符串向左靠,右补空格。
例, int a=12345;
printf("a=% ?10d,%d",a,a);
结果输出,a=12345,12345
(3) %m.ns,输出占 m列,但只取字符串中左端 n个字
符。这 n个字符输出在 m列的右侧,左补空格。
(4) %–m.ns,其中 m,n含义同上,n个字符输出在 m
列范围的左侧,右补空格。如果 n>m,则 m自动取
n值,即保证 n个字符正常输出。
例, char a[ ]="abcdef" ;
printf("a=%10.3s,%3.5s",a,a);
结果输出,a= abc,abcde
7,f格式符 –––以小数形式输出单、双精度实数,有
以下几种形式,
%f,不指定字段宽度,由系统自动指定,使整数部
分全部如数输出,并输出 6位小数。
%f %m.nf %–m.nf
%m.nf,指定输出的数据共占 m列,其中有 n位小
数。如果值长度小于 m,则左端补空格。
%–mn.f,与 %m.nf基本相同,只是使输出的数值
向左端靠,右端补空格。
例, float a=123.456;
printf("a=%f,%5.2f,%10.4f",a,a,a);
结果输出,
a=123.456001,123.46,123.4560,
注意:小数点占一位。
8,e格式符 –––以指数形式输出单,双精度实数基本形
式, %e
结果, 1.23456 共 13列
6例 5例
可有 %m.ne和 %–m.ne的形式
9,g格式符 ––根据实数大小自动选择 f格式,或 e格
式输出单双精度实数。
e+002
例, printf (" %e ",123.456)
10,%格式符 ––输出百分号本身。
表 3.1 printf格式字符总结 ( printf(,%<格式字符 >”,<变量名 >)
格式字符
d 以带 符号的十进制形式输出整数 (正数不输出符号 )
o
x
u
c
s
f
e
g
以 8进制无符号形式输出整数 (不输出前导符 0)。
以 16进制无符号形式输出整数 (不输出前导符 0x)。
以无符号 10进制形式输出整数。
以字符形式输出,只输出一个字符。
说明
输出字符串。
以小数形式输出单、双精度数,隐含输出 6位小数。
以标准形式输出单、双精度数,数字部分小数位数为 6位。
选用% f或 %e格式中输出宽度较短的一种格式,
不输出无意义的 0。
许多情况与具体机器或系统有关,最好机器上一试。
表 3.2 附加格式说明字符
字符 说明
用于长整型整型,可加在格式符 d、
o,x,u前面。
数据最小宽度
对实数,表示输出 n位小数; 对字
符串,表示截取的字符个数。
输出的数字或字符在域内向左靠。
m(代表一个正整数 )
.n(代表一个正整数 )
–
字母 1
§ 3.5 数据输入
系统提供了若干函数,以提供从标准输入设备 (键
盘 )上输入数据,
3.5.1 getchar 函数
本节先介绍两个输入函数,
形式, getchar( )
功能, 从标准输入装置 (键盘 )上输入一个字符
要求, 有 #include "stdio.h"预编译命令
例, #include "stdio.h"
main ( )
{ char c;
c=getchar ( );
putchar (c );
}
3.5.2 scanf函数
功能, 在标准输入装置 (键盘 )上按指定格式
输入各种类型的数据
地址表列 –––变量的地址或字符串首地址。
形式, scanf(格式控制序列,地址表列 )
格式控制序列 –––同 printf(…..)
用 &(变量名 )表示取 <变量名 >的地址
如, &a,&b等等。
例, main( )
{ int a,b,c;
scanf(" %d%d%d ",&a,&b,&c);
prinft(" %d,%d,%d\n," a,b,c);
}
结果 3,4,5
运行,机器等待你输入,
3 4 5↙
注意, 1.scanf函数采用地址量接受数据。
2,数据之间的间隔为 ↙,Tab,空格,不能
为“,”,
3,允许在格式符中插入附加字符。格式字
符及附加字符的定义如下表 3.3和表 3.4
表 3.3 scanf格式字符
格式字符
d 用来输入十进制整数。
o
x
c
s
f
e
用来输入八进制整数。
用来输入十六进制整数。
用来输入单个字符。
说明
用来输入字符串, 将字符串送到一个字符数组中,
在输入时以非空白字符开始, 以第一个空白字符结
束 。 字符串以串结束标志 ‘ \0’作为其最后一个字符 。
用来输入实数,可以用小数形式或指数形式输入。
以 f作用相同,e与 f可以互相替换。
表 3.4 scanf附加的格式说明字符
字符 说明
用于输入长整型数据 (可用% ld,%lo,
%lx),以及 double型数据 (用 %lf或 %le)。
用于输入短整型数据 (可用 %hd,%ho,
%hx)。
指定输入数据所占宽度 (列数 )。
表示本输入项在读入后不赋给相应的变量
h
域宽 (为一正整数 )
*
l
4,对于输入 unsigned型数据,不用 %u,而用 %d,
%o,%x,
5,指定数据长度时,系统自动截取。
scanf(" %3d%3d ",&a,&b);
例如, int a,b
printf("a=%d,b=%d",a,b)
则当输入 123456789 后
显示,a=123,b=456
7,输入数据不能规定精度,
6,在 %后加,*”表示跳过相应的数据
则当输入为 12 345 67↙
则 a?12 b?67
scanf("%2d %*3d %2d",&a,&b);
scanf (" %7.2f ",&a);是错误的
8,在格式控制中除格式说明符外若还有其它字符,
则应按顺序原样输入。
例, scanf(" %d,%d",&a,&b);
这必须输入, 21,28↙
又如, scanf("a=%d,b=%d,c=%d",&a,&b,&c);
必须这样输入, a=34,b=58,c=100
提示, 输入格式要求比较严格,稍有疏忽,
就会出错。
例, int a,b
scanf(" %d,%d ",&a,&b);
printf("a=%d,b=%d",a,b);
则结果显示,a=12345,b=23266
显然 b的结果是错误的。
若输入,12345↙ (或 12345 23456↙ )
应输入,12345,23456↙
§ 3.6 程序举例
例 1,输入三角形三边,求三角形面积。
程序如下,
/*exp41.c*/
#include <stdio.h>
#include <math.h>
main()
{ float a,b,c,s,area;
printf("Please imput three sides' length:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("The area of triangle is %5.2f",area);
if ((a+b)>c && abs(a-b)<c) /*三角形构成条件 */
{
}
else
printf("Error sides!");
}
Please imput three sides' length,
3,4,5?
The area of triangle is 6.00
运行结果,
例 2,当 b2–4ac>0时,求 ax2+bx+c=0的两个根。
例 1,输入一个大写字母,要求系统改为小写字母输出。
练习,