C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏

for循环

在while循环中打印1-10,代码如下

int main()
{
     
    int i = 1;//初始化
    while(i <= 10)//判断部分
    {
     
        printf("%d",i);
        i++;//调整部分
    }
    return 0;
}

while循环中的初始化部分与判断部分和调整部分相离太远,而在for循环中语法如下:

语法

for(表达式1;表达式2;表达式3)
{
     
    循环语句;
}

表达式1为初始化部分;表达式2为条件判断部分;表达式3为调整部分

for循环在屏幕上打印1-10

int main()
{
     
    int i=0;
    for(i=1;i<=10;i++)
    {
       //初始化;判断;调整
        printf("%d",i);
    }
    return 0;
}

我们可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。

for循环中的break

int main()
{
     
    int i=0;
    for(i=1;i<=10;i++)
    {
     
        if(i==5)
        break;
        printf("%d",i);//1234
    }
    return 0;
}

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第1张图片

break的作用与while循环一样,也是跳出整个循环。

for循环中的continue

int main()
{
     
    int i=0;
    for(i=1;i<=10;i++)
    {
     
        if(i==5)
        	continue;
        printf("%d",i);//1234 678910
    }
    return 0;
}

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第2张图片

在i=5时,continue,continue的作用跳过continue下面的语句,所以continue跳过了i=5时的打印,跳过后继续i++,所以有了后面的打印。

对于写for循环的建议

1.不要在调整循环体内修改循环变量的值,防止循环体失去控制

2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{
     }
//两边都是闭区间
for(i=0; i<=9; i++)
{
     }
int main()
{
     
    int arr[10]={
     0};
    int i=0;
    for(i=0;i<10;i++)
    {
     
        printf("%d",arr[i]);
    }
    //两边都是闭区间
    /*for(i=0;i<=9;i++)
    {
        printf("%d",arr[i]);
    }*/
    return 0;
}

一些for循环的变种

判断部分的省略 - 判断部分恒为真

int main()
{
     
    for(;;)
    {
     
        printf("haha");//陷入死循环
    }
    return 0;
}

这是判断部分恒为真,所以陷入死循环

下面再看一个代码

int main()
{
     
    int i=0;
    int j=0;
    for(i=0;i<3;i++)
    {
     
        for(j=0;j<3;j++)
        {
     
            printf("haha\n");//9个haha
        }
    }
    return 0;
}

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第3张图片

上面嵌套循环,当我们将i=0;j=0;初始化部分省略

int main()
{
     
    int i=0;
    int j=0;
    for(;i<3;i++)
    {
     
        for(;j<3;j++)
        {
     
            printf("haha\n");//3个haha
        }
    }
    return 0;
}

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第4张图片

这里只执行了i=0时的三个haha,当i=1时,此时j=3,j不小于3,进不去循环,以此类推,后面都进不去循环

笔试题

请问循环要循环多少次?

int main()
{
     
    int i=0;
    int k=0;
    for(i=0,k=0;k=0;i++,k++)
        k++;
    return 0;
}

答案是0次,注意判断区域是赋值号,判断为假,所以循环进不去。

do……while循环

do
    循环语句;
whlie(表达式);

do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

do while循环打印1-10:

int main()
{
     
    int i=1;
    do
    {
     
        printf("%d ",i);
        i++;
    }while(i<=10);
}

do while循环中的break和continue

int main()
{
     
    int i=1;
    do
    {
     
        if(i==5)
        {
     
            break;
        }
        printf("%d ",i);
        i++;
    }while(i<=10);
}

打印1 2 3 4,i==5时,break跳出循环

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第5张图片

int main()
{
     
    int i=1;
    do
    {
     
        if(i==5)
        {
     
            continue;
        }
        printf("%d ",i);
        i++;
    }while(i<=10);
}

continue跳过之后的语句,跳过了i++,所以打印了1 2 3 4 后陷入了死循环

