分支与循坏语句

本文详细介绍了如何使用C语言实现阶乘计算、1到10的阶乘总和、100到200之间的素数查找以及二分查找算法。还展示了模拟用户登录场景,强调了字符串比较和输入验证的重要性。
摘要由CSDN通过智能技术生成


 目录


    • 计算n!的阶乘
    • 计算1!+2!+3!+......+10!的和
    • 计算100到200之间的素数
    • 在一个有序数组中查找某个数字n。编写int binsearch(int x,int v[],int n)功能:在v[0]<=v[1]<=..<=v[n-1]的数组中查找x.
    • 编写代码,演示多个字符从两端移动,向中间汇聚
    • 编写代码,模拟用户登录情景,并且只能登录三次(只允许输入三次密码,如密码正确则提示登录成功,如果三次输入错误,则退出程序) 

 题目

1、计算n!的阶乘

         代码

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

​

2、计算1!+2!+3!+...+10!

代码

方法一:

int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;

	for (n = 1; n <= 10; n++)
	{
		ret *= n;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

方法二:

#include<stdio.h> 
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 10; n++)
	{
		ret = 1;//计算n的阶乘之前,把ret初始为1
		for (i = 1; i <= n; i++)
		{
			ret *= i;
		}
		sum += ret;
	}
	
	printf("%d\n", sum);
	return 0;
}

3、计算100~200之间的素数

代码

#include<stdio.h>

  int main()

  {

      for(int i=100;i<200;i++)

  {

          for(int j=2;j<i;j++)

          {

              if(i%j==0)

              { 

          break;    

             }

              else{

                 

         printf("%6d",i);

          break;    

         }

             return 0;

         }

4、在一个有序数组中查找某个数字n。编写int binsearch(int x,int v[],int n)功能:在v[0]<=v<=v[2]...<=v[n-1]的数组中查找x.

方法:二分查找;

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;//要查找的数字
	//在arr这个有序的数组中查找k(7)的值
	int sz = sizeof(arr) / sizeof(arr[0]);//数组的元素个数
	int left = 0;
	int right = sz-1;
	while (left<=right) 
	{
		int mid = (right + left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else {
			printf("找到了下标是:%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到了/n");
	}
	return 0;
}

在这里要先定义一leftright两个边界变量,一开始让它们分别指向数组的第一个元素和最后一个元素。

二分查找的具体方式:

1、根据leftright找到数组的中间位置

2、检测中间位置的数据是否与要查找的数据key相等

  • 相等,找到,打印下标,跳出循环
  • key<arr[mid],则key可能在arr[mid]的左侧,让right=mid-1,继续到左半侧进行二分查找。
  • key>arr[mid],则key可能在arr[mid]的右半侧,让left=mid+1,继续到右半侧进行二分查找。

如果找到返回下标,否则继续,直到区间中没有元素时,说明key不在集合中,打印找不到。

易错点:

  1. right的右半侧区间取值,该值决定了后序的写法
  2. while循坏的条件是否有等号
  3. 求中间位置的方法,直接相加除2容易造成溢出
  4. 更改left和right的边界时,不确定是否+1和-1,对于易错点三,在我们上面所写的代码中求mid的值int mid=(left+right)/2就可能发生,为了避免造成溢出,我们最好这样求mid的值,即int mid=left+(right-left)/2。

5、编写代码,演示多个字符从两端移动,向中间汇聚

     代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
//system需要一个stdlib.h的头文件
//Sleep需要一个windows.h的头文件
int main()
{
	char arr1[] = "Welcom to China!!!!!";
	char arr2[] = "####################";
	int right = strlen(arr1) - 1;
	int left = 0;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
		Sleep(1000);  //单位是毫秒,加上Sleep,在屏幕上打印每一行的时候会有停顿
		//system("cls");  //清屏,如果加上这个清屏的话每打印一行会清屏
	}
	return 0;
}

这个题非常有趣建议大家可以在自己的电脑上试试。

6、编写代码,模拟用户登录情景,并且只能登录三次(只允许输入三次密码,如密码正确则提示登录成功,如果三次输入错误,则退出程序)

代码

 #include<stdio.h>
#include<string.h>
int main()
{
	int i = 0;
	//假设正确的密码是字符串“123456”
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", password);
		//if (password == "123456")//err - 两个字符串比较不应该使用==,应该使用strcmp
		if(strcmp(password,"123456")==0)
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误,重新输入\n");
		}
	}
	if (i == 3)
		printf("三次密码均错误,退出程序\n");
	return 0;
}

在这个代码中用到了strcmp字符串函数,它是用来比较字符串的。

对于该字符串函数strcmp,strcmp(str1,str2)的返回值取决于str1、str2的大小:

  • 若字符串str1<str2,则返回<0的数
  • 若字符串str1>str2,则返回>0的数
  • 若字符串str1=str2,则返回0.

总结

       以上就是我今天我所学总结的关于分支语句和循环语句使用的一些练习,它们的使用我们在以后的刷题中肯定还会常见的,希望大家都能熟悉掌握它们的使用,同时也希望我的这篇博客给大家带来收获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值