C语言(猜数字游戏;折半查找;冒泡排序;编写代码模拟三次密码输入的场景,最多能输入三次密码;编写一个程序,实现大小写转化,数字不输出;写出数组初始化、反置、清空操作函数等.)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void swap(int* a[], int* b[]){
	int temp = *a;
	*a = *b;
	*b = temp;
}

void bubblesort(int arr[],int size ){
	int bound = 0;
	for (; bound < size;++bound){
		for (int cur = size - 1; cur > bound; --cur){
			if (arr[cur] > arr[cur - 1]){
				swap(&arr[cur],&arr[cur - 1]);
			}
		}
	}
}


void menu(){
	printf("---------------------------------------------------------\n");
	printf("-----------------------1.开始游戏-----------------------\n");
	printf("-----------------------0.退出---------------------------\n");
	printf("---------------------------------------------------------\n");
}
void game(){
	int num = 0;
	srand((unsigned int)time(NULL));
	int key = rand()%100 + 1;
	printf("请输入一个1-100的数字:\n");
	while (1){
		scanf("%d", &num);
		if (num == key){
			printf("你真猛~猜对了!\n");
			break;
		}
		else if (num > key){
			printf("你真猛~大了!\n");
		}
		else{
			printf("你真猛~小了!\n");
		}
	}
}

int BinarySearch(int arr[], int left,int right,int key){
	
while (left <= right){
	int mid = (right + left) / 2;
	if (key > arr[mid]){
		left = mid + 1;
	}
	else if (key < arr[mid]){
		right = mid - 1;
	}
	else{
		return mid;
		break;
	}
 }
return -1;
}

 void showmatrix(int input){
 	for (int i = 1; i <= input; i++){
 		for (int j = 1; j <= i; j++){
 			printf("%2d*%2d=%d ", j ,i,i*j);
 		}
 		printf("\n");
 	}
 }



 void exchange(int* a, int* b){
 	int temp = *a;
 	*a = *b;
 	*b = temp;
 }

 void isleap(int year){
 	if (year % 400 == 0){
 			printf("%d 年是世纪闰年\n", year);
 	}
 	else if(year % 4 == 0&&year % 100 != 0){
 		printf("%d 年是普通闰年\n", year);
 	}
 	else{
 		printf("%d 年不是闰年\n",year);
 	}
 }

void init(int arr[]){
	int a = 0;
	for (int i = 0; i < 5; i++){
		printf("请输入第%d 个数:\n",i + 1);
		scanf("%d", &a);
		arr[i] = a;

	}
	printf("你输入的数组为:\n");
	for (int i = 0; i < 5; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
}


void reverse(int arr[]){
	printf("反置后的数组为:\n");
	int arr2[5] = { 0 };
	for (int i = 0; i < 5; i++){
		arr2[i] = arr[4 - i];
		printf("%d ", arr2[i]);
	}
	printf("\n");
}


void empty(int* arr){
	printf("清空后的数组元素为:\n");
	for (int i = 0; i < 5; i++){
		arr[i] = '\0';
		printf("第%d 个元素为%d\n", i + 1,arr[i]);
	}
}


void isprime(input){
	int i;
	for (i  = 2; i < input; i++){
		if (input % i == 0){
			break;
		}
	}
	
	if (input <= 1){
		printf("%d 不是素数\n", input);
	}
	else if(i <input){
		printf("%d 不是素数\n", input);
	}
	else{
		printf("%d 是素数\n", input);
	}
}

 int main()
 {
	//冒泡排序算法;
	int a[] = { 9, 5, 2, 7 };
	int size = sizeof(a) / sizeof(a[0]);
	bubblesort(a, size);
	for (int i = 0; i < 4; ++i){
		printf("%d ", a[i]);
	}
	printf("\n");
	printf("%d ", size);

	/
	//第一题:完成猜数字游戏;
int input;
	do{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input){
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束!\n");
				break;
		default:
			printf("输入有误!\n");
			break;
		}
	} while (input != 0);
	/

	//第二题:写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回 - 1.(折半查找)
	int arr[10] = { 1, 2, 3, 4, 5,6,7,8,9,10 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int index = BinarySearch(arr, 0, len - 1, 10);
	printf("%d\n", index);
	/

	//第三题:编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”, 密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。
	char password[20] = "a12345";
	int count = 1;
	char input[] = "0";
	while (count < 4){
		printf("请输入密码:\n");
		scanf("%s", &input);
		if (strcmp(password, input) == 0){
			printf("登陆成功!\n");
			break;
		}
		else{
			count ++;
			printf("密码错误!!! 你还有%d 次机会!\n",4 - count);
		}
	}

	/

	//第四题:编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
	printf("请连续输入字符:\n");
	while (1){
		char input = 0;
		scanf("%c", &input);       //还可以用getchar()函数    %c表示字符   %s表示字符串   %p表示地址
		if (input >= 'A' && input <= 'Z'){
			printf("%c", (int)input + 32);
		}
		else if (input >= 'a' && input <= 'z'){
			printf("%c", input - 32);
		}
		else;
	}
	
//

第一题:.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9,输出9 * 9口诀表,输入12,输出12 * 12的乘法口诀表。
 	int input = 0;
 	printf("请输入一个你想打印的乘法口诀的规模:\n");
 	scanf("%d", &input);
 	showmatrix(input);


///

//第二题:使用函数实现两个数的交换。
 	int a = 0;
 	int b = 0;
 	printf("请输入两个要交换的数(并用空格隔开):\n");
 	scanf("%d %d", &a, &b);
 	exchange(&a, &b);
 	printf("交换后:%d %d", a, b);

///

//第三题:实现一个函数判断year是不是润年。 
 	int year = 0;
 	printf("请输入年份:\n");
 	scanf("%d", &year);
 	isleap(year);

///

//第四题:创建一个数组,实现函数init()初始化数组,实现empty()清空数组,实现reverse()函数完成数组元素的逆置。要求:自己设计函数的参数,返回值。

	int arr[5] = { 0 };   //如果我想设置一个自定义长度的数组,用scanf()输入的话,但是arr[]中必须放常量,求解怎么设定自定义长度的数组????
	init(&arr);
	reverse(&arr);
	empty(&arr);

///

//第五题:实现一个函数,判断一个数是不是素数。
	printf("请输入一个数:\n");
	int input = 0;
	scanf("%d", &input);
	isprime(input);
	system("pause");
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是对应的代码实现: ```c #include <stdio.h> // 冒泡排序 void bubble_sort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 快速排序 void quick_sort(int arr[], int left, int right) { if (left >= right) { return; } int i = left; int j = right; int pivot = arr[left]; while (i < j) { while (i < j && arr[j] < pivot) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i] > pivot) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = pivot; quick_sort(arr, left, i - 1); quick_sort(arr, i + 1, right); } // 折半查找 int binary_search(int arr[], int n, int key) { int left = 0; int right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { left = mid + 1; } else { right = mid - 1; } } return -1; } int main() { int n; printf("请输入数组的长度:"); scanf("%d", &n); int arr[n]; printf("请输入%d个数:", n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } bubble_sort(arr, n); printf("冒泡排序后的结果为:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); quick_sort(arr, 0, n - 1); printf("快速排序后的结果为:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); int key; printf("请输入要查找的数字:"); scanf("%d", &key); int index = binary_search(arr, n, key); if (index != -1) { printf("数字%d在数组中的位置为:%d\n", key, index); } else { printf("数字%d不在数组中\n", key); } return 0; } ``` 注意,这里的折半查找法需要在有序数组中进行,因此在排序完成后再进行查找。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值