前言:c语言是结构化的程序设计语言,而结构化体现在 == > 顺序结构,选择结构,循环结构!观察生活中的日常问题,其解决方法可以被拆分为这三种结构或其组合。
选择结构:if , swith;
循环结构: for , while , do while;
一 ,操作符
1.1 关系操作符:
> 大于运算符
>= 大于等于运算符
< 小于运算符
<= 小于等于运算符
== 相等运算符
!= 不相等运算符
关系表达式通常返回 0 或 1 ,用其来表示真假,所以多个关系运算符不宜连用!C语言中 0 表示假,非 0 表示真。关系表达式常用于 if 与 while 语句上!
注意:a==b 是判断a是否与b相等,而 a=b 是赋值运算符,表示把b赋值给a。
1.2 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2(成真): exp3(成假)
例题: 1.如果输入的a值大于5,b取8;如果a小于5,b取-8;
int main()
{
int a = 0;
scanf("%d", &a);
int b = (a > 5) ? 8 : -8;
printf("a=%d b=%d\n", a, b);
return 0;
}
2.输入两个数,找到其中的最大值;
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int max = (a > b) ? a : b;
printf("两个数的最大值为%d", max);
return 0;
}
1.3 逻辑操作符
例题:
1.输入月份,当输入3到5月时,打印春天;(&&)
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
2.一年中12月或者1月或者2月会下雪;( || )
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("会下雪\n");
}
3.判断闰年
1. 能被4整除并且不能被100整除是闰年(&&)2. 能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
int year = 0;
scanf("%d", &year);
if(year%4==0 && year%100!=0)
printf("是闰年\n");
else if(year%400==0)
printf("是闰年\n");
return 0;
}
//代码2
int main()
{
int year = 0;
scanf("%d", &year);
if((year%4==0 && year%100!=0) || (year%400==0))
printf("是闰年\n");
return 0;
}
二 ,if 语句
2.1 if :
注意:if 与 else 语句 在默认情况下仅可以控制一条语句,要想控制多条语句,需要用到{ };
if ( 表达式 )语句
表达式成立 =>> 为真 =>> 语句成立;反之,则不成立;
例题:输⼊⼀个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
2.2 if...else
if ( 表达式 )语句 1else语句2
例题:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
2.3 if...else if...else
例题:输⼊⼀个⼈的年龄
//⽅法1
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("少年\n");
else if(age<=44)
printf("⻘年\n");
else if(age<=59)
printf("中⽼年\n");
else if(age<=89)
printf("⽼年\n");
else
printf("⽼寿星\n");
return 0;
}
注:如果有多个 if 与 else 语句,else 总是与最近的 if 匹配;
三 ,switch 语句
除了 if 语句外,C语言还提供了 switch 语句来实现分支结构; switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else...if 改成更易用,可读性更好的形式。
switch (expression){case value1: statementcase value2: statementdefault : statement}
3.1 if 语句和 switch 语句的对比:
练习:输入任意一个整数值,计算除3之后的余数
if 语句:
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 3 == 0) {
printf("余数为0\n");
}
else if(n%3==1)
{
printf("余数为1\n");
}
else {
printf("余数为2\n");
}
return 0;
}
用switch 语句改写 :
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("余数为0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
注:case 和后边的数字必须有空格!每一个case语句执行完成后,需要加上break,才能跳出这个switch语句!
3.2 switch语句中break
在前面的例题中,如果去掉break,会出现什么情况呢?
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("余数为0\n");
case 1:
printf("余数为1\n");
case 2:
printf("余数为2\n");
}
return 0;
}
可见没有了break语句,代码继续往下执行,执行了case 2 中的语句,所以在 switch 语句中break十分重要!但并不是所有 case 语句都需要 break ,需要根据实际情况来选择:
练习:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期⼀\n");
break;
case 2:
printf("星期⼆\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
#include <stdio.h>
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;
}
3.3 switch语句中的defalut
#include <stdio.h>
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;
default:
printf("输⼊错误\n");
break;
}
return 0;
}
3.4 switch 语句中的case 与defalut 的顺序问题
没有顺序要求,只要满足实际要求即可,但我们一般把defalut放在后面。
四 ,while 循环
4.1 while
while ( 表达式 )语句; // 如果循环体想包含更多的语句,可以加上⼤括号# include <stdio.h>int main (){if ( 1 )printf ( "hehe\n" ); //if 后边条件满⾜,打印⼀次 hehereturn 0 ;}
4.2 while 语句的执行流程
4.3 while 循环实践
1.在屏幕上打印10的值:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
2.输⼊⼀个正的整数,逆序打印这个整数的每⼀位
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}
五 ,for 循环
5.1 for
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )语句;
5.2 for 循环的执行流程
5.3 for 循环实践
1.在屏幕上打印1-10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
2.计算1-100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=1; i<=100; i++)
{
if(i % 3 == 0)
sum += i;
}
printf("%d\n", sum);
return 0;
}
//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=3; i<=100; i+=3)
{
sum += i;
}
printf("%d\n", sum);
return 0;
}
5.4 while 与for 的对比
六 ,do-while 循环
6.1 语法形式
do语句;while ( 表达式 ) ;
6.2 do while循环的执行流程
6.3 do while循环的实例
1.在屏幕上打印1~10的值 ;
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
⼀般 do while 使用在循环体至少被执行一次的场景下,所以较少⼀些。
2.输⼊⼀个正整数,计算这个整数是几位数?
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
七 ,break 语句 与 continue
八 ,goto 语句
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}