ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言分支和循环练习

C语言分支和循环练习 一、写一个关机程序编写程序实现以下要求(1). 程序启动后开启一分钟关机倒计时。(2). 如果在倒计时结束前输入文字我要学习C语言那么取消关机。(3). 如果在一分钟内没有输入指定内容时间到后电脑自动关机。注意(1).两个字符串进行内容比较的时候不能使用。可以使用库函数strcmp()如果两个字符串相等函数会返回0使用strcmp()时需要包含头文件string.h。(2).shutdown是windows系统中用于关机的命令。-s设置关机。-t 秒数设置关机倒计时。-a取消已经设置的定时关机。命令示例如下shutdown -s -t 60 // 倒计时60秒关机 shutdown -a // 取消关机(3).system()是C程序中执行操作系统命令的库函数使用时需要包含头文件stdlib.h。代码演示#include stdio.h #include stdlib.h #include string.h int main() { char arr[20] {0}; system(shutdown -s -t 60); again: printf(警告电脑将在1分钟内关机!\n请输入我要学习C语言取消关机\n); scanf(%s,arr); if(strcmp(arr,我要学习C语言) 0) { system(shutdown -a); printf(已成功取消关机!\n); } else { printf(输入错误请重新输入!\n); goto again; } return 0; }运行结果二、写一个猜数字游戏编写程序实现以下要求(1). 电脑自动生成1~100的随机数。(2). 玩家输入数字进行猜测程序对比数字大小给出猜大了或者猜小了的提示不断重复猜测直到玩家猜对游戏结束。随机数生成(1).randC语言提供了rand()函数用来生成随机数数值范围在0~RAND_MAX之间。RAND_MAX是由编译器决定实现的常量在visual Studio 2022编译环境下RAND_MAX的值为 32767。使用rand()函数时需要包含头文件stdlib.h。rand()函数原型如下int rand(void);C语言rand()函数介绍rand - C Reference。代码演示#include stdio.h #include stdlib.h int main() { printf(第一次运行结果\n); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果#include stdio.h #include stdlib.h int main() { printf(第二次运行结果\n); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果可以看到程序单次运行时rand()产生的数字看似随机但是多次运行程序每次运行得到的数字序列完全相同这是伪随机数的特点。rand()函数生成的是伪随机数并非真正意义上的随机数。它依靠固定算法以一个被称为种子的基准值计算得出结果然而真随机数无法预测下一个数值。rand()默认的种子固定为1因此每次运行程序都会产生一模一样的数字序列。如果想要每次运行产生不同的随机数需要使用不断变化的种子。(2).srandC语言提供了srand()函数用来初始化随机数生成器。程序在执行rand()函数之前需要先执行srand()函数srand()函数传入的参数seed就是种子用来设置rand()生成伪随机数的种子。只要种子发生变化每次运行程序得到的伪随机数序列就会改变。也就是说如果传给srand()的种子是发生变化的rand()就能生成不同的伪随机数。srand()函数原型如下void srand(unsigned int seed);可以看到srand()必须传入种子参数不能空着不传入参数。如果代码中没有手动调用srand()直接使用rand()系统会默认以1作为种子相当于隐式执行srand(1)因此每次运行程序得到的伪随机数序列都固定不变。C语言srand()函数介绍srand - C Reference。代码演示#include stdio.h #include stdlib.h int main() { srand(1); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果#include stdio.h #include stdlib.h int main() { srand(2); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果(3).time在C语言程序中通常把程序运行的时间作为随机数种子因为时间是持续变化的每次运行程序拿到的种子就会不同rand()生成的随机数序列也会不一样。C语言提供了time()函数用来获取当前系统时间可以把它的返回值当作随机数种子。使用time()函数时需要包含头文件time.h。time()函数原型如下time_t time(time_t* timer);time()函数用于获取当前日历时间它的返回值是从1970年1月1日0时0分0秒到当前程序运行时刻的差值单位为秒这个数值被称为时间戳。该返回值的类型时time_ttime_t本质上是32位或者64位的整数。time() 含有一个参数timer如果传入的timer是非空指针函数会返回时间戳同时还会将该时间戳存入timer指针指向的内存空间如果传入的timer是NULL函数直接返回时间戳不会额外向内存写入数据。C语言time()函数介绍time - C Reference。那么可以使用time()函数的返回值设置种子代码演示如下#include stdio.h #include stdlib.h #include time.h int main() { //srand()的参数是unsigned int类型需要将time()的返回值进行强制类型转换 srand((unsigned int)time(NULL)); printf(第一次运行结果\n); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果#include stdio.h #include stdlib.h #include time.h int main() { //srand()的参数是unsigned int类型需要将time()的返回值进行强制类型转换 srand((unsigned int)time(NULL)); printf(第二次运行结果\n); printf(%d\n,rand()); printf(%d\n,rand()); printf(%d\n,rand()); return 0; }运行结果注意srand()函数不需要频繁调用程序单次运行时只需要调用一次即可。如果反复在循环中调用srand((unsigned int)time(NULL))短时间内time()返回值不变会不断重新设置相同的种子rand()会重复得到一样的随机数。(4).设置随机数的范围利用rand()函数结合取余运算可以限定随机整数的取值范围。通用公式生成[ab]闭区间内的随机整数。a rand() % (b - a 1);b - a 1表示闭区间a到b一共有多少个整数rand() % (b - a 1)会得到从0到b-a的数再加上起始值a就能映射到a~b这个区间。猜数字游戏实现代码演示#include stdio.h #include stdlib.h #include time.h //game()函数实现猜数字游戏核心逻辑随机数范围为1~100 void game() { int r 1 rand() % (100 - 1 1); int guess 0; printf(\n 开始猜数字 (1~100) \n); while (1) { printf(请输入你猜测的数字 ); scanf(%d,guess); if(guess r) { printf(猜小了再试试\n); } else if(guess r) { printf(猜大了再试试\n); } else { printf(恭喜你猜对了\n); break; } } } //menu()函数展示游戏选择界面 void menu() { printf(\n\n); printf( 猜数字游戏 \n); printf( 1. 开始游戏 \n); printf( 0. 退出游戏 \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游戏结束再见\n); break; default: printf(\n输入错误请重新选择\n); break; } }while (input); return 0; }运行结果还可以为猜数字游戏增加猜测次数限制玩家最多拥有 5 次猜测机会如果 5 次之内没能猜出正确的数字那么本次游戏判定为失败。优化代码#include stdio.h #include stdlib.h #include time.h //game()函数实现猜数字游戏核心逻辑随机数范围为1~100 void game() { int r 1 rand() % (100 - 1 1); int guess 0; int count 5; printf(\n 开始猜数字 (1~100) \n); while (count 0) { printf(你还有%d次机会请输入你猜测的数字 ,count); scanf(%d,guess); if(guess r) { printf(猜小了再试试\n); } else if(guess r) { printf(猜大了再试试\n); } else { printf(恭喜你猜对了\n); break; } count--; } if(count 0) { printf(机会用完游戏失败正确的数字是%d\n,r); } } //menu()函数展示游戏选择界面 void menu() { printf(\n\n); printf( 猜数字游戏 \n); printf( 1. 开始游戏 \n); printf( 0. 退出游戏 \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游戏结束再见\n); break; default: printf(\n输入错误请重新选择\n); break; } }while (input); return 0; }
返回列表