C入门【五】(二)

3.编写代码模拟三次密码输入的场景 且不得超过三次

//需求如题所示模拟登陆时 上次失败则自动“封号“
题目难度不大,主要考虑循环条件何时退出

#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "stdlib.h"
/*
   需求分析:编写代码模拟三次密码输入的场景 且不得超过三次
   过程分析:{
   			1.设置的登陆菜单框架
   			2.设置比对器
   		}
*/
Meau(){
   printf("////////////////////\n");
   printf("///// 1.登陆  /////\n");
   printf("///// 0.退出  /////\n");
   printf("////////////////////\n");
}
int Logger(){
   char fir[10] = "123456";
   char sec[10];
   int i=0;
   int count = 1;
   printf("请输入密码:");
   scanf("%s", sec);
   
   for (i = 0; i <= 3; i++){                                    ====
   	if (i <= 2){								               ====
   		if (strcmp(sec, fir) == 0){	                          ====
   			printf("输入正确");					  ====
   			break;								  ====
   		}
   		else{											  ====
   			printf("错误(还有%d机会)请重新输入:",3-count);         ====
   			scanf("%s", sec);                                                                	  ====
   			count++;
   		}
   	}
   	if (i == 3){
   		printf("请联系管理员");
   	}
   }
   return 0;
}
int main(){
   int input;
   Meau();
   printf("请选择:\n");
   scanf("%d",&input);
   	switch (input){
   	case 1:
   		Logger();
   		break;
   	case 0:
   		break;
   	default:
   		break;
   	}
   system("pause");
   return 0;
}

个人看法:我在解决问题时主要的难点在于如何解决我打标点的地方的问题怎样简单的解决到达三次失败与寻找管理员和谐统一,我暂时这样处理只是为了方便代码的进行。

4.一个二分法的典型例题

//通过二分法寻找有序数组符合条件的值 首先我们得明白什么是二分法,二分法是一种思维我称之为折中查找,优势是在于每一次排除一半不符合条件的情况

#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
/*
   需求分析 通过二分法查询数组内的数字
   	过程{
   		1.生成一个有序数组
   		2.输入待测数字
   		3.二分法比对{
   			取数组中值进行比较,缩小比值区间
   		}
   	}
   		

*/
int compar(int num, int arr[], int left, int right, int mid){
   while (left <= right){
   	mid = (left + right) / 2;
   	if (arr[mid]<num){   
   		left = mid + 1;
   	}else
   	if (arr[mid]>num){
   		right = mid - 1;
   	}else
   		break;
   }
   if (left <= right){
   	printf("找到了,下标为%d\n",left);
   }
   else{
   	printf("找不到\n");
   }
}

int main(){
   int random = rand() % 100 + 1;
   int i;
   int arr[10];
   int num;
   //生成一个数组
   arr[0] = random;
   for (i = 1; i <= 9; i++){
   	arr[i] = arr[i-1] + 1;
   }
   int left=0;
   int right = sizeof(arr) / sizeof(arr[0])-1;
   int mid = 0;
   //输入数字
   printf("输入数字:");
   scanf("%d", &num);
   compar(num,arr,left,right,mid);
   system("pause");
   return 0;
}

总结:这是在这段时间遇到的经典题目,每个题难度不大 但是我在解决时都尽量向模块化,系统化的去解决让每一个题目看起来像一个小程序目的是培养我的代码思维。在解决为问题时先写出题目的 需求分析 在分析出过程 然后将注意的点依次实现。

猜你喜欢

转载自blog.csdn.net/qq_36390039/article/details/84777580
今日推荐