运算符和条件结构
表达式:是有操作数和运算符组成的。
操作数:常量、变量、子表达式
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);