大一C语言学习笔记(1)---编译顺序问题;不同数据类型赋值,运算问题;算数运算符易错点(以解一元二次方程为例)

废话少说,上代码:


#include<stdio.h>
#include<math.h>
int main()//解一元二次方程 
{
	int a,b,c;
	double tool,x1,x2;
	printf("请以此输入一元二次方程的系数:a,b,c\n");
	scanf("%d",&a);//编译是在主函数中是自上向下编译的,所以不要把赋值tool,x1,x2写在scanf函数之前 
	scanf("%d",&b);
	scanf("%d",&c);
	tool=b*b-4*a*c;
	x1=(-b+sqrt(tool))/(2*a);
	x2=(-b-sqrt(tool))/(2*a);
	if(tool>0)
	{
		printf("方程有两个解:\nx1=%lf\nx2=%lf\n",x1,x2);
	}
	else if(tool==0)
	{
		printf("方程有一个解:x=%lf\n",x1);
	}
	else
	{
		printf("方程无解\n");
	}
	return 0;
}

分享一下敲这个代码时的思路和遇到的问题:

1.虽然感觉有些丢脸但我还是要说的,我居然因为少打一个()和一个*,用了足足2分钟才找到这两个错误......

  x1=(-b+sqrt(tool))/(2*a);  ----------就是这里 2*a 敲成了 2a ,”/“后的()没有加 !!!

2.不同数据类型运算问题:不同数据类型相互运算,两个数据会先自动转换为精度较大的数据类型,再进行运算(据说这是计算机为了数据更精准偷摸干的)

3.不同数据类型赋值问题:首先要知道赋值是将”=“右边的数据赋值给左边,如果右边数据类型精度较大,可能会导致数据丢失(不是一定);

                                           反之如果左边的数据类型精度较大,则无需担心数据的丢失(因为人家装的下嘛 ~ ~ )

4.一开始我把对 tool,x1,x2 的赋值放在了 scanf 函数之前,但我发现结果总出问题!!!

   仔细想想我靠,又是编译顺序的问题,编译器自上向下编译,当看到    tool=b*b-4*a*c;    x1=(-b+sqrt(tool))/(2*a);    x2=(-b-sqrt(tool))/(2*a); 

   编译器:”tool=b*.....,哎!?b是谁啊,我靠???“,好家伙这锅我背,变量 b 这时还没进行初始化就对变量 tool 赋值,代码跑起来自然是错误的结果...           


孩子只是个大一的弟弟,如果文章有错误,请狠狠地批评我         (~ ̄(OO) ̄)ブ  

                             

上一篇:彻底弄清楚前缀和与差分!


下一篇:用Python做一个游戏辅助脚本,完整编程思路分享!