C语言—基础数据类型(含进制转换)

进制转换不多,但我觉得适合小白(我爱夸自己嘿嘿)

练习

1. 确认基础类型所占用的内存空间(提示:使用sizeof 运算符):

在这里我说一下,long 类型通常占用 4 字节。在 64 位系统上,long 类型通常也可为 8 字节。

格式化符sizeof对应的是%zu懒得改了,%lu也行毕竟没报错


2.定义一个unsigned short 类型的变量,并赋值为0,确认该变量减一后的值是什么,(注意无符号数输出需要使用%u)


3.输入摄氏度转成华氏度输出 (摄氏 = (华氏-32)/1.8)


4. 按下面要求转换数据:
0356 --> 十六进制
0x47 ---> 十进制 ---> 八进制
1026 ---> 八进制----> 十六进制

手算:这里按照方法一点点来,我倒是学懂了

1.0356八进制数转十六进制,先将0356每一位数转换为三位二进制数,再由右向左每四位组在一起,不够补零。ABCDEF代表的数字是10-15,E是14,1414也就是EE

2.0x47(十六进制0x为前缀)

转十进制就直接乘以它本身的进制数,比如十六进制就乘以它的进制数16,十进制就算出来了((4*16^1+7*16^0=71))

十六进制转八进制把十六进制数每一位数字转为四位的二进制数再由右向左每三个排在一起,就可以了

3.1026十进制转八进制、十六进制

直接除以要转的进制数,直至商为0,看余数,倒着数就可以,如图所示。

代码:我暂时还不太会,但我决定还是先放上来吧

cs 复制代码
#include <stdio.h>  // 引入标准输入输出库
#include <stdlib.h> // 引入标准库,用于处理转换

int main(void)
{
    char hexInput[10]; // 声明一个字符数组,用于存储十六进制输入
    int decimal, octal, hex; // 声明三个整型变量,用于存储十进制、八进制和十六进制数


    // 八进制到十六进制
    printf("请输入一个八进制数:"); // 提示用户输入一个八进制数
    scanf("%o",&octal); // 使用%o格式符读取八进制数,并存储在变量octal中
    hex = octal; // 将八进制数直接赋值给十六进制数变量hex,因为八进制和十六进制数在数值上是一一对应的
    sprintf(hexInput,"%x",hex); // 使用sprintf函数将十六进制数转换为字符串表示,并存储在hexInput中
    printf("八进制数 %o 转换为十六进制数: %s\n",octal,hexInput); // 打印转换结果

    // 十六进制到十进制
    printf("请输入十六进制数:"); // 提示用户输入一个十六进制数
    scanf("%s",hexInput); // 使用%s格式符读取字符串形式的十六进制数
    decimal = (int)strtol(hexInput,NULL,16); // 使用strtol函数将十六进制字符串转换为十进制整数
    printf("十六进制数 %s 转换为十进制数是: %d\n",hexInput,decimal); // 打印转换结果
    
    //十六进制转八进制
    printf("请输入十六进制数:");
    scanf("%s",hexInput);
    hex = (int)strtol(hexInput,NULL,16); // 将十六进制数先转换为十进制
    octal = hex;// 将十进制数直接赋值给八进制数变量octal,因为十六进制和八进制的数值一一对应
    printf("十六进制数 %s 转换为八进制数是: %o\n",hexInput,octal);// 打印转换结果

    // 十进制到八进制
    printf("请输入一个十进制数:"); // 提示用户输入一个十进制数
    scanf("%d",&decimal); // 使用%d格式符读取十进制数
    octal = decimal; // 十进制数直接赋值给八进制数变量octal,因为它们在数值上也是一一对应的
    printf("十进制数 %d 转换为八进制数 %o\n",decimal,octal); // 打印转换结果

    // 十进制到十六进制
    printf("请输入一个十进制数:"); // 提示用户输入一个十进制数
    scanf("%d",&decimal); // 使用%d格式符读取十进制数
    sprintf(hexInput,"%x",decimal); // 使用sprintf函数将十进制数转换为十六进制字符串表示
    printf("十进制数 %d 转换为十六进制 %s\n",decimal,hexInput); // 打印转换结果

    return 0; // 程序结束
}


1、通过键盘输入一个通话秒数,编程显示通话用了几分钟几秒。

这里注意if语句应该是if(sec < 0),可以秒数可以为0,我懒得改动了,代码是改动过的

cs 复制代码
/*1、通过键盘输入一个通话秒数,编程显示通话用了几分钟几秒.*/

#include <stdio.h>

int main(void)
{
    int sec;
    int min;

    printf("请输入通话的秒数:");
    scanf("%d",&sec);


    if(sec <= 0)
    {
        printf("输入错误,通话时间不能为负数,请重新输入!\n");
        return 1;
    }


    min = sec / 60;
    sec %= 60;

    printf("通话了%d分钟%d秒\n",min,sec);

    return 0;

}


2、输入身高公制(cm),转换成英制(inch)(1inch = 2.54cm)。

cs 复制代码
/*2、输入身高公制(cm),转换成英制(inch)(1inch = 2.54cm)*/

#include <stdio.h>

int main(void)
{
    float height_cm,height_inch;

    printf("请输入您的身高(cm):");
    scanf("%f",&height_cm);


    if(height_cm < 0)
    {
        printf("身高不能为负数,请重新输入!\n");
        return 1;
    }


    height_inch = height_cm / 2.54;

    printf("您的身高是%.2f英寸\n",height_inch);

    return 0;

}


3、输入身高和体重,计算BMI指数(BMI = w/(h*h))。

cs 复制代码
/*3、输入身高和体重,计算BMI指数(BMI = w/(h*h))。*/

#include <stdio.h>

int main(void)
{
    float wei,hei,bmi;

    printf("请输入您的体重(kg):");
    scanf("%f",&wei);

    printf("请输入您的身高(m):");
    scanf("%f",&hei);

    bmi = wei / (hei * hei);

    printf("您的BMI指数是: %.2f\n",bmi);

    return 0;

}


4.已经字符变量的值为 'p',如何使得该变量的输出为 'M',写出程序;

cs 复制代码
/*4.已经字符变量的值为 'p',如何使得该变量的输出为 'M'*/
/*p ASCII码112     M 77*/

#include <stdio.h>

int main(void)
{
    char var = 'p';

    var -= 35;

    printf("%c\n",var);

    return 0;

}


5.将数字8输出为'8';

变量a被赋予了整数值8。当printf使用%c格式说明符时,它会将整数8转换为其对应的ASCII字符,即输出字符'8'。我是这么理解的,当然也可以直接输出字符'8'.

cs 复制代码
/*5.将数字8输出为'8'*/

#include <stdio.h>

int main(void)
{
    int a = 8;

    printf("%c\n",a);

    return 0;

}

//只输出字符'8'
printf("%c\n",'8');

6. 写出整型数 -56 在内存中的存储数据,如果将该内存的存储数据当作无符号整型数,则值是多少?(没记错的话,补码是其在存储方式)四个字节也就是11001000 11001000 11001000 1100100

内存存储方式: 按照整数数据的补码方式存放:

原码: 整型数据的二进制形式

有符号整数 (最高位符号位 (0:正数,1:负数)) + 数据位

无符号: 所有的二进制位都是数据位

反码: 除了符号位外,其余数据位取反(0--->1, 1--->0)

补码: 反码 + 1

正数: 原码,反码 和补码是相同的;
负数: 最高位符号位,其余位为数据位,采用补码方式存储,

差不多上述算就完事好像是这样不确定,就这样啦,我会的话会回来精进的啦,数应当是对的,让C自己算的哈哈哈

cs 复制代码
/*6. -56 如果将该内存的存储数据当作无符号整型数,则值是多少?*/

#include <stdio.h>

int main(void)
{
    int a = -56;

    printf("%u\n",a);

    return 0;

}

.

相关推荐
chenziang138 分钟前
leetcode hot 全部子集
算法·leetcode·职场和发展
EdwardYange38 分钟前
LeetCode 83 :删除排链表中的重复元素
数据结构·算法·leetcode·链表
nuyoah♂39 分钟前
DAY37|动态规划Part05|完全背包理论基础、LeetCode:518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
算法·leetcode·动态规划
编程探索者小陈1 小时前
【优先算法】专题——二分查找算法
算法
清岚_lxn1 小时前
es6 字符串每隔几个中间插入一个逗号
前端·javascript·算法
一入程序无退路1 小时前
c语言传参数路径太长,导致无法获取参数
linux·c语言·数据库
chenziang11 小时前
leetcode hot 100 全排列
算法·leetcode·职场和发展
lili-felicity1 小时前
指针与数组:深入C语言的内存操作艺术
c语言·开发语言·数据结构·算法·青少年编程·c#
PengFly1231 小时前
题解:[ABC294G] Distance Queries on a Tree
算法·lca·树状数组·dfs序
月亮邮递使light1 小时前
代码随想录算法训练营第五十八天 | 拓扑排序精讲 dijkstra(朴素版)精讲
算法