目录
1. if语句
1.1 if
if 语句的语法形式如下:
if (表达式)
语句
在C语言中,0为假,非0表示真,也就是说表达式的结果如果是0(为假),则语句不执行,表达式的结果如果是非0(为真),则语句执行。
例:输入一个整数,判断是否为奇数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num = 0;
//输入一个数
scanf("%d", &num);
//判断
if (num % 2 == 1) // == 是判断相等 = 是赋值
printf("%d 是奇数\n", num);
return 0;
}
1.2 else
if ... else ... 语句的语法形式如下:
if (表达式)
语句1
else
语句2
例1:输入⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数
#define _CRT_SECURE_NO_WARNINGS
#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:输⼊⼀个年龄, >= 18岁就输出:成年,否则就输出:未成年
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("好好学习\n");
}
return 0;
}
1.3 嵌套if
在 if else 语句中,else可以与另⼀个 if 语句连⽤,构成多重判断。有了嵌套if语句,就可以完成更多复杂逻辑的判断。
例1:输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
//判断
if (n == 0)
printf("输入的值是0\n");
else if (n > 0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
return 0;
}
例2:输⼊⼀个⼈的年龄, 如果年龄 < 18岁,打印"少年", 如果年龄在18岁⾄44岁打印"⻘年",如果年龄在45岁⾄59岁打印"中⽼年", 如果年龄在60岁⾄89岁打印"⽼年",如果90岁及以上打印"⽼寿星"
#define _CRT_SECURE_NO_WARNINGS
#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;
}
2. 关系操作符
关系操作符是C 语⾔用于比较的表达式,又之称为 “关系表达式”,在⾥⾯使⽤的运算符就称
为“关系运算符”,主要有以下六个:
- > ⼤于运算符
- < ⼩于运算符
- >= ⼤于等于运算符
- <= ⼩于等于运算符
- == 相等运算符
- != 不相等运算符
关系表达式通常返回 0 或 1 ,表示真假。在C 语⾔中,0 表示假,所有非零值表示真。且关系表达式常用于 if 或 while 结构中。
注意:
相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,千万不要混淆。且多个运算符不宜连用。
例:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18 && age <= 36)
{
printf("⻘年\n");
}
return 0;
}
3. 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,它的形式如下所示:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真,exp2 计算,exp3 不计算,计算的结果是整个表达式的结果;如果exp1 为假,exp2 不计算,exp3 计算,计算的结果是整个表达式的结果。
例1:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = a > 5 ? 3 : -3;
printf("%d\n", b);
return 0;
}
例2:使⽤条件表达式实现找两个数中的较大值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d\n", m);
return 0;
}
4. 逻辑操作符
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有以下三个:
- ! :逻辑取反运算符(改变单个表达式的真假)
- && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
- || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
4.1 逻辑取反运算符 !
例:如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int flag = 0;
if (!flag)
{
printf("do something\n");
}
return 0;
}
4.2 逻辑与运算符 &&
&& 就是逻辑与运算符,是并且的意思,且 && 也是⼀个双⽬操作符,使⽤的⽅式是 a && b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
例:⽉份是3⽉到5⽉,是春天
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
if (month >= 3 && month <= 5)
printf("春天");
return 0;
}
4.3 逻辑或运算符 ||
|| 就是逻辑或运算符,是或者的意思, 且 || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b ,|| 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,整个表达式才为假。
例1:月份是12⽉或者1⽉或者2⽉,是冬天
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
if (month == 12 || month == 1 || month == 2)
printf("冬天");
return 0;
}
例2:输⼊⼀个年份year,判断year是否是闰年
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d是闰年", year);
return 0;
}
4.4 短路
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
- && 左边为假,右边无需计算,整体为假
- || 左边为真,右边无需计算,整体为真
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = a++ && ++b && d++;
i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
printf("i=%d\n", i);
return 0;
}
5. switch语句
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况,它把多重
的 else if 改成更易⽤、可读性更好的形式。它的语法形式如下:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。
注意:
- switch 后的 expression 必须是整型表达式
- case 后的值,必须是整形常量表达式
- case 和后边的数字之间必须有空格
- 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句
例1:输入任意一个整数,计算这个数除以三之后的余数是多少
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("可以整除,余数是零\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
例2:输入⼀个1~7的数字,打印对应的是星期几
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
case 6:
printf("星期六");
break;
case 7:
printf("星期天");
break;
}
return 0;
}
例3:输入1 - 5,输出的是“⼯作⽇”;输⼊6 - 7,输出“休息⽇”
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
default:
printf("输入错误");
break;
}
return 0;
}
6. while循环
6.1 if和while的对比
if 语句的语法形式如下:
if (表达式)
语句
while语句的语法形式如下:
while (表达式)
语句
while语句的执行流程:
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
6.2 while循环的实战
例1:在屏幕上打印 1~10 的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 1;//循环变量的初始化
while (i <=10) //判断
{
printf("%d ", i);
i++; //调整
}
return 0;
}
例2:输⼊⼀个正的整数,逆序打印这个整数的每⼀位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;//循环变量的初始化
scanf("%d", &i); //123
while (i!=0) //判断
{
printf("%d ", i % 10);
i = i / 10;
}
return 0;
}
例3:打印1 - 100之间所有3的倍数的数字
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
if (i % 3 == 0)
printf("%d ", i);
i++;
}
return 0;
}
7. for循环
7.1 语法形式
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:
for (表达式1; 表达式2; 表达式3)
语句
- 表达式1 循环变量的初始化 表达式2 循环结束条件的判断 表达式3 循环变量的调整
- for循环的初始化、判断、调整三个部分是可以省略的
- for循环的判断部分如果省略的话,意味着判断恒成立
for循环的执行流程:
⾸先执⾏ 表达式1 循环变量的初始化,接下来就是执⾏ 表达式2 的循环结束条件的判断, 表达式2 的结果如果== 0,则循环结束; 表达式2 的结果如果 != 0则执⾏循环语句,循环语句执⾏完后,再去执行 表达式3 , 调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
7.2 for循环的实战
例1:在屏幕上打印1-10的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
例2:计算1-100之间3的倍数的数字之和
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for (i = 1; i <= 100; i++)
{
//判断i是否是三的倍数
if (i % 3 == 0)
{
sum += i;
}
}
printf("%d ", sum);
return 0;
}
7.3 while循环和for循环的对比
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优⼀些。
8. do-while循环
do-while循环语句相较于while循环、for循环使用的较少,它的语法形式如下:
do
语句;
while (表达式);
do-while语句的执行流程:
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的结果是 != 0,则继续循环,执⾏循环语句;判断表达式的结果 == 0,则循环结束。
例1:在屏幕上打印1-10
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
例2:输⼊⼀个正整数,计算这个整数是⼏位数
#define _CRT_SECURE_NO_WARNINGS
#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;
}
9. break和continue语句
- break 的作⽤是⽤于永久的终止循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
- continue 的作⽤是跳过本次循环 continue 后边的代码,但是在 for 循环和 while 循环中有所差异的。
while循环和for循环使用continue的时候两者间的差异:
1. 在while循环中,continue是直接跳过去之后,来到判断部分
2. 在for循环中,continue是直接跳过去之后,来到调整部分;在while循环中,是有可能跳过调整部分的
3. 所以for循环是不容易造成死循环的,但while是有可能的
10. 案例展示
10.1 猜数字游戏代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void game()
{
//1.生成随机数
int r = rand() % 100 + 1;
//2.猜数字
int guess = 0;
int count = 5;
while (count)
{
//system("cls");
printf("还剩下%d次机会", count);
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > r)
printf("猜大了\n");
else if (guess < r)
printf("猜小了\n");
else
{
printf("恭喜你,猜对了!!!\n");
break;
}
count--;
}
if (count == 0)
{
printf("很遗憾,在规定的次数内没能猜出结果\n");
}
}
void menu()
{
printf("*********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("*********************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}
10.2 九九乘法表代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d * %d = %2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}