文章目录
一、拓展
1、getchar
getchar---获取(输入)一个字符
putchar---输出一个字符
getchar-----输出
putchar-----输出
输入输出一个字符:
#include <stdio.h>
int mian()
{
//scanf
int ch = getchar();//'a'--97
printf("%c\n",ch);
//putchar()
return 0;
}
- getchar读取一个字符,ch为什么定义为整型:
- 字符存储用ASCII码值表示
- getchar获取失败时返回EOF
EOF—> -1 ,整型
输入输出多个字符:
#include <stdio.h>
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
2、scanf
#include <stdio.h>
int main()
{
char input[20] = { 0 };
printf("请输入密码:");
scanf("%s", input);
printf("请确认密码(Y/N):");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
注:enter相当于\n
//解释缓冲区
#include <stdio.h>
int main()
{
char input[20] = { 0 };
printf("请输入密码:");
scanf("%s", input);
getchar();//拿走\n
printf("请确认密码(Y/N):");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
注:scanf读取字符串时遇到空格就结束
#include <stdio.h>
int main()
{
char input[20] = { 0 };
printf("请输入密码:");
scanf("%s", input);
//清理缓冲区
int tmp = 0;
while((tmp = getchar()) != '\n')
{
;
}
printf("请确认密码(Y/N):");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
3、小数、除法
#include <stdio.h>
int main()
{
float a = 5 / 2;
printf("%.f\n",a);
return 0;
}
输出:2.000000
#include <stdio.h>
int main()
{
float a = 5 / 2.0;//a = 5.0 / 2;
printf("%.f\n",a);
return 0;
}
输出:2.500000
注:%.f默认保留6位小数,%.1f保存一位小数,%.2f保存两位小数等。
二、辗转相除法
求最大公约数:
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
//求最大公约数
int ret = 0;
//求m和n中较小值,假设就是最大公约数
if (m > n)
ret = n;
else
ret = m;
while (1)
{
if ((m % ret == 0) || (n % ret == 0))
{
break;
}
ret--;
}
printf("%d\n", ret);
return 0;
}
辗转相除法:
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int ret = 0;
scanf("%d %d", &m, &n);
while (ret = m % n)
{
m = n;
n = ret;
}
printf("%d\n", n);
return 0;
}
最小公倍数:
m*n/最大公约数=最小公倍数
三、二分查找法(折半查找)
在一个有序数组中查找具体的某个数字k:
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int i = 0;
for (i = 0; i < 10; i++)
{
if (arr[i] == k)
{
printf("找到了,下标是%d\n", i);
break;
}
if (i == 10)
{
printf("找不到\n");
}
}
return 0;
}
折半查找(二分查找):
//分析:
#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 k = 7;
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\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
四、编写代码,演示多个字符从两端移动,向中间汇聚。
//录屏
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "frost_cold!!!!";
char arr2[] = "##############";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//睡眠函数--单位是毫秒
system("cls");//执行系统命令,cls是清空屏幕
right--;
left++;
}
printf("%s\n", arr2);
return 0;
}
1
五、实现登录系统–strcmp函数
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码吗正确则提示登录成功,如果三次均输入错误,则退出程序。)
#include <stdio.h>
#include <string.h>
int main()
{
char password[20] = "";
int i = 0;
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s", password);
if ((strcmp(password, "123456")) == 0)
//比较两个字符串是否相等,不能使用==,而应该使用strcmp函数
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
{
printf("三次密码均错误,退出程序\m");
}
return 0;
}
六、实现猜数字游戏
电脑随机生成数字1-100,猜大猜小了电脑均会告知,若猜对了,则提示猜对了。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
printf("**********************\n");
printf("***** 1 . play *****\n");
printf("***** 0 . exit *****\n");
printf("**********************\n");
}
void game()
{
//生成随机数
int r = rand() % 100 + 1;//1-100
int guess = 0;
//猜数字
while (1)
{
printf("猜数字:");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//时间-设置随机数的生成器
do
{
//打印菜单
menu();
printf("请选择:");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
C语言中生成的随机数的方式是rand函数
0~RAND_MAX 0x7fff
0~32767