提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
c语言知识小清单(3)之速通期末考点
前言
本文主要讲解循环的重难点知识:
难点:折半查找
提示:以下是本篇文章正文内容,下面案例可供参考
一、循环初阶
非常简单,字面意思来讲,循环就是一个圈,不同于直线,一进一出,在圈里要做多次,知道不满足条件。和学习一个道理,你只要持续努力,大一学好专业课,打基础,提升软实力。大二打各种竞赛,嘎嘎得奖,大三直接剑指offer,你能力越来越强,自然当前的环境是配不上你,即不满足条件,方可跳出循环,翻越浪浪山,奔赴下一场山海。
1.计算n的阶乘
- 阶乘是啥?
- 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。
//计算n的阶乘
int n = 0;
int ret = 1;
for ( n = 1; n <= 5; n++)
{
ret *= n;
}
printf("%d", ret);
2.计算1!+2!+…+10!
- 刚刚我们已经学会了算一个数的阶乘,现在要把十个数的阶乘相加
- 挠挠头,左思右想
- 灵光一闪
- 计算一个数的阶乘,算十次,即使用循环,再相加
- 代码实现
int sum = 0;
int n = 0;
int ret = 1;
for (n = 1; n <= 10; n++)
{
ret *= n;//算阶乘
sum += ret;//相加
}
printf("%d", sum);
二.循环进阶
1.折半查找法
问题引出:在一个有序数组如何查找具体的某个数字n的下标
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
假设10是要查找的数字
中间值arr[mid]<10,那就把左边一半不管了,专注右边一半
即left=mid+1=7,rigth不变
mid=(left+right)+/2=10
arr[mid]>10,显而易见,中间值都比我们要找的要大,右边一半抛弃
left不变,right=mid-1=9,mid=(7+9)/2=8
arr[mid]<9,此时right不变,left=mid+1
巧了,left=right,即我们要找到元素10的下标就为此时的left和right
代码实现
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
int k = 9;//假设k是要查找的数字
i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//折半查找
int left = 0;
int right = sz-1;
int mid = left + (right - left) / 2;
int flag = 0;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是%d\n",mid);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到");
}
2.演示多个字符从两端向中间汇聚
什么意思呢?(ps:欢迎大家到大美江财游玩)
welcome to jufe!!!
******************
w****************!
we**************!!
wel************!!!
思路:先来俩数组,一个arr1[]存放welcome to jufe!!!
一个arr2[]存放******************
然后arr1[left]交给arr2[left]
arr2[right]交给arr2[right]
以上为一次,加之以循环,问题解决
代码实现
#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
char arr1[] = "welcome to jufe!!!";
char arr2[] = "******************";
int left = 0;
int right = strlen(arr1)-1 ;
while (left <= right)
{
arr2[left] = arr1[left];//字符替换,很关键的操作
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000); //间隔1000ms打印
system("cls");//清空屏幕
left++;
right--;
}
return 0;
}
3.strcpm的简单运用
例题:编写代码实现,模拟用户登录场景,只能登录三次
提示登录成功,如果三次都输入错误,则退出程序
假设正确的密码为123456
比较字符串使用strcpm,如果相等返回0:
int i = 0;
int flag = 0;
char password[10] = {0};
for ( i = 0; i < 3; i++)
{
printf("请输入密码\n");
scanf("%s", password);
if (strcmp(password, "123456") == 0)//两个字符串比较大小
{
flag = 1;
printf("密码正确");
break;
}
else
printf("密码错误");
}
if (flag==0)
{
printf("三次均密码错误,退出程序");
}
总结
例如:本文重点讲解了循环与折半查找法,希望读者朋友能好好消化,如有疑惑或者错误欢迎后台私信及评论区交流!