C语言分支和循环经典例题(乘法口诀、判断100-200之间的素数、n的阶乘、二分查找)

分支和循环的例题讲解

大家好,今天我们来讲解一下分支和循环的经典例题,要学会编程经常刷题是必不可少的。

一.输出9*9乘法口诀。

代码展示

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

代码讲解 

我们用for循环来设置行和列, i 来控制行,j 来控制列,由于是9*9的乘法口诀,所以我们把行设置为小于10,i=1。因为是从1*1到9*9。

为了美观我们把 j 设置为小于等于 i ,这样就可打印出第一行有一个,第二行有两个的三角形,之后再把输出格式设置为 "%d*%d=%2d "为了让打印出来的数向右对其并且不挨在一起。

结果展示

二.判断100-200之间的素数。

代码展示

#include<stdio.h>
int main()
{
	int i, j;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d是素数\n", i);
		}
	}
	return 0;
}

代码讲解

首先,我们要了解什么是素数,素数就只能被1和它本身整除的数。

所以只要我们找到能被1和它本身之外的数整除,那么它就不是素数,既被它本身之外的数取余得0。

那么我们要判断100-200之间的素数,我们首先就要找到100-200之间的数,所以我们用for循环找到100-200之间的数。

然后我们设置一个标志flag=1;因为素数只能被1和它本身整除,所以我们从2开始,如果一个数被大于他的数取余,余数一定不为0;所以要小于i本身。

之后我们在利用if语句判断是否等于0,等于0我们就令flag=0,并跳出,然后再利用if语句判断flag是否“==1”,如果等于那么它就是素数。

结果展示

三.计算n的阶乘。

代码展示

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

代码讲解

首先,我们要先了解一下什么是阶乘,阶乘其实就是所有小于等于这个正整数的乘积。

例如,5!=5*4*3*2*1=120;(5!=1*2*3*4*5=120)都可只是数的改变方式不同;

注意:0!=1;

所以,当我们要计算阶乘是就是要不停的乘数,并且还要改变这个数,这就要用到我们的循环了。

我们先设置一个ret=1;并输入想要阶乘的数,然后利用for循环,每一次循环都令ret*i,并把值重新赋给ret,之后在for循环外打印,这时我们ret设为1的另一个用处就出来了,当n=0时,for循环判断不成立直接就打印了ret=1;既0!=1。

结果展示

四.二分查找。

写一个二分查找,找到了就返回下标,否则返回找不到。

代码展示

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int n = 0;
	int flag = 0;
	printf("请输入要查找的数:");
	scanf("%d", &n);
	while (left <= right)
	{
		int mid = left + (right - left) / 2;  //这里就是(left+right)/2,这样写是因为后者可能会溢出
		if (n <arr[mid])
		{
			right = mid +1;
		}
		else if (n > arr[mid])
		{

			left = mid + 1;
		}
		else 
		{
			printf("找到了下标为%d", mid);
			 flag = 1;
			break;
		}
		
	}
	if (flag == 0)
	{
		printf("找不到\n");
	}
}

代码讲解

首先我们先了解一下二分查找,二分查找,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。

它的基本思想是:首先,比较数组中间项与目标值,如果目标值与中间项相等,则查找成功;如果目标值小于中间项,则在数组的左半部分继续查找;如果目标值大于中间项,则在数组的右半部分继续查找。这个过程会不断重复,直到找到目标值或搜索范围为空。

所以我们先建立一个数组,再利用sizeof求出数组个数,建立一个left和right,令left=0;right=sz-1;

数组下标从零开始最后一个下标为个数减一;在设立flag=0;这时我们又要利用循环,循环的判断条件为left<=right,并设立一个下标的中间值mid,在利用二分查找,如果数大于下标为mid的数,数就是在mid的右边,这时我们改变left的值让left=mid+1;同理如果小于就是right=mid-1;等于 就是找到了,打印该数的下标,并且令flag=1;如果没有找到flag没有改变,就会输出找不到。

结果展示

好了,今天的分享就到这里了,还请大家多多关注,下篇见。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值