首页 > 代码库 > 运算符和条件结构

运算符和条件结构

表达式:是有操作数和运算符组成的。

操作数:常量、变量、子表达式

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

 

运算符和条件结构