C语言10/12作业

1、 消除小数点后面的零
代码:
#include<stdio.h>

int main()
{
float a = 2*1.0/5;//若将1.0乘在分母,则需加括号
printf ("%g", a);
return 0;
}

2、 十进制转二进制
代码:#include<stdio.h>
void binary_cal(int n){
int r;
r = n % 2;
if(n >= 2)
binary_cal(n/2); //使用递归函数实现,占用较多内存,执行速度较慢
printf("%d",r);
}
int main(void){
int num;
printf(“请输入一个十进制整数:\n”);
while(scanf("%d",&num) == 1){
printf(“十进制整数转换为二进制数是:\n”);
binary_cal(num);
putchar(’\n’);
}
return 0;
}

3、 查原码、反码、补码
(1)原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
(2)正数的反码是其本身.负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反
(3)补码的表示方法是:
正数的补码就是其本身.负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

4、 单精度浮点数二进制存储
首先将一个小数如:235.725的小数部分取出,即:0.725,将其乘以进制数二进制就乘以2后得到1.45,取其整数部分1为二进制小数的第一项(十分位),在将小数部分0.45乘2得0.9,取其整数部分为二进制小数的第二位(百分位)0,在将其小数部分0.9乘2,得1.8,取其整数部分为二进制小数的第三位(千分位)1,取其小数部分0.8再乘2……以此类推,直到值为0或形成循环小数则停止。
代码://此处小数位转二进制到第八位,如果想要更多,可以设置i的大小
#include <stdio.h>
#include <math.h>
void binarycal(int n)
{
int r;
r=n%2;
if(n>=2)
binarycal(n/2);
printf("%d",r);
}
int main(void) {
float x=-6.3; //为变量赋初值
if(x<0)
{
printf("-");
x=-x;
}//判断正负
int a;
a=(int)x;
binarycal(a);
printf(".");
float b=x-a;
for(int i=0;i<8;i++)
{
float c=b*2;
int d;
d=(int)c;
printf("%d",d);
b=c-d;
}
return 0;
}

5、 二进制、十进制、八进制、十六进制相互转换
(1) 十进制转二进制前面已经给出,然后将程序里的2改为8即可得十进制转八进制的程序。至于十六进制,加入if判定r即可
(2) 下面讨论其它进制转为十进制即可,这样它们也能进一步间接借助十进制转换。
二进制转十进制代码:
#include<stdio.h>
int main(void){
int num;
printf(“请输入一个八位二进制整数:\n”);
scanf("%d",&num);
float a1=num/(10000000);
int b1;
b1=(int)a1;
float a2=num/(1000000)-b110;
int b2;
b2=(int)a2;
float a3=num/(100000)-b1
100-b210;
int b3;
b3=(int)a3;
float a4=num/(10000)-b1
1000-b2100-b310;
int b4;
b4=(int)a4;
float a5=num/(1000)-b110000-b21000-b3100-b410;
int b5;
b5=(int)a5;
float a6=num/(100)-b1100000-b210000-b31000-b4100-b510;
int b6;
b6=(int)a6;
float a7=num/(10)-b1
1000000-b2100000-b310000-b41000-b5100-b610;
int b7;
b7=(int)a7;
int b8=num-b1
10000000-b21000000-b3100000-b410000-b51000-b6100-b710;
printf("%d",b1*(20)+b2*(21)+b3*(22)+b4*(23)+b5*(24)+b6*(25)+b7*(26)+b8*(27));
return 0;
}

八进制转十进制代码:

#include<stdio.h>
int main(void){
int x=043;//前面加0即为八进制表示
printf("%d",x);
return 0;
}

十六进制转十进制代码:
#include<stdio.h>
int main(void){
int x=0xdd;//前面加0x即为十六进制表示
printf("%d",x);
return 0;
}

6、 查什么是内存溢出、内存泄露
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
7、 为什么unsigned short 定义,输出65535,加一就是零?
unsigned char 表示无符号,bai所以范围在 0-65535,加一则溢出,直接返回零。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值