目录

语句

分支与循环

结构化

分支语句(选择结构)

if语句语法结构

----if else只能管下面的一条语句(大括号最好带上)

----&&      错误写法         2<=10<>

----悬空else  else默认和距离最近的if匹配

if书法格式对比

----判断一个数是否是奇数

----输出1~100的奇数

switch语句

循环结构 循环语句

while循环

----getchar() putchar()

----getchar()运用  拿走\n

--------清理缓冲区中的字符

--------只打印数字

for循环

----省略初始化

----两个循环变量

do while语句

练习题

1.计算n的阶乘

2.计算1!+2!+........10!

----错误

3.在一个有序数组中查找某个数字n   二分法

4.打印逐渐显现的文字

----Sleep 函数    system("cls")清空屏幕

5.模拟用户登录  两个字符串比较strcmp

6.猜数字

----随机数  ----------------

----强制类型转换

三个整数从大到小输出*

两个数的最大公约数

----辗转相除法

打印1000到2000的闰年

打印素数100~200

----sqrt()计算根

goto语句

只要运行起来,电脑就会在1分钟内关机,如果输入:我是猪,就取消关机

----可发行


语句

c语言 中用;隔开的就是一条语句

分支与循环

0是假 其他都是真

结构化

c语言是结构化的程序设计语言

顺序结构

选择结构

循环结构

分支语句(选择结构)

if语句语法结构

单分支

if(表达式)   //表达式中非0就是真

语句;

------------------------------------------------

if(表达式)

语句;

else (表达式)

语句;

多分支

if(表达式)

语句;

else if(表达式)

语句;

else (表达式)

语句;

----if else只能管下面的一条语句(大括号最好带上)

int main()
{int age = 20;if (age > 18)printf("成年\n");elseprintf("未成年\n");printf("不能结婚\n");return 0;
}

----&&      错误写法         2<age<=10

先2<age是真 所以把2<age赋值为1

int main()
{int age=50;if (age < 10){printf("童年");}else if (age >= 10 && age <= 5)//&&表示并   大于等于10并且 小于等于5{printf("青年");}else{printf("壮年");}return 0;
}

----悬空else  else默认和距离最近的if匹配

int main()
{int a = 0;int b = 1;if (a > 9)if (b > 2)printf("哈哈");elseprintf("呵呵");return 0;
}

结果是都不打印

if书法格式对比

一样的(return以后代码就停止了)推荐第二种写法

if (5==num)这种书写风格好   (防止写成num=5 少一个=不会提示)

----判断一个数是否是奇数

int main()
{printf("请输入一个数-->");int a = 0;scanf("%d", &a);if (a % 2==0){printf("是个偶数");}else{printf("是个奇数");}return 0;
}

scanf里除了%之外不要写别的

----输出1~100的奇数

int main()
{int a = 1;while (a <= 100){if (a % 2 == 1){printf("%d ", a);a++;}else{a++;}}
}

switch语句

适合多分支

语法

switch(整形表达式)

{

语句项

}

语句项  case 整形常量表达式(字符也可,对应Asall码值)

语句;

int main()
{int sel = 0;scanf("%d", &sel);switch (sel){case 1:printf("星期1");case 2:printf("星期2");case 3:printf("星期3");case 4:printf("星期4");break;}return 0;
}

整形表达式结果是几就从几进,遇到break停止  没有break的话 def也执行

defalut:case后的都没有,则输出defalut的 (defalut无问题顺序)

switch可以嵌套使用

int main()//1~5工作日   6,7休息日
{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;}return 0;}

循环结构 循环语句

while

for

do while

while循环

while(表达式)

循环语句;

break跳出当前循环,continue跳出本次循环,进入下次循环

