入门
- 1. 流程控制基本概念
- 2. 流程控制 选择结构
- 3. 流程控制 循环结构
- 4. 四大跳转
- 5. 循环的嵌套
- 6. C 语言图形打印练习
- 7. 函数那点事
- 8. main 函数分析
- 9. 递归函数
- 10. 进制基本概念
- 11. 进制转换
- 12. 原码反码补码
- 13. 位运算符
- 14. 变量内存分析
- 15. Char 类型内存存储细节
- 16. 类型说明符详解
- 17. 数组那点事
- 18. 数组内部存储细节
- 19. 数组注意事项
- 20. 数组和函数
基础
- 1. 计算机常识
- 2. 什么是计算机程序
- 3. 什么是计算机语言
- 4. 常见的计算机语言类型有哪些
- 5. 什么是C语言
- 6. C语言发展历史
- 7. C语言标准
- 8. C语言现状
- 9. 为什么要学习C语言
- 10. 如何学好C语言
- 11. 编写C语言程序用什么工具
- 12. 什么是 QtCreator
- 13. 什么是环境变量
- 14. 如何创建C语言程序
- 15. C语言程序组成
- 16. 函数定义格式
- 17. 如何运行编写好的程序
- 18. C语言程序练习
- 19. 初学者如何避免程序出现 BUG
- 20. 多语言对比
- 21. 注释就是这么简单
- 22. 什么是关键字
- 23. 什么是标识符
- 24. 什么是数据
- 25. C语言数据类型
- 26. 什么是常量
- 27. C语言变量那点事
- 28. printf 函数
- 29. Scanf 函数
- 30. putchar 和 getchar
- 31. C语言运算符大全解
- 32. 阶段练习
进阶
- 1. 计数排序
- 2. 选择排序
- 3. 冒泡排序
- 4. 插入排序
- 5. 希尔排序
- 6. 折半查找
- 8. 二维数组那点事
- 9. 二维数组的遍历和存储
- 10. 二维数组与函数
- 11. 二维数组练习
- 12. 字符串的基本概念
- 13. 字符串常用方法
- 14. 字符串练习
- 15. 指针的基本概念
- 16. 指针变量那点事
- 17. 访问指针所指向的存储空间
- 18. 指针类型与二级指针
- 19. 数组指针的概念及定义
- 20. 指针与字符串
- 21. 指向函数指针
- 22. 结构体详解
- 23. 结构体数组
- 24. 结构体指针
- 25. 结构体内存分析
- 26. 结构体变量占用存储空间大小
- 27. 结构体嵌套定义
- 28. 共用体
- 29. 枚举
- 30. 全局变量和局部变量
- 31. 关键字
- 32. static 与 extern 对函数的作用
- 33. QtCreator 编译过程做了什么
- 34. 计算机运算过程分析
- 35. 预处理指令与宏定义
- 36. 条件编译
- 37. typedef 关键字
- 38. 宏定义与函数以及 typedef 区别
- 39. const 关键字
- 40. 内存管理
- 41. malloc 函数
- 42. free 函数
- 43. calloc 函数
- 44. realloc 函数
- 45. 链表与静态链表
- 46. 动态链表
- 47. 链表销毁与长度计算
- 48. 链表查找与删除
- 49. 文件基本概念
- 50. 文件的打开与关闭
- 51. 读写结构体
- 52. 文件操作函数
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 流程控制 选择结构
选择结构
C语言中提供了两大选择结构, 分别是if和switch
选择结构if
if第一种形式
- 表示如果表达式为真,执行语句块1,否则不执行
if(表达式) {
语句块1;
}
后续语句;
if(age >= 18) {
printf("开网卡\n");
}
printf("买烟\n");
- if第二种形式
- 如果表达式为真,则执行语句块1,否则执行语句块2
- else不能脱离if单独使用
if(表达式){
语句块1;
}else{
语句块2;
}
后续语句;
if(age > 18){
printf("开网卡\n");
}else{
printf("喊家长来开\n");
}
printf("买烟\n");
- if第三种形式
- 如果"表达式1"为真,则执行"语句块1",否则判断"表达式2",如果为真执行"语句块2",否则再判断"表达式3",如果真执行"语句块3", 当表达式1、2、3都不满足,会执行最后一个else语句
- 众多大括号中,只有一个大括号中的内容会被执行
- 只有前面所有添加都不满足, 才会执行else大括号中的内容
if(表达式1) {
语句块1;
}else if(表达式2){
语句块2;
}else if(表达式3){
语句块3;
}else{
语句块4;
}
后续语句;
if(age>40){
printf("给房卡");
}else if(age>25){
printf("给名片");
}else if(age>18){
printf("给网卡");
}else{
printf("给好人卡");
}
printf("买烟\n");
- if嵌套
- if中可以继续嵌套if, else中也可以继续嵌套if
if(表达式1){
语句块1;
if(表达式2){
语句块2;
}
}else{
if(表达式3){
语句块3;
}else{
语句块4;
}
}
- if注意点
- 任何数值都有真假性
#include <stdio.h>
int main(){
if(0){
printf("执行了if");
}else{
printf("执行了else"); // 被执行
}
}
- 当if else后面只有一条语句时, if else后面的大括号可以省略
// 极其不推荐写法
int age = 17;
if (age >= 18)
printf("开网卡\n");
else
printf("喊家长来开\n");
- 当if else后面的大括号被省略时, else会自动和距离最近的一个if匹配
#include <stdio.h>
int main(){
if(0)
if(1)
printf("A\n");
else // 和if(1)匹配
printf("B\n");
else // 和if(0)匹配, 因为if(1)已经被匹配过了
if (1)
printf("C\n"); // 输出C
else // 和if(1)匹配
printf("D\n");
}
- 如果if else省略了大括号, 那么后面不能定义变量
#include <stdio.h>
int main(){
if(1)
int number = 10; // 系统会报错
printf("number = %i\n", number);
}
#include <stdio.h>
int main(){
if(0){
int number = 10;
}else
int value = 20; // 系统会报错
printf("value = %i\n", value);
}
- C语言中分号(;)也是一条语句, 称之为空语句
// 因为if(10 > 2)后面有一个分号, 所以系统会认为if省略了大括号
// if省略大括号时只能管控紧随其后的那条语句, 所以只能管控分号
if(10 > 2);
{
printf("10 > 2");
}
// 输出结果: 10 > 2
- 但凡遇到比较一个变量等于或者不等于某一个常量的时候,把常量写在前面
#include <stdio.h>
int main(){
int a = 8;
// if(a = 10){// 错误写法, 但不会报错
if (10 == a){
printf("a的值是10\n");
}else{
printf("a的值不是10\n");
}
}
if练习
- 从键盘输入一个整数,判断其是否是偶数,如果是偶数就输出YES,否则输出NO;
- 接收用户输入的1~7的整数,根据用户输入的整数,输出对应的星期几
- 接收用户输入的一个整数month代表月份,根据月份输出对应的季节
- 接收用户输入的两个整数,判断大小后输出较大的那个数
- 接收用户输入的三个整数,判断大小后输出较大的那个数
- 接收用户输入的三个整数,排序后输出
实现石头剪刀布
剪刀石头布游戏:
1)定义游戏规则
剪刀 干掉 布
石头 干掉 剪刀
布 干掉石头
2)显示玩家开始猜拳
3)接收玩家输入的内容
4)让电脑随机产生一种拳
5)判断比较
(1)玩家赢的情况(显示玩家赢了)
(2)电脑赢的情况(显示电脑赢了)
(3)平局(显示平局)
选择结构switch
- 由于 if else if 还是不够简洁,所以switch 就应运而生了,他跟 if else if 互为补充关系。switch 提供了点的多路选择
- 格式:
switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
- 语义:
- 计算"表达式"的值, 逐个与其后的"常量表达式"值相比较,当"表达式"的值与某个"常量表达式"的值相等时, 即执行其后的语句, 然后跳出switch语句
- 如果"表达式"的值与所有case后的"常量表达式"均不相同时,则执行default后的语句
- 示例:
#include <stdio.h>
int main() {
int num = 3;
switch(num){
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;
default:
printf("回火星去\n");
break;
}
}
switch注意点
switch条件表达式的类型必须是整型, 或者可以被提升为整型的值(char、short)
#include <stdio.h>
int main() {
switch(1.1){ // 报错
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
default:
printf("回火星去\n");
break;
}
}
- +case的值只能是常量, 并且还必须是整型, 或者可以被提升为整型的值(char、short)
#include <stdio.h>
int main() {
int num = 3;
switch(1){
case 1:
printf("星期一\n");
break;
case 'a':
printf("星期二\n");
break;
case num: // 报错
printf("星期三\n");
break;
case 4.0: // 报错
printf("星期四\n");
break;
default:
printf("回火星去\n");
break;
}
}
- case后面常量表达式的值不能相同
#include <stdio.h>
int main() {
switch(1){
case 1: // 报错
printf("星期一\n");
break;
case 1: // 报错
printf("星期一\n");
break;
default:
printf("回火星去\n");
break;
}
}
- case后面要想定义变量,必须给case加上大括号
#include <stdio.h>
int main() {
switch(1){
case 1:{
int num = 10;
printf("num = %i\n", num);
printf("星期一\n");
break;
}
case 2:
printf("星期一\n");
break;
default:
printf("回火星去\n");
break;
}
}
- switch中只要任意一个case匹配, 其它所有的case和default都会失效. 所以如果case和default后面没有break就会出现穿透问题
#include <stdio.h>
int main() {
int num = 2;
switch(num){
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n"); // 被输出
case 3:
printf("星期三\n"); // 被输出
default:
printf("回火星去\n"); // 被输出
break;
}
}
- switch中default可以省略
#include <stdio.h>
int main() {
switch(1){
case 1:
printf("星期一\n");
break;
case 2:
printf("星期一\n");
break;
}
}
- switch中default的位置不一定要写到最后, 无论放到哪都会等到所有case都不匹配才会执行(穿透问题除外)
#include <stdio.h>
int main() {
switch(3){
case 1:
printf("星期一\n");
break;
default:
printf("Other,,,\n");
break;
case 2:
printf("星期一\n");
break;
}
}
- if和Switch转换
- 看上去if和switch都可以实现同样的功能, 那么在企业开发中我们什么时候使用if, 什么时候使用switch呢?
- if else if 针对于范围的多路选择
- switch 是针对点的多路选择
- 判断用户输入的数据是否大于100
#include <stdio.h>
int main() {
int a = -1;
scanf("%d", &a);
if(a > 100){
printf("用户输入的数据大于100");
}else{
printf("用户输入的数据不大于100");
}
}
#include <stdio.h>
int main() {
int a = -1;
scanf("%d", &a);
// 挺(T)萌(M)的(D)搞不定啊
switch (a) {
case 101:
case 102:
case 103:
case 104:
case 105:
printf("大于\n");
break;
default:
printf("不大于\n");
break;
}
}
- 练习
- 实现分数等级判定
要求用户输入一个分数,根据输入的分数输出对应的等级
A 90~100
B 80~89
C 70~79
D 60~69
E 0~59
- 实现+ - * / 简单计算器
最后,如果你有任何疑问,欢迎加微信 leader_fengy 拉你进学习交流群
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论