首页 > 其他分享 >我的第八次C语言练习

我的第八次C语言练习

时间:2023-08-02 16:34:59浏览次数:33  
标签:10 练习 浮点数 float n% 第八次 编译器 printf C语言

今天原本还想多学点,结果代码打到一半突然没保存到,导致只能重新打,浪费了很多时间,也就没学什么。

//int main(void)
//{
//	float a;
//	a = 3.1415926;
//	printf("%f can be written %e\nalso can be written %a", a, a, a);
//	return 0;
//}

今天学的是浮点数,其中%f,%e,%a分别指的是打印浮点数,打印指数记数法,打印十六进制指数记数法。输入数值是可以就用十进制,在打印的时候再用%e或者%a就可以了,跟%c,%d是一样的。

//浮点数字的范围
//int main(void)
//{
//	float num1, num2;
//	num1 = 3.14e38;
//	num2 = num1 * 10;
//	printf("%f\n%f\n", num1, num2);
//	return 0;
//}

然后是浮点数的范围,float的范围至少是[1.0e-37,1.0e37],但实际上可以输到1.0e38,但具体到多大就不清楚了,反正是不能到1.0e39的。

//int main(void)
//{
//	float a, b;
//	a = 0.000001;
//	b = a / 2;
//	printf("%f\n", a);//0.000001
//	printf("%f\n", b);//0.000000
//	return 0;
//}

这个是浮点数的下溢,按照这个可以看得出我的编译器应该是到六位有效数字。

//int main(void)
//{
//	float a, b, c, d;
//	a = 12.3456;//12.345600
//	b = a / 10;//1.234560
//	c = b / 10;//0.123456
//	d = c / 10;//0.012346
//	printf("%f\n%f\n%f\n%f\n", a, b, c, d);
//	return 0;
//}
//问题一:编译器好像是按小数位数算的而不是有效数字
//问题二:编译器在算到第六位小数的时候下溢好像是会进位的

但是很快问题就出现了,a的打印值上,a明显不止六位有效数字,而又根据后面的可以猜测出我的编译器好像是按照小数位数来看的,而且还存在进位问题。

//int main(void)//先搞清楚问题二
//{
//	float a, b, c, d, e, f;
//	a = 12.3456f;//12.345600
//	b = a / 100;//0.123456
//	c = b / 10;//0.012346
//	d = c / 10;//0.001235
//	e = b / 100;//0.001235
//	f = d / 10;//0.000123
//	printf("%f\n%f\n%f\n%f\n%f\n%f\n", a, b, c, d, e, f);
//	return 0;
//}
//按照上面的结果来说,编译器好像是按照小数位数来计算的
//问题三:计算到第六位是,小数下溢好像是五舍六入
//问题四:在连续除以10和直接除一百的结果上,原本e是不能进位的,因为4后面是5,但现在看来,100应该就是连续除以10

然后我就开始试验我的编译器是不是按照小数位数来看的,通过上面可以看出小数位数只能有六位,而且是五舍六入的进位方式。再从c,d,e不难看出除以100和连续除以10是一样的,原本除以100得到的应该是0.001234,但是还是进了一位,按照原本的猜测5是不会进位的,这说明除以100也是按照10来除的。

//int main(void)
//{
//	float a, b, c, d;
//	a = 1234.56;//1234.560059
//	b = 1234.58;//1234.579956
//	c = 123.458;//123.45800
//	printf("%f\n", a);
//	printf("%f\n", b);
//	printf("%f\n", c);
//	return 0;
//}
//问题五:在没有满六位小数的浮点数里会自动填充上数字,可是不应该全部上0吗,而a,b填上的是乱码,而且好像有所规律,正常后面补充的会是浮点数未满的小数,可是b上的8却被更改了

就在我继续探究的时候又出现了新的问题,在没有满六位小数的空位上并没有填上0,反而是出现了一堆乱码,而且b中的8甚至还改变了,但是c又是直接填上的0,现在彻底看不懂了。

//int main(void)
//{
//	float a, b;
//	a = 2.0e20 + 1;
//	b = a - 2.0e20;
//	printf("end=%f", b);//end=4008175468544.000000
//	return 0;
//}

然后是浮点数舍入错误,我的编译器没有足够的位数来计算出结果,一般正常的float只能用指数放大或缩小6或7位的数字,这里就是2.0e20和1相差太大了。

今天码了快四个小时的字,出了一大堆问题,还重新码了一遍,累死了。

标签:10,练习,浮点数,float,n%,第八次,编译器,printf,C语言
From: https://blog.51cto.com/u_16187763/6939747

相关文章

  • C语言, 字符串
    #include<stdio.h>#include<stdlib.h>#include<string.h>char*tt3="web数学算法";intstr_comparer(){//字符串是个指向字符串开头的指针char*tt1="aac";char*tt2="aa";//字符串可以直接转换成整数,前面加......
  • C语言学习笔记
    C语言程序设计求100-500的质数#include<stdio.h>intmain(){inti,j,n,f=1;for(i=100;i<=500;i++){f=1;for(j=2;j<i/2;j++){if(i%j==0){f=0;}}if(f==1){printf(&......
  • 每日一练 | 华为认证真题练习Day89
    1、链路两端IPv6地址前缀相同才可以建立OSPFv3的邻接关系。A.对B.错2、下列哪个IPv6地址的Solicited-node组播地址为FF02::1:FF12:1?A.2020::1200:1B.2019::12:1C.2019::12:1000D.2020::12AB:13、以下关于AdjacencySegment(邻接段)的说法错误的是哪个?A.AdjacencySegment用于......
  • 【C语言】调试的运用,代码出现错误如何自己解决
    1.了解调试。什么是调试?_当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。_这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。_调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调试,也可能是隔离和屏蔽代码的⽅式,找到问......
  • python脚本练习:
    1.两个Excel表格进行比对数据,一个为源,一个作为补全数据上代码:importpandasaspd#读取两个Excel数据source=pd.read_excel('C:/Users/Administrator/Desktop/source.xlsx')source.head()data=pd.read_excel('C:/Users/Administrator/Desktop/data.xlsx')data.head()#重新对......
  • 【C语言】双引号中使用宏定义
     目录快速答案详细讲解举个例子方法及代码参考资料 快速答案使用星号占位符(*)printf("%*d",-4,"12");//或printf("%-*d",4,"12");//得到的输出:"12"(12后面有两个空格) 详细讲解举个例子通常,我们为了保证输出格式美观,会使用下面的方式......
  • C语言 typedef 定义 struct 变量
    typedefstructnode{ datatypedata; structnode*next;}linknode,*linklist;创建单链表linklistL;//等价于structnode*L可以理解为,通过typedef,将structnode*替换为linklist当我们在使用LinkListL定义变量时,实际上就是在使用structnode*L定义变量使得以后......
  • c语言学习10
    结构:结构是由程序员自己设计的一种数据类型,用于描述一种事物的各项数据,由若干个不同的基础类型组成设计:struct结构体类型名{类型名成员名;...};定义:struct结构体类型名结构体变量名;注意:C语言中在定义结构变量时,struct关键字不能省略初始化:......
  • 初学C语言day07--指针与堆内存
    什么是指针:指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整形数据,该整型数据代表了内存的编号(地址),可以通过这个编号访问对应的内存为什么要使用指针:1、函数之间是相互独立的,但是有时候需要共享变量传参是单向值传递全局变量可以共享,但是容易命名冲突......
  • C语言
    程序设计和C语言C语言的特点C语言语句简洁紧凑使用方便灵活运算符丰富表达能力强//c语言只有32个关键字34种运算符C语言程序可移植性好//C语言中没有直接依赖硬件的语句与硬件有关的操作如数据的输入、输出都是都是调用系统提供的库函数//来实现的而这些库函数本身并......