1.類型轉(zhuǎn)化
5/3=1
9.120000/7.000000=1.302857
隱式轉(zhuǎn)化:
float_f=int t/int t1
當賦值號兩邊類型不同時十拣,自動轉(zhuǎn)化為精度較高的類型。
5/3=1.000000
強制類型轉(zhuǎn)化,并不改變變量的類型,只臨時作一次類型轉(zhuǎn)化
float f=(float)int t/int t1
#include<stdio.h>
int main()
{
int num=4;
int num1=3;
float dev;
//隱式轉(zhuǎn)化
dev=num/num1;
//顯示轉(zhuǎn)化
float dev1=(float)num/num1;
printf("%f %f\n",dev,dev1);
}
2.進制轉(zhuǎn)換
(1)二進制數(shù):由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)八進制數(shù):由0~7組成的,八進制數(shù)開頭是數(shù)字0,以區(qū)分八進制數(shù)
0345 0123 0765 0765 八進制不能有8 0987 這就是錯的
(3)十六進制數(shù):由數(shù)字0~9和字母a~f或者A~F組成成福,
并且以0x或者0X開頭
0x123 0xab34 0xABf35
(4)進制數(shù)的轉(zhuǎn)化關系
二進制數(shù):1111
十進制數(shù):8421
3.位操作 (先轉(zhuǎn)化為二進制)
&:位與 (對應位同時為1,結(jié)果為1荆残,否則為0E!内斯!)
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 就這樣理解 任何數(shù)以負數(shù)減一
^:異或 (對應位不同為1,相同為0)
53=01010011=0110=6
#include<stdio.h>
int main()
{
int num=4^7;
printf("num=%d\n",num);
}
<<:左移
即轉(zhuǎn)化為二進制俘闯,然后左移2位潭苞,低位補0
左移幾位,則乘以2的幾次方!!!
8*2^2=32
8<<2 =1000=100000=32
>>:右移
與左移相反
8/2^2
9>>2 =2 高位溢出
8>>2 =1000=0010=2
4.賦值操作符
=: 賦值號(把右側(cè)值賦給左側(cè)值)
+=: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;// 這里要賦值 不然結(jié)果會累加
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; 表達式同時為真备徐,結(jié)果為真
注意:當表達式1為假時萄传,表達式2無需運算甚颂,真題結(jié)果為假
||:邏輯或
表達式1 || 表達式2; 一個表達式為真蜜猾,結(jié)果為真
注意:當表達式1為真時,表達式2無需運算振诬,真題結(jié)果為真
!:非
蹭睡!表達式 ; 表達式為真,結(jié)果為假
#######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為真,則執(zhí)行表達式2 否則執(zhí)行表達式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 ------>三個數(shù)求max;
a>b?(a>c?a:c):(b>c?b:c)
#include<stdio.h>
int main()
{
int a,b,c,max;
printf("輸入數(shù):\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.運算符的優(yōu)先級
括號成員第一,全體單目第二清钥,乘除余三琼锋,加減四;
位移五,關系六祟昭,等于不等排第七缕坎;
位與,異或和位或八九十篡悟;
邏輯或和與十二與十一谜叹;
條件高于賦值,逗號運算最低搬葬;
二.c語言的三大結(jié)構(gòu)
順序結(jié)構(gòu)荷腊、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
1.順序結(jié)構(gòu)
(1) if (表達式) 這里條件為真(1)就執(zhí)行花括號里面的內(nèi)容 為假(0)則不執(zhí)行
#include<stdio.h>
int main()
{
int num =8;
if(1) //這里條件為真(1)就執(zhí)行花括號里面的內(nèi)容 為假(0)則不執(zhí)行
{
printf("num=%d\n",num);
}
printf("hello,world\n");
}
(2) if.......else....(if成立就執(zhí)行 否則執(zhí)行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的倍數(shù)\n",num);
}
else
{
printf("%d 不是3和5的倍數(shù)\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 結(jié)尾 不能跟條件
#include<stdio.h>
int main()
{
int num =0;
printf("input num:");
scanf("%d",&num);
if(num==100)
{
printf("該數(shù)是100\n");
}
else if(num>100)
{
printf("%d>100\n",num);
}
else
{
printf("%d<100\n",num);
}
}
練習:
90--100:優(yōu)秀
80--90: 良好
60--80: 一般
0--60 :不及格
#include<stdio.h>
int main()
{
int a =0;
printf("input a :");
scanf("%d",&a);
if(a>=90)
{
printf("優(yōu)秀\n");
}
else if(a>=80)
{
printf("良好\n");
}
else if((a>=60)&&(a<80)) //這里的里面的
括號為表示一個表達式為
一個整體 不加也行
{
printf("一般\n");
}
else
{
printf("不及格\n");
}
}
(5) 使用if的注意事項
1.判斷一個區(qū)間的寫法
80<num<=90 這種寫法錯誤
num>80 && num<=90 這種寫法正確
2.if條件句后面只有一條語句時急凰,可以不加{}
if(1)
printf("hello\n"); 在不加花括號
的情況下 if條件成立 只執(zhí)行這一條語句
printf("world\n"); 這條不執(zhí)行
有效語句只有:printf("hello\n");
3.if條件句后面只有一條語句時女仰,可以不加{};但此語句不能為變量定義語句
#include<stdio.h>
int main()
{
if(1)
{
printf("hello\n");
nt num =10; // 定義在此處會報錯
他只能執(zhí)行到花括號里面
printf("world\n");
}
printf("%d",num); //把這層移到花括號里面才能執(zhí)行
}
在if的{}里面定義的變量,只能在{}中使用香府,在{}之外無效6浴!
2.分支結(jié)構(gòu) switch....case
(1) switch(option)
{
case :
{
語句1
break;
}
case :
{
語句2
break;
}
default:
{
語句;
}
}
根據(jù)option 的值選擇執(zhí)行case語句企孩,若沒有與之對應的case語句锭碳,則執(zhí)行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.循環(huán)結(jié)構(gòu)
while() do{}while() for(;;)
(1) while (表達式)
{
//執(zhí)行語句;
}
先判斷條件是否滿足執(zhí)行條件勿璃,滿足則執(zhí)行循環(huán)體
不滿足則退出循環(huán)
若條件滿足擒抛。則執(zhí)行循環(huán)體,每執(zhí)行一次循環(huán)體
進行一次條件判斷
#include<stdio.h>
int main()
{
int num =5;
printf("input num:");
scanf("%d",&num);
while(num>5)
{
printf("num=%d\n",num--); 每執(zhí)行依次
就要回到條件語句進行判斷
}
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:
跳出當前循環(huán) 結(jié)束整個循環(huán)
continue:
跳過本次循環(huán)补疑,進行下一次循環(huán)
#include<stdio.h>
int main()
{
int num=4;
while(num>3)
{
printf("num=%d\n");
continue;只執(zhí)行這句前面的語句 并進行死循環(huán)歧沪,
不執(zhí)行continue下面的語句
printf("===========\n");
}
}
練習: 1--100的和把尾數(shù)為四的數(shù)去掉
#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(); 先執(zhí)行后判斷
#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)
{
//循環(huán)體;
}
表達式1:循環(huán)條件初始化
表達式2:循環(huán)結(jié)束條件或者循環(huán)執(zhí)行條件
表達式3:循環(huán)步長或者變量值的更新
注:表達式1,2莲组,3可以任意省略诊胞,或全部省略
但是,“;;”不能省略!G妈尽D旃隆!竭望!
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
for(;i<=100;++i)
{
sum+=i;
}
printf("sum=%d\n",sum);
}