所谓数据的输入输出是从计算机角度出发的。
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个字节
#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函数
- 地址表列:变量地址或字符串地址,地址间“,”分隔。
- 强调:地址列表中每一项必须以取地址运算符&开头。
#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;
}
|