3.1数据的输入输出
3.1.1输入输出举例
前面我们已经学习了利用printf函数进行数据输出的程序,现在再介绍一个包含输入和输出的程序 。
例题:求ax²+bx+c=0(a≠0) 方程的根。a、b、c、由键盘输入,设b ^ 2 - 4ac > 0。
解题思路:首先要知道求方程式根的方法。由数学知识已知,求b ^ 2 - 4ac ≥ 0,则方程有俩个实根:x= [-b±√ (b²-4ac)]/2a
有了这些式子我们就知道,只需要知道a、b、c的值就可以输出根的值了。需要用scanf函数输入a,b,c的值再用printf函数打印两根的值就行了。
int main() { double a = 0.0; double b = 0.0; double c = 0.0; double x1 = 0.0; double x2 = 0.0; double p = 0.0; scanf("%lf%lf%lf", &a, &b, &c); p = b * b - 4 * a * c; x1 = (-b + sqrt(p)) / (2 * a); x2 = (-b - sqrt(p)) / (2 * a); printf("x1 = %4.2f\nx2 = %4.2f\n", x1, x2); return 0; }
运行结果:
程序分析:
用scanf函数输入a,b,c的值,请注意再scanf函数括号内变量a,b,c的前面,要用地址符&,即&a,&b,&c。&a表示变量a在内存中的地址。该scanf函数表示从终端输入3个数据分别送到地址为&a,&b,&c的存储单元,也就是赋给变量a,b,c。双撇号内用%lf格式声明,表示输入的是双精度型实数。关于scanf的具体用法和作者也在之前的文章中讲解过,有感兴趣的可以点这个链接:关于scanf和EOF的应用
3.1.1.2有关数据输入输出的概念
从前面的程序可以看到:几乎每一个C程序都包含输入输出。因为要进行运算,就必须给出数据,而运算的结果当然需要输出,以便人们应用。没有输出的程序是没有意义的,输入输出是程序最基本的操作之一。
①所谓输入输出是以计算机为主体而言的。从计算机向输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、光盘等)向计算机输入数据称为输入。
②C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。在C标准函数库中提供了一些输入输出函数,例如printf函数和scanf函数。读者在使用它们时,千万不要误认为它们是C语言提供的"输入输出语句",
③要在程序文件的开头用预处理指令#include把有关头文件放在本程序中
3.1.1.3用printf函数输出数据
printf函数的一般格式 printf(格式控制,输出表列)
“格式控制"是用双撇号括起来的一个字符串,称为格式控制字符串,简称格式字符串。它包含俩个信息:
①格式声明。格式声明由”%“和格式字符组成,如%d、%f等。它的作用是将输出的数据转换为知道的格式后输出。格式声明总是由”%"字符开始的。
- ②普通字符。普通字符即需要在输出时原样输出的字符。
- 输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。
下面是printf函数的具体例子:
3.1.1.3.1格式字符
- d格式字符。用来输出一个有符号的十进制整数。
注:可以在格式声明中指定输出数据的域宽(所占列数),如用"%5d",指定输出数据占5列。
- c格式符。用来输出一个字符,也可以指定域宽。且一个整数,如果在0~127范围中,也可以用"%c"使之按字符形式说粗话,在输出前,系统会将该整数作为ASCII码转换成相应的字符;
- s格式符。用来输出一个字符串。
- f格式符。用来输出实数(包括单、双精度、长双精度),以小数形式输出,有几种用法:
①基本型,用%f不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统一般的处理方法是:实数的整数部分全部输出,小数部分输出6位。
②指定数据宽度和小数位数,用%m.nf
如:printf("%20.15f\n",1.0 / 3);
这里输出的小数位是15位,宽度是20 - 输出的数据向左对齐,用%-m.nf
在m.n的前面加一个负号,其作用与%m.nf形式作用基本相同,但当数据长度不超过m时,数据向左靠齐,右端补空格。如:printf("%-25.15f,%25.15f\n",1.0/3,1.0/3);
- e格式符。用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数,许多C编译系统会自动给数字部分的小数位数为6,指数部分占5列。
- 其它格式符
①i格式符。作用与d格式符相同,按照十进制整数的数据的实际长度输出,一般用%d很用%i
②o格式符。以八进制整数形式输出。将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即符号位也一起作为八进制数的一部分输出
③x格式符。以16进制形式输出整数。
- ④u格式符。用来输出无符型数据,以十进制整数的形式输出
⑤g格式符。用来输出浮点数,系统自动选f格式或e格式输出,选择其中长度较短的格式,不输出无意义的0
3.1.2字符输入输出函数
除了可以用printf函数和scanf函数输出和输入字符外,C库函数还提供了一些专门用于输入和输出字符的函数。
3.1.2.1 putchar函数
putchar函数的一般形式为:
putchar(c); //作用是输出字符变量c的值,显然输出的是一个字符
例题:定义三个字符变量分别赋以初始值’B’,‘O’,‘Y’,然后用putchar函数输出这3个字符变量的值。
int main() { char a = 'B'; char b = 'O'; char c = 'Y'; putchar(a); putchar(b); putchar(c); return 0; }
运行结果:
注:putchar函数是输出字符的函数,它输出的是字符而不能输出整数。
3.1.2.2 getcahr函数
为了向计算机输入一个字符,可以调用系统库函数中的getchar函数(字符输入函数)。
getchar一般形式为:
getchar();//输入一个字符,计算机获得一个字符。 //getchar函数的作用就是从输入设备得到一个字符
例题:用getchar函数得到的字符赋给一个变量或整型变量,也可以不赋给任何变量。
int main() { putchar(getchar()); putchar(getchar()); putchar(getchar()); return 0; }
运行结果: