飞道的博客

C语言:选择、循环练习——n阶乘、二分法、显示字符串、密码验证、猜数字

271人阅读  评论(0)

内容

1.n阶乘
2.二分法
3.显示字符串
4.密码验证
5.猜数字
———————————————————————————————————

*1.n阶乘

n! = n*(n-1)(n-2) * … *1;
sum=1!+2!+…+n!;
实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int factor(int num){
   
	int ret=1;
	for(int i=0;i<n;i++){
   
		ret=ret*i;
	}
	return ret;
}

int main(){
   
	int n=0;
	int sum=0;
	printf("请输入一个整数\n");
	scanf("%d",&n);
	for (int i = 1; i <= n;i++) {
   
		int factor = 1;//乘积
		printf("%d的阶乘为:%d\n",i,factor(i));
		sum=sum+factor(i);
	}
	printf("前n阶阶乘和为:%d\n",sum);
	system("pause");
	return 0;
}

结构为:

*2.二分法

二分法:在有序数组中实现快速查找的方法;
int s[]={1,2,3,4,5,6 } 查找数num=2
方法:首先设置两个变量,left和right表示第一个和最后一个数组元素下标;计算中间元素下标mid=(left+right)+1;比较num和s[mid],如果数num在s[mid]左侧则right值变为mid-1;反之在右侧更新left为mid+1;继续比较,直到s[mid]==num;返回下标mid。
实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//将二分法封装成一个函数

int main(){
   
	int arr[]={
   1,2,3,4,5,6};
	int num=0;
	int left =0;
	int right=5;//最后一个元素下标
	while(num){
   
		int mid =(left+right)+1;
		if(num<arr[mid]){
   
			right=mid-1;
		}
		else if(num>arr[mid]){
   
			left=mid-1;
		}
		else{
   
			printf("找到了,%d在数组中的下标为:%d\n",num,mid);
			break;
		}
	}
	if(left>right){
   
		printf("没找到!\n");
	}
	system("pause");
	return 0;
}

结果:

*3.显示字符串

演示多个字符(字符串“welcome to C!”),从两边移动并显示,向中间汇集。
实现:

#include<stdio.h>//包含打印输出函数
#include<stdlib.h>//包含system库函数
#include<string.h>//包含strlen函数,计算字符串长度
#include<Windows.h>//包含Sleep库函数

int main(){
   
	char str1[]="welcome to C!";
	char str2[]="#############";
	int left=0;
	int right =strlen(str1)-1;
	while(left<=right){
   	
		str2[left]=str1[left];
		str2[right]=str1[right];
		left++;
		right--;
		printf("%s\n",str2);
		//Sleep(500);  延迟时间
		//system("cls"); 清屏操作
	}
	system("pause");//请按任意键继续!
	return 0;
}

结果:

*4.验证密码

模拟用户登录,验证密码,允许用户 登录三次,若密码正确则显示登陆成功,错误则显示您已错误3次,退出登录!
实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main(){
   
	char password[1024]={
   0};
	printf("请输入登录密码:");
	scanf("%s",password);//scanf输入字符串时不用加地址符&,输入整数时必须加&
	int i = 0;
	for(;i<3;i++){
   
		if(strcmp(password ,1234)==0){
   
			printf("登陆成功\n");
			break;
		}else{
   
			printf("密码错误\n");
		}
	}
	if(i>=3){
   
		printf("您已错误3次,退出登录!\n");
	}
	system("pause");
	return 0;
}

结果:

*5.猜数字

  • 随机生成数,设置随机种子,避免每次生成的随机数时一样的:int random=rand()%100+1; srand((unsigned)time(NULL));
  • 循环判断玩家输入猜测的数字和系统随机生成的数进行比较
  • 定义菜单函数和猜测游戏函数

实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void menu(){
   
	printf("****************************\n");
	printf("*** 1.play guess game!\n ***\n");
	printf("*** 2.exit! ****************\n");
	printf("****************************\n");
	printf("请选择功能:");
}

void guessGame(){
   
	int input=0;
	int random_num = rand()%100+1;
	while(1){
   
		printf("请输入你猜测的数字:\n");
	    scanf("%d",&input);
		if(input<random_num){
   
			printf("猜小了!\n");
		}else if(input>random_num){
   
			printf("猜大了!\n");
		}else{
   
			printf("猜对了!\n");
			break;
		}
	}
}

int main(){
   
	int select=0;
	menu();
	printf("请选择功能:");
	scanf("%d",&select);
	while(1){
   
		switch(select){
   
		case 1: guessGame();
			break;
		case 0: printf("exit!\n");
				system("cls");
			break;
		}
		break;
	}
	system("pause");
	return 0;	
}

结果:


转载:https://blog.csdn.net/weixin_47921628/article/details/115531084
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场