C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏_第6张图片

练习

1.计算n的阶乘

//计算n的阶乘
#include
int  main()
{
     
	int n = 0;
	scanf("%d", &n);
	int temp = 1;
	for (int i = 1; i <= n; i++)
	{
     
		temp = temp * i;
	}
	printf("%d", temp);
	return 0;
}

2.计算1!+……+10!

方法一:

//计算1!+……+10!
//方法一:
#include
int  main()
{
     
	int n = 0;
	int temp = 1;
	int sum = 0;

	for (n=1;n<=10; n++)
	{
     
		temp = 1;//计算n的阶乘之前,把temp置为1
		for (int i = 1; i <= n; i++)
		{
     
			temp = temp * i;
		}
		sum = sum + temp;
	}
	printf("%d", sum);
	return 0;
}

方法二:

#include
int main()
{
     
	int temp = 1;
	int sum = 0;
	for (int n = 1; n <= 3; n++)
	{
     
		temp = temp * n;
	//1*1   1*1*2  1*1*2*3//
		sum = sum + temp;
	}
	printf("%d", sum);
	return 0;
}
  1. 折半查找算法
#include
int main()
{
     
	int arr[] = {
      1,2,3,4,5,6,7,8,9,10 };
	int k = 7;//要查找的数字
	//在arr这个有序的数组中查找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)
		{
     
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
     
			right = mid - 1;
		}
		else
		{
     
			printf("找到了,下标为:%d\n", arr[mid]);
			break;
		}
	}
	if (left > right)
	{
     
		printf("找不到\n");
	}
		return 0;

  1. 编写代码,演示多个字符从两端移动,向中间汇聚。

    #include
    #include
    #include
    int main()
    {
           
    
    	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);
    		Sleep(1000);//睡眠一秒
    		system("cls");//清空屏幕
    		left++;
    		right--;
    	}
    	return 0;
    }
    
    
  2. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。

    #include
    #include
    int main()
    {
           
    	int i = 0;
    	//假设正确密码"123456"
    	char password[20] = {
            0 };
    	for (i = 0; i < 3; i++)
    	{
           
    		printf("请输入密码:>");
    		scanf("%s", password);
    		//if(password=="123456")//err-字符串比较不能使用==,需要使用strcmp
    		if (strcmp(password, "123456") == 0)//比较成功返回0
    		{
           
    			printf("登陆成功\n");
    
    		}
    		else
    		{
           
    			printf("密码错误,重新输入!\n");
    		}
    	}
    	if (i == 3)
    	{
           
    		printf("三次密码均错误,退出程序\n");
    	}
    	return 0;
    }
    
    

    6.猜数字游戏

    //猜数字游戏
    //1.自动产生一个1-100之间的随机数
    //2.猜数字
    //	a.猜对了,就恭喜你,游戏结束
    //	b.你猜错了,会告诉你猜大了,还是猜小了,继续猜,知道猜对
    //3.游戏一个一直玩,除非退出游戏
    #include
    #include
    void menu()
    {
           
    	printf("***************************\n");
    	printf("********  1.play  *********\n");
    	printf("********  0.exit  *********\n");
    	printf("***************************\n");
    }
    void game()
    {
           
    	//猜数字游戏的实现
    	//1.生成随机数
    	//rand函数返回了一个0-32767之间的数字
    	//一个时间对应一个时间戳
    	
    	int ret = rand()%100+1;//%100的余数是0-99,然后+1,就是0-100
    	//printf("%d\n", ret);
    	//2.猜数字
    	int guess = 0;
    	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));
    	do
    	{
           
    		menu();//打印菜单
    		printf("请选择:>");
    		scanf("%d", &input);
    		switch (input)
    		{
           
    		case 1:
    			game();
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("选择错误,重新选择");
    			break;
    		}
    	} while(input);
    	return 0;
    }
    

你可能感兴趣的:(c语言)