『C语言初阶』第二章-分支语句和循环语句(3)

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语言初阶』第三章函数,敬请期待~

也希望此文对于你能够有所帮助,谢谢大家~

码字不易,还望支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值