#define _CRT_SECURE_NO_WARNINGS
/*
大家好,我是小手冰凉,前面已经大致浏览了一遍C
仍有很多细节的地方还没有提及
来!让我们再次重整车队,向白银进军
*/
//先说一下语句哈(就像人说话一样 一个分号(;)代表一句话)
//#include<stdio.h>
//int main()
//{
// printf("Hello World\n");//我对编译器说的第一句话
// ;//空语句 (可以理解此时无声胜有声,我尬住了)
// return 0;//又说了一句话
//}
//生活无非三种结构 顺序结构(我要去学校) 选择结构(走那条路线到达学校) 循环结构(下次放学还要去学校)
//顺序结构(从上到下依次执行呗,总不能我想执行那行代码,就执行那行代码,夏洛,你以为学校你家开的啊???)
//讲一下选择结构
//1.if else语句
/*#include<stdio.h>
int main()
{
int age = 60;
if (age <= 18) {
printf("少年\n");
}
else if (18 < age <= 30) {
printf("成年人\n");
}
return 0;
}*///打印结果给什么是 成年人???
// (18 < age <= 30) age值为60肯定大于18就为真(非零即为真),VS2022中如果条件为真,就是1;然后再判断1确实小于30,打印成年人
//#include<stdio.h>
//int main()
//{
// int number_1 = 0;
// int number_2 = 2;
// if (number_1 == 1)
// if (number_2 == 2)
// printf("haha\n");
// else
// printf("hehe\n");
// return 0;
//}//结果什么都不打印 else只跟最近的if匹配,不带括号只管一条语句,所以不带{}就很坑爹
//写代码良好方式的养成
//#include<stdio.h>
//int main()
//{
// int number = 3;
// if (5 == number) {
// printf("逢考必过!\n");
// }
// return 0;
//}
//switch语句
//switch语句一定要写break嘛?
//#include<stdio.h>
//int main()
//{
// int day = 0;
// scanf_s("%d", &day);
// switch (day) {
// case 1://如果你输入1,则会从case 1:开始向下执行,因为没有break(打断循环,跳出switch),所以会依次往下执行,直到找到break,或者switch语句结束
// case 2:
// case 3:
// case 4:
// case 5:
// printf("工作日\n");
// break;
// case 6:
// case 7:
// printf("休息日\n");
// break;
// }
// return 0;
//}//代码适应需要
//循环语句 while
//#include<stdio.h>
//int main()
//{
// int number = 0;
//
// //getchar();//输入一个字符
// // \0字符数组结束标志 EOF(文件结束标志) (End of file)
// while ((number = getchar()) != EOF) {//输入一个字符给number,如果不为文件结束标志则会打印字符
// putchar(number);//putchar打印字符
// }
// //ctrl + z 则读取结束
//
// return 0;
//}
//只打印字符数集
//#include<stdio.h>
//int main()
//{
//
// int number = 0;
//
// while ((number = getchar()) != EOF) {
// if (number < '0' || number > '9') {
// continue;
// }
// putchar(number);
// }
// return 0;
//}
模拟实现一下老八异地登陆好叭
//#include<stdio.h>
//int main()
//{
// char password[20] = { 0 };//比如密码是123456
// scanf("%s", password);//数组地址就是数组首元素地址 所以没加& ;//你输入123456 然后回车下一步其实真正输入的是123456\n
// printf("请确认密码Y/N->");
// //getchar();//拿走\0 但如果密码是123456 123呢?
// int clear = 0;
// while ((clear = getchar()) != '\n') {//清理多个字符
// ;//我啥也不干,继续执行循环
// }
// int number = getchar();
// if (number == 'Y') {
// printf("确认成功\n");
// }
// else {
// printf("确认失败\n");
// }
// return 0;
//
//}
//讲一下for循环
//#include<stdio.h>
//int main()
//{
// for (;;) {//for(初始化;判断条件;调整部分) 判断条件不写恒为真
// printf("HELLO WORLD\n");
// }
// return 0;
//}//死循环 一直打印
//#include<stdio.h>
//int main()
//{
// int number_1 = 0;
// int number_2 = 0;
// for (; number_1 < 3; number_1++) {
// for (; number_2 < 3; number_2++) {//没有初始化 导致再次循环number_2已经为2
// printf("Hello\n");
// }
// }
// return 0;
//}//只会打印3次hello 所以for()括号里怎么写,还是要具体情况具体分析
//敲几个代码
// 1.实现1!+2!+3!(1到3的阶乘)
//#include<stdio.h>
//int main() {
// int number = 0;
// int multiplication = 1;
// int sum = 0;
// for (number = 1; number < 4; number++) {
// multiplication *= number;
// sum += multiplication;
// }
// printf("%d\n", sum);
// return 0;
//}
// 2.在一个有序数组查找某一个数 1-10找7
//#include<stdio.h>
//int main()
//{
// int number[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//创建一个有序数组
// int seven = 7;//查找7
// int left = 0;//数组左下标
// int right = sizeof(number) / sizeof(number[0]) - 1;//数组右下标
//
// while (left <= right) {
// int middle = (left + right) / 2;//中间坐标
// if (number[middle] < seven) {
// left = middle + 1;
// }
// else if (number[middle] > seven) {
// right = middle - 1;
// }
// else {
// printf("找到了,下标是:%d\n", middle);
// break;
// }
// }
// if (left > right) {
// printf("找不到,我把她弄丢了,抱歉\n");
// }
// return 0;
//}
这也叫二分查找(折半查找) 优点:试想一下如果让你找2^32次方有序数列的一个数,你最多也只查找32次就出结果了
//用代码致敬 奥特曼
//#include<stdio.h>
//#include<string.h>//strlen函数头文件
//#include<windows.h>//sleep头文件
//#include<stdlib.h>//system头文件
//int main()
//{
// char group_1[] = " I love you Ultraman ";
// char group_2 [] = "#########################";
// int left = 0;
// int right = strlen(group_1) - 1;//求字符串长度用strlen函数
// while (left <= right)
// {
// group_2[left] = group_1[left];
// group_2[right] = group_1[right];
// printf("%s\n", group_2);
// Sleep(1000);//sleep睡眠的意思,单位毫秒
// system("cls");//清屏函数
// left++;
// right--;
// }
// printf("%s", group_1);
// return 0;
//}
//拆炸弹,只允许输入3次密码,密码正确拆除成功,错误则爆炸,程序结束
//#include<stdio.h>
//#include<string.h>//strcmp头文件
//int main() {
// int frequency = 0;
// char password[20] = { 0 };
//
// for (frequency = 0; frequency < 3; frequency++) {
// scanf("%s", password);
// if (strcmp(password, "123456") == 0) {// 假如正确密码为123456 strcmp比较两个字符是否相等(密码是否一致)
// printf("密码正确,拆除成功\n");
// break;
// }
// else {
// printf("密码错误,重新输入\n");
// }
// }
// if (frequency == 3) {
// printf("pong pong pong pong完犊子了\n");
// }
// return 0;
//}
//实现一个猜数字(1-100)游戏;猜对了游戏结束;猜错了告诉你猜大了还是猜小了;游戏可一直玩,除非退出游戏
#include<stdio.h>
#include<stdlib.h>//rand随机数函数头文件
#include<time.h>//函数返回这个值,如果参数不是空指针,它也会把这个值设置为定时器指向的对象。(可以理解为不断变化)
void menu() {
printf(" 1.Play games \n");
printf(" \n");
printf(" 0.Quit games \n");
printf(" \n");
}
void game() {
//1.生成随机数 rand随机数字(0-32767)
int number = rand() % 100 + 1;// %100得到0-99, 加一则为0-100的随机值,用rand随机数要用生成器srand
//2.猜数字
int guess = 0;
while (1) {
scanf("%d", &guess);
if (guess > number) {
printf("猜大了\n");
}
else if (guess < number) {
printf("猜小了\n");
}
else {
printf("猜对啦\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//随机数生成器((强制类型转换,srand(要求无符号整形))time(空指针,不需要你指向什么东西,你就不断变化就可以了))
do {//先玩一把再说
menu();//打印一个游戏界面
scanf("%d", &input);
switch (input) {
case 1:game();
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("输入错误,请重新输入:\n");
break;
}
} while (input);
return 0;
}