1. 程式人生 > >運算符和條件結構

運算符和條件結構

比較運算符 結果 switch blog ++ long else if 不能 一個

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

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

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

運算符和條件結構