ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-23 01:03:20  阅读:146  来源: 互联网

标签:tool 数据类型 运算符 一元二次方程 x2 x1 scanf 赋值


废话少说,上代码:


#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) ̄)ブ  

                             

标签:tool,数据类型,运算符,一元二次方程,x2,x1,scanf,赋值
来源: https://www.cnblogs.com/Burning-youth/p/15441154.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有