分支和循环的例题讲解
大家好,今天我们来讲解一下分支和循环的经典例题,要学会编程经常刷题是必不可少的。
一.输出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没有改变,就会输出找不到。
结果展示
好了,今天的分享就到这里了,还请大家多多关注,下篇见。