1.getchar的使用
(1)
#include<stdio.h>
int main()
{
int ret = 0;
int ch = 0;
char password[20] = {0};
printf("请输入密码:>");
scanf("%s",password);
while((ch=getchar()) != '\n')//将缓冲区内容全部读取
{
;
}
printf("请确认(Y/N):>");
ret = getchar();
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
(2)
#include<stdio.h>
int main()
{
while((ch = getchar()) != EOF)
{
if(ch < '0' || ch > '9')
continue;
putchar(ch);//只打印'0'~'9'的字符
}
return 0;
}
2.循环结构
(1)while循环
#include<stdio.h>
int main()
{
int i = 0;//初始化
while(i<10)//判断
{
i++;//调整
}
return 0;
}
(2)for循环
//for(表达式1;表达式2;表达式3)
// 循环语句
//表达式1为初始量//表达式2为判断//表达式3为调整
#include<stdio.h>
int main()
{
int i = 0;
for(i = 1; i<=10; i++)
{
//break和continue依然可以用,但continue只会跳过后面的代码,i++依然执行
printf("%d",i);
}
return 0;
}
//不可在for循环体内修改循环变量,防止for循环失去控制
//建议for语句的循环控制变量的取值采用“前闭后开区间”写法
#include<stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
//10次循环
//10个元素
//10次打印
for(i=0; i<10;i++)
{
printf("%d",arr[i]};
}
return 0;
}
(3)for循环的变种
//1.
//#include<stdio.h>
//int main()
//{
// for(;;)
// {
// printf("hehe\n");
// }
// return 0;
//}
for循环的初始化,调整,判断都可以省略
但for循环的判断如果被省略,判断条件恒为真
如果不是非常熟练,建议不要随意省略
//2.
//#include<stdio.h>
//int main()
//{
// int x,y;
// for(x = 0,y = 0; x<2 && y<5; ++x,y++)
// {
// printf("hehe\n");
// }
// return 0;
//}
//
4.do while语句
//do
// 循环语句;
//while(表达式);
#include<stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ",i);
i++;
}
while(i<=10);
return 0;
}
//循环至少执行一次
5.计算n的阶乘
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1;
scanf("%d",&n);
for(i = 1;i<=n;i++)
{
ret = ret * i;
}
printf("%d\n",ret);
return 0;
}
6.计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1;
for(n=1;n<=10;n++)
{
ret = 1;//让ret初始值为1
for(i=1;i<=n;i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("sum = %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 = ret * n;
sum = sum + ret;
}
printf("sum = %d\n",sum);
return 0;
}
6.折半法查找算法
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10}
int sz = sizeof(arr)/sizeof(arr[0]);//计算元素个数
int left = 0;//左下标
int right = sz-1;//右下标
int mid = (left+right)/2;
int k = 7;
while(left <=right)
{
if(arr[mid] > k)
{
right = mid-1;
}
else if(arr[mid] <k)
{
left = mid+1;
}
else
{
printf("找到了,下标是:%d\n",mid);
break;
}
}
if(left>=right)
{
printf("找不到");
}
return 0;
}
7.编写代码,演示多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
char arr1[] = "welcome to bit!!!!!!";
char arr2[] = "####################";
int left = 0;
int right = strlen(arr1)-1;//需要引头文件string.h
while(left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n",arr2);
Sleep(1000);//需要引头文件windows.h
system("cls");
//system执行系统命令的一个函数,需要引头文件stdlib.h
//cls清空屏幕
left++;
right--;
}
printf("welcome to bit!!!!!!");
return 0;
}
8.模拟用户登录,只能登陆三次,密码正确,提示登录成功,三次均错误,退出程序
#include<stdio.h>
#include<string.h>
int main()
{
int i = 0;
char password[20] = {0};
for(i=0; i<3; i++)
{
printf("请输入密码:>");
scanf("%s",password);
if(strcmp(password,"123456") == 0)
// == 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
{
printf("登录成功\n");
break;
}
}
if(i == 3)
printf("三次密码均错误,退出程序\n");
return 0;
}