C语言初学2--分支和循环

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;
//}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou_no

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值