(一)控制语句入门
一.条件判断语句
1.if-else 语句
语法:
if(条件){
/* 如果表达式为真将执行的语句 */
}else{
/* 如果表达式为假将执行的语句 */
}
2.if 语句
语法:
if(条件){
/* 如果表达式为真将执行的语句 */
}
3.if-else,if-else 语句
语法:
if(条件1){
/* 当条件1为真时执行 */
} else if(条件2){
/* 当条件2为真时执行 */
} else if(条件3){
/* 当条件3为真时执行 */
}else{
/* 当上面条件都不为真时执行 */
}
4.switch-case 语句
语法:
switch(表达式){
case 整型常量1:
/* 表达式等于整型常量1执行的代码 */
break; /* 可选的 */
case 整型常量2:
/* 表达式等于整型常量2执行的代码 */
break; /* 可选的 */
/* 您可以有任意数量的 case 语句 */
default : /* 可选的 */
/* 表达式不等于上面所有情况执行的代码 */
}
例:输入某年某月某日,判断这一天是这一年的第几天
#include<stdio.h>
int main()
{
int year,month,day;
scanf("%d%d%d",&year,&month,&day);
int days=0;
for(int i=1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days += 31;
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
case 2:
if(year%4==0&&year%100!=0||year%400==0){
days += 29;
}else{
days += 28;
}
break;
}
}
days+=day;
printf("%d",days);
}
二.循环语句
1. while 语句
语法:
while(条件){
/* 如果条件为真将重复执行的语句 */
}
说明:
if与while区别在于if只执行一次,但是while重复执行多次直至条件为假。
while语句的代码块通常称为循环体
例:输入一个整数,将其反转。例如:123:321。
#include<stdio.h>
int main{
int n;
int m=0;
scanf("%d",&n);
while(n!=0){
m=m*10+n%10;
n=n/10;
}
printf("%d\n",m);
}
2.do-while 语句
语法:
do {
/* 如果表达式为真将重复执行的语句 */
}while(条件);
例:猜数字
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(){
srand(time(NULL));//用系统时间作随机数播种
int num=rand()%100;//将随机数限制在100以内以防太大
int x;
printf("%d",num);
do{
printf("请输入数字:\n");
scanf("%d",&x);
if(x>num){
printf("太大了\n");
}else if(x<num){
printf("太小了\n");
}
}while(num!=x);
printf("猜对啦");
}
说明:while后有;
while语句与do-while的区别:while先判断后循环,do-while先循环后判断
3.for 语句
语法:
for (初始值;条件;递增或递减){
/* 如果条件为真将重复执行的语句 */
}
说明:for语句与while语句可以相互替换
4.break 语句与 continue 语句
在while和for
循环中,break
是结束整个循环体;continue
是结束单次循环,继续下一次的循环。
(二)运算符与变量
一.逗号表达式
以右边的表达式为结果
例:
int n = (1+2,2*3,4-5,5/6,6%7);
输出为:6
二.短路与&& 短路或||
短路与
&&
:左边表达式是false
,右边就不执行,逻辑表达式值为false
int x = 1; printf("%d\n",1<0 && ++x); printf("x=%d\n",x);
输出为:0
x=1
短路或
||
:左边表达式是true
,右边就不执行,逻辑表达式值为true
。int x = 1; printf("%d\n",1>0 || ++x); printf("x=%d\n",x);
输出为:1
x=1
(三)控制语句
一.for嵌套
例:打印九九乘法表
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int m;
for(int i=0;i<n;i++){
m=i+1;
for(int j=0;j<m;j++){
printf("%dx%d=%d ",i+1,j+1,(i+1)*(j+1));
if((i+1)*(j+1)<10) printf(" ");
}
printf("\n");
}
printf("\n");
}
二.switch-case省略break
输出天数:
int days_of_mouth(int year,int mouth){
int days;
switch(mouth){
case 1:
days = 31;
break;
case 2:
days = (year%4==0&&year%100||year%400==0)?29:28;
break;
case 3:
days = 31;
break;
case 4:
days = 30;
break;
case 5:
days = 31;
break;
case 6:
days = 30;
break;
case 7:
days = 31;
break;
case 8:
days = 31;
break;
case 9:
days = 30;
break;
case 10:
days = 31;
break;
case 11:
days = 30;
break;
case 12:
days = 31;
break;
case 1:
days = 31;
break;
default:
days = -1; // 表示错误
}
return days;
}
省略break:
int days_of_mouth(int year,int mouth){
int days;
switch(mouth){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
days = (year%4==0&&year%100||year%400==0)?29:28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = -1; // 表示错误
}
return days;
}