分支与循环(下)和数组引入

张开发
2026/4/10 8:16:03 15 分钟阅读

分享文章

分支与循环(下)和数组引入
系列文章目录一、goto语句二、综合写一个猜数字游戏1、rand函数1.1.srand1.2.time1.3生成随机数的范围2、猜数字简单实现三、数组1、数组的创建2、数组的初始化3、数组的类型4、数组的使用4.1.数组下标4.2.数组的输入和输出5、数组的存储一、goto语句可以跳转同一函数到指定的标号处中#includestdio.h main main() { int a 0; goto next; printf(aaa); next: printf(bbb); return 0; }运行后结果bbbgato用于身处循环嵌套时想快速跳出时比较便捷for() for() for() if() goto next; next:#include stdio.h #include stdlib.h int main() { char arr[10]{0}; system(shutdown -s -t 60); next: printf(请输入文本520否则关机) scanf(%s,arr); if(strcmp(arr,520)0) { system(shutdown -a); printf(OK); } else { goto next; } }cmd-----命令提示符shutdown-----关机命令shutdown -s(设置) -t(时间) 60shutdown -a(取消)system()-----库函数用来执行系统命令需包含头文件stdlib.hsystem(shutdown -s -t 60);二、综合写一个猜数字游戏1、rand函数可以产生伪随机数范围在0~32767使用时需要包含头文件stdlib.h语法如下int rand(void);printf(%d,rand());rand函数产生的是伪随机数不是真正的随机数是以某种算法生成的随机数是基于某个种子的基准值而产生的默认是1每次生成的随机数序列都是固定模板1.1.srand用于初始化随机数的生成器改变种子的基准值语法如下void srand(unsigned int seed);1.2.time返回与计算机起始时间之差的时间戳,需包含头文件time.h语法如下time_t time(time_t* timer);time_t --- long longsrand((unsigned int)time(NULL));将不断变化的时间戳作为生成随机数的种子来改变基准值再一次程序运行起来不管生成多少个随机数只需要设置一次随机数生成的就行1.3生成随机数的范围0~100rand() % 100 1100~200100 rand() % (200 - 100 1)生成a~b的随机数a rand() % (b -a 1)2、猜数字简单实现#include stdio.h #include stdlib.h #include time.h void menu() { printf(######开始菜单#####\n); printf(#####1.开始游戏####\n); printf(#####0.退出游戏####\n); } void game() { int b rand() % 100 1; int guess 0; while(1) { printf(请猜数字:\n); scanf(%d,guess); if(guess b) { printf(猜大了); } else if(guess b) { pritnf(猜小了); } else { printf(恭喜猜对了); break; } } } main() { srand((unsigned int)time(Null)); int a 0; do { menu() printf(请输入:\n); scanf(%d,a); switch(a) { case 0 : printf(游戏结束\n); break; case 1 : game(); break; default: printf(输入错误\n); } }while(a); return 0; }增加限制猜的次数#include stdio.h #include stdlib.h #include time.h void menu() { printf(######开始菜单#####\n); printf(#####1.开始游戏####\n); printf(#####0.退出游戏####\n); } void game() { int c 5; int b rand() % 100 1; int guess 0; while(c) { printf(还剩%d次的机会\nc); printf(请猜数字:\n); scanf(%d,guess); if(guess b) { printf(猜大了); } else if(guess b) { pritnf(猜小了); } else { printf(恭喜猜对了); break; } c--; } if(c0) printf(很遗憾猜的机会已经使用完了\n); } main() { srand((unsigned int)time(Null)); int a 0; do { menu() printf(请输入:\n); scanf(%d,a); switch(a) { case 0 : printf(游戏结束\n); break; case 1 : game(); break; default: printf(输入错误\n); } }while(a); return 0; }三、数组1、数组的创建数组是一组相同类型的元素集合数组内必须存放一个或多个元素数组内的么每个元素类型都是相同的语法如下数据类型 数组名[元素个数]int arr[5];这里的元素个数可以是常量、常量表达式2、数组的初始化完全初始化int a[5] {1,2,3,4,5};不完全初始化int a[5] {1,2,3};不完全初始化剩下未初始化的元素初始化为0初始化错误int a[3] {1,2,3,4};初始化的元素个数超出数组存储的大小3、数组的类型数组本身是有类型的把数组名去掉就是数组的类型int a[5]; //int [5]; char b[5]; //char[5]; float c[5]; //float [5];4、数组的使用4.1.数组下标数组的下标是从0开始的一直到n-1下标结束借助下标来访问数组中的元素。用下标引用操作符[]来访问int a[5] {1,2,3,4,5}; printf(%d\n,a[2]); //打印数组下标为1的元素 printf(%d\n,a[3]); //打印数组下标为2的元素 a[2] 4; //改变数组下标为1的元素的值4.2.数组的输入和输出数组只能逐个输入和输出每个元素要输入和输出元素时要借助循环int i 0; int a[5] {1,2,3,4,5}; for(i0;i5;i) scanf(%d,a[i]); for(i0;i5;i) printf(%d,a[i]);字符数组的初始化输入有两种char a[5] {a,b,c,d,e};char a[5] abde字符串的结束标志为\0本身占一个元素空间数组的初始化可以不给出空间大小但元素项需明确int a[]{1,2,3,4,5};错误实例int a[] {0};5、数组的存储数组的元素在存储空间内是连续依次存放的每个元素之间相差一个元素类型所占的字节位且数组元素的地址是从低到高的在64位机器下的地址是64位的在32位机器下的地址是32位的6、计算数组中的元素个数sizeof(数组名) 可以计算数组的大小int a[5] {0}; printf(%d,sizeof(a));运行后结果20sizeof(数组名) / sizeof(数组名[0]) 可以计算数组中的元素个数int a[5] {0}; printf(%d,sizeof(a) / sizeof(a[0]));运行后结果5

更多文章