int main()
{int a = 0;while (a < 500){if (a == 5) {a++;continue;//跳出本次循环,进入下一次循环}else if (a == 100){break;//跳出当前循环}printf("  %d", a);a++;}return 0;
}

----getchar() putchar()

从键盘输入一个字符 ,读取正确返回的是ASALL码值,读取错误返回EOF

EOF end of file文件结束标志 本质上是-1

int main()
{int a = getchar();//从键盘输入一个字符putchar(a);//输出一个字符return 0;
}

putchar()输出一个字符

int main()
{int a = 0;while ((a = getchar()) != EOF){printf("%c", a);}return 0;
}

会自动换行,因为每次输入时都会回车,相当于字符/n

----getchar()运用  拿走\n

int main()
{char passwd[20] = { 0 };printf("请输入密码->");scanf("%s",passwd);//passwd前面不用加&取地址符号,因为passwd数组名本来就是数组第一个元素的地址printf("请确认密码->Y/N");int a = getchar();if (a == 'Y'){printf("确认成功");}else{printf("确认失败");}return 0;
}

scanf 数组名不用取地址  数组名本来就是首个元素的地址

不拿转义字符,不拿空格后的

从缓冲区拿数据

(键盘:快递员    缓冲区:驿站    输入函数:你)

再写一个getchar()拿走\n

int main()
{char passwd[20] = { 0 };printf("请输入密码->");scanf("%s",passwd);//passwd前面不用加&取地址符号,因为passwd数组名本来就是数组第一个元素的地址printf("请确认密码->Y/N");getchar();//再写一个int a = getchar();if (a == 'Y'){printf("确认成功");}else{printf("确认失败");}return 0;
}

但是输入  123 456(有空格仍会失败)

--------清理缓冲区中的字符

清理缓冲区剩下来的字符

 int tmp = 0;while ((tmp = getchar()) != '\n'){;                            //用来清理缓冲区字符}

--------只打印数字

int main()
{int a = 0;while ((a = getchar()) != EOF){if (a < '0' || a>'9')//看对应的ASCALL码值{continue;}putchar(a);}return 0;
}

for循环

(初始化部分只执行一次)

初始化      判断           调整

for(表达式1;表达式2;表达式3)

循环语句;

int main()
{int a;for (a = 1; a <= 10; a++){printf("%d", a);}return 0;
}

break

continue(跳到调整部分)

三个部分可以不写(最好写,判断部分省略恒为真)

建议

最好别在for循环修改循环变量

----省略初始化

int main()
{int a = 0;int b = 0;for (; a < 3; a++){for (; b < 3; b++){printf("hehe\n");}}return 0;
}//最后打印了三次

第一次循环b加到3,下一次循环b不重新初始化到0

----两个循环变量

int main()
{int a, b;for (a = 0, b = 0; b < 4; b++, a++){printf("%d", b);}return 0;
}

这是赋值!

do while语句

先执行后判断,至少执行一次

do

循环语句;

while(表达式)

int main()
{int a = 1;do{printf("%d", a);a++;} while (a <= 5);return 0;
}

continue跳到判断

练习题

1.计算n的阶乘

int main()
{int n;int j;int sum=1;printf("请输入n,计算n!->");scanf("%d", &n);for (j = 1; j <= n; j++){sum = sum * j;}printf("%d", sum);return 0;
}

2.计算1!+2!+........10!

int main()
{int i;int n;int sum=1;int he=0;scanf("%d", &n);for (i = 1; i <= n; i++){sum = sum * i;he = he + sum;}printf("%d", he);return 0;
}

----错误

ret不能复原

时间复杂度高,效率低

3.在一个有序数组中查找某个数字n   二分法

int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int k = 0;scanf("%d",&k);//要查找的数int left = 0;int sz = sizeof(arr) / sizeof(arr[0]);int right = sz - 1;int mid;//中间指针while (left<=right){mid = (left + right) / 2;if (arr[mid]<k){left = mid + 1;//要加1,因为k大于arr[mid],所以也排除掉他}else if (arr[mid]>k){right = right - 1;//同上,不过要减去}else if (arr[mid] = k){printf("找到了,索引是[%d]", mid);break;}}if (left>right){printf("没有这个数");}return 0;
}

4.打印逐渐显现的文字

例如:

#####

w###!

we#t!

west!

int main()
{char arr[] = "helloworld";char arr2[] = "##########";int left = 0;int sz = sizeof(arr) / sizeof(arr[0]);int right = sz - 1;while (left <= right){arr2[left] = arr[left];arr2[right] = arr[right];printf("%s\n", arr2);left++;right--;}return 0;
}

----Sleep 函数    system("cls")清空屏幕

#include <Windows.h>

Sleep(数字)休息几毫秒

S要大写

     Sleep(1000);system("cls");

5.模拟用户登录  两个字符串比较strcmp

两个字符串比较不能使用等号(字符串名字就是首字母地址,比较这个没意义)

strcmp(字符串1,字符串2)返回值为0证明相等

要引入头文件

#include <string.h>
int main()
{char passwd[20] = { 0 };//密码int i = 0;for (i = 0; i <3; i++){printf("请输入密码->");scanf("%s", passwd);//密码if (strcmp(passwd,"123456")==0){printf("密码正确");break;}else{printf("输入错误\n");}}if (i==3){printf("三次机会已经用光");}return 0;
}

6.猜数字

----随机数

#include <stdlib.h>

rand()返回一个随机数 0-32767      生成的随机数顺序固定

srand设置随机数  strand(中间输入输入数字后rand()生成固定的随机数)种子 中放一个随机值

时间戳随机 放时间戳(相较于计算机起始时间的差 秒数)

time(NULL)返回一个时间戳

不想输入参数

#include <time.h>
#include <stdlib.h>
void num()
{srand((unsigned int)time(NULL));int com_guess = rand() % 100 + 1;//题目要求0到99的数字 %100取余 余数一定小于100 0~99 加一就是0~100printf("%d",com_guess);int you_guess = 0;while (1){scanf("%d", &you_guess);if (you_guess > com_guess){printf("猜大了");}else if (you_guess < com_guess){printf("猜小了");}else if (you_guess == com_guess){system("cls");printf("猜对了\n");break;}}
}int main()
{int sel = 0;do{printf("* * * * * * * * * * * * * * * *\n");printf(" * * * * * 1.开始游戏 * * * * *\n");printf(" * * * * * 2.退出游戏 * * * * *\n");printf("* * * * * * * * * * * * * * * *\n");printf("是否开始游戏->");scanf("%d", &sel);switch (sel){case 1:num();break;case 2:printf("退出");break;default:system("cls");printf("只能输入1或2,请重新输入\n");break;}} while (sel!=2);return 0;}

----强制类型转换

(int) a

三个整数从大到小输出*

输入 5 6 3

输出 6 5 3

int main()
{int a = 0;int b = 0;int c = 0;scanf("%d %d %d", &a, &b, &c);if (a<b){int tmp = 0;tmp = a;a = b;b = tmp;}if (a < c){int tmp1 = 0;tmp1 = a;a = c;c = tmp1;}if (b < c){int tmp2 = 0;tmp2 = b;b = c;c = tmp2;}printf("%d %d %d", a, b, c);return 0;
}

注意这几个if是并列关系

两个数的最大公约数

int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int min = 0;if (a>b){min = b;}else{min = a;}while (1){if (a % min == 0 && b%min==0 )// ||是或  &&才是且{printf("最小公约数%d",min );break;}min--;}return 0;
}

----辗转相除法

24 18

24%18=6(取余)

18%6=0(直到余数为0,除数就是最大公因数)

int main()
{int m = 0;int n = 0;int t = 0;scanf("%d %d", &m, &n);while (m % n != 0){t = m % n;m = n;n = t;}printf("最大公因数是%d", n);return 0;
}

打印1000到2000的闰年

能被4整除 不能被100整除

能被400整除                                           是闰年

int main()
{int year = 0;for (year = 1000; year <= 2000; year++){if (year%4==0&&year%100!=0){printf("%d是闰年\n", year);}if (year % 400 == 0){printf("%d是闰年\n", year);}}return 0;
}

打印素数100~200

质数=素数  只能被1和其本身整除的数

int main()
{int a = 0;for (a = 100; a <= 200; a++){int i = 0;for (i = 2; i < a; i++){if (a % i == 0){break;}}if (i == a){printf("%d是素数\n", a);}}return 0;
}

----sqrt()计算根

#include <math.h>

如果 a=m*n

那么m和n之间一定有一个<=  a开根号

即:    在2~根号m之间,没有a的因数 就说明a没有2~a-1的因数

所以只用计算2~根号m之间的(优化代码)

#include <math.h>
int main()
{int a = 0;for (a = 100; a <= 200; a++){int i = 0;int flag = 1;for (i = 2; i <= sqrt(a); i++){if (a % i == 0){flag = 0;break;}}if (flag==1){printf("%d是素数\n", a);}}return 0;
}

goto语句

理论上没有goto语句也可以写出代码

相当于传送

int main()
{
aaa:printf("11111\n");printf("22222\n");goto aaa;//传送到aaa哪里}

只要运行起来,电脑就会在1分钟内关机,如果输入:我是猪,就取消关机

跳出多重循环方便

goto只能在一个函数范围内,不能跨函数

dos(cmd)

shutdown -s -t 60 60秒后关机

shutdown -a     取消关机

#include <string.h>
#include <stdlib.h>int main()
{char arr[20] = { 0 };printf("输入我是猪,否则电脑100秒关机->");system("shutdown -s -t 100");
flag:   scanf("%s", arr);if (strcmp("我是猪", arr) == 0){system("shutdown -a");}else{printf("请重新输入->");goto flag;}return 0;
}

----可发行

debug改为release

多了个release

里面的是可发行版本(可发到别人的电脑上执行)

c语言鹏哥学习笔记(分支与循环)相关推荐

  1. C语言鹏哥学习笔记(初识)

    目录 初识 创建 文件 第一个程序 ----printf % ----sizeof() 单位 数据类型 浮点型float 变量.常量 变量的定义 局部变量.全局变量 ----scanf()输入函数 - ...

  2. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  3. 《Go语言圣经》学习笔记 第七章 接口

    <Go语言圣经>学习笔记 第七章 接口 目录 接口是合约 接口类型 实现接口的条件 flag.Value接口 接口值 sort.Interface接口 http.Handle接口 erro ...

  4. 语言 提取列名_学习健明老师发布的R语言练习题的学习笔记(二)

    学习者:骆栢维 题目来源:生信基石之R语言 中级10 个题目:http://www.bio-info-trainee.com/3750.html 备注:本文为笔者学习健明老师GitHub答案代码的学习 ...

  5. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  6. 《Go语言圣经》学习笔记 第十章 包和工具

    <Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...

  7. 《Go语言圣经》学习笔记 第八章 Groroutines和Channels

    <Go语言圣经>学习笔记 第八章 Groroutines和Channels 目录 Goroutines 实例:并发的Clock服务 实例:并发的Echo服务 Channels 并发的循环 ...

  8. 《Go语言圣经》学习笔记 第六章 方法

    <Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...

  9. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

最新文章

  1. 清华「暗黑破坏神」夺超算世界冠军,暨南大学首次参赛就跻身前三 | ISC21
  2. python3 词法拆分
  3. Java基础day16
  4. 思科拓扑结构探测及VLAN设计
  5. Java中不一致的操作会扩大规则
  6. ARM MOV和 LDR指令关系
  7. 深度学习 autoencoder_笔记:李淼博士-基于模仿学习的机器人抓取与操控
  8. 4G换5G关口,智能手机如何抢回“失去的一个月”
  9. xp访问服务器显示没有权限,xp无法访问2008R2共享
  10. 防窥屏的膜能真的防止别人偷看吗,其原理是什么?
  11. java none怎么用tomcat_在docker中部署tomcat并且部署java应用程序的步骤详解
  12. python怎么读取excel-Python|读、写Excel文件(三种模块三种方式)
  13. 1.1 Storm集群安装部署步骤
  14. 程序员必备的八大排序算法
  15. 安装tensorflow踩的那些坑
  16. 分糖果系列一(DP+暴力)
  17. 如何清除DNS污染?
  18. 【Practical】蒙特卡罗法及其应用
  19. OpenStack 裸金属
  20. 容灾技术及建设经验介绍

热门文章

  1. 酱牛肉的制作方法:三种
  2. MUD游戏设计(游戏设计丛书)
  3. 【AMBA学习】用VIP如何发送紧密连续的AMBA transaction
  4. PAT——乙级 1018锤子剪刀布
  5. java微信公众平台接口封装源码_微信公众号对接第三方平台(全网发布 java)源码 含 jar...
  6. 拓视角丨拓宽市场边界,数字化智能化转型构建产业新格局
  7. 小米Note2解BL锁教程申请BootLoader解锁教程
  8. blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
  9. 想做好一个程序猿 先建好身 瘦人同样可以练出肌肉
  10. 做网络营销的心态与步骤