1. 程式人生 > >C語言之運算符和條件結構

C語言之運算符和條件結構

比較運算 第三名 user 石頭 年齡 pan 註意 break -1

表達式:是有操作數和運算符組成的。

操作數:常量、變量、子表達式

X=x+2*(y-2);

運算符:

  1. 賦值運算符:= 。其作用是做賦值運算,將等號後邊的值賦值給等號前邊的。
  2. 復合賦值運算符: +=,-=,*=,/=,%=

Eg: x+=5 ;x=x+5;

//復合運算符

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

  1. 算術運算符: 做算術運算。

二元運算符:+-*/%

一元運算符: ++,--

如果++放在操作數的前面(++i--i),先做自加或自減操作,再做其他操作

如果++放在操作數的後面(++i--i),先做其他操作,再自加或自減操作

  1. 關系運算符(比較運算符):用於比較兩個操作數之間的關系。

>,>=,<,<=,!=,==

註意:C語言中0代表假,非零代表真。

int x=10,y=5,i=20,j=30;

printf("%d\n",x<y);

printf("%d\n",x>=y);

printf("%d\n",x!=y);

printf("%d",(x+y)==(i+j));

5. 邏輯運算符: 連接一個或多個條件

&&():並且----à 一假必假

||(): 或者---à一真必真

():取反-à非真必假,非假必真。

條件語句

  1. 簡單的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("成年!");

}

示例2:判斷奇偶數

int num;

printf("請輸入一個整數:\n");

scanf("%d",&num);

if(num%2==0){

printf("%d是一個偶數!\n",num);

}else{

printf("%d是一個奇數!\n",num);

}

示例3:判斷用戶輸入的數是否為水仙花數(三位數: 個位的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);

}

示例4: 判斷用戶輸入的字符是否為小寫字母

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);

}

示例5: 判斷用戶輸入的年份是否屬於閏年

分析閏年的判斷條件:(能被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);

}

示例6:實現一個猜拳的小遊戲

分析: 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);

}

作業1:判斷用戶輸入的數字是否為玫瑰花數。

四葉玫瑰數是指四位數各位上的數字的四次方之和等於本身的數

思路:

1.獲取用戶輸入的4位數

2.分解這個4位數:從該數中提取出個位,十位,百位,千位

3.判斷是否為玫瑰花數: 個位^4+十位^4+百位^4+千位^4==這個數

int num,ge,shi,bai,qian,he;

printf("請輸入一個4位數:\n");

scanf("%d",&num);//獲取用戶輸入的四位數

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);

}

作業2:輸入年份,月份和日期,計算該日期是一年中第多天。

思路:

1.獲取用戶輸入年,月,日

2.判斷該年是否為閏年(閏年的2月有29天,平年2月28天)

3.計算總天數 = 日期+當前月前N個月的總天數

前N個月的總天數 = 每個月份的天數累加;

eg: 3月3日=1月的天數(31天)+二月天數(28天或29天)+3月份的日期

int year,month,date,totalDays;

int isRun=0;//平年和閏年相差的天數

printf("請輸入日期(yyyy-MM-dd)\n");

scanf("%d-%d-%d",&year,&month,&date);//獲取年月日 2017-5-9

//判斷是否為閏年:能被4整除不能被100整除,或者能被400整除

if((year%4==0&&year%100!=0)||(year%400==0)){

isRun=1;

}

if(month==1){

totalDays=date;//如果用戶輸入的是1月份的日期,其第N天剛好為日期

}

if(month==2){

totalDays=31+date;//如果是2月份:總天數=1月份的總天數+日期

}

if(month==3){

totalDays=31+28+isRun+date;//如果是3月份,總天數=1月份的天數+2月的天數+日期

}

if(month==4){

totalDays=31+28+isRun+31+date;

}

if(month==5){

totalDays=31+28+isRun+31+30+date;

}

if(month==6){

totalDays=31+28+isRun+31+30+31+date;

}

if(month==7){

totalDays=31+28+isRun+31+30+31+30+date;

}

if(month==8){

totalDays=31+28+isRun+31+30+31+30+31+date;

}

if(month==9){

totalDays=31+28+isRun+31+30+31+30+31+31+date;

}

if(month==10){

totalDays=31+28+isRun+31+30+31+30+31+31+30+date;

}

if(month==11){

totalDays=31+28+isRun+31+30+31+30+31+31+30+31+date;

}

if(month==12){

totalDays=31+28+isRun+31+30+31+30+31+31+30+31+30+date;

}

printf("%d-%d-%d是一年中第%d天\n",year,month,date,totalDays);

多重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");

}

示例2

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");

}

示例3:利用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);

示例4: 根據用戶輸入的字符,判斷該字符的類別。

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");

}

示例5個人所得稅計算器

應納稅所得額 = 稅前工資收入金額 - 起征點(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);

C語言之運算符和條件結構