#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<windows.h>//用于控制输出窗口的函数库
#include<stdlib.h>//用于调用system()函数的库
//int main()
//{
//循环和分支语句练习**************************************************************************
//练习1:计算n的阶乘 练习2:计算1!+2!+3!.....+n!
//练习3:在一个有序数组中查找具体的某个数字n,编写 int binsearch(int x,int v[],int n)函数,功能是在v[]数组中查找x
//练习4:编写代码,演示多个字符从两端移动,向中间汇聚
//练习5:编写代码实现,模拟手机解锁情景情景,并且只能登录5次,(第4次错误锁屏30分钟,第五次锁屏1小时,并显示用户锁定,退出程序)
//*********************************************************
//practice 1:求阶乘和
/*int n = 0;
int result = 1;
printf("请输入要求的阶乘数:>");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
result = result * i;
}
printf("%d! = %d\n", n, result);*/
//********************************************************
//practice 2: 求1!+2!+...n!
/*int n = 0;
int result = 1;
int sum = 0;
printf("请输入要求到多少的阶乘数和:>");
scanf("%d", &n);
for (int j = 1; j <= n; j++)
{
result = 1;
for (int i = 1; i <= j; i++)
{
result = result * i;
}
printf("%d! = %d\n", j,result);
sum = sum + result;
};
printf("1!+2!+....%d! = %d\n ", n, sum);*/
//********************************************************
//practice 3:编写函数实现在数组中查找某个数字n
//1:数组遍历
//*********************************************************
//int Num = 0;
//int all = 0;
//int arr[] = { 1,2,3,4,5,6,7,8,9,10 ,12,15,5,6,7,8,9,10,1,2,3,4,11,13,14};
//int num = sizeof(arr) / sizeof(arr[0]);//用来求数组中有多少个元素
//printf("数组中有%d个元素,分别是:\n",num);
//for ( int i = 0; i < num; i++)
//{
// printf("%d\t", arr[i]);
//}
//printf("\n");
//printf("请输入要查找的数字:>\n");
//scanf("%d", &Num);
//
//for (int i = 0; i < num; i++)
//{
// if (Num == arr[i])
// {
// printf("你要查找的数字是%d,在%d号位置上\n",Num, i + 1);
// all++;
// };
//}
//if (all == 0)
//{
// printf("很遗憾,没有您要寻找的数字,请重新输入\n");
//};
//printf("查找完毕");
/*char arr1[] = "abcdef";
printf("%s\n", arr1);*/
//strlen(arr); 用于获取字符串的长度
//字符串型数组可以整体输出,而字符型需要循环输出。
//************************************************************************
//查找方法:2、折半查找法:核心:每次选取有序数据的中位数与查找数据比较,缩小查找范围
//int arr[200];
// for (int i = 0; i < 200; i++)
// {
// arr[i] = i;
// }//用循环初始化一个1-199的有序数组
//int num = 0;
//
//int right = 0;
//int left = 0;
//int len = sizeof(arr) / sizeof(arr[0]);
//right = len - 1;
//
//printf("请输入您要查找的数字:>\n");
//scanf("%d", &num);
//for (int i = 0; (right-left)>1; i++)
//{
// int mid = (left + right) / 2;
// if (num == arr[mid])
// {
// printf("找到了,您要查找的数据下标是%d\t共查找了%d次", mid,i+1);
// break;
// }
// else if (num>arr[mid])
// {
// left = mid;
// }
// else if (num<arr[mid])
// {
// right = mid;
// };
//
//};
//
//if ((right - left)<=1)
//{
// printf("对不起,没查找到,请输入正确数字");
//};
//注意:这里的left和right在判断条件控制上,要考虑到整型的舍去问题,所以设置成left = right||right - left = 1;
//****************************************************************************
//practice 4: 目标实现效果:
// welcome to bit !!!!!!!
// ############################
// w##########################!
// we#######################!!
// wel####################!!!
// ......
// welcome to bit !!!!!!!
// char arr1[] = "welcome to bit !!!!!!";
// char arr2[] = "#####################";
//int left = 0;
int right = sizeof(arr1) / sizeof(arr1[0]) - 1;//err 写法错误,是求不出最右边!的下标的,应该要-2;
//int right = strlen(arr1) - 1;//通过strlen获取字符串数组的元素个数更直观,sizeof一般用于求数字型数组
sizeof(arr)/sizeof(arr[0]),求的是数组的元素个数
比如对于字符串数组"abc"
内存中存储的是[ a, b, c, \n]
数组的下标是: 0 1 2 3 ,因此当我们要获取字母c的下标,应该为sizeof(arr)/sizeof(arr[0])-2
核心代码: arr2[left] = arr1[left], arr2[right] = arr1[right];
//for (int i = 0; left<=right; i++)
//{
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// printf("%s\n", arr2);
// //休息一秒
// Sleep(1000);
// system("cls");//清空屏幕
// left++;
// right--;
//}
//system("pause");
//return 0;
//*******************************************************************************
//practice 5:简单密码解锁系统:
//模拟手机解锁情景情景,并且只能登录5次,(第4次错误锁屏30分钟,第五次锁屏1小时,并显示用户锁定
//运用到strcmp库函数
// char password[20];
//printf("请设定解锁密码:>");
//scanf("%s", password);
//char input[20];
//int rem = 0;
//for (int i = 0; i < 5; i++)
//{
// rem = 4 - i;
// printf("请输入6位解锁密码(5次机会):>");
// scanf("%s", input);
// if (strcmp(input ,password )== 0)//err, == 不能用于比较两个字符串是否相等,应该使用一个库函数-strcmp
// //strcmp(string 1,string 2):当表达式 == 0,说明字符串相等,当!= 0时,说明字符串不相等
// {
// printf("密码正确,已解锁");
// break;
// }
// else
// {
// if (rem == 0)
// {
// printf("密码错误,屏幕锁定24h");
// break;
// }
// if (i ==3)
// {
// printf("密码错误,屏幕锁定10秒,您还最后%d次机会\n", rem);
// Sleep(10000);
// system("cls");
// continue;
// }
// printf("密码错误,您还有%d次机会\n", rem);
// Sleep(2000);
// system("cls");