do...while语句
语法结构:
do
语句;
while(表达式);
do while
循环与while
循环非常相似,只有一点不同:
while
语句 先判断表达式,再执行循环语句;do while
语句 先执行循环语句,再判断表达式。
如:
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
本代码中,i的值并不符合表达式,但在do while语句下还是会先执行一次,之后再停止。
do while结构中的continue和break
int main()
{
int i = 0;
do
{
if(5 == i)
break;
printf("%d\n", i++);
}while(i<10);
return 0;
}
代码执行结果为 1 2 3 4
int main()
{
int i = 0;
do
{
if(5 == i)
continue;
printf("%d\n", i++);
}while(i<10);
return 0;
}
代码执行结果为 1 2 3 4 死循环
总结:do while 语句中break、continue 和while语句中功能相同。
练习:
1.在一个有序数组中查找具体的某个数字n。
2. 计算 1!+2!+3!+……+10!
3.编写代码,演示多个字符从两端移动,向中间汇聚。
参考代码放在结尾了
goto语句
c语言中提供了可随意使用的goto语句以及标记跳转的标签。
作用:可以跳转到函数中任何有标号的语句处。(c99增加了一条限制:goto语句不可以用于绕过变长数组)
注:goto语句只能在本函数内进行跳转,不可以跨函数跳转。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。所以这时候就用到了goto语句, goto语言对于嵌套循环的退出还是很有用的。
如:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
//处理错误情况
如上,程序中无论嵌套了多少层,只要遇到goto
语句,就会跳到goto
所标记的语句标签处
试题答案:
1.
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9 };
int left = 0;
int right = sizeof(arr1) / sizeof(arr1[0]);
int k = 0;
int mid = 0;
scanf("%d", &k);
while (left <= right)
{
mid = (left + right) / 2;
if (arr1[mid] > k) right = mid - 1;
if (arr1[mid] < k) left = mid + 1;
if (arr1[mid] == k) break;
}
if (left <= right)
printf("找到了,该数下标为%d\n", mid);
else
printf("该数不在数组中\n");
return 0;
}
2.
int main()
{
int i = 0;
int m = 0;
int sum = 0;
int b = 1;
scanf("%d",&m);
for (i = 1; i <= m; i++)
{
b = b * i;
sum = sum + b;
}
printf("1~%d的乘阶和为%d", m, sum);
}
3.
int main()
{
char arr1[] = "welcome to bit...";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1)-1;
printf("%s\n", arr2);
//while循环实现
while(left<=right)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
//for循环实现
for (left=0, right=strlen(src)-1;
left <= right;
left++, right--)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf( "%s\n", target);
}
retutn 0;
}
3题另一种方法
int main()
{
char arr1[] = { "welcome to bit" };
int left = 0;
int right = strlen(arr1) - 1;
int i = 0;
while (left <= right)
{
for (i = 0; i <= strlen(arr1) - 1; i++)
{
if (i<=left || i>=right)
printf("%c", arr1[i]);
else
printf("#");
// Sleep(200);
}
//system("cls");
//printf("\n");
left++;
right--;
}
return 0;
}
注:strlen函数表示返回括号中参数\0之前的长度,参数为字符类型,返回类型为整形
strcmp函数用于比较两个字符串是否完全相等,完全相等返回0 反之则返回1,
strlen和strcmp均属于string.h头文件,使用前需提前装载
Sleep函数表示暂停代码执行,括号中参数表示暂停时间,单位为毫秒
systeam函数表示执行windows系统中的代码指令(使用时须带上双引号) 如cls shutdown等
Sleep和systeam属于windows.h头文件,使用前需提前装载
至此C语言初阶学习分支语句和循环语句最终篇完结,如果有什么问题,欢迎大家在评论区,讨论、指正。
下次将更新『C语言初阶』第三章函数,敬请期待~
也希望此文对于你能够有所帮助,谢谢大家~
码字不易,还望支持