语句入门"/>
基础3.1:控制语句入门
文章目录
- 1\. 条件判断语句
- 1.1 `if-else`语句
- 1.2 `if`语句
- 1.3 `If-else if-else`语句
- 1.4 `switch-case`语句
- 2\. 循环语句
- 2.1 `while`语句
- 2.2 `do-while`语句
- 2.3 `for`语句
- 2.4 `break`语句和`continue`语句
- 3\. 简化写法
- 1\. 省略大括弧
- 2\. 三元运算符`:?`
- 3\.逗号运算符`,`
- 4.综合
- 案例4.1: 输入一个日期,计算出是这一天是星期几?
- 案例4.2: 打印出当月的日历,例如:2019年3月日历
- 案例4.3:身份证信息的打印
- 1.原理
- 1.1 构成
- 1.2 地址码
- 1.3 出生日期码
- 1.4 顺序码
- 1.5 校验码
- 1.6 校验
- 2\. 操作
- 案例4.4:个税计算器
- 1\. 业务
- 1.1 月薪个人所得税
- 1.2 年终奖个人所得税
- 2 . 功能
- 2.1 初级功能
- 2.2 高级功能
- 3. 分析
1. 条件判断语句
1.1 if-else
语句
- 语法
if(条件){/* 如果表达式为真将执行的语句 */}else{/* 如果表达式为假将执行的语句 */}
- 说明
- 大括号内的语句整体称为复合语句(compound statement)或者代码块/程序块(block)。
- 代码块与
if
之间使用空格或者Tab缩进,不影响编译和执行,只是为了提高代码可读性。
- 练习1
- 比较两个数的大小
- 求一个数的相反数和绝对值
- 闰年判断
- 三角形构成判断
(完整代码见001——exe)
1.1可以采用if-else
完整代码见00101_CompareTwoNum.c
#include <stdio.h>main(){int n,m;printf("请输入一个数字:");scanf("%d",&n);printf("请再输入一个数字:");scanf("%d",&m);// if-else嵌套if(n==m){printf("两个数字相等");}else{if(n>m){printf("最大的数是%d\n",n);}else{printf("最大的数是%d\n",m);}}
}
1.2.可以采用if,else-if, else的比较
完整代码见00102_CompareTwoNum.c
#include <stdio.h>main(){int n,m;/*printf("请输入一个数字:");scanf("%d",&n);printf("请再输入一个数字:");scanf("%d",&m);*/printf("请输入两个数字(以空白符隔开):");scanf("%d%d",&n,&m);// if-else ifif(n==m){printf("两个数字相等");}else if(n>m){printf("最大的数是%d\n",n);}else{printf("最大的数是%d\n",m);}
}
2.(完整代码见00102——abs.c)
#include <stdio.h>main(){int n;printf("请输入一个数字:");scanf("%d",&n);if(n>0){// 求一个变量的相反数,只需要在变量前加负号printf("%d的相反数%d,绝对值%d\n",n,-n,n);}else{printf("%d的相反数%d,绝对值%d\n",n,-n,-n);}
}
3.完整代码见00103_leap.c
/** 功能:任意输入一个年份,判断其是否为闰年* 编辑日期:2019-1-29*/ #include <stdio.h> int main(void) { int year; printf("请输入年份:"); /* 循环获取用户输入 */scanf("%d",&year);/*闰年: (1)能被400整除 或者 能被4整除但不能被100整除*/ if (year%400==0 || (year%4==0 && year%100!=0)) { printf("%d年为闰年!\n", year); } else { printf("%d年为非闰年!\n", year); } return 0; }
4.完整代码见00104_leap.c
#include <stdio.h>
#include <math.h>int main() {int a,b,c;printf("Please input the a,b,c:\n");scanf("%d%d%d",&a,&b,&c);if(a+b<=c||a+c<=b||b+c<=a) //判断能否构成三角形(1)printf("不能构成三角形\n");
elseprintf("构成三角形\n"); return 0;
}
1.2 if
语句
- 语法
if(条件){/* 如果表达式为真将执行的语句 */}
- 练习2
打印两位数的整数,如果数字只有各位数,前面补0
。例如:1
打印为01
。(完整代码见002——exe: 00201_getNum.c)
#include <stdio.h>int main(){int n;printf("请输入一个数字:");scanf("%d",&n);if(n<10){printf("0%d\n",n);}else{printf("%d\n",n);}
}
1.3 If-else if-else
语句
- 语法
if(条件1){/* 当条件1为真时执行 */} else if(条件2){/* 当条件2为真时执行 */} else if(条件3){/* 当条件3为真时执行 */}else{/* 当上面条件都不为真时执行 */}
- 练习3
- 输入年份和月份,获取这个月的天数
- 输入某年某月某日,判断这一天是这一年的第几天?
- 输入字符,把它转成对应的摩尔斯电码
(完整代码见003_exe)
1.1 方案1:逐个列举
(完整代码见0030101_DateCount.c)
#include <stdio.h>main(){printf("._");printf("请输入日期(yyyy):");int year,month,flags=0;scanf("%d%d",&year,&month);if (year%400==0 || (year%4==0 && year%100!=0)) { flags = 1; } int pre_mouth_days = 0;if(month == 1){pre_mouth_days = 31;}else if(month == 2){if(flags == 1){pre_mouth_days = 29;}else{pre_mouth_days = 28;}}else if(month == 3){pre_mouth_days = 31;}else if(month == 4){pre_mouth_days = 30;}else if(month == 5){pre_mouth_days = 31;}else if(month == 6){pre_mouth_days = 30;}else if(month == 7){pre_mouth_days = 31;}else if(month == 8){pre_mouth_days = 31;}else if(month == 9){pre_mouth_days = 30;}else if(month == 10){pre_mouth_days = 31;}else if(month == 11){pre_mouth_days = 30;}else if(month == 12){pre_mouth_days = 31;}printf("%d\n",pre_mouth_days);}
1.2 方案2:相同月份列举(推荐)
完整代码见0030102_DateCount.c
#include <stdio.h>main(){printf("请输入年份和月份:");int year,mouth;scanf("%d%d",&year,&mouth);if(mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12){printf("%d月有31天",mouth);}else if(mouth == 2){if(year%4==0 && year%100 !=0 ||year%400==0){printf("%d月有29天",mouth);}else{printf("%d月有28天",mouth);}}else if(mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11){printf("%d月有30天",mouth);}else{printf("%d是非法月份",mouth);}
}
2.注意:天数表示在上个月的基础上;(if-else)
(完整代码见00302_DataCount.c)
#include <stdio.h>main(){printf("._");printf("请输入日期(yyyymmdd):");int year,mouth,day;scanf("%d%d%d",&year,&mouth,&day);int sum_days;int pre_mouth_days;if(mouth == 1){pre_mouth_days = 0;}else if(mouth == 2){pre_mouth_days = 31;}else if(mouth == 3){pre_mouth_days = 31+28;}else if(mouth == 4){pre_mouth_days = 31+28+31;}else if(mouth == 5){pre_mouth_days = 31+28+31+30;}else if(mouth == 6){pre_mouth_days = 31+28+31+30+31;}else if(mouth == 7){pre_mouth_days = 31+28+31+30+31+30;}else if(mouth == 8){pre_mouth_days = 31+28+31+30+31+30+31;}else if(mouth == 9){pre_mouth_days = 31+28+31+30+31+30+31+31;}else if(mouth == 10){pre_mouth_days = 31+28+31+30+31+30+31+31;}else if(mouth == 11){pre_mouth_days = 31+28+31+30+31+30+31+31+30+31;}else if(mouth == 12){pre_mouth_days = 31+28+31+30+31+30+31+31+30+31+30;}sum_days = pre_mouth_days + day;if(year%4==0 && year%100 !=0 ||year%400==0){if(mouth > 2){++sum_days;}}printf("%d年%d月%d日是当年第%d天\n",year,mouth,day,sum_days);
}
1.4 switch-case
语句
- 语法
switch(表达式){case 整型常量1:/* 表达式等于整型常量1执行的代码 */break; /* 可选的 */case 整型常量2:/* 表达式等于整型常量2执行的代码 */break; /* 可选的 *//* 您可以有任意数量的 case 语句 */default : /* 可选的 *//* 表达式不等于上面所有情况执行的代码 */}
注意1:. 如果没有break,则会从满足的条件一直执行到break;
switch(n){case 1:printf("1\n"); //如果没有break,则会从满足的条件一直执行到break;//break;case 2:printf("2\n");//break;case 3:printf("3\n");break;}
(完整代码见009_douhao_switch.c)
#include <stdio.h>main(){int n = (1+2,2*3,4-5,5/6);//逗号如果同级,从左到右;printf("n=%d\n",n); //0n = 1+2,2*3,
更多推荐
基础3.1:控制语句入门
发布评论