//写一个函数可以找出两个整数的最大值 intMax(int a,int b) { int max = a > b ? a : b; return max; } intmain() { int a = 0; int b = 0; printf("请输入两个整数:"); scanf("%d %d", &a, &b); //调用函数Max int max = Max(a, b); printf("最大值为:%d",max); return0; }
写一个函数,可以交换两个整型变量的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//写一个函数,可以交换两个整型变量的内容 //函数返回类型写 void 表示这个函数不返回任何值,也不需要返回 voidSwap(int x, int y) { int tmp = 0; tmp = x; x = y; y = tmp; } intmain() { 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); return0; }
以上代码是否正确?
当我们运行之后,会发现,他们的值并没有被交换
为什么呢?
通过查看监视我们发现
a和b的地址与x和y的地址并不一样,即x和y有了自己的空间
而Swap(a, b)传过去的参数也仅仅只是他们的值
所以我们可以把传过去的参数改为他们的地址,然后通过指针变量拿到他们的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
voidSwap(int* pa, int* pb) { int tmp = 0; tmp = *pa; *pa = *pb; *pb = tmp; } intmain() { 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); return0; }
//写一个函数,实现一个整形有序数组的二分查找。 intsearch(int arr[], int a,int s) { int left = 0; int right = s - 1; while (left<=right) { int mid = (left + right) / 2; if (a > arr[mid]) { left = mid + 1; } elseif (a < arr[mid]) { right = mid - 1; } else { return mid; } } return-1; } intmain() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int a = 0; printf("请输入要查找的数字:\n"); scanf("%d",&a); //注意:arr数组传参,实际传递的不是数组本身 //只传过去了数组首元素的地址 int sz = sizeof(arr) / sizeof(arr[0]); int num = search(arr, a, sz); if (num != -1) { printf("%d在数组的位置下标为%d\n",a,num); } else { printf("找不到\n", a, num); } return0; }
题目四:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//写一个函数,每调用一次这个函数,就会将 num 的值增加1。 voidAdd(int* p) { (*p)++; } intmain() { int num = 0; printf("%d\n", num); Add(&num); printf("%d\n", num); Add(&num); printf("%d\n", num); Add(&num); printf("%d\n", num); return0; }