第二站:分支与循环-3

发布于:2022-10-27 ⋅ 阅读:(355) ⋅ 点赞:(0)

分支与循环-2:点此转入​​​​​​

目录

3.4 练习

3.4.1 计算n的阶乘

3.4.2 计算1!+2!+......+n!

3.4.3 二分查找(在有序的数组中找到一个数字)

3.4.4 多个字符从两端移动,向中间汇聚

3.4.5 编写代码,实现登录程序

3.4.6 猜数字游戏

4.goto语句


3.4 练习

3.4.1 计算n的阶乘

//计算n的阶乘
#include <stdio.h>

int main()
{
	int text = 1;
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	for (i = 1;i <= n; i++)
	{
		text *= i;
	}
	printf("%d", text);
	return 0;
}

3.4.2 计算1!+2!+......+n!

//计算1!+2!+......+n!
#include <stdio.h>

int main()
{
	int sum = 0,i = 0,n = 0,product = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		product *= i;
		sum += product;
	}
	printf("%d", sum);
	return 0;
}

3.4.3 二分查找(在有序的数组中找到一个数字)

#include <stdio.h>

int main()
{
	int left = 0, right = 0, mid = 0, key = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	scanf("%d", &key);
	right = 9;
	while (left <= mid)
	{
		mid = left + (right - left) / 2;
		if (arr[mid] == key)
		{
			printf("找到了,下标是%d", mid);
			break;
		}
		else if (arr[mid] < key)
			left = mid + 1;
		else if (arr[mid > key])
			right = mid - 1;
	}
	if (left > mid)
		printf("没找到,建议重开");
	return 0;
}

3.4.4 多个字符从两端移动,向中间汇聚

#include <stdio.h>
#include <string.h>
#include <Windows.h>

int main()
{
	char arr1[] = "********************";
	char arr2[] = "welcome handsome ywx";
	int left = 0, right = strlen(arr2) - 1;
	while (left <= right)
	{
		arr1[left] = arr2[left];
		arr1[right] = arr2[right];
		left++, right--;
		printf("%s", arr1);
		Sleep(1000);
		system("cls");
	}
	return 0;
}

3.4.5 编写代码,实现登录程序

#include <stdio.h>
#include <string.h>

int main()
{
	int i = 0;
	char password[20] = {0};
	
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码(剩余次数%d次):",3-i);
		scanf("%s", password);
		if (strcmp(password, "ywx666") == 0)
		{
			printf("密码正确,登录成功");
				break;
		}
		else
			printf("密码错误,请重新输入\n");
	}
	return 0;
}

3.4.6 猜数字游戏

#define _CRT_SECURE_NO_WARNINGS 1
//猜数字游戏

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>

int input = 0;

void menu()
{
	printf("欢迎来到猜数字游戏!!!!!!\n");
	printf("***************************************\n");
	printf("菜单:\n");
	printf("           1.开始游玩\n");
	printf("           0.退出游戏\n\n");
	printf("***************************************\n");
	printf("请选择您要进行的操作:\n");
}

void game()
{
	int ret = rand() % 500 + 1;
	int num = 0;
	do
	{
		printf("请输入你要猜的数字(1-500):");
		scanf("%d", &num);
		if (num == ret)
		{
			printf("\n\n恭喜你,猜对了!!!!!\n\n");
			printf("***************************************\n");
			printf("           1.继续游玩\n");
			printf("           0.退出游戏\n\n");
			printf("***************************************\n");
			printf("请选择您要进行的操作:\n");
			scanf("%d", &input);
			switch (input)
			{
			case 1:
				game();
				break;
			case 0:
				system("cls");
				printf("欢迎下次游玩!!!!!\n");
				Sleep(2500);
				break;
			default:
				printf("输入错误,请输入1或者0!\n");
			}
		}
		else if (num > 500)
			printf("请输入1-500之间的数字!!!!\n");
		else if (num < 1)
			printf("请输入1-500之间的数字!!!!\n");
		else if (num < ret)
			printf("猜小了,再往大了猜\n");
		else if (num > ret)
			printf("猜大了,再往小了猜\n");
	} while (num != ret);
}

int main()
{
	do
	{
		srand(time(NULL));
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			system("cls");
			printf("欢迎下次游玩!!!!!\n");
			Sleep(2500);
			break;
		default:
			printf("输入错误,请输入1或者0!\n");
		}
	} while (input);
	return 0;
}

4.goto语句

C语言中提供了可以随意滥用的goto语句和标记跳转的符号。

从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语句真正适合的场景如下:

for(...)
    for(...)
       {
           for(...)
           {
                if(disaster)
                    goto error;
            }
       }      
       ...
error:
    if(disaster)
        //处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

一个关机程序

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <windows>
#include <stdlib.h>
 
int main()
{
	char input[20] = {0};
	system("shutdown -s -t 60");
	again:
	printf("请注意你的电脑将在一分钟内关机,如果输入“我是猪”就取消关机!------来自ywx\n\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		printf("真乖,已经为你取消关机了");
		system("shutdown -a");
	}

	else
		printf("真不乖,请再次输入");
		goto again;
}

而如果不适用goto语句,则可以使用循环:

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
 
int main()
{
	char input[20] = {0};
	system("shutdown -s -t 60");
	while(1)
{
    printf("请注意你的电脑将在一分钟内关机,如果输入“我是猪”就取消关机!------来自ywx\n\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		printf("真乖,已经为你取消关机了");
		system("shutdown -a");
        break;
	}
	else
		printf("真不乖,请再次输入");
}
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到