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

上一篇:Nodejs的模块系统以及require的机制


下一篇:JavaScript数组常见操作