目录
一、 函数的补充
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;