一.导入

我们前面讲了 while 循环 for 循环以及 do...while 循环,今天就让我们使用这些循环语句来解决一些实际问题


二.练习题

(1)请你编写一段代码,求 n 的阶乘,n的值由用户输入的值为准(不考虑溢出的情况)

示例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
	int n = 0;
	int ret = 1;
	printf("Please enter num:");
	scanf("%d",&n);
	for (int i = 1; i <= n; i++){
		ret = ret * i;
	}
	printf("ret = %d\n",ret);
	system("pause");
	return 0;
}

代码解析:我们首先使用 scanf() 函数获取用户输入的值并将其赋值给 n 作为阶乘的参数,随后后初始化了一个变量 ret 用来存储结果,随后使用 for 循环来生成 1-n 的数字并将其乘以 ret 然后赋值给 ret,最终的结果就是 1-n 的阶乘,如图所示:

【习题】 C语言循环部分训练_C语言


(2)利用循环,计算1!+ 2!+ 3!  ...... +10!

示例代码(有误):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
	int n = 0;
	int i = 1;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 10; n++){
		for (i = 1; i <= n; i++){
			ret = ret * i;
		}
		sum = sum + ret;
	}
	printf("sum = %d\n",sum);
	system("pause");
	return 0;
}

上面我们是输出的 1 - n 的阶乘,这里我们需要输出 1 -10 的阶乘,所以这里我们用到了 for 循环的嵌套,内层 for 循环用于输出每一个数字的阶乘,并将值赋值给 ret ,外层 for 循环则是生成 1 - 10 的数字并将内层 for 循环的结果赋值给 sum ,这样貌似没什么问题,但是当我们运行起来时候却会发现问题,程序居然输出了:1444231215 而正确的答案应该是:4037913  ,其原因就是我们没有在每一次循环之前对 ret 进行重新初始化为 1 ,所以会导致结果出现问题,正确的代码应该写成如下形式:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
	int n = 0;
	int i = 1;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 10; n++){
		ret = 1;
		for (i = 1; i <= n; i++){
			ret = ret * i;
		}
		sum = sum + ret;
	}
	printf("sum = %d\n",sum);
	system("pause");
	return 0;
}


(3)利用循环在一个有序数组中查找数字 n 

示例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void){
	int arr[] = {1,2,3,4,5,6,7,8,9};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	int num = 0;
	printf("please enter the number:");
	scanf("%d",&num);
	for (i = 0; i < sz; i++){
		if (num == arr[i]){
			printf("num is %d in arr[%d]\n",arr[i],i);
			break;
		}
	}
	if (i == sz){
		printf("Can't found number!\n");
	}
	system("pause");
	return 0;
}

我们使用 for 循环进行遍历数组的操作,将用户输入的预期值 num 与数组中的每一个元素进行比较,如果用户输入的数字能在数组中找到则输出数字与下标,若 i 的值已经等于 sz 也就是将数组全部遍历完了还没有找到则告诉用户找不到,如图所示:

【习题】 C语言循环部分训练_数组_02

                                                                                                                     2024/2/18

                                                                                                                        王起舟