C语言------分支和循环(3)

前面两期我们已经介绍了分支( if、switch ) 、while循环以及 gechar/putchar 这两个函数,这一期我们来介绍一下for循环、do..while循环、goto语句以及练习几个栗子!

1.for循环 

for循环语法 

for (初始化; 循环条件; 循环变量的迭代)

{

        循环语句;

}

注意的是:这里for里的每一个表达式都是用 ; 号隔开的! 

OK,举个栗子(打印1---10):

#include<stdio.h>
int main()
{
	int i = 0;

	for (i = 1; i <= 10; i++)
	{
		printf("%d\t", i);
	}

	return 0;
}

运行结果以及代码解释:

 这里我们会发现,在for循环中也有初始化、条件判断、调整三步;那么他和while循环有什么区别呢?我们来对比一下:

 我们可以发现,他们由于风格原因导致形式大大不同,while循环三个部分偏离的较远,有时候让人看不清楚调整这一步!而for循环就不同了,它的三步在同一行,让人一眼就能看清楚!因此在很多时候for循环更胜一筹!

break和continue在for循环中的使用

for循环中的break与continue和while循环中的作用一样的;

让我们来看几个代码:

1.break

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
		{
			break;
		}
		printf("%d\t", i);
	}
	return 0;
}

运行结果:

 2.continue

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
		{
			continue;
		}
		printf("%d\t", i);
	}
	return 0;
}

运行结果:

关于for循环的一些变种 

1.思考线面代码会打印多少个hehe?

#include<stdio.h>

int main()
{
	for (; ;)
	{
		printf("hehe\n");
	}

	return 0;
}

运行结果以及解释:

 注意:for循环中初始化、条件判断、调整这三步都是能省略的,但建议一般不要省略!否则可能会带来不必要的麻烦!

请看下面的两段代码,思考能打印多少个hehe?

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int c = 1;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("%d hehe\n",c);
			c++;
		}
	}
	return 0;
}

运行结果:

 请继续看下面的两段代码,思考能打印多少个hehe?

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int c = 1;//计数器
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("%d hehe\n",c);
			c++;
		}
	}
	return 0;
}

运行结果以及代码解释:

注意:上面两段代码就差一个初始化,打印的结果却很不同!所以还是建议一般不要轻易的省略这三步(初始化、条件判断、调整)。

ok,再来看一个for循环的特殊情况:

#include<stdio.h>

int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;
}

 运行结果以及代码演示:

关于for循环这里有一道曾今的笔试题(看看能否做对):

#include<stdio.h>

int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
		k++;
	}
	return 0;
}

请问上述代码循环了几次?

答案是 0 次,因为在条件判断的时候是 k= 0 这里注意是直接赋值为0,所以一开始 就是假的(C语言中0 表示真,非0表示假),所以循环压根就没进去!

2.do...while循环 

do..while 循环语法 

do{

        循环语句;xu

} while(循环判断表达式);

注意:do ...while循环的特点是无论什么场景都先执行一次即:先执行再判断! 

OK,举个例子(打印1--10):

#include<stdio.h>

int main()
{
	int i = 1;
	do {
		printf("%d\t", i);
		i++;
	} while (i <= 10);
	return 0;
}

运行结果和代码解释:

 do ...while循环中的break和continue

1.break:

#include<stdio.h>

int main()
{
	int i = 1;
	do {
		if (i == 5)
		{
			break;
		}
		printf("%d\t", i);
		i++;
	} while (i <= 10);
	return 0;
}

代码运行结果:

2.continue

#include<stdio.h>

int main()
{
	int i = 1;
	do {
		if (i == 5)
		{
			continue;
		}
		printf("%d\t", i);
		i++;
	} while (i <= 10);
	return 0;
}

 运行结果和代码解释:

一些循环练习:

1.计算n的阶乘 

#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret = ret * i;
	}
	printf("%d ", ret);
	return 0;

运行结果:

 2.计算1!+2!+...+n! 

int main()
{
	int n = 0;
	int ret = 1;
	int i = 0;
	int sum = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret = 1;
		for (int j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d ", sum);
	return 0;
}

运行结果及代码解释:

 上面这种方法如果不注意ret = 1的话就会错!下面这种方法也可以:

3.在一个有序的数组中查找具体的某个数(二分查找) 

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 0;
	scanf("%d", &k);
	int left = 0;
	int mid = 0;
	int right = sizeof(arr) / sizeof(arr[0]);
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (k > arr[mid])
		{
			left = mid + 1;
		}
		else if (k < arr[mid])
		{
			right = mid - 1;
		}
		else
		{
			break;
		}

	}
	if (left <= right)
	{
		printf("找到了,下标是 %d ", mid);
	}
	else
	{
		printf("没找到!\n");
	}
	return 0;
}

代码解释和运行结果:

 goto语句:

C语言中提供了可以随意跳跃的goto语句和标记跳转的记号;从理论上讲goto语句是没有必要的,能用goto的一定能用循环实现的!但在某种场合下goto 还是有他自身优势的!例如多重循环结束的时候如果用break要多个但是用goto的话就一次能结束!

 关于goto栗子(关机代码goto实现):

int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");
	flag:
	printf("您的电脑讲在1分钟后关机,如果输入:我是猪则取消关机");
	scanf("%s", arr);
	if (0 == strcmp(arr, "我是猪"))
	{
		system("shutdown -a");
	}
	else
	{
		goto flag;
	}
	return 0;
}

关机代码循环实现:

int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("您的电脑讲在1分钟后关机,如果输入:我是猪则取消关机");
		scanf("%s", arr);
		if (0 == strcmp(arr, "我是猪"))
		{
			system("shutdown -a");
			break;
		}
	}
	return 0;
}

ok!好兄弟,下期再见!

猜你喜欢

转载自blog.csdn.net/m0_75256358/article/details/130510139