#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char passward[20] = { 0 };
printf("请输入密码:>");
scanf("%s", passward);//数组不用取地址,数组就是地址。
printf("请确认密码(Y/N):>");
//清理缓冲区 把密码输入后的\n处理掉
//getchar();
//上述代码只能处理掉一个字符,容易出错。
int temp = 0;
while ((temp = getchar()) != '\n')
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功");
}
else
{
printf("确认失败");
}
return 0;
}
1.重点:清理缓冲区
用while循环清理缓冲区,代码如上。
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}
2.问:循环多少次
答:不循环,K=0是赋值语句,k=0说明条件为假,不进入循环。
3.计算1!+2!+...+10!
//计算1!+2!+...+10!
#include<stdio.h>
int main()
{
int i,j, mul = 1,sum=0;
for (i = 1; i < 11; i++)
{
mul = 1;
for (j = 1; j < i+1; j++)
{
mul = mul * j;
}
sum = sum + mul;
}
printf("%d ", sum);
return 0;
}
该代码采用嵌套循环,可进行优化。优化后的代码如下:
//优化代码
#include<stdio.h>
int main()
{
int i, j, mul = 1, sum = 0;
for (i = 1; i < 11; i++)
{
mul *= i;
sum += mul;
}
printf("%d ", sum);
return 0;
}
4.在一个有序数组中查找具体的某个数字n。
#include<stdio.h>
int main()
{
int i = 0, n = 10;
int arr[20] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
for (i = 0; i < 20; i++)
{
if (arr[i] = n)
{
printf("%d", arr[i]);
break;
}
}
return 0;
}
遍历查找,效率不高,进行优化后的代码采用二分查找。
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
int k = 7;
int sz = sizeof(arr)/sizeof(arr[0]); //数组元素的个数
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,该数对应的下标是%d", mid);
break;
}
}
if (right < left)
{
printf("找不到该数");
}
return 0;
}