C语言基础学习记录
学习视频如下
https://www.bilibili.com/video/BV1q54y1q79w/?spm_id_from=333.999.0.0&vd_source=7442270a1c7e13b4dcbd82e1f0420f8b
P11:练习和作业
P9-P10:分支和循环
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
//int main()
//{
//
// return 0;
//}
//作业和练习
猜数字游戏start--------------------------------------------------------------------------
猜数字游戏
1. 电脑会生成一个随机数
2. 猜数字
//
//void menu()
//{
// printf("********************************************\n");
// printf("***** 1. play 0. exit ****\n");
// printf("********************************************\n");
//}
RAND_MAX 0-32767
//void game()
//{
// //1.生成一个随机数
// int ret = 0;
// int guess = 0;
// ret = rand()%100+1;//生成1-100的随机数
// //printf("%d\n", ret);
//
// //2.猜数字
// while(1)
// {
// printf("请猜数字:>");
// scanf("%d", &guess);
// if(guess>ret)
// {
// printf("猜大了\n");
// }
// else if(guess<ret)
// {
// printf("猜小了\n");
// }
// else
// {
// printf("恭喜你,才对了!\n");
// break;
// }
// }
//}
//int main()
//{
// int input = 0;
// srand((unsigned int) time(NULL)); //需要给一个变化的数字 #include <time.h>
// //用时间戳来设置生成随机数的起点
// //时间戳:当前计算机时间-计算机起始时间1970.1.1.0:0:0 = (xxx)秒
// //time_t time(time_t *timer)
// //在一个程序中不要频繁设置,设置一次就好。因此不放在game()函数里。
// do
// {
// menu();
// printf("请选择>:");
// scanf("%d",&input);
// switch(input)
// {
// case 1:
// game(); //猜数字游戏
// break;
// case 0:
// printf("退出游戏");
// break;
// default:
// printf("选择错误");
// break;
// }
// }while(input);
// return 0;
//}
//
猜数字游戏end--------------------------------------------------------------------------
//<素数求解的n种境界>
//int main()
//{
// int a = 0;
// int b = 0;
// int c = 0;
//
// scanf("%d %d %d", &a, &b, &c); //2 1 3
// //实现算法
// //a中放最大值,b次之,c找那个放最小值
// if(a<b)
// {
// int tmp = a;
// a = b;
// b = tmp;
// }
// if(a<c)
// {
// int tmp = a;
// a = c;
// c = tmp;
// }
// if(b<c)
// {
// int tmp = b;
// b = c;
// c = tmp;
// }
// printf("%d %d %d\n", a, b, c); //2 1 3
//
// return 0;
//}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
//int main()
//{
//
// return 0;
//}
//写一个关机程序
int main()
{
char input[20] = {0};
//system() -- 执行系统命令
//shutdown -s -t 60 //
//shutdown -a //取消关机
system("shutdown -s -t 60");
while(1)
{
printf("请注意,你的电脑将在1分钟内关机,如果输入:我很美,就取消关机\n请输入>:");
scanf("%s", input);
if(strcmp(input, "我很美") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}
//int main()
//{
// char input[20] = {0};
// //system() -- 执行系统命令
// //shutdown -s -t 60 //
// //shutdown -a //取消关机
//
// system("shutdown -s -t 60");
//again:
// printf("请注意,你的电脑将在1分钟内关机,如果输入:我很美,就取消关机\n请输入>:");
// scanf("%s", input);
// if(strcmp(input, "我很美") == 0)
// {
// system("shutdown -a");
// }
// else
// {
// goto again;
// }
//
// return 0;
//}
//goto语句
//C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
//理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
//用于深层次嵌套语句,如多重循环
//int main()
//{
// printf("你好\n");
// goto again;
// printf("呵呵\n");
//again:
// printf("hello bit\n");
//
// return 0;
//}
//int main()
//{
//again:
// printf("hello bit\n");
// goto again;
//
// return 0;
//}
//练习
//5. 编写代码,模拟用户登录情景,并且只能登录三次。(只允许输入三从密码,密码如果登录正确则提示登陆成功,如果三次输入均错误,则退出程序。)
//int main()
//{
// int i = 0;
// char password[20] = {0};
//
// for(i=0; i<3; i++)
// {
// printf("请输入密码:>");
// scanf("%s",password);
// //if(password == "123456")//==不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp #include <string.h>
// if(strcmp(password,"123456") == 0)
// {
// printf("登录成功\n");
// break;
// }
// else
// {
// printf("密码错误\n");
// }
// }
// if(i == 3)
// printf("三次密码均错误,退出程序\n");
//
// return 0;
//}
//4. 编写代码,演示多个字符从两端移动,向中间汇聚
//int main()
//{
// //welcome to bit!!!!!!
// //####################
// //w##################!
// //we################!!
// //...
// //welcome to bit!!!!!!
// char arr1[] = "welcome to bit!!!!!!";
// char arr2[] = "####################";
// int left = 0;
// //int right = sizeof(arr1)/sizeof(arr1[0])-2;//[welcome to bit!!!!!!\0] -- 实际的字符串
// // 012345678............n -- 下标
// int right = strlen(arr1)-1;
// for( ; left <=right; left++,right--)
// {
// arr2[left] = arr1[left];
// arr2[right] = arr1[right];
// printf("%s\n",arr2);
// Sleep(1000);//休息1000 ms #include <windows.h>
// system("cls");//执行系统命令--cls--清空屏幕 #include <stdlib.h>
// }
// printf("%s\n",arr2);
// return 0;
//}
//3. 在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v[], int n);功能:在v[0]<=v[1]<=v[2]<=...v[n-1]的数组中查找x。
二分法,最大查找次数为log2(n)
//int main()
//{
// int arr[] = {1,2,3,4,5,6,7,8,9,10,11};
// 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)
// {
// right = mid-1;
// }
// else if(arr[mid] < k)
// {
// left = mid+1;
// }
// else
// {
// printf("找到了,下标为%d\n",mid);
// break;
// }
// }
// if(left > right)
// printf("找不到");
//
// return 0;
//}
//int main()
//{
// int arr[] = {1,2,3,4,5,6,7,8,9,10};
// int k = 7;
// //写一个代码在有序数组arr中找到k
// int i= 0;
//
// int sz = sizeof(arr)/sizeof(arr[0]);
// for(i=0; i<sz; i++)
// {
// if(arr[i] == k)
// {
// printf("数字%d的下标为%d\n",k,i);
// break;
// }
// if(i == sz)
// printf("找不到");
// }
//
// return 0;
//}
//2. 计算1!+2!+...+10!
//int main()
//{
// int i = 0;
// int j = 0;
// int ret = 1;
// int sumret = 0;
//
// for(i=1;i<=10;i++)
// {
// ret = ret * i;
// printf("%d! = %d\n",i,ret);
//
// sumret = sumret + ret;
// printf("%1!+...+%d! = %d\n",i,sumret);
// }
//
// return 0;
//}
//int main()
//{
// int i = 0;
// int j = 0;
// int ret = 1;
// int sumret = 0;
//
// for(i=1;i<=10;i++)
// {
// ret = 1;
// for(j=1;j<=i;j++)
// {
// ret = ret * j;
// printf("%d! = %d\n",j,ret);
// }
// sumret = sumret + ret;
// printf("%1!+...+%d! = %d\n",i,sumret);
// }
//
// return 0;
//}
//1. 计算n的阶乘
//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! = %d\n",n,ret);
// return 0;
//}
//int main()
//{
// int n = 1;
// int ret = 1;
// for(n=1;n<=10;n++)
// {
// ret = ret * n;
// }
// printf("%d的阶乘,结果为%d\n",n-1,ret);
// return 0;
//}
//int main()
//{
// int i = 1;
// do
// {
// if(i == 5)
// // break; // 1 2 3 4
// continue; // 1 2 3 4 死循环。跳到判断部分
// printf("%d ", i);
// i++;
// }
// while(i<=10);
// return 0;
//}
//int main()
//{
// int i = 0;
// do
// {
// printf("%d ", i);
// i++;
// }
// while(i<=10);
// return 0;
//}
//int main()
//{
// int x = 0;
// int y = 0;
//
// for(x=0,y=0; y=0; x++,y++) //'y=0'是赋值,不是判断,则判断表达式本身的值,表达式本身的值为假,循环不进行
// {
// printf("hehe\n"); //输出2次hehe
// y++;
// }
// return 0;
//}
//int main()
//{
// int x, y;
//
// for(x=0,y=0; x<2 && y<5; x++, y++)
// {
// printf("hehe\n"); //输出2次hehe
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// int j = 0;
//
// for(; i<4; i++)
// {
// for(; j<4; j++) //第一次i循环后j编程了4,此后的i循环中j一直为4
// {
// printf("hehe\n");
// }
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// int j = 0;
//
// for(i=0; i<4; i++)
// {
// for(j=0; j<4; j++)
// {
// printf("hehe\n");
// }
// }
// return 0;
//}
//int main()
//{
// for(;;)
// //1. for循环的初始换、判断、调整部分都可以省略;但是若判断部分被省略,那判断条件就恒为真;
// //2. 如果不是非常熟练,建议大家不要随便省略。
// printf("hehe\n"); //死循环
// return 0;
//}
//for语句的循环控制变量
// 一些注意:
// 1. 不可以在for循环体内修改循环变量,防止for循环失去控制;
// 2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//int main()
//{
// int arr[10] = {1,2,3,4,5,6,7,8,9,10};
// int i = 0;
// //for(i=0; i<=9; i++) //也没毛病,不过不如下面的“前闭后开区间”写法
// for(i=0; i<10; i++) //10具有一定的意义,10次循环,10次打印,10个元素
// printf("%d",arr[i]);
// return 0;
//}
//int main()
//{
// int i = 0;
// for(i = 0; i <= 10; i++)
// {
// if(i = 5) //不要在循环体内调整循环变量
// printf("haha\n");
// printf("hehe\n");
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// //初始化; 判断; 调整
// for(i = 1; i <= 10; i++)
// {
// if(i == 5)
// continue; //跳到调整不。在while循环中跳到判断句,出现死循环。注意二者的不同
// printf("%d ",i); //1 2 3 4 6 7 8 9 10
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// //初始化; 判断; 调整
// for(i = 1; i <= 10; i++)
// {
// if(i == 5)
// break; //跳出循环
// printf("%d ",i); //输出1 2 3 4
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// //初始化; 判断; 调整
// for(i = 1; i <= 10; i++)
// {
// printf("%d ",i);
// }
//
// return 0;
//}
//for(表达式1;表达式2;表达式3)
// 循环语句;
//表达式1--初始化部分
//表达式2--条件判断部分
//表达式3--调整部分
//int main()
//{
// int i = 0; //初始化
// while(i < 10) //判断
// {
// //...
// i++; //调整
// }
// return 0;
//}
//使用多少 for > while > do while
//int main()
//{
// int ch = 0;
// while((ch=getchar()) != EOF)
// {
// if(ch < '0' || ch > '9')
// continue;
// putchar(ch); //printf("%c\n", ch);
// }
//
// return 0;
//}
//int main()
//{
// char password[20] = {0};
// int ret = 0;
// int ch = 0;
//
// printf("请输入密码:>");
// scanf("%s", password); //输入函数 --> 输入缓冲区 输入"12345 ABCD\n",scanf读取了"12345",在缓冲区还有"ABCD\n"
// //getchar(); //读取了"ABCD"
// //getchar(); //读取了"\n"
//
// while((ch = getchar()) != '\n')
// {
// ;//空语句
// }
//
// printf("请确认(Y/N):>");
// ret = getchar(); //输入函数。此时输入缓冲区为空
// if(ret == 'Y')
// {
// printf("确认成功\n");
// }
// else
// {
// printf("确认失败\n");
// }
//
// return 0;
//}
//int main()
//{
// char password[20] = {0};
// int ret = 0;
//
// printf("请输入密码:>");
// scanf("%s", password); //输入函数 --> 输入缓冲区 输入"12345\n",scanf读取了"12345",在缓冲区还有"\n"
// getchar(); //读取一下"\n"
// printf("请确认(Y/N):>");
// ret = getchar(); //输入函数。此时输入缓冲区为空
// if(ret == 'Y')
// {
// printf("确认成功\n");
// }
// else
// {
// printf("确认失败\n");
// }
//
// return 0;
//}
//int main()
//{
// char password[20] = {0};
// int ret = 0;
//
// printf("请输入密码:>");
// scanf("%s", password); //输入函数 --> 输入缓冲区 输入"12345\n",scanf读取了"12345",在缓冲区还有"\n"
// printf("请确认(Y/N):>");
// ret = getchar(); //输入函数。在上次scanf读取输入缓冲区后,还剩\n,getchar自动读取了"\n"。在此之前应该清空输入缓冲区
// if(ret == 'Y')
// {
// printf("确认成功\n");
// }
// else
// {
// printf("确认失败\n");
// }
// return 0;
//}
//int main()
//{
// int ch = 0;
// //ctrl + z 结束getchar
// //EOF -- end of file --> -1
//
// while((ch=getchar()) != EOF)
// {
// putchar(ch); //printf("%c\n", ch);
// }
// //int ch =getchar(); //从屏幕获取字符
// //putchar(ch);
// return 0;
//}
//int main()
//{
// int i = 0;
// while(i <= 10)
// {
// if(i == 5)
// continue; //结束本次循环,从此处返回到while的判断句
// printf("%d ", i);
// i++;
// }
// return 0;
//}
//int main()
//{
// int i = 0;
// while(i <= 10)
// {
// if(i == 5)
// break; //跳出循环
// printf("%d ", i);
// i++;
// }
// return 0;
//}
//int main()
//{
//
// int n = 1;
// int m = 2;
// switch(n)
// {
// case 1: m++;
// case 2: n++;
// case 3:
// switch (n)
// {
// case 1: n++;
// case 2: m++; n++; break;
// }
// case 4: m++;
// break;
// default:
// break;
// }
// printf("m = %d, n = %d\n", m, n);
// return 0;
//}
//int main()
//{
// int day = 1;
// scanf("%d", &day);
//
// switch(day)//只能是整型表达式
// {
// case 1: //整型常量表达式
// if(n == 1)
// printf("hehe\n");
// case 2:
// case 3:
// case 4:
// case 5:
// printf("工作日\n");
// break;
// case 6:
// case 7:
// printf("休息日\n");
// break;
// default: //default没有固定位置,放前放后均可
// printf("输入错误\n");
// break;
// };
//
// return 0;
//}
//int main()
//{
// int day = 1;
// scanf("%d", &day);
//
// switch(day)//只能是整型表达式
// {
// case 1: //整型常量表达式
// printf("星期一\n");
// break; //需要搭配break才能实现分支
// case 2:
// printf("星期二\n");
// break;
// case 3:
// printf("星期三\n");
// break;
// case 4:
// printf("星期si\n");
// break;
// case 5:
// printf("星期wu\n");
// break;
// };
//
// return 0;
//}
//int main()
//{
// int num = 1;
//
// while(num <= 100)
// {
// printf("奇数%d\n",num);
// num+=2;
// }
//
// while(num <= 100)
// {
// if(1 == num%2)
// {
// printf("奇数%d\n",num);
// }
// num++;
// }
//
// return 0;
//}
//int main()
//{
// int num = 0;
// if(0 == num) //如此写不容易出错,如误将num == 0写作num = 0
// {
// printf("hehe\n");
// }
// return 0;
//}
代码1
//if(condition){
// return x;
//}
//return y; //return 只能返回一个,改代码块的意思是条件满足返回x,不满足返回y;与代码块2是一样的意思,但写法风格不好
//
代码2
//if(condition)
//{
// return x;
//}
//else
//{
// return y;
//}
//int main()
//{
// int a = 0;
// int b = 2;
// if(a == 1)
// {
// if(b == 2)
// printf("hehe\n");
// else //else和距离它最近的if配对,所以该代码不输出任何结果
// printf("haha\n");
// }
// return 0;
//}
//int main()
//{
// int a = 0;
// int b = 2;
// if(a == 1)
// if(b == 2)
// printf("hehe\n");
// else //else和距离它最近的if配对,所以该代码不输出任何结果
// printf("haha\n");
//
// return 0;
//}