系统学习之C复习(2)分支与循环

C语言是结构化的程序设计语言

顺序结构
    ↓
选择结构
    ↓
循环结构

分支
    if
        在C/C++中,else 与最近的一个if匹配,无关乎是否对齐
    swtich
        break 跳出的是最近的swtich。  swtich可以嵌套使用
循环
    while
        在while循环中,break用于永久的终止循环
        continue 跳过本次循环continue后面的代码,直接进入判断部分
    for
        
    do while

getchar()    从键盘获取一个数值
    int ch = getchar();
putchar()    从键盘输出一个数值
    while((ch = getchar())!= EOF)
    {
        putchar(ch);
    }
    //ctrl+z - getchar 读取结束
    getchar();//清除缓存区
        int tmp = 0;
        while((tmp = getchar())!='\n')
        {
            ;
        }
        //清除缓存区,清除多个字符
    getchar()读取缓冲区 空格前的字符
    
for循环
    尽量不在循环体内修改循环变量
    建议for循环变量采用前闭后开(左闭右开), 整数
    for变种:
    for(;;) for循环的判断部分省略,就意味着  恒为真
    
do while 循环
    应用场景:至少执行一次

//习题练习
//3.二分法:条件查找的数组必须有序。
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };	//一组有序数列
	int k = 7;	//寻找 该位数

	int sz = sizeof(arr) / sizeof(arr[0]);	//	计算多少个元素
	int left = 0;	//左下标				//1
	int right = sz-1;	//右下标

	while (left <= right)			 //2
	{
		//	int mid = (left + right) / 2;//中间元素下标,该平均数计算存在一定的问题	3
		//改进
		int mid = left + (right - left) / 2;	//若left>right 则left 减去一个数字,也达到平均数
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标是:%d\n", mid);	
			break;			//4
		}
	}
	if (left > right)		//5
	{
		printf("找不到\n");
	}
	return 0;
}


//注意点:
//    1.一开始的 左右下标必须正确。
//    2.在循环判断的时候,是 <= ,必须要有 等于号。
//    3.求中间坐标,在循环以内。
//    4.找到后,记得break退出循环
//    5.存在找不到的情况,也需要写出。
 

4.二分法变换 练习
//编写代码,演示多个字符从两端移动,向中间汇聚。
//welcome to bit!!!
//#################
//w###############!
//we#############!!
//...
//welcome to bit!!!

int main()
{
	//int sz = sizeof(arr1) / sizeof(arr1[0]) - 2; sizeof计算出4个
	//char arr[] = "abc"
	//[a b c \0]
	char arr1[] = "welcome to bit!!!";
	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);
	//	left++;
	//	right--;
	//}
	for (;left <= right;left++,right--)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//windows 延迟函数,单位是ms
		system("cls");	//windows清屏函数
	}
	return 0;
}

 5.模拟用户登录情景,并且只登陆三次,密码正确提示,连续三次错误退出程序
只登陆三次——只循环三次
两个字符串比较 不可使用 ==  ,应该使用 strcmp 。
    strcmp(字符串1,字符串2)
        相等,返回0;
        字符串1 < 字符串2    返回<0
        字符串1 > 字符串2     返回>0

int main()
{
	int i = 0;
	char arr[20] = {0};
	
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s", arr);
		if (strcmp(arr, "abcde") == 0)
		{
			printf("密码正确\n");
			break;
		}
		else
		{
			printf("密码错误,请重新输入\n");
		}
	}
	//1,2
	if (3 == i)
	{
		printf("密码错误,退出程序\n");
	}
	return 0;
}

综合  
猜数字游戏
    1.生成随机数—— rand();        #include<stdlib.h>
        默认范围范围( 0~32767 )
        在调用 rand()函数之前,需要使用 srand(unsigned int x);
            srand()里面的整形数发生变化,则会生成不同的值
            时间戳转换-  srand里面的整形数可以用时间戳,一直变换
                time_t time(time_t *timer)    #include<time.h>
        srand((unsigned int)time(NULL));    //整个工程中只调用一次
        rand()%100+1  范围只可能 1-100 ; 
            任何数字%100 ,范围都是 0-100
    2.猜数字

goto    无条件跳转,但是不可以调函数
    system("shutdown -s -t 60");    //system是一个库函数,用来执行系统命令
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值