C语言printf和scanf函数

时间:2022-09-05 21:34:54

最近在敲c语言例子的时候,对于很多小知识点不清楚,这里主要根据例子来总结一下。

一,printf函数

1,printf是格式输出函数,它的作用是想终端输出若干个任意类型的数据。

一般格式如下:

printf(格式控制,输出表列)

例如:printf("%d,%c\n",i,c)括号内包含两个部分,

(1)格式控制。包含两种信息,第一是格式说明,格式说明由%和格式字符组成,他的作用是ijiagn输入的数据转化为指定的格式输出。格式说明总是由%字符开始的。第二种是普通字符是需要原样输出的字符。例如上面的printf函数中双撇号内的逗号,空格和换行符。(2)输出列表,是需要输出的一些数据,可以是表达式。

2.格式字符

在输出时候,对于不同类型的数据使用不同的格式字符。常用的有以下几种格式字符。

(1)d字符。有以下几种用法。①%d,按照十进制整型数据的实际长度输出。②%md,m是为指定的输入字段的宽度。如果数据的位数小于m,那么左端补以空格,如果大于m,那么按照实际位数输出。例如

print("%4d,%4d",a,b)
若a=123,b=12345,则输出的结果为:_123,12345.

(2)f格式符。用来输出实数,以小数形式输出。有几种用法。

①%f,不指定字段宽度,用系统自动指定 ,使整数部分全部输出,并且输出六位小数。注意,在输出的数字并非全部都是有效数字。单精度实数的有效位一般为7位。

②%m.nf指定输出的数据共占m列,其中有n位小数。如果数值的长度小于m,那么左端补齐空格。

③%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。

 上面的两种特别常用,其他格式如下表:

                                                                     C语言printf和scanf函数


二,scanf函数

1,一般格式

scanf(格式控制,地址表列)

格式控制的含义同printf函数,地址表列是由若干个地址租场的表列,可以是变量的地址,或者字符串的首地址.例如:

scanf("%d%d%d",&a,&b,&c);
&a,&b,&c中的&是地址运算符,&a指a在内存中的地址。上面的Scanf函数的作用是:按照a,b,c在内存中的地址将a,b,c的值存进去。变量a,b,c的地址在编译连续阶段分配的。

“%d%d%d”表示要按照十进制整数形式输入3个数据,输入数据的时候,两个数据之间以一个或者多个空格间隔,也可以用enter,Tab键。不能够用逗号做两个数据之间的分隔符。例如3,4,5,就不合法。

2,注意事项

①,scanf函数中的格式控制后面应当是变量地址,而不是变量名。例如

scanf("%d,%d",a,b) 是不对的,应该将a,b改为&a,&b.

②,如果在“格式控制”中除了格式说明以为还有其他字符,则在输入域数据时在对应的位置应该输入与这些字符相同的字符。
例如如果是:

 scanf("%d:%d:%d",&a,&b,&c);
那么输入格式应该为:12:34:45

③输入数据时,遇到以下情况认为该数据结束。第一遇到空格,回车,tab键;遇到非法输入;按照指定的宽度结束,例如%3d,只取3列。


三,求解一元二次方程ax*x+bx+c=0的根

输入:假设是a,b,c均为int。

输出:要求输出的根为double型,保留6位小数。实现过程如下:

#include<stdio.h>
#include<math.h>
void main()
{
int a,b,c;
float d,deltal,x1,x2,x11,x22;
scanf("%d%d%d,",&a,&b,&c);
//判断是否有根,b*-4ac
d=b*b-4*a*c;
//如果输入的a,b为0
if (a==0&&b==0)
printf("input error!\n");
//如果a为0,为一元一次方程,x=-c/b
else if(a==0)
{
x1=(0-(float)c)/b;
printf("x=%6f\n",x1);
}
//如果d<0
else if(d<0)
{
d=0-d;
//sqrt,代表是平方根,也就是开平方根
deltal=sqrt(d);
if(b==0)
{
//得到两个根
x2=(0-b-deltal)/(2*a);
x1=(-b+deltal)/(2*a);
//输出为double类型,保留6位小数,得到两个复根
printf("x1=%6fi\n",x1);
printf("x2=%6fi\n",x2);
}
else
{
x11=-(float)b/(2.0*a);
x1=(0+deltal)/(2*a);
x2=(0-deltal)/(2*a);
printf("x1=%6f+%6fi\n",x11,x1);
printf("x2=%6f%6fi\n",x11,x2);

}
}
else
{
d=b*b-4*a*c;
deltal=sqrt(d);
//有实根,得到两个实根
if(d>0)
{
x2=(0-b-deltal)/(2*a);
x1=(-b+deltal)/(2*a);
printf("x1=%6f\n",x1);
printf("x2=%6f\n",x2);
}
//得他=0,有两个相等实根
else if(d==0)
{
x1=(-b+deltal)/(2*a);
printf("x1=x2=%6f\n",x1);
}
}
}
小结:

 学习编程多敲例子效果比较好,敲的时候带动着自己思考,对于课本上的知识掌握就比较好了。