所谓数据的输入输出是从计算机角度出发的。
C语言本身没有I/O语句,所有I/O都由函数来实现。
C语言的标准库函数
由编译系统提供的一系列函数,以库形式存放在系统中,不是C语言文本的组成部分。
库函数已编译成目标文件(.obj),在连接阶段才与源程序编译成的目标文件相连接,生成可执行文件。
调用形式:
函数名(参数表)
注意在调用C语言库函数时,需要使用编译预处理命令#include <相关的头文件>,使相应的头文件包含到用户源程序中。
头文件
C语言中,输入输出用到的头文件是
#include <stdio.h> 或 #include “stdio.h”
常用头文件:
stdio.h 定义输入输出函数 string.h 定义字符串操作函数 math.h 定义sin、cos等数学函数
格式输入与输出
printf函数(格式输出函数)
printf函数的一般格式
格式:
printf( 格式控制,输出表列);
格式控制:用双引号括起来的字符串,包含两种信息
- 格式说明:%[修饰符]格式字符,指定输出格式
- 普通字符:原样输出
输出列表:要输出的数据,可以是变量或表达式,可以没有,多个时以“,”分隔)
比如下面的写法:
printf( “%d %d”,a,b); printf( “a=%d b= %d\n”,a,b);
格式字符
%d格式符:输出十进制整数,有3种用法
%d格式:按数据实际长度输出,数据范围 -32768~32767。2个字节
// %d 格式的 printf() 函数使用案例 #include <stdio.h> int main() { int a = 3, b = 4; printf("%d %d\n ", a, b); printf("a = %d, b = %d\n", a, b); return 0; }
运行结果:
3 4 a=3, b=4
格式说明通常用小写字母表示
%md格式:m指定输出字段的宽度
数据位数小于m,左端补空格,反之按实际输出。
int a=123,b=12345 ; printf(“%4d%4d ”,a ,b);
输出结果:
%ld格式:输出长整型数据
可以用%mld格式指定输出列宽
long c=135790; printf(“%ld\n”,c); printf(“%8ld”,c);
o格式符:八进制输出整数
是将内存中的二进制位整个按八进制输出,所以输出值没有符号。
可以指定输出宽度%mo,长整型可以用%lo格式输出。
x格式符:十六进制输出整数
同o格式符,无符号,即无负十六进制数。
可以指定输出宽度%mx ,长整型可以用%lx格式输出。
int a= -1; printf(“%d , %o , %8o , %x ”, a , a , a , a);
u格式符:十进制输出unsigned型数据
int型可以用%u格式输出,unsigned型也可以用%d、%o和%x格式输出。
#include <stdio.h> int 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); return 0; }
c格式符:输出一个字符
值在0~255的整数,可以用%c形式输出为字符
//【字符数据的输出】 #include <stdio.h> int main() { char c = 'a’; int i = 97; printf("%c, %d\n", c, c); printf("%c, %d\n", i, i); return 0; }
//【字符串的输出】 #include <stdio.h> int main() { printf("%3s, %7.2s, %.4s, %-5.3d\n", "CHINA","CHINA", "CHINA", "CHINA"); getchar(); return 0; }
f格式符:输出实数
%f格式:整数部分全部输出,小数6位。可以有非有效数字输出,因为单精度有效位7位,双精度16位。
%m.nf格式:占m列,其中n位小数,左补空格。
% -m.nf格式:右补空格
e格式符:指数形式输出实数
%e格式:不指定m和n,小数6位,指数部分共5位,其中e和指数符号各1位,指数值3位。
%m.ne和% -m.ne格式:m、n、-的含义同前面。没有n时,自动=6。
g格式符:输出实数
可以自动根据数值大小选择 f 或 e 格式(选列少的)
不输出无意义的零
scanf 函数(格式输入函数)
一般形式
格式:
scanf(格式控制,地址表列 );
- 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束
- 格式控制:含义同printf函数
- 地址表列:变量地址或字符串地址,地址间“,”分隔。
- 强调:地址列表中每一项必须以取地址运算符&开头。
// 【用scanf函数输入数据】 #include <stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); printf("%d, %d, %d\n", a, b, c); return 0; }
案例:输入三角形边长,求面积
#include <math.h> #include <stdio.h> // 我没进行判断啥的 见谅 这里就用一下输入输出就行 int main() { float a, b, c, s, area; scanf("%f,%f,%f", &a, &b, &c); s = 1.0 / 2 * (a + b + c); area = sqrt(s*(s - a)*(s - b)*(s - c)); printf("a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2f\n", a, b, c, s); printf("area=%7.2f\n", area); return 0; }