1.do....while()循环
1.1 do语句的语法构成:
do
循坏语句;
while(表达式)
do语句区别于while语句的特点是,do。。while这个循环至少执行一次,但缺点是场景有限,不能像for和while一样应用广泛
举个栗子,打印1-10
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ",i)
}while(i<10);
return 0;
}
1.2 do...while循环中的break和continue
以栗子说明
运行结果为1,2,3,4,break在do。。while循环中的作用是直接终止循环
执行结果是 1,2,3,4死循环,if条件满足执行continue后,跳过了调节阶段,所以i的值恒为5,进入死循环,continue与while和for循环的作用相同均为跳过本次循环continue语句后的语句。
2.分支循环语句学习后习题小结
2.1 计算n的阶乘
提示:n的阶乘就是1*..*n 举栗:3!=1*2*3
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
int ret = 1;
for(i=1;i<=n;i++)
{
ret = i*ret;
}
printf("%d",ret);
return 0;
}
2.2 计算1!+。。。+10!
与计算n的阶乘的区别是增加了一个存和的量
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d",&n)
int ret = 1;
int sum = 0;
int i = 0;
for(i = 1;i<=n;i++)
{
ret = i*ret;
sum += ret;
}
}
2.3 在一个有序数组中查找具体的某个数字
提示:使用二分查找法(折半查找法)
二分查找法:如猜数字大小,小明买了一双鞋,我好奇问多少钱,他说不超过300元,我于是先猜中间值150,根据他反应这个数的大小判断下一个区间
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int mid = 0;
int k = 7;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
2.4 演示多个字符从两端移动,向中间汇聚
string头文件 :strlen(求字符串长度)
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "wecome to bit!!!!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
这里求数组包含的个数时不能简单的使用sizeof(arr1)/sizeof(arr1【】)的公式,要考虑到\0的影响。
2.5模拟用户登录,失败三次程序结束
string头文件:strcmp(比较两个字符串内容是否相同,相同则返回0)
#include<stdio.h>
#include<string.h>
int main()
{
int i = 0;
char passward[] = "a,b,c,d,e,f";
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s", &passward);
if (strcmp(passward, "abcdef") == 0)
{
printf("密码正确");
break;
}
}
if (i == 3)
{
printf("输入过于频繁请,稍后再试.\n");
}
return 0;
}