首页 > 代码库 > C语言之运算符和条件结构

C语言之运算符和条件结构

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

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

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语言之运算符和条件结构