函数练习题
1.找出最大值(Max)
get_max(int x, int y)
{
int z = 0;
if (x > y)
{
z = x;
}
else
z = y;
return z;//返回z-返回较大值
}
int main()
{
int a = 10;
int b = 20;
int max = get_max(a,b);
printf("max = %d\n", max);
return 0;
}
测试结果:
##2.交换两个变量的值(Swap)
//函数返回类型的地方写出void,表示这个函数不返回任何值,也不需要返回
void Swap(int* pa, int* pb)
{
int z = 0;
z = *pa;
*pa = *pb;
*pb = z;
}
int main()
{
int a = 10;
int b = 20;
//写一个函数交换两个整形变量的值
printf("交换前:a=%d,b=%d\n", a, b);
Swap(&a, &b);//传址调用
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
测试结果:
此代码需要通过指针取地址才能返回交换后的值,否则无法返回
定义指针 | int* a |
---|---|
使用指针 | *a |
实参 | 真实传给函数的参数,叫实参,实参可以是常量、变量、表达式、函数等 |
---|---|
形参 | 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化,在函数调用完成之后就自动销毁了(意思就是要调用函数时形参才会有相应的参数,在调用完成后不需要了就自动销毁) |
3.100~200之间的素数(prime number)
错误的代码
int is_prime(int n) {
int j = 0;
for (j = 2; j < n; j++) {
if (n % j == 0) {
return 0;
}
return 1;
}
}
int main() {
int i = 0;
for (i = 100; i <= 200; i++) {
if(is_prime(i) == 1) {
printf("%d ", i);
}
}
return 0;
}
运行结果:
![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/6cf89e00a5282abd1f01c8317a0a5044.png)
因为return 1;写入到了for循环当中,所以当n % j == 0不成立时就会返回1,导致部分非素数被输出
正确的代码
int is_prime(int n) {
int j = 0;
for (j = 2; j < n; j++) {
if (n % j == 0) {
return 0;
}
}
return 1;
}
int main() {
int i = 0;
for (i = 100; i <= 200; i++) {
if(is_prime(i) == 1) {
printf("%d ", i);
}
}
return 0;
}
4.判断是否为闰年(leap year)
int is_leap_year(int x) {
//一个函数如果不写函数类型,默认为int
if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0) {
return 1;
}
return 0;
}
int main() {
int y = 0;
for (y = 1000; y <= 2000; y++) {
if (is_leap_year(y) == 1) {
printf("%d ", y);
}
}
return 0;
}
运行结果:
函数的便捷写法:
int is_leap_year(int x) {
return (x % 4 == 0 && x % 100 != 0 || x % 400 == 0)
}
5.二分查找(binary search)
int binary_search(int a[],int k, int s) {
int left = 0;
int right = s - 1;
while(left <= right){
int mid = (left + right) / 2;
if (a[mid] > k) {
right = mid - 1;
}
else if (a[mid] < k) {
left = mid + 1;
}
else {
return mid;
}
}
return -1;
}
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int key = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, key, sz);
//找到了就返回找到的位置的下标
//找不到就返回-1
if (ret == -1) {
printf("找不到\n");
}
else {
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
运行结果:
6.每调用一次这个函数,就会将num的值增加1
void Add(int*p) {
(*p)++;
}
每调用一次这个函数,就会将num的值增加1
int main() {
int num = 0;
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}
运行结果: