目录
前言
这是一个刷了两遍,乍一看还有些疙瘩的习题
正文
习题7:变量和类型
#include <stdio.h>
int main(int argc, char *argv[])
{
int distance = 100;
float power = 2.345f;
double super_power = 56789.4532;
char initial = 'A';
char first_name[] = "Zed";
char last_name[] = "Shaw";
printf("You are %d miles away.", distance);
printf("You have %f levels of power.\n", power);
printf("you habe %f awesome super powers.\n", super_power);
printf("I have an initial %c.\n", initial);
printf("I haaave a first name %s.\n", first_name);
printf("I have a last name %s.\n", last_name);
printf("My whole name is%s %c. %s.\n", first_name, initial, last_name);
int bugs = 100;
double bug_rate = 1.2;
printf("You have %d bugs at teh imaginary rate of %f.\n", bugs, bug_rate);
long universe_of_defects = 10242345121021114;
printf("The entire universe has %ld bugs.\n", universe_of_defects);
double expected_bugs = bugs * bug_rate;
printf("You are expected to habe %f bugs.\n", expected_bugs);
double part_of_universe = expected_bugs / universe_of_defects;
printf("That is only a %e portion of the universe.\n", part_of_universe);
//This makes no sense, just a demo of something werd
char nul_byte = '\0';
int caer_percentage = bugs * nul_byte;
printf("Which means jyou should caer %d%%.\n", caer_percentage);
return 0;
}
执行结果:
疙瘩附加任务(部分)
问题:这些庞大的数字实际上打印出的是什么?(庞大的数字就是universe-of-defects的输出。这个问题困扰了我好几天)
是什么呢?创作助手答:
打印输出的庞大数字实际上是以字符串形式表示的数字。在计算机中,数字被存储为二进制数据,并以特定的编码表示。当我们使用print函数将数字打印到屏幕上时,它会将数字转换为字符串,然后将该字符串显示在屏幕上。这意味着庞大的数字是以字符形式显示的,而不是其实际的数值形式。
为什么呢?
创作助手答:
在C语言中,用于输出整数的函数如printf()实际上是基于格式化字符串的。当我们使用格式符%d或%ld等来输出整数时,它们会将整数转换为对应的字符串,然后输出该字符串。
当整数很大时,超出了int或long类型的表示范围,就无法直接以整数形式输出。为了解决这个问题,C语言将整数转换为对应的字符串来输出。
将整数转换为字符串的过程中,C语言会根据整数的每一位数字,将其转换为相应的ASCII字符,然后组合成一个字符串。这是一种字符串表示法,可以用来表示任何大小的整数。
在C语言中,还有一些专门用于处理字符串的函数,如strcpy()、strcat()等,它们都是基于字符串来操作的。
所以,当我们使用printf()函数输出超长整数时,实际上是将整数转换为字符串,然后将该字符串输出到屏幕上。
这里面涉及到了对字符串的理解,如果想继续深入了解,传送门在下面:
小结
名称 | 解释 | 速记方法 | 备注 |
float | 浮点型数据: 用于表示带有小数点的数值,涉及许多领域,包括金融、科学、工程、图形和动画、游戏开发以及数据分析和机器学习等的精确计算
| “服了它”,定义的数据后面要加“f“ | 第一印象什么楼层吗?经过查询,才觉察到是以前没有特意深入了解它,原来它涉及多领域的精度计算。以前觉得用不到或者别的,所以忽视它。 所以“服了”floor才是楼层,“服了它他”float才是浮点数,就问你服不服! |
double | 双精度浮点型 | 还是“double kill!” | 脑子里自动声音加图像“double kill!”怎么又是浮点型数据?哦,以前研究过吗,好像也就那么稀里糊涂的过去了。现在才发现它是双倍“服了他”,恩,还有谁?! |
long | 长整型 | longlongago,there is a mouse and a lion!超过普通整数的范围,普通整数的范围通常是[-2147483648, 2147483647],具体取决于编程语言与编译器 |
后语
- 其它变量,我没提,但是为了知识的完整性,感觉还要说下, 有int&char,int一点问题都没有,不过char貌似有点疙瘩,你们呢?
- 浮点数与长整数定义后面加不加相应符号,我验证过linux的c编译器不报错。但是记得不要忘记加,因为”小僵“只按程序办事,不会变通的。比如浮点数据加上”f“可以避免编译器将它识别为doublekill,节约内存。长整型数据加”L“,让编译器识别后避免使用普通整型数据时可能出现的溢出或截断问题。
- ”小僵“是我临时给编译器起得昵称,你喜欢吗?
- 纸上得来终觉浅,觉知此事要躬行!就问你”宫不宫“,反正我不宫,嘿嘿!此文是一个试砖石,表明自己的一个学习方法与态度!恩,写一篇文章真的不易,尤其是自己满意大家认可的文章。所以,如果你有收获最好,沒有收获,呵呵一下也行!毕竟我感觉里面有好多梗!学习需要认真,但是可以不那么累。突然好想高中时的一位数学老师。。。