文章目录
一、分支语句
1. if — else
基本格式:
if( 条件)
{
True执行;
}
else
{
False执行;
}
要点:
- 在 if 后加 ; 会变成空语句,条件为真:既执行空白部分,原条件部分无论真假都执行
- 注意格式 { } 的规范使用会大大增强代码的可阅读性
- 在使用 if 语句嵌套是注意:else与他前面最近的 if 配对
- 一些简单的 if — else语句可以用三目运算符来替代
int MAX(int a, int b) {
int max = 0;
if (a > b)
{
max = a;
}
else
{
max = b;
}
return max;
}
等价于:
int MAX(int a, int b) {
return a > b ? a : b;
}
三目运算符(条件表达式 ? x :y)
x和y的类型要一致
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
c = a > b ? a : b ; //将a、b中最大的值赋值给c ,并不改变原a、b的大小
printf("a %d\n",a);
printf("c %d\n",c);
}
结果:
在c++中三目运算符的返回值是变量,在c中返回值是值
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
a > b ? a : b = 100; //将a、b中较大的值赋值为100 (c++下可)
printf("a %d\n",a);
printf("b %d\n",b);
}
结果:
2.switch—case
基本格式:
switch(整型表达式)
{
case 常量1:
语句块1;
break; //跳出switch语句
case 常量1:
语句块1;
break;
……
default: //其他情况 (不是必须的,如果没有case匹配,没有default就什么也不执行)
语句块……;
break;
}
要点:
- switch语句只适用于整形变量(char、short、int……)不能是浮点数、字符串
- case的标签必须是常量表达式,如42 、 4+‘20’
示例:输出成绩等级
#include<stdio.h>
int main() {
char ch = '#';
printf("输入A、B、C、D任意一个:");
scanf_s("%c",&ch,1);
switch (ch)
{
case 'A':
case 'a':
printf("优秀");
break;
case 'B':
case 'b':
printf("良好");
break;
case 'C':
case 'c':
printf("及格");
break;
case 'D':
case 'd':
printf("不及格");
break;
default:
printf("输入错误");
break;
}
}
恰当使用 break
二、循环语句
1.for
for(表达式1; 判断语句; 自增\减)
{
循环语句;
}
for 的各种省略形式:
三个表达式都可以省略,但( ; ; )必须保留
表达式1; //int i = 0;
for( ; 判断语句; 自增\减)
{
循环语句;
}
for(表达式1; 判断语句; )
{
循环语句;
自增\减;
}
表达式1;
for( ; ; )
{
if(判断语句)
循环语句;
else
break;
自增\减;
}
2.whlie
一般形式:
while(true)
{
循环语句;
自增\减;
}
从键盘接收数字并累计求和
#include<stdio.h>
int main()
{
int n = 0;
int sum = 0;
printf("请输入整形数列以空格间隔,以0结束:");
scanf("%d",&n);
while(n != 0)
{
sum += n;
scanf("%d",&n);
}
printf("sum = %d\n",sum);
return 0;
}
逗号表达式 (表达式1,表达式2,表达式3……表达式n)
要点:
- 运算过程:从左往右逐个计算
- 逗号表达式是一个整体,其值为最后一个(表达式n)的值
- 逗号运算符优先级最低
#include<stdio.h>
int main()
{
int x = 0;
int y = 0;
int n1 = 0;
int n2 = 0;
n1 = (x++, ++y, y++); //1 真正的逗号表达式
n2 = x++, ++y, y++; //1 (n2 = x++), y++, ++y ps:=的优先级比逗号高
printf("n1: %d\nn2: %d\n",n1,n2);
printf("%d\n",(x++, ++y, y++)); //5
return 0;
}
注意前置++和后置++的区别; 注意其他运算符带来的影响
例:从键盘接收数字并累计求和(逗号表达式改写)
#include<stdio.h>
int main()
{
int n = 0;
int sum = 0;
printf("请输入整形数列以空格间隔,以0结束:");
while((scanf("%d",&n)) &&n != 0) //每次进入前,先输入n 再比较
{
sum += n;
}
printf("sum = %d\n",sum);
return 0;
}
3.do — whlie
do
{
循环语句;
自增/减;
}while(判断语句)
例:计算输入整型数值的位数
#include<stdio.h>
int main()
{
int i = 0;
int n,m;
printf("请输入一个整型数值:");
scanf("%d",&n);
m = n;
do
{
++i;
n = n / 10;
}while(n > 0);
printf("%d 是 %d位数",m,i);
return 0;
}
三、跳转语句
1.break
用于switch语句和循环语句中,跳出switch语句、终止循环,执行后边的语句
2.continue
只能用于循环语句,且一般仅用于for 循环;用来终止本次循环开始下次循环。(而break是结束整个循环)
3.goto
goto语句一般与标号语句一起使用,控制程序从goto语句的地方跳转到标号语句处
#include<stdio.h>
int main()
{
for(int i=0; i<100; ++i)
{
for(int j=0; j<100; ++j)
{
for(int k=0; k<100; ++k)
{
goto input;
}
}
}
input:
printf("main end\n");
return 0;
}
结果:
4.return
用于结束函数的执行,返回调用者,如果是主函数,则返回至操作系统(终止程序的执行)
exit
-
定义于<stdlib.h>头文件中
-
exit(0) 或 exit(EXIT_SUCCESS) 表示程序正常结束
exit(1) 或 exit(EXIT_FAILURE) 表示程序非正常结束 -
EXIT_SUCCESS 和 EXIT_FAILURE 都是定义在<stdlib.h>中的宏;EXIT_SUCCESS = 0 ; EXIT_FAILURE = 1。
return和exit的区别:
无论在哪个函数中调用exit程序都会结束;而只有在main函数中调用return函数才会导致程序终止