C语言printf和scanf函数

最近在敲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基本相同,只是使输出的数值向左端靠,右端补空格。

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

                                                                     


二,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);
		  }
	  }
}
小结:

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


评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值