c课堂笔记 day-2

2016-12-13  本文已影响0人  努力活得更好

1.类型转化

5/3=1
9.120000/7.000000=1.302857
隐式转化:
float_f=int t/int t1
当赋值号两边类型不同时,自动转化为精度较高的类型。
5/3=1.000000
强制类型转化,并不改变变量的类型,只临时作一次类型转化
float f=(float)int t/int t1

        #include<stdio.h>
        int main()
        {
            int num=4;
            int num1=3;
            float dev;
            //隐式转化
            dev=num/num1;
            //显示转化
            float dev1=(float)num/num1;
            printf("%f  %f\n",dev,dev1);

        }

2.进制转换

(1)二进制数:由0和1组成
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 (这是代表2的n次方)
1 2 4 8 16 32 64 128

0101010 11111 10101
(10101)=12^0+021+1*22+02^3+12^4

(2)八进制数:由0~7组成的,八进制数开头是数字0,以区分八进制数
0345 0123 0765 0765 八进制不能有8 0987 这就是错的

(3)十六进制数:由数字0~9和字母a~f或者A~F组成,
并且以0x或者0X开头
0x123 0xab34 0xABf35

(4)进制数的转化关系
二进制数:1111
十进制数:8421

3.位操作 (先转化为二进制)

&:位与 (对应位同时为1,结果为1,否则为0!!!)

4&3=0100&0011= 位与位乘=00,10,01,01=0000=0
12&7=1100&0111=10,11,01,01=0100=4

|:位或 (对应位有1为真)

4|3=0100|0011=0111=7
13|9=1101|1001=1101=13
023|5=0001 0111|0000 0101=0001 0111=23

~:非(取反)

~23: -23-1=-24 就这样理解 任何数以负数减一

^:异或 (对应位不同为1,相同为0)

53=01010011=0110=6

                #include<stdio.h>
                int main()
                {
                    int num=4^7;
                    printf("num=%d\n",num);
                 }
<<:左移
          即转化为二进制,然后左移2位,低位补0 
          左移几位,则乘以2的几次方!!!
          8*2^2=32
          8<<2 =1000=100000=32    
>>:右移
          与左移相反 
          8/2^2   
          9>>2 =2  高位溢出
          8>>2 =1000=0010=2
4.赋值操作符

=: 赋值号(把右侧值赋给左侧值)
+=:num+=i------->num=num+i
-=:
*=:
/=:
%=:
&=:
|=:
. >>=:
<<= : num>>=i------->num=(num>>i)

    #include<stdio.h>
    int main()
    {
        int num=12;
        printf("num=%d\n",num);
        num=12;// 这里要赋值  不然结果会累加
        num+=23;
        printf("num+=23:%d\n",num);
        num=12;
        num*=2;
        printf("num*=2:%d\n",num);
        num=12;
        num<<=2;
        printf("num<<=2:%d\n",num);
     }
5.逻辑运算符和条件运算符

(1) &&:逻辑与
表达式1 && 表达式2; 表达式同时为真,结果为真
注意:当表达式1为假时,表达式2无需运算,真题结果为假
||:逻辑或
表达式1 || 表达式2; 一个表达式为真,结果为真
注意:当表达式1为真时,表达式2无需运算,真题结果为真
!:非
!表达式 ; 表达式为真,结果为假

#######include<stdio.h>
int main()
{
int num=2;
printf("%d\n",num>3&&8>num); =0
printf("%d\n",num>10||num<3); =1
printf("%d\n",!(num>3)); =1
}

#include<stdio.h>

int main()
{
int num=3;
(num+=3)>9&&(num-=3)<8; 赋值不是条件 遇到不成立的条件就停止运算 =6
printf("num=%d\n",num);

}

(2)条件运算符

?: a>b?a:b
表达式1?表达式2:表达式3
若表达式1为真,则执行表达式2 否则执行表达式3

        #include<stdio.h>
        int main()
        {
           int num=6;
           int num1=2;
           int sum=num>num1?num:num1;
           printf("max=%d\n",max); =6
           
        }

       a,b,c  ------>三个数求max;
       a>b?(a>c?a:c):(b>c?b:c)
       
        #include<stdio.h>
        int main()
        {
           int a,b,c,max;
           printf("输入数:\n");
           scanf("%d %d %d",&a,&b,&c);
           max=a>b?(a>c?a:c):(b>c?b:c);
           printf("max=%d\n",max); 
           
        }

6.运算符的优先级

括号成员第一,全体单目第二,乘除余三,加减四;
位移五,关系六,等于不等排第七;
位与,异或和位或八九十;
逻辑或和与十二与十一;
条件高于赋值,逗号运算最低;

二.c语言的三大结构

顺序结构、分支结构、循环结构
1.顺序结构
(1) if (表达式) 这里条件为真(1)就执行花括号里面的内容 为假(0)则不执行

#include<stdio.h>

int main()
{
int num =8;
if(1) //这里条件为真(1)就执行花括号里面的内容 为假(0)则不执行
{
printf("num=%d\n",num);
}
printf("hello,world\n");

}
(2) if.......else....(if成立就执行 否则执行else)

