C语言学习错题集(一)
学习编程语言如Unity或C# #生活乐趣# #游戏乐趣# #游戏开发#
1. 输出字符的对齐、保留位数等问题
2. 输出float, double, bool, char等类型的存储空间大小的方法
3. 一道没有理解的选择题
4. 整数运算得到浮点数的问题
5. 判断结果是否为浮点数
1.字符对齐:
%8d: 右对齐,且占8个字符(空格在数字左边凑位数)
%-d: 强制左对齐
%-8d: 左对齐,且占8个字符(空格在数字右边凑位数)
%.3lf: 保留三位有效数字
%+d: 输出自带±号
%e:以指数形式输出数据
%g: 自动选择合适的表示法输出
2.如何输出不同类型变量的存储空间?
float a;printf("%d",sizeof(a)); 12
Int 储存空间大小为4;short储存空间大小为2;Float储存空间大小为4;double储存空间大小为8, bool和char都是1.
3.选择题
有两个变量a和b,在执行了如下代码后:
a = 32768; b = a; printf("%d %d\n", a, b); 123
输出两个数:32768, -32768
请问a和b分别是以下哪种类型?
A. bool B. char C. short D. int E. float F. double
首先由%d判断,可以排除E、F。
C语言没有bool,排除A。
char范围为-128~127,排除B。
接下来介绍原码、反码、补码。
原码、反码、补码都由符号位、数值位组成,第一位符号位0正1负。
原码:用最高位表示符号位,其余位表示数值位的编码称为原码。其中,正数的符号位为 0,负数的符号位为 1。
正数的原码、反码、补码均相同。
负数的反码:把原码的符号位保持不变,数值位逐位取反,即可得原码的反码。
数据在计算机中是以补码形式存储和运算的(因为符号位、数值、加法、剪发可以统一处理)。
负数的补码:在反码的基础上加 1 即得该原码的补码。
例如:
+11 的原码为: 0000 1011
+11 的反码为: 0000 1011
+11 的补码为: 0000 1011
-7 的原码为:1000 0111
-7 的反码为:1111 1000
-7 的补码为:1111 1001
对补码再求一次补码操作就可得该补码对应的原码。
以储存2字节(二进制中1字节=8位)的short为例,最高位为符号位,二进制原码最大为0111111111111111=215-1=32767,最小为1111111111111111=-(215-1)=-32767。但是计算机中采用二进制补码存储数据,即正数编码不变,仍0000000000000000到0111111111111111依旧表示0到32767;而负数需要把除符号位以后的部分取反加1,即-32768的补码为1000000000000000。所以,补码系统中short数值范围是-32768~32767。
而int可以储存4个字节。
short刚好越界,所以被转化为-32768。
答案为D C.
4.整数运算得到浮点数
方法1)算式中出现浮点数,结果会自动转化为浮点数。
注:鉴于C语言计算算式从左到右按顺序执行,下面这种算式就得不到有效浮点数;小数部分全部为0。
int a,b; double c; scanf("%d%d",&a,&b); c=a*b*1.0; 1234
正确的写法应该是把*1.0写在最前面
c=1.0*a*b; 1
方法2)强制转换
double a=(double)b/c; 1
5.判断浮点数
有的时候我们需要知道结果是整数还是浮点数(比如大象喝水问题,至少喝20000L水会饱,当我们计算(总需水量/每桶水的量)时,如果结果是浮点数,我们还需要再加一桶水。
避开浮点数的方法:比较除数*结果是否<被除数
int num=20000/v; int e=num*v;/*这里不在if里面算num*v是为了节省运行时间, 当有循环出现的时候会节省很多时间*/ if(e<20000) //下面写桶数加一 12345
网址:C语言学习错题集(一) https://www.yuejiaxmz.com/news/view/177865
相关内容
C语言学习c语言原程序如下intx=496;printf('*%
剖析C语言中a=a+++++a的无聊问题
语言C++之循环结构
50个常见的C#面试问题和答案合集和详解
c语言printf输出格式
C语言个人财务管理示例
柬埔寨语言:学习柬埔寨语言的窍门和技巧!
初一语文高效学习方法
小学一年级语文复习重点及学习方法