C语言_0208练习_变量定义与输出/小数和整数/个十百位/进制转换

02-0. 整数四则运算

#include <stdio.h>
    int main(){
        int a,b;
        printf("输入两个整数:\n");
        scanf("%d %d", &a, &b);
        printf("%d + %d = %d\n",a,b,a+b);
        printf("%d - %d = %d\n",a,b,a-b);
        printf("%d * %d = %d\n",a,b,a*b);
        printf("%d / %d = %d\n",a,b,a/b);
        /*printf("请输入两个正整数:");
        scanf("%d %d",&a,&b);
        printf("和为%d\t",a+b);
        printf("差为%d\t",a-b);
        printf("积为%d\t",a*b);
        printf("商为%d\t",a/b);
        */
        return 0;
    }
  • 严格遵守输出格式,仔细读题,样例输出有空格,程序输出就必须有空格!!!可以直接拷贝样例,然后修改为相应的变量。

sanf("%d,%d",&a,&b);
——————————————
此时要求在终端输入【1,2】,如果输入【1 2】,第二个【2】无法正确读入。
sanf("price %d,%d",&a,&b);
______________
【price 1 2】
  • 变量定义与输入输出类型必须一致,不会编译报错,但是结果是错误的。

  • 定义c为int却要求输出%f,只会输出0.000;定义为float却要求输出%d,只会输出0.000。

int a=22;  
int b=2;
float c;
c=a/b;
printf("%f\n",c);
printf("%d",c);
_____________
11.000000
0
  • int\int=int 让输出%f,会输出0.0000;

int a=22.5;  
int b=1.2;
printf("%f\n",a/b);
_____________
0.000000 
  • int\int 让输出%d,没有问题,int变量定义时输入了小数会自动抹去小数。

int a=10.12;直接抹掉小数 
//int b=2.3;直接抹掉小数
//printf("%d",a/b); 输出4

02-1. 厘米换算英尺英寸

#include <stdio.h>
    int main(){
        int foot, inch, cm, t_int;
        float meter, t_float;
        printf("请输入一个厘米制的数字:\n");
        scanf("%d", &cm);
        meter = cm * 1.0 / 100;//cm*1.0为浮点;metre浮点 
        t_int = meter / 0.3048;//英尺单位的整数int型 
        t_float = meter / 0.3048;//英尺单位的确切值,float型 
        foot = t_int;
        inch = (t_float - t_int)*12;//这样就求到了一个数的小数部分 
        printf("%d %d\n",foot,inch);
        return 0;
        /*报错啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
        float cm=0,m=0;
        float foot;
        float inch;
        printf("请输入要换算的长度,单位厘米:");
        scanf("%f",&cm);
        m=cm/100.0;
        foot=m/0.3048;
        inch=(foot*12)%12;
        //    [Error] invalid operands to binary % (have 'float' and 'int')
        printf("%d %f",foot,inch);
        return 0;
        */
    }
  • 问题——%是整数运算符 - 对双精度或浮点数使用 fmod 或 fmodf

inch=(foot*12)%12;
//[Error] invalid operands to binary % (have 'float' and 'int')
  • 套路:一个小数(5.57)如何分别得到它的整数部分和小数部分?

        int foot, inch, cm, t_int;
float meter, t_float;
printf("请输入一个厘米制的数字:\n");
scanf("%d", &cm);
meter = cm * 1.0 / 100;// cm*1.0为浮点;meter浮点
t_int = meter / 0.3048;// f/f但赋值为int ✔英尺单位的整数int型 整数部分
t_float = meter / 0.3048;//英尺单位的确切值,float型 带小数的值
foot = t_int;
inch = ( t_float - t_int)*12;//这样就求到了一个数的 小数部分

02-2. 然后是几点

#include <stdio.h>
    int main(){
        int clock,clock_h,clock_m;
        int time,time_h,time_m;
        int h,m;
        scanf("%d %d",&clock,&time);
        clock_h=clock/100;//11
        clock_m=clock-clock_h*100;//30
        time_h=time/60;//-110 -1 
       // printf("%d\n",time_h);
        time_m=time%60;//-50
        if (clock_m+time_m<=0)
        {
            time_h-=1;
            time_m=60+time_m;//60+30-50
         } 
        else if (clock_m+time_m>=60)
        {
            time_h+=1;
            time_m-=60;
         } 
        h=clock_h+time_h;
        m=clock_m+time_m;
        printf("%d",h*100+m);
        return 0;
    }
  • 1130 -110的时候注意,11,30,-1,-50,小时等于11-1-1=9;分钟等于30+(60-50),为什么要+60因为往小时借了一位。

02-3. 逆序的三位数

#include <stdio.h>
    int main(){
        int x;
        int a,b,c;
        scanf("%d",&x);//scanf一定不能遗漏& 
        a=x/100;//百位 
        b=(x-100*a)/10;//十位
        c=x-100*a-10*b;//个位 
        printf("%d",c*100+b*10+a);
        return 0;
    }
  • scanf一定不能遗漏&

  • 套路:取一个数的个十百位

bai = start / 100;
shi = start % 100 / 10;
ge = start % 10;

02-4. BCD解密

#include <stdio.h>
    int main(){
        int x,a,b;
        scanf("%d",&x);
        //知识点补充:16进制转换位10进制:0x54=16*5+1*4=84
        a=x/16;
        b=x%16;
        printf("%d",a*10+b);
        return 0;
    }
  • 知识点补充:16进制转换位10进制:0x54=16*5+1*4=84

  • 0x只是前缀,类似16进制标识符。

  • 18=10010=0x12=BCD(12)

  • 套路:输入输出转进制

#include <stdio.h>
    int main(){
        int x;
        scanf("%d",&x);//输入x,10进制格式 
        printf("%x",x);//以16进制输出。 
        return 0;
    } 
  • 套路:将10进制数转换为2进制

  • 方法1

#include <stdio.h>
int main(void)
{
    int n,length;    //length用来装二进制数的个数
    int a[20];        //定义一个数组来装余2得到的余数
    scanf("%d",&n);    //输入十进制的数字
    while(n/2){        //当n=1时,n/2=0,此时while(0)不执行while中的语句,直接执行下面的语句
        a[length++] = n%2;    //将除2得到的余数装入数组中
        n = n/2;            //除二
    }
    a[length++] = n%2;        //存储最后一个余数
    //将余数从下往上输出
    for(int i = length-1;i>=0;i--)
        printf("%d",a[i]);
}
  • 方法2

#include <stdio.h>
int main()
{
    int remainder = 0; //余数 ,二进制输出为0,1组成,这里最好用long, int的表示范围较小;
    int binary = 0;    //二进制数
    int i = 1;
    int num = 0;
    printf("请输入一个正整数:\n");
    scanf("%ld", &num);
    if (num >= 0)
    {
        while (num != 0)
        {
            remainder = num % 2;
            binary += i * remainder;
            num /= 2;
            i *= 10;
        }
        printf("这个数转为二进制为:%ld", binary);
    }
    else
        printf("您输入的数非法!");

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值