C语言-选择语句和循环语句练习题

文章目录

  • 前言
  • 一、计算 n的阶乘。
  • 二、计算 1!+2!+3!+……+10!
  • 三、在一个有序数组中查找具体的某个数字key。(二分查找)
  • 四、编写代码,演示多个字符从两端移动,向中间汇聚。
  • 五、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
  • 六、猜数字游戏


前言

主要有以下几道练习题,使用C语言实现它们。
1. 计算 n的阶乘。
2. 计算 1!+2!+3!+……+10!
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
6.设计一个猜数字游戏。
要求:

随机产生一个1-100的数字,然后你来猜。
a.猜对了:恭喜你!
b.猜错了,告诉你猜大了还是猜小了,继续猜。
c.玩完一把可以选择继续游戏,直到退出游戏。


提示:以下是本篇文章正文内容,下面案例可供参考

一、计算 n的阶乘。

//1.输入一个数,计算其阶乘
int main()
{
	int n = 0;
	int i = 0; 
	int val = 1;
	scanf("%d",&n);
	for (i = n; i > 0; i--)
	{
		val *= i;
	}
	printf("%d\n",val);

}

二、计算 1!+2!+3!+……+10!

代码如下(示例):

//2.计算1!+2!+...+10!
//方法一:两层循环
int main()
{
	int i = 0;
	int j = 0;
	int val = 1;
	int sum = 0;
	for (j = 1; j < 11; j++)
	{
		for (i = j; i > 0; i--)
		{
			val *= i;
		}
		sum += val;
		val = 1;//注意这里需要对val初始化,否则将在小循环中继续使用上一次的阶乘值,导致结果不对
	}

	printf("%d\n", sum);
}
//2.计算1!+2!+...+10!
//方法二:一层循环
int main()
{
	int j = 0;
	int val = 1;
	int sum = 0;
	for (j = 1; j < 11; j++)
	{
		val *= j;
		sum += val;
	}
	printf("%d\n", sum);
}


三、在一个有序数组中查找具体的某个数字key。(二分查找)

3.在一个有序数组中查找具体的某个数字n。(讲解二分查找)
二分法查找(折半算法)
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int key = 0;
	int len = sizeof(arr)/sizeof(arr[0]);//数组长度/数组内一个元素长度=数组元素个数
	int left = 0;
	int right = len - 1;
	printf("请输入您要查找的数字:");
	scanf("%d", &key);
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > key)
		{
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,这个数字的下标是:%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("没有这个数字!查找失败!");
	}
	return 0;
}


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

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

int main()
{
    char arr1[] = "welcome to bit...";
    char arr2[] = "#################";
    int left = 0;
    int right = strlen(arr1) - 1;
    printf("%s\n", arr2);
    
    //while循环实现
    while (left <= right)
    {
        Sleep(200);//延迟函数,在windows.h中。单位毫秒。
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        system("cls");
        left++;
        right--;
        printf("%s\n", arr2);
    }


    //for循环实现
    for (left = 0, right = strlen(arr1) - 1;
        left <= right;
        left++, right--)
    {
        Sleep(200);
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
    }

    return 0;
}

五、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。
(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。

int main()
{
	int i = 0;
	char password[20] = " ";
	
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>>");
		scanf("%s", password);//数组名本身就是地址,因此此处输入时不需要取地址符号

		if ((strcmp(password, "123456")) == 0)
		//strcmp()函数,比较两个字符串是否相等,如果相等则返回0
		{
			printf("密码正确!登录成功!\n");
			break;
		}
		else
		{
			printf("密码错误,请重新输入!\n");
		}
	}
	if (3 == i)
	{
		printf("三次密码输入错误,退出程序!");
	}

	return 0;
}

注意:对比两个字符串是否相同,千万不可直接比较,比如此代码中:if(password == “123456”)这种表示方法是错误的!!!
必须使用strcmp()函数来比较。


六、猜数字游戏

//6.猜数字游戏:
//	随机产生一个1-100的数字,然后你来猜
//    a.猜对了:恭喜你!
//	  b.猜错了,告诉你猜大了还是猜小了,继续猜。
//	  c.玩完一把可以选择继续游戏,直到退出游戏。

void menu()
{
	printf("**********WELCOME!!!***********\n");
	printf("*******************************\n");
	printf("***********1.play**************\n");
	printf("***********0.exit**************\n");
	printf("*******************************\n");
}
void game()
{
	int randNum = rand() % 100 + 1;
	//rand()函数返回一个0-32767之间的随机数字。
	//取模100就生成了0-99之间的数字,再+1就是0-100的随机数。
	printf("随机数字已生成,请输入你的猜想:");
	int myNum = 0;
	while (myNum != randNum)
	{
		scanf("%d", &myNum);
		if (myNum > randNum)
		{
			printf("猜大了!!!重新猜吧\n");
		}
		else if(myNum < randNum)
		{
			printf("猜小了!!!重新猜吧\n");
		}
	}
	printf("恭喜你!猜对了!\n");
	printf("正确答案就是:%d\n",randNum);

}

int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	//因为rand()函数需要srand()给它一个随机数种子,才能每次运行程序生成不一样的随机数。
	//此处如果设置为一个固定的数比如srand(100),则生成的随机数永远相同。
	//为了给出一个随机数种子,我们使用时间戳,即time()函数(在time.h文件中),该函数返回当前时间戳转换成的一个数字,随着时间不同,该数值一直变化。
	do
	{
		menu();
		printf("是否开始游戏>>>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏退出");
			break;
		}
	} while (input);
}

注意:
1.rand()函数返回一个0-32767之间的随机数字。取模100就生成了0-99之间的数字,再+1就是0-100的随机数。
2.因为rand()函数需要srand()给它一个随机数种子,才能每次运行程序生成不一样的随机数。
此处如果设置为一个固定的数比如srand(100),则生成的随机数永远相同。
为了给出一个随机数种子,我们使用时间戳,即time()函数(在time.h文件中),该函数返回当前时间戳转换成的一个数字,随着时间不同,该数值一直变化。

你可能感兴趣的:(C/C++实例,c语言,开发语言,后端)