運算符和條件結構
表達式:是有操作數和運算符組成的。
操作數:常量、變量、子表達式
X=(x+2)*(y-2);
運算符:
賦值運算符:= 。其作用是做賦值運算,將等號後邊的值賦值給等號前邊的。
復合賦值運算符: +=,-=,*=,/=,%=
//復合運算符 int x=10; printf("%d\n",x+=5);//x=x+5;==>x=15 printf("%d\n",x-=5);//x=x-5;==>x=10 printf("%d\n",x*=5);//x=x*5;==>x=50 printf("%d\n",x/=5);//x=x/5;==>x=10 printf("%d\n",x%=5);//x=x%5;==>x=0
算術運算符: 做算術運算。
二元運算符:+,-,*,/,%
一元運算符: ++,--
如果++或—放在操作數的前面(++i或--i),先做自加或自減操作,再做其他操作
如果++或—放在操作數的後面(++i或--i),先做其他操作,再自加或自減操作
關系運算符(比較運算符):用於比較兩個操作數之間的關系。
>,>=,<,<=,!=,==
註意:在C語言中0代表假,非零代表真。
邏輯運算符: 連接一個或多個條件
&&(與):並且----> 一假必假
||(或): 或者--->一真必真
!(非):取反-à非真必假,非假必真。
條件語句
簡單的if條件結構:
語法:
if(條件){
//語句;
}
int age; printf("請輸入您的年齡:\n"); scanf("%d",&age); if(age<18) { printf("未成年!\n"); } if(age>=18) { printf("成年!\n"); }
if…else 條件結構
語法:
if(條件){
語句1;
}else{
語句2;
}
//判斷是否成年 if(age<18) { printf("未成年!"); } else { printf("成年!"); }
//判斷奇偶數 int num; printf("請輸入一個整數:\n"); scanf("%d",&num); if(num%2==0){ printf("%d是一個偶數!\n",num); }else{ printf("%d是一個奇數!\n",num); }
/*判斷用戶輸入的數是否為水仙花數(三位數: 個位的3次方+十位的3次方+百位的3次方=這個數) eg: 153=1^3+5^3+3^3 思路: 1.獲取用戶輸入的3位數。 2.從這個3位數中分別獲取個位,十位,百位 3.判斷該數字是否為水仙花數: 個位^3+十位^3+百位^3==這個數本身*/ int num,ge,shi,bai,he;//保存用戶輸入的3位數 printf("請輸入一個3位數:"); scanf("%d",&num);//獲取用戶輸入的3位數 ==>123 ge = num%10;//獲取個位 123%10==>3 shi = num/10%10;//獲取十位 123/10==>12%10==>2 bai = num/100;//獲取百位 he = ge*ge*ge+shi*shi*shi+bai*bai*bai; if(he==num){ //printf("進入if中..."); printf("%d是水仙花數!\n",num); }else{ //printf("進入else中..."); printf("%d不是水仙花數!\n",num); }
//判斷用戶輸入的字符是否為小寫字母 char c; printf("請輸入一個字母:\n"); scanf("%c",&c); /* if(c>=‘a‘&&c<=‘z‘){ printf("您輸入的%c字符為小寫字母!\n",c); }else{ printf("您輸入的%c字符非小寫字母!\n",c); } */ if(c<‘a‘||c>‘z‘){ printf("您輸入的%c字符非小寫字母!\n",c); }else{ printf("您輸入的%c字符為小寫字母!\n",c); }
/*判斷用戶輸入的年份是否屬於閏年 分析閏年的判斷條件:(能被4整除並且不能被100整除)或者(能被400整除) */ int year; printf("請輸入年份:\n"); scanf("%d",&year);//獲取用戶輸入的年份 if((year%4==0&&year%100!=0)||(year%400==0)){ printf("%d是閏年,一年有366天!\n",year); }else{ printf("%d是平年,一年有365天!\n",year); }
/*實現一個猜拳的小遊戲 分析: 0代表剪刀,1代表石頭,2代表布 用戶AVS用戶B 用戶A勝==> 1.用戶A:0&&用戶B:2 2.用戶A:1&&用戶B:0 3.用戶A:2&&用戶B:1 平局: 用戶A==用戶B 用戶A敗: 1.用戶A:0&&用戶B:1 2.用戶A:1&&用戶B:2 3.用戶A:2&&用戶B:0*/ int userA,userB; printf("**************************************\n"); printf("*************尚學堂猜拳小遊戲***********\n"); printf("**************************************\n"); printf("0代表剪刀,1代表石頭,2代表布\n"); printf("請用戶A出拳:\n"); scanf("%d",&userA); printf("請用戶B出拳:\n"); scanf("%d",&userB); //用戶A勝 if((userA==0&&userB==2)||(userA==1&&userB==0)||(userA==2&&userB==1)){ printf("恭喜用戶A,你獲勝了~~~~~\n"); } //平均 if(userA==userB){ printf("兩位選手旗鼓相當,平局!\n"); } //用戶A敗 if((userA==0&&userB==1)||(userA==1&&userB==2)||(userA==2&&userB==0)){ printf("恭喜用戶B,你獲勝了~~~~~\n"); }
sizeof運算符:用於查看數據類型在內存所占用的字節數。
用法:sizeof(type_name)
printf("short類型占%d個字節\n",sizeof(short)); printf("int類型占%d個字節\n",sizeof(int)); printf("long類型占%d個字節\n",sizeof(long)); printf("float類型占%d個字節\n",sizeof(float)); printf("double類型占%d個字節\n",sizeof(double)); printf("char類型占%d個字節\n",sizeof(char));
_____________________________________________
綜合練習
/*判斷一個5位數是否為回文數(個位和萬位相同,十位和千位相同)*/ int num,ge,shi,qian,wan; printf("請輸入一個5為整數:\n"); scanf("%d",&num); //分解該數中個位,十位,千位和萬位 ge = num%10;//個位 shi=num/10%10;//十位 qian=num/1000%10;//千位 wan=num/10000;//萬位 if((ge==wan)&&(shi==qian)){ printf("%d是回文數\n",num); }else{ printf("%d不是回文數\n",num); }
______________________________________________
多重If條件結構:
基本語法:
if(條件1){
//語句1
}else if(條件2){
//語句2
}else if(條件3){
//語句3
}….
}else {
//語句N;
}
註意1:條件的範圍和位置是有可能影響執行結果的,正確排放條件的方式:
範圍小的條件-->範圍大的條件
/*根據用戶輸入的成績動態判斷該成績對應的結果(90以上:優;80~90:良;60~80:中;60以下:差)*/ int score; printf("請輸入成績:\n"); scanf("%d",&score); if(score>100||score<0){ printf("您輸入的成績有誤,成績應該在0~100之間!\n"); }else{ if(score>=90){ printf("優!\n"); }else if(score>=80){ printf("良!\n"); }else if(score>=60){ printf("中!\n"); }else{ printf("差!\n"); } }
if嵌套:一個if語句中包含其他的if語句.
語法:
if(條件){
if(條件2){
語句;
}
}
//判斷用戶輸入的數字是否為玫瑰花數。 int num,ge,shi,bai,qian,he; printf("請輸入一個4位數:\n"); scanf("%d",&num);//獲取用戶輸入的四位數 //判斷該數是否為4位數 if(num>999&&num<10000){ ge = num%10;//個位 shi = num/10%10;//十位 bai = num/100%10;//百位 qian = num/1000;//千位 he = ge*ge*ge*ge+shi*shi*shi*shi+bai*bai*bai*bai+qian*qian*qian*qian; if(num==he){ printf("%d是一個玫瑰花數!\n",num); }else{ printf("%d不是一個玫瑰花數!\n",num); } }else{ printf("您輸入的不是一個4位數,請重新輸入!"); }
switch條件結構: 代替多重if結構做等值判斷。
註意:
1.case後的常量值不能相同。
2.switch中的表達式必須是int類型或char類型。
3.case中如果沒有break關鍵字,將出現case穿透。
switch(表達式){
case 值1:
語句1;
break;
case 值2:
語句2;
break;
....
default:
語句N;
}
//令狐沖參加武林大會,第一名獎勵:葵花寶典;第二名:辟邪劍譜 第三名:吸星大法 ;其他:逐出師門! /* int num; printf("請輸入令狐沖的名稱:\n"); scanf("%d",&num); if(num==1){ printf("獎勵葵花寶典一本!\n"); }else if(num==2){ printf("獎勵辟邪劍譜一本!\n"); }else if(num==3){ printf("獎勵吸星大法一本!\n"); }else{ printf("逐出師門!\n"); }*/ //使用switch代替多重if做條件判斷 switch(num){ case 1: printf("獎勵葵花寶典一本!\n"); break; case 2: printf("獎勵辟邪劍譜一本!\n"); break; case 3: printf("獎勵吸星大法一本!\n"); break; default: printf("逐出師門!\n"); }
int score; printf("請輸入分數:\n"); scanf("%d",&score); if(score>=0&&score<=100){ switch(score/10){ case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("E\n"); break; } }else{ printf("輸入的分數有誤!\n"); }
//利用switch中的case穿透實現計算指定日期為一年的第多少天? int year,month,date,totalDays=0; int isRun=0;//平年和閏年相差的天數 printf("請輸入日期(yyyy-MM-dd)\n"); scanf("%d-%d-%d",&year,&month,&date);//獲取年月日 2017-5-9 if((year%4==0&&year%100!=0)||(year%400==0)){ isRun=1; } switch(month){ case 12: totalDays+=30;//加上11月份的天數 case 11: totalDays+=31;//加上10月份的天數 case 10: totalDays+=30;//加上9月份的天數 case 9: totalDays+=31;//加上8月份的天數 case 8: totalDays+=31;//加上7月份的天數 case 7: totalDays+=30;//加上6月份的天數 case 6: totalDays+=31;//加上5月份的天數 case 5: totalDays+=30;//加上4月份的天數 case 4: totalDays+=31;//加上3月份的天數 case 3: totalDays+=28+isRun;//加上2月份的天數 case 2: totalDays+=31;//加上1月份的天數 case 1: totalDays+=date;//加上日期 } printf("%d-%d-%d是一年中第%d天\n",year,month,date,totalDays);
/*根據用戶輸入的字符,判斷該字符的類別。 0~32:控制字符 ‘0‘~‘9‘:數字 ‘A‘~‘Z‘:大寫字母 ‘a‘~‘z‘:小寫字母 剩余的為其余字母。*/ char c; printf("請輸入一個字符:"); //scanf("%c",&c); c=getchar(); if(c<32){ printf("控制字符!\n"); }else if(c>=‘0‘&&c<=‘9‘){ printf("數字!\n"); }else if(c>=‘A‘&&c<=‘Z‘){ printf("大寫字母!\n"); }else if(c>=‘a‘&&c<=‘z‘){ printf("小寫字母"); }else{ printf("其他字符!\n"); }
/*個人所得稅計算器 應納稅所得額 = 稅前工資收入金額 - 起征點(3500元) 應納稅額 = 應納稅所得額 x 稅率 - 速算扣除數*/ float salary,taxSalary,tax,realSalary; printf("請輸入的您的稅前工資:\n"); scanf("%f",&salary);//獲取稅前工資 taxSalary=salary-3500;//應納稅所得額(應納稅的工資部分) if(taxSalary>0&&taxSalary<=1500){ tax = taxSalary*0.03; }else if(taxSalary>1500&&taxSalary<=4500){ tax = taxSalary*0.1-105; }else if(taxSalary>4500&&taxSalary<=9000){ tax = taxSalary*0.2-555; }else if(taxSalary>9000&&taxSalary<=35000){ tax = taxSalary*0.25-1005; }else if(taxSalary>35000&&taxSalary<=55000){ tax = taxSalary*0.3-2755; }else if(taxSalary>55000&&taxSalary<=80000){ tax = taxSalary*0.35-5505; }else if(taxSalary>80000){ tax = taxSalary*0.45-13505; } realSalary = salary-tax;//計算稅後工資 printf("您的工資:¥%0.2f,應繳個稅:¥%0.2f,稅後工資:¥%0.2f\n",salary,tax,realSalary);
條件運算符(三目運算符):? 代替if...else結構
語法:條件表達式?表達式1:表達式2
int a,b,max; printf("請輸入兩個數:\n"); scanf("%d %d",&a,&b); //if(a>b){ // max=a; //}else{ // max=b; //} max=a>b?a:b; printf("%d和%d中最大的是%d",a,b,max);
運算符和條件結構