表达式:是有操作数和运算符组成的。
操作数:常量、变量、子表达式
X=(x+2)*(y-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 |
- 算术运算符: 做算术运算。
二元运算符:+,-,*,/,%
一元运算符: ++,--
如果++或—放在操作数的前面(++i或--i),先做自加或自减操作,再做其他操作
如果++或—放在操作数的后面(++i或--i),先做其他操作,再自加或自减操作
- 关系运算符(比较运算符):用于比较两个操作数之间的关系。
>,>=,<,<=,!=,==
注意:在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. 逻辑运算符: 连接一个或多个条件
&&(与):并且----à 一假必假
||(或): 或者---à一真必真
!(非):取反-à非真必假,非假必真。
条件语句
- 简单的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); |