一、什么是语句
C语言中由一个分号;隔开的就是一条语句
二、分支语句(选择结构)
1.if语句
a.if的表达式
if(表达式) if(表达式) if(表达式1)
语句; 语句1; 语句1;
else else if(表达式2)
语句2; 语句2;
else
语句3;
int main()
{
int age = 20;
if (age < 18)
{ //实行多条命令要大括号
printf("未成年\n");
printf("好好学习\n");
}
else if (age >= 18 && age < 30)
printf("青年");
else if (age > 30 && age < 45)
printf("中年");
else
printf("老年");
return 0;
}
C语言中非零即为真
b.悬空else
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
else就近匹配,建议书写规范使用{ }
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
c.if书写形式对比
两个整型变量比较时,将常量放在左边
int main()
{
int a = 1;
if (5 == a)
{
printf("good");
}
return 0;
}
int main()
{
int a = 0;
for( a =1; a <= 100; a++)
if (a % 2 == 1)
{
printf("%d ", a);
}
return 0;
}
写出100以内的奇数
2.swith分支语句(常用于多分支的情况)
a.swith表达式
语句项:是一些case语句。如:case 整形常量表达式
b.break语句
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("Mon\n");
break;
case 2:
printf("Tue\n");
break;
case 3:
printf("Wed\n");
break;
case 4:
printf("Thr\n");
break;
case 5:
printf("Fri\n");
break;
case 6:
printf("Sat\n");
break;
case 7:
printf("Sun\n");
break;
}
return 0;
}
case是进入,break就是终止
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
break语句的实际效果是把语句列表划分为不同的分支部分
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1: m++; //没有break语句的情况下要执行下去
case 2: n++;
case 3:
switch (n)
{
case 1: n++; //n是几就从几开始执行,此时是2
case 2: m++; n++;
break;
}
case 4: m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
三、循环语句
1.while语句
翻译成好理解的就是为真时无限打印,为假时自动退出
int main()
{
int i = 1; //初始化
while (i <= 10) //判断部分
{
printf("%d ", i);
i++; //调整部分
}
return 0;
}
a.while语句中的break和continue
int main()
{
int i = 1;
while (i <= 10)
{ //break改为continue,是跳过本次循环continue后面代码
if (i == 5) //直接判断是否要继续进行
break; //在while循环中,break用于永久终止循环
printf("%d ", i);
i++;
}
return 0;
}
b.使用while语句
清理单个字符缓存区的方法
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password); //这里没有用&是因为数组名就是地址
printf("请确认密码(Y/N)");
getchar(); //这里是处理\n
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
清理多个字符缓存区的方法
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password); //这里没有用&是因为数组名就是地址
printf("请确认密码(Y/N)");
int tmp = 0;
while ((tmp = getchar()) != '\n') //把缓存区东西都删了
{
; //相当于什么都不干
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
2.for语句
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
a.for语句中的break和continue
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0;
}
不会陷入死循环
b.for语句的循环控制变量
建议1:不可在for循环内修改循环变量,防止for循环失去控制
建议2:建议for语句的循环控制变量的取值采用前闭合后开区间方式
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++) //这就是左闭合右开区间
{
printf("%d ", arr[i]);
}
return 0;
}
c.一些for循环的变种
int main()
{
for (;;)
{
printf("hehe\n");
}
return 0;
}
for循环中的初始、判断、调整部分都可以省略。但是不建议省略判断部分,因为这样会导致判断部分恒为真。
int main()
{
int i = 0;
int j = 0;
for (; i < 3; i++) //省略了初始化导致结果不一样
{
for (; j < 3; j++)
{
printf("hehe\n");
}
}
return 0;
}
3.do while循环语句
循环至少执行一次
a.do语句的语法
int main()
{
int i = 1;
do //先执行循环
{
printf("%d ", i);
i++;
} while (i <= 10); //后判断
return 0;
}
b.do while循环中的break和continue
int main()
{
int i = 1;
do //先执行循环
{
if (i == 5)
break; //break是跳出整个do while循环
printf("%d ", i);
i++;
} while (i <= 10); //后判断
return 0;
}
计算3的阶乘之和
方法一
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <=3; n++)
{
ret = 1; //计算n的阶乘之前,把ret初始为1
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("%d", sum);
return 0;
}
优化方法二
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <=3; n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("%d", sum);
return 0;
}