#include<stdio.h>
int main()
{
    int num=0;
    printf("input num:\n");
    scanf("%d",&num);
    if((num%3==0) && (num%5==0))
    {
        printf("%d 是3和5的倍数\n",num);
    }
    else
    {
        printf("%d 不是3和5的倍数\n",num);
    }
    
}


#include<stdio.h>
int main()
{
int num;
printf("input num:\n");
scanf("%d",&num);
if(num>10)
{
printf("num>10\n");

    }
    else
    {
        printf("num<10\n");
    }
    
}

(3) if....else if .....else...
else if 可以有多个后面跟条件
else 结尾 不能跟条件

    #include<stdio.h>
    int main()
    {
        int num =0;
        printf("input num:");
        scanf("%d",&num);
        if(num==100)
        {
            printf("该数是100\n");
            
        }
        else if(num>100)
        {
            printf("%d>100\n",num);
            
        }
        else
        {
            printf("%d<100\n",num);
        }
        
    }

练习:
90--100:优秀
80--90: 良好
60--80: 一般
0--60 :不及格

 #include<stdio.h>
 int main()
{
   int a =0;

printf("input a :");
scanf("%d",&a);
if(a>=90)
    {
         printf("优秀\n");
    }
else if(a>=80)
    {
        printf("良好\n");
    }
else if((a>=60)&&(a<80))  //这里的里面的
          括号为表示一个表达式为
         一个整体  不加也行
   {
        printf("一般\n");
   }
else
   {
        printf("不及格\n");
   }
}

(5) 使用if的注意事项
1.判断一个区间的写法
80<num<=90 这种写法错误
num>80 && num<=90 这种写法正确

2.if条件句后面只有一条语句时,可以不加{}
if(1)
printf("hello\n"); 在不加花括号
的情况下 if条件成立 只执行这一条语句
printf("world\n"); 这条不执行
有效语句只有:printf("hello\n");

3.if条件句后面只有一条语句时,可以不加{};但此语句不能为变量定义语句
#include<stdio.h>
int main()
{
if(1)
{
printf("hello\n");
nt num =10; // 定义在此处会报错
他只能执行到花括号里面
printf("world\n");
}
printf("%d",num); //把这层移到花括号里面才能执行

    }

在if的{}里面定义的变量,只能在{}中使用,在{}之外无效!!

2.分支结构 switch....case
     (1) switch(option)
           {
               case :
               {
                   语句1
                   break; 
               } 
               case :
               {
                   语句2
                   break; 
               } 
               default:
               {
                   语句;
               }   
           }

根据option 的值选择执行case语句,若没有与之对应的case语句,则执行default
default 可以放在任意位置 但里面要用break 跳出
break作用 若不加 则会按顺序输出所有case里面的语句直到遇到break为止
若没有break 便会全部输出
#include<stdio.h>
int main()
{
char ch;
printf("input ch:");
scanf("%c",&ch);
switch (ch)
{
case 'l':
{
printf("linux\n");
break;
}
case 'w':
{
printf("windows\n");
break;
}
default:
{
printf("error\n");

        }
   }
    
}
3.循环结构
  while()         do{}while()        for(;;)

(1) while (表达式)
{
//执行语句;
}
先判断条件是否满足执行条件,满足则执行循环体
不满足则退出循环
若条件满足。则执行循环体,每执行一次循环体
进行一次条件判断
#include<stdio.h>
int main()
{
int num =5;
printf("input num:");
scanf("%d",&num);
while(num>5)
{
printf("num=%d\n",num--); 每执行依次
就要回到条件语句进行判断
}
printf("hi,shanghai");

}

#include<stdio.h>
int main()
{
   int sum =0;
   int i =1;
 
   while(i<=100)
   {
        sum+=i;
        i++;
   }
   printf("%d\n",sum);
    
}

(2) break/continue
break:
跳出当前循环 结束整个循环
continue:
跳过本次循环,进行下一次循环
#include<stdio.h>
int main()
{
int num=4;
while(num>3)
{
printf("num=%d\n");
continue;只执行这句前面的语句 并进行死循环,
不执行continue下面的语句
printf("===========\n");
}

  }

练习: 1--100的和把尾数为四的数去掉
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
while(i<=100)
{
i++;
if(i%10==4)
continue;
sum+=i;
}
printf("%d\n",sum);

    }

(3)do
{

}while(); 先执行后判断

#include<stdio.h>
int main()
{
   int i=0;
   int sum=0;
   do
   {
      sum+=i;
      i++;
   }while(i<=100);  注意这里有分号
   printf("sum=%d\n",sum);
}

(4) for(表达式1;表达式2;表达式3)
{
//循环体;
}
表达式1:循环条件初始化
表达式2:循环结束条件或者循环执行条件
表达式3:循环步长或者变量值的更新
注:表达式1,2,3可以任意省略,或全部省略
但是,“;;”不能省略!!!!!

            #include<stdio.h>
            int main()
            {
               int sum=0;
               int i=1;
               for(;i<=100;++i)
               {
                   sum+=i;
               }
               printf("sum=%d\n",sum);
            }
上一篇下一篇

猜你喜欢

热点阅读