c语言入门(二)进制


cup:中央处理器
存储器:内存(ram.rom.cache高速缓冲存储器)---用于存放当前处于活动状态的程序和数据,即微机运行所需要的程序和数据,它与cpu之间进行频繁的交换数据.
外存:用户可用于长期保存程序/数据和文件,有用户管理外存中的shuju
上午:进制转换,位运算,存储数据
进制就是进位制,对于任何一种进制,———X进制,就表示某一位置上的数运算时,逢X进一位,十六进制就是逢十六进一,二进制就是逢二进一.A~F(10~15),计算机经常用到的是二进制和十六进制.(二进制的位权就是以2为底的幂--二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^0、2^-1、2^-2。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为:
(a(n-1)a(n-2)…a(-m))2=a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+……+a(-m)×2^(-m)

二进制数据一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2)
进制转换:
秘诀连除倒取余
777/2=388–1
388/2=194–0
194/2=97–0
97/2=48–1
48/2=24–0
24/2=12–0
12/2=6–0
6/2=3–0
3/2=1–1
1/2=0–1     1100001001
10进制转其他,小数乘以位权(比如二进制就是2)取整(正取)6或者8位,舍弃末尾,整数部分除以位权(2)取余(倒取余)

N进制转十进制:(二进制转十进制,二进制转十六进制)
秘诀:当前位上的数乘以计数的位数减1次方,(位数*位权的n-1次方)

二:位运算(A10B11C12——)
参与运算的量按二进制位进行计算
按位&(同时为真才为真—计算机中的清零 )/
按位|(只要有一位为真)/
按位~/
按位异或^/
左移<<(左移一位相当于乘2),末尾以0补齐,高位的被丢弃
右移>>(右移一位相当于除2);高位以0补齐,低位丢弃
//右移运算对于负数,分为逻辑右移(高位补0),和算术右移——计算机常用-(高位补1)
   
 int a=3;
   
 int number6=a<<2;//左移两位
    
 printf("118左移两位的结果为:%d\n",number6);
    
 int number7=-3>>2;//左移两位
         
 printf("3左移两位的结果为:%d\n"
,number7);
118左移两位的结果为:12
3
左移两位的结果为:-1

一个字节(byte)表示8个二进制位(bit);网速500K/s====500*1024byte;
最高位为符号位(最左边)
负数以补码形式在计算机中表示:负数的补码形式:(负数:除了符号,其他按位取反,再加1)
正数的源码和补码是相同的
-3右移动2位
源码:1000 0011
反码:1111 1100
+1变补码:1111 1101
右移动两位:11111111
取反:100000 
加1:100001
输出结果为-1
托字符^(按位异或)相同为0,异或为1

三:查看数据在内存中的存储
从低到高存取,从高到低分配存.
zuoye:
/*1.比较并输出三个数的最大值,最小值.以及中间值.
 
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if (a<b) {
        int temp=a;
        a=b;
        b=temp;
    }
    if (b<c) {
        int temp=b;
        b=c;
        c=temp;
    }
    if (a<b) {
        int temp=a;
        a=b;
        b=temp;
    }
    printf("最大值%d\n最小值%d\n中间值%d\n",a,c,b);




/*2.输入3个数,判断是否能构成三角形。
 

    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if (a+b>c&&b+c>a&&a+c>b) {
        printf("可以构成三角形\n");
    }
    else printf("不可以构成三角形\n");



/*3.铁路托运行李规定:行李重不超过50公斤的,托运费按0.15元每公斤计算,如果超过50公斤,超出部分每公斤加收0.1元。编程实现上述功能。

    float weight=0;
    float cost=0;
    scanf("%f",&weight);
    if (weight<=50) {
        cost=weight*0.15;
    }
    else cost=50*0.15+(weight-50)*(0.15+0.1);
    printf("%.2f\n",cost);



    /*4.有一个函数:x<1的时候,y = x1<=x<10的时候,y=2x-1x>=10的时候,y=3x-11。写一段程序,输入x,输出y值。
     */

 

    int x=0;
    int y=0;
    scanf("%d",&x);
    if (x<1) {
        y=x;
    }
    else if (x>=10)
    {
        y=3*x-11;
    }
    else y=2*x-1;
    printf("%d\n",y);

5.编制一个完成两个数四则运算程序。如:用户输入34+56则输出结果为90.00,要求运算结果保留2位有效小数,用户输入时将2个运算数以及运算符都输入,根据运算符求结果。

    float a=0,b=0;
    char c;
   scanf("%f%c%f",&a,&c,&b);
    switch (c) {
        case '+':
            printf("a+b=%.2f\n",a+b);
            break;
        case '-':
            printf("a-b=%.2f\n",a-b);
            break;
        case '*':
            printf("a*b=%.2f\n",a*b);
            break;
        case '/':
            printf("a/b=%.2f\n",a/b);
            break;
        default:
            printf("输入错误\n");
            break;
    }




/*6.编写一个程序,输入某人的身高(cm)和体重(kg),按下式确定其体重是否为标准、过胖或过瘦。(1)标准体重=身高-110;(2)超过标准体重5kg(即大于5kg)为过胖;(3)低于标准体重5kg(即小于5kg)为过瘦
    

    float hight=0;
    float weight=0;
    scanf("%f%f",&hight,&weight);
    if (hight-110-weight<-5) {
        printf("过胖\n");
    }
    else if(hight-110-weight>5)
    {
        printf("过瘦\n");
    }
    else printf("标准\n");



编写程序计算升高:每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。设faHeight为其父身高,moHeight为其母身高,身高预测公式为:
男性成人时身高 = (faHeight + moHeight) * 0.54(cm)
女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm)
此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。
程序要求:父亲的身高与母亲的身高、小孩的性别、是否喜爱体育锻炼和是否有良好的卫生饮食习惯也从键盘上输入,最终输出预测的身高。
提示:小孩性别的输入方式,可在屏幕给出提示“请输入小孩的性别(男孩输入M,女孩输入F):”,然后通过if语句来判断从键盘输入的字符是M还是F。是否喜爱体育锻炼也可以通过类似的方式实现。


    float faHeight=0,moHeight=0;
    char sex=0;
    char sports=0;
    char habit=0;
    float tagetHeight=0;
    
    printf("请输入父亲的身高:");
    scanf("%f",&faHeight);
    printf("请输入母亲的身高:");
    scanf("%f",&moHeight);
    getchar();
    printf("请输入性别(M男;F女):");
    scanf("%c",&sex);
    getchar();
    printf("请输入是否喜欢体育锻炼(Y喜欢;N不喜欢):");
    scanf("%c",&sports);
    getchar();
    printf("请输入是否有良好饮食习惯(Y是;N否):");
    scanf("%c",&habit);
    
    if (sex=='M') {
        tagetHeight=(faHeight + moHeight) * 0.54;
    }
    else tagetHeight=(faHeight * 0.923 + moHeight) / 2;
    
    if (sports=='Y') {
        tagetHeight*=(1+0.02);
    }
    
    if (habit=='Y') {
        tagetHeight*=(1+0.015);
    }
    printf("小孩的身高位%fcm\n",tagetHeight);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值