大一C语言学习笔记(1)---编译顺序问题;不同数据类型赋值,运算问题;算数运算符易错点(以解一元二次方程为例)
2021/10/23 6:11:17
本文主要是介绍大一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) ̄)ブ
这篇关于大一C语言学习笔记(1)---编译顺序问题;不同数据类型赋值,运算问题;算数运算符易错点(以解一元二次方程为例)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Rocket消息队列资料:新手入门指南
- 2024-11-27rocket消息队资料详解与入门指南
- 2024-11-27RocketMQ底层原理资料详解入门教程
- 2024-11-27RocketMQ项目开发资料:新手入门教程
- 2024-11-27RocketMQ项目开发资料详解
- 2024-11-27RocketMQ消息中间件资料入门教程
- 2024-11-27初学者指南:深入了解RocketMQ源码资料
- 2024-11-27Rocket消息队列学习入门指南
- 2024-11-26Rocket消息中间件教程:新手入门详解
- 2024-11-26RocketMQ项目开发教程:新手入门指南