5.5:练习(部分上一期做过,换成函数做法):
(1).写一个函数可以判断一个数是不是素数:
// 写一个函数可以判断一个数是不是素数。 // 是素数返回1,不是素数返回0: #include <stdio.h> #include <math.h> //自定义判断素数的函数: int is_prime(int n) { int j = 0; for ( j = 2; j <= sqrt(n); j++ ) { if (n % j == 0) { return 0; // 能被整除说明是素数,返回0 } } return 1; // 整个循环中都没有被整除,说明是素数 } int main() { int i = 0; int count = 0; for ( i = 100; i <= 200; i++) { // 判断i是否为素数 if (is_prime(i) == 1) // 调用函数返回值是1,说明是素数 { printf("%d\n", i); count++; } } printf("\ncount = %d\n", count); return 0; }
(2).写一个函数判断一年是不是闰年:
// 2.实现函数 // 自定义判断是不是闰年的函数: int is_leap_year(int y) { return ((y % 4 ==0) && (y % 100 != 0) || (y % 400 == 0)); // 因为判断结果是1或0,所以可以直接放在return后 } int main() { int y = 0; int count = 0; for ( y = 1000; y <= 2000; y++ ) { // 1.函数怎么使用 //TDD - 测试驱动开发 //test drive development(测试驱动开发):先做框架,再做细节 if (is_leap_year(y) == 1) { printf("%d ", y); count++; } } printf("\ncount = %d\n", count); return 0; }
(3).写一个函数,实现一个整形有序数组的二分查找:
//写一个函数,实现一个整形有序数组的二分查找: #include <stdio.h> int binary_search(int arr[], int k, int sz) { int left = 0; int right = sz - 1; while (left <= right) { // 如果left和right过大超过4个字节,那就不是想要的结果了 // int mid = (left + right) / 2; // left是小的一边,(right - left)是两者差值, // (right - left) / 2,差值的一半赋给小的一边 // 两边一样,这时任意一边都是平均值(中间值) int mid = left + (right - left) / 2; if (arr[mid] < k) { left = mid + 1; } else if (arr[mid] > k) { right = mid - 1; } else { return mid; // 找到了 } } } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; // 被查找数组 int k = 7; // 要查找的值 int sz = sizeof(arr) / sizeof(arr[0]); // 元素个数 // 二分查找 (调用自定义函数) int ret = binary_search(arr, k, sz); // 返回下标 // 自定义函数参数:数组,要找的值,元素个数 // 找到了,返回下标 ; 未找到,返回-1 if (ret == -1) { printf("找不到\n"); } else { printf("找到了,下标是:%d\n", ret); } return 0; }
网络异常,图片无法展示
|
网络异常,图片无法展示
|
(下回揭晓)
(4).写一个函数,每调用一次这个函数,就会将num的值增加1:
6.函数的嵌套调用和链式访问:
7.函数的声明和定义:
8.函数递归:
补充知识点:
1. 形参在内存中是放在栈区的:
2. 变量名只是为了程序员方便查看使用的: