大一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) ̄)ブ  

                             


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM