外贸seo外贸推广外贸网站建设外贸网站建设,柳州网站seo网站s,哪个网站能免费下载,网站域名个人备案查询“花会沿途盛开#xff0c;以后的路也是。” 今天我们一起来继续学完分支语句和循环语句。 分支和循环 3.循环语句3.4 do...while()循环3.4.1 do语句的用法 3.5关于循环的一些练习3.6 goto语句 3.循环语句
3.4 do…while()循环
3.4.1 do语句的用法
do循环语句;//当循环语句…“花会沿途盛开以后的路也是。” 今天我们一起来继续学完分支语句和循环语句。 分支和循环 3.循环语句3.4 do...while()循环3.4.1 do语句的用法 3.5关于循环的一些练习3.6 goto语句 3.循环语句
3.4 do…while()循环
3.4.1 do语句的用法
do循环语句;//当循环语句不止一句的时候要用大括号括起来
while(表达式);在前面我们学过了用while循环和for循环在屏幕上打印1~10的数字那么在do...while()循环中如何实现这步操作呢
#include stdio.h
int main()
{int i 1;do{printf(%d , i);i;} while (i 10);return 0;
}接下来让我们用一张图了解一下do...while()循环的执行流程 do语句的特点循环至少执行一次使用的场景有限所以不是经常使用。 同样的在do…while()循环中也存在break和continue语句。接下来让我们用示例看看用法是否一致
#include stdio.h
int main()
{int i 1;do{if (i 5)break;//遇到break循环终止因此屏幕上只打印出1~4printf(%d , i);i;} while (i 10);return 0;
}#include stdio.h
int main()
{int i 1;do{if (i 5)continue;//遇到continue跳过本次循环后面的代码printf(%d , i);i;} while (i 10);return 0;
}通过运行我们可以发现程序进入了死循环光标在4的后面一直闪烁。 总结do...while循环中的break和continue和在while循环中一模一样。break都是用来终止循环的continue是跳过本次循环后面的代码直接去判断部分。 3.5关于循环的一些练习
下面让我们一起下一些关于循环的练习 1.计算n的阶乘
//计算n的阶乘
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
int main()
{int n 0;int i 0;int ret 1;scanf(%d, n);for (i 1; i n; i)//循环产生1~n的数字{ret ret * i;}printf(n! %d, ret);
}2.计算12345678910
//计算12345678910
#include stdio.h
int main()
{int n 0;int i 0;int ret 1;int sum 0;for (n 1; n 10; n){ret 1;//要让ret每次都从1开始for (i 1; i n; i)//循环产生1~n的数字{ret ret * i;}sum ret sum;}printf(%d\n, sum);return 0;
}我们可以发现这段代码相对来说还是比较复杂的每次都得先把n!算出来然后在相加每次都要从1开始乘到n但实际上我们可以发现后一个数的阶乘等于前一个数的阶乘乘以这个数本身就行了这样一来简化了计算过程。那么我们一起把代码优化一下吧
#include stdio.h
int main()
{int i 0;int ret 1;int sum 0;for (i 1; i 10; i){ret ret * i;sum ret sum;}printf(%d\n, sum);return 0;
}我们可以发现这两段代码的结果相同后者更优因此我们在写代码的时候不光要看怎么能写出代码还需要思考怎么样写才是最简便的。
3.在一个有序数组中查找具体的某个数字n如果有打印出它的下标没有的话给出提示。 当我们看到这个题目的第一眼可能大多数人的想法就是从左向右一个一个寻找找到的话就打印出下标找不到就给出提示这种方法我们也叫做遍历查找。假设我们要从1~10的十个数中找出6那么该如何写这段代码呢
//假设我们要从1~10的十个数中找出6那么该如何写这段代码呢有的话给出下标没有的话给出提示
#include stdio.h
int main()
{int arr[] { 1,2,3,4,5,6,7,8,9,10 };int n 0;int flag 0;scanf(%d, n);for (int i 0; i 9; i){if (arr[i] n){printf(找到了下标是: % d, i);flag 1;break;}}if (flag 0){printf(没找到\n);}return 0;
}虽然这种方法实现了我们想要的结果但是我们发现这种算法比较复杂如果我们现在要寻找的是10.那么这个循环将要走10次那么如果是一个更大的数呢比方说妈妈带着小明去买了一双鞋小明说这双鞋在600元以内那么这个时候让我们来猜这双鞋是多少钱难道我们需要从1开始一直查找到600吗显然计算量是相当大的对于这种有序数组中某个元素的查找我们这个给大家介绍一个新的方法叫做折半查找又称二分法。 下面我们给出用二分查找解决上述问题的示例先帮助大家了解一下二分查找的过程。 我们可以发现二分查找的效率很高但是条件苛刻只针对有序的数组中。 下面我们给出详细代码
//二分查找
#include stdio.h
int main()
{int left 0;int arr[] { 1,2,3,4,5,6,7,8,9,10 };int right sizeof(arr)/sizeof(arr[0])-1; //sizeof(arr)算的是数组的总大小单位是字节int mid 0;int flag 0;int n 0;scanf(%d, n);while (left right){mid (right left)/2;if (arr[mid] n){printf(下标为%d, mid);flag 1;break;}else if (arr[mid] n){right mid - 1;}else if (arr[mid] n){left mid 1;}}if (flag 0){printf(没找到\n);}return 0;
}4.编写代码演示多个字符从两端移动向中间汇聚。 假设我们这里需要实现Hello C World !!!的字符从两端移动往中间汇聚该如何实现呢
#define _CRT_SECURE_NO_WARNINGS 1
//编写代码演示多个字符从两端移动向中间汇聚。Hello C World !!!!!!
#include stdio.h
#include string.h//使用strlen需要添加的头文件
#include windows.h//使用system(cls);需要添加的头文件
int main()
{char arr1[] Hello C World !!!!!!;char arr2[] ********************;int left 0;int right strlen(arr2) - 1;//此时是数组元素是字符串而不是一个个字符通过前面的学习我们知道了字符串结束标志为\0但strlen计算的是除了\0以外的字符长度因此1即得到最右边数组的下标//int right sizeof(arr2) / sizeof(arr2[0]) - 2;当然使用sizeof也是可以的不过此时我们要进行减2的操作while (left right){arr2[left] arr1[left];arr2[right] arr1[right];printf(%s\n, arr2);Sleep(1000);//等待1秒system(cls);//清空屏幕left;right--;}printf(%s\n, arr2);return 0;
}5.编写代码实现模拟用户登录情景并且只能登录三次如果正确显示登录成功如果错误退出程序。
//编写代码实现模拟用户登录情景并且只能登录三次如果正确显示登录成功如果错误退出程序。
#include stdio.h
#include string.h//strcmp需要包含该头文件
int main()
{char arr[20] { 0 };char password[] 123456;int i;for (i 0; i 3; i){printf(请输入密码);scanf(%s, arr);//strcmp函数是比较字符串的大小如果,则返回0的值如果则返回0的值如果相等则返回0if (strcmp(arr, password) 0){printf(登录成功\n);break;}elseprintf(密码错误\n);}if (i 3){printf(三次密码均输入错误退出程序\n);}return 0;
}6.猜数字游戏-电脑随机产生1~100之间的一个数接下来我们猜数字如果小了我们给出提示猜小了如果猜大了我们给出提示猜大了如果猜对了那么恭喜你猜对了游戏结束。 这里我们需要先给大家介绍一下产生随机数的函数rand() 上述资料中我们知道想要使用rand()函数我们需要添加头文件#include stdlib.h我们可以先通过简单的代码看看rand()的功能
#include stdio.h
#include stdlib.h
int main()
{int ret rand();printf(%d, ret);return 0;
}经过调试运行我们发现rand()确实能够产生一个随机数但是多次调试我们又发现每次产生的随机数都是41那这就不能达到我们期望的结果。 查阅资料我们可以发现rand()函数是通过某种算法生成的随机数因此它还不够随机不能达到我们预期的结果。rand()函数生成的是伪随机数且其生成的随机数的范围是0~RAND_MAX. 通过查找我们可以发现RAND_MAX的值为32767。rand()函数在生成随机数之前需要通过srand()函数设置随机数的生成器。 大家肯定又在想srand()函数又是干什么的呢这里我们带大家一起了解一下 下面我们通过代码给大家进行演示
#include stdio.h
#include stdlib.h
int main()
{srand(1);//srand(2);int ret rand();printf(%d, ret);return 0;
}我们可以发现rand()是一个产生随机数的函数而srand是一个设置随机数种子的函数通常这两个函数是一起使用的来完成产生随机数的功能。srand函数通过参数seed来改变系统提供的种子值从而可以使得每次调用rand函数生成的伪随机数序列不同从而实现真正意义上的“随机”。 这里我们介绍一下时间戳通过百度我们可以对时间戳有所了解 我们可以发现只要时间在变化那么其所对应的时间戳就在变化那么我们如何在C语言中获得时间戳呢这里我们需要给大家介绍一下time()函数。 我们可以发现time()函数还存在一个参数会返回时间戳但是它的参数是一个指针我们可以通过参数带回时间戳这里我们不想用的话可以用NULL0这个空指针来代替。我们发现time()函数的类型是time_t但是srand()所需类型是unsigned int这里我们就可以进行强制类型转换。
srand((unsigned)time(NULL));这条指令的意思是利用系统时间来初始化系统随机数的种子值使得每次运行由于时间不同产生而产生不同的随机数序列。如果想在一个程序中生成随机数序列只需要在主程序开始处调用srand((unsigned)time(NULL))后面直接用rand()函数就可以了。 接下里我们就一起来写一下猜数字的游戏吧
//猜数字游戏
#include stdio.h
#include stdlib.h//srand()函数和rand()函数所需要的头文件
#include time.h//time()函数所需要的头文件
void menu()
{printf(********************************\n);printf(********** 1.play **********\n);printf(********** 0.exit **********\n);printf(********************************\n);
}
//1.生成1~100的随机数
//2.猜数字
void game()
{int guess 0;int ret rand() % 100 1;//生成1~100的随机数任何一个数%100等于0~99,加上1就是1~100.while (1){printf(请猜数字);scanf(%d, guess);if (guess ret){printf(猜大了\n);}else if (guess ret){printf(猜小了\n);}else{printf(恭喜你猜对了\n);break;}};
}
int main()
{int input 0;srand((unsigned int)time(NULL));//利用系统时间来初始化系统随机数的种子值使得每次运行由于时间不同产生而产生不同的随机数序列。do {menu();printf(请选择);scanf(%d, input);switch (input){case 0:printf(game over!\n);break;case 1:printf(game start!\n);game();break;default:printf(选择错误请重新选择\n);break;}} while (input);return 0;
}3.6 goto语句 C语言中提供了可以随意滥用的goto语句和标记跳转的标号。从理论上goto语句是没有必要的实践中没有goto语句也可以很容易的写出代码。但在某种场合下goto语句还是用得着的最常见的用法就是终止程序在某种深度嵌套的结构的处理过程。例如一次跳出两层或多层循环。多层循环这种情况使用break是达不到目的的它只能从最内层循环退出到上一层循环。 goto语言真正适合的场景如下
for(...)for(...{for(...){if(disaster)goto error;}}...
error:if(disaster)//处理错误情况下面呢我们给出goto语句的示例
//goto语句
#include stdio.h
int main()
{printf(hehe!\n);printf(haha!\n);goto end;printf(heihei!\n);
end:printf(hihi!\n);return 0;
}注goto函数只能在同一个函数内部跳转不能跨函数 下面我们也给出一个用goto语句写出关机程序的例子该程序仅供学习使用不要过度整蛊同学
//关机程序
#include stdio.h
int main()
{char input[10] { 0 };system(shutdown -s -t 60);
again:printf(你的电脑将在1分钟内关机如果输入:我是猪则可以取消关机程序\n);scanf(%s, input);if (strcmp(input, 我是猪) 0){system(shutdown -a);printf(关机程序已经取消\n);}elsegoto again;return 0;
}好啦关于分支和循环到这里就完结啦欢迎大家关注、点赞和评论