元小白(猿小白)进阶日记:四(练习题)

1、求n!

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
int main()
{
	int i = 1;
	int k = 1;
	int m=1 ;
	scanf("%d",&m);
	for (i = 1; i <= m;i++)
	{
		k *=i ;
	}
	printf("%d  ", k);
	return 0;
}

2、求1!+2!+3!+…+n!

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
int main()
{
	int i = 1;
	int j = 1;
	int sum = 0;
	int m, k = 1;
	scanf("%d", &m);
	for (i = 1; i <= m; i++)
	{
		k *= i;
		sum += k;
		printf("%d  ", k);
		
	}
	printf("sum=%d\n", sum);
	return 0;
}

3、从一个数组中查找某个具体的数字

用函数实现逐个查找法

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
int BinSearch(int brr[], int len, int n)
{
	int i = 0;
	for (i = 0; i < len; i++)
	{
		if (brr[i] == n)
		{
			return i;
		}
	}
	return 0;
}
int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int k;
	printf("请输入你要查找的数字k: k= ");
	scanf("%d", &k);
	int len = sizeof(arr) / sizeof(arr[0]);
	int JB= BinSearch(arr,len, k);
	if (JB !=0)
	{
	printf("你要找的数字的脚标是%d\n",JB);
	}
	else
	{
		printf("找不到您要查找的数字\n");
	} 	
	return 0;
}

函数实现二分查找法

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int binary_search(int arr[], int k, int left, int right)//二分法查找目标元素,仅适用于一个有序数组
{
	while(left<=right)//左下标<=右下标
	{
		//int sz = sizeof(arr)/sizeof(arr[0]);arr接收的是数组地址,大小为4字节,所以结果一直为1,不可以这样用。
		int mid = left+(right-left)/2;//找到最中间的元素下标,left和right每次都在改变,所以要放在循环内。
		if(arr[mid] > k)//判断中间元素与目标元素的关系,若大于目标元素,
		{
			right = mid-1;//则右目标元素在左下标与中间元素之间,则改变右下标为mid-1
		}
		else if(arr[mid] < k)//如果中间元素小于目标元素,
		{
			left = mid+1;//则目标元素在中间元素与右下标之间,则改变左下标为mid+1
		}
		else//此处意为目标元素与中间元素值相等,中间元素就是目标元素。
		{
			return mid;//返回中间元素下标。
		}
	}
	return -1;//若在while循环中都没有找到符合条件的,则返回-1,意为找不到目标元素。
}
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组
	int k = 0;//建立一个目标数字
	scanf("%d", &k);
	int sz = sizeof(arr)/sizeof(arr[0]);//求数组元素个数。数组总长度/单个元素长度。
	int left = 0;//左边元素下标
	int right = sz-1;//右边元素下标,元素个数-1;

	int ret = binary_search(arr, k, left, right);//调用函数查找目标元素,并把返回值赋值给ret
	if(ret == -1)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}
	
	system("pause");
	return 0;
}

4、演示多个字符从两边移动,向中间汇聚

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>//清空屏幕时所用函数的头文件

int main()
{
	//从两边向内逐渐推进的输出结果
	//###################
	//w#################!
	//we###############!!
	//wel#############!!!
	//....
	//Welcome to China!!!
	char arr1[] = "Welcome to China!!!";//最终状态。
	char arr2[] = "###################";//初始状态
	int left = 0;//数组左边的下标
	int right = strlen(arr1) - 1;//数组右边的下标,strlen()用于求数组长度。
	//int right = sizeof(arr1)/sizeof(arr1[0])-2;
	while (left <= right)
	{
		arr2[left] = arr1[left];//赋值
		arr2[right] = arr1[right];//赋值
		printf("%s\n", arr2);//输出左右两边被赋值之后的数组arr2
		Sleep(1000);//用于让其暂停显示
		system("cls");//用于清空屏幕
		left++;//由两端逐渐向内推进的赋值、输出。
		right--;
	}
	printf("%s\n", arr2);//在while执行完之后屏幕被清空了,此处再输入一次arr2。
	system("pause");
	return 0;
}

5、模拟用户输入密码登陆,登陆次数不可以超过三次

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	char MA = "YUANJING";
	char password[15];
	int count = 3;
	int i = 0;
	for (i = 0; i <=count;i++)
	{ 
	    
		printf("请输入密码:");
		scanf("%s", &password);
		if (strcmp(password,"YUANJING")==0)
		{
			printf("密码输入正确\n");
			break;
		}
		else
		{
			i = 0;
			count--;
			printf("密码输入错误,你还有%d次机会,请重新输入密码\n",count);
			
		}
	}
	return 0;
}

6、猜数字游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include<time.h>//用time()函数的头文件
void menu()
{
	printf("*******************\n");
	printf("******1.start******\n");
	printf("******0.exit******\n");
	printf("*******************\n");
}
void play()
{
	int randNum = rand() % 10 + 1;//产生1到10的数字.rand()用于随机生成数字,产生数字范围是1到32729
		int num = 0;
	while (1)
	{
		printf("请输入你猜得数字:");
		scanf("%d", &num);
		if (num == randNum)
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		if (num > randNum)
		{
			printf("恭喜你,猜大了\n");
		}
		if (num < randNum)
		{
			printf("恭喜你,猜小了\n");
		}
	}

}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//用于返回当前时间值,用NULL表示不返回时间值,使生成的随机数更随机。
	do
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:play(); break;
		case 0:printf("游戏结束\n"); break;
		default:printf("请输入正确的数字\n"); break;
		}
		
	} while (input);
	return 0;
}

6、goto实现的恶搞关机小程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char input[10] = { 0 };
	system("shutdouwn -s -t 60");
again://当程序跳到此处后程序依然按照代码顺序执行。
	printf("电脑将在一分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
	scanf("%s", &input);
	if (0 == strcmp(input, "我是猪"))
	{
		system("shutdown -a");
	}
	else
	{
		goto again;//程序跳到again处,
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44748803/article/details/89027472