C语言中函数参数的调用(传值or传址),随机数的生成,经典题(小灰猜数字)

文章介绍了C语言中函数的两种调用方式——传值调用和传址调用,并通过示例代码展示了它们的区别。接着,讨论了如何生成随机数,包括使用rand()函数和srand()函数设置随机种子。最后,提供了一个小灰猜数字游戏的代码实例,展示了简单的游戏编程技巧。
摘要由CSDN通过智能技术生成

目录

一、 函数的补充

1.传值调用

2.传址调用

二、生成随机数

三、编写小灰猜数字游戏

四、其他知识点


一、 函数的补充

1.传值调用

只是调用原变量的数值,并没有改变原变量中存储的数值


#include <stdio.h>
// 定义一个函数,功能是交换两数
// 参数列表中的参数为两个整型变量
void swap(int num1, int num2) {
	// 首先打印传进来时的地址
	printf("num1的地址=%p,num2的地址=%p\n", num1, num2);
	// 定义中间变量并将存在第一个变量的值赋给中间变量
	int temp = num1;
	num1 = num2;
	num2 = temp;
	// 打印在函数中交换的
	printf("交换中num1=%d,num2=%d\n", num1, num2);
}

int main() {
	// 定义两个整型变量并进行赋值
	int num1 = 10, num2 = 20;
	printf("交换前,num1=%d,num2=%d\n", num1, num2);
	// 函数调用num1和num2的值    
	swap(num1, num2);
	// 打印交换后的
	printf("交换后num1=%d,num2=%d\n", num1, num2);
    return 0;
}

2.传址调用

直接使用原变量存储的数值,并将新值存入变量


#include <stdio.h>
// 定义一个函数,功能是交换两数
// 参数列表中的参数为指针变量,*是解地址操作符
void swap(int* pa, int* pb) {
	// 首先打印传进来时的地址
	printf("num1的地址=%p,num2的地址=%p\n", pa, pb);
	// 定义中间变量并将存在第一个变量的值赋给中间变量
	int temp = *pa;
	*pa = *pb;
	*pb = temp;
	// 打印在函数中交换的
	printf("交换中num1=%d,num2=%d\n", *pa, *pb);
}

int main() {
	// 定义两个整型变量
	int num1, num2;
	// 提示用户输入两个数
	printf("请输入两个数:");
	// 从键盘上输入两个数
	scanf("%d %d", &num1, &num2);
	// 打印交换前的
	printf("交换前,num1=%d,num2=%d\n", num1, num2);
	// 将num1和num2的地址传给函数    
	swap(&num1, &num2);
	// 打印交换后的
	printf("交换后num1=%d,num2=%d\n", num1, num2);
    return 0;
}

二、生成随机数

使用随机数需要的头文件

#include <stdlib.h>

rand();

它会随机生成一个位于0~RAND_MAX之间的整数。理论上可以生成无限大的数

C 语言 标准 并没有规定 RAND_MAX 的具体 数值 ,只是规定它的值 至少 32767 (2^15)
#include <stdio.h>
#include <stdlib.h>
int main() {
	int a = rand();
	printf("%d",a);
	return 0;
}

运行以上代码,每次结果都一样

这是因为rand()是依据电脑开机之后就不会变的一个“种子值”,再依据某一函数计算出的值

所以每次运行都是一样


要想实现随机,就得重新播种,可以利用void srand (unsigned int seed);再将时间作为参数,也就是只要时间不同,生成的种子不同,最终的随机数也就不同

使用时间的头文件

#include <time.h>

要将时间强制转换为无符号的

以下可以将时间精确

srand((unsigned)time(NULL));

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
	int a;
	srand((unsigned)time(NULL));
	a = rand();
	printf("%d\n", a);
	return 0;
}

生成一定范围内的随机数 

int a = rand()%100 +a//生成0+a~99+a的随机数

方法随机数n取余,取余后就是从0+a开始到n-1+a的数;a是用来改变上下限

三、编写小灰猜数字游戏

#include <stdio.h>
int main() {
	// 定义一个变量用来保存用户的选择
	int choice;
	// 使用do-while循环,使游戏至少执行一次
	do {
		printf("----------小灰猜数字----------\n");
		printf("-------1、play  0、退出-------\n");
		printf("------------------------------\n");
		scanf("%d", &choice);
		// 使用switch进行分支判断
		// 定义一个变量用来存储生成的随机数
		int number;
		// 定义一个变量用来存储小灰每次输入的数
		int input;
		// 定义计数变量
		int count = 1;
		switch (choice) {
			// 当选择1(play)时开始游戏
		case 1:
			//第一步:生成随机数[1,100]
			number = rand() % 100 + 1;
			do {
				//2、小灰输入数字
				printf("请输入1~100之间的数字:");
				scanf("%d", &input);
				//3、进行判断
				if (input == number) {
					printf("恭喜您,猜对了!总共猜了%d次\n", count);
					break;
				}
				else if (input > number) {
					printf("猜大了!\n");
					count = count + 1;
				}
				else {
					printf("猜小了!\n");
					count = count + 1;
				}
			} while (1);
			//4、打印结果
			break;
		case 0:
			printf("欢迎下次再来!");
			break;
		default:
			printf("输入有误,请重新输入.\n");
			break;
		}
	} while (choice);
	return 0;
}

四、其他知识点

计算字符串长度

char str[] = "hello";

int strLength = sizeof(str1) / sizeof(char) - 1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值