1. 写一个函数可以判断一个数是不是素数。
//是素数返回1
//不是素数返回0
//实参和形参可以用一样的变量名,但是他们各自的地址不一致
#include<math.h> int is_prime(int i) { //把单独判断素数封装成一个函数 int j = 0; for (j = 2; j <= sqrt(i); j++) { //sqrt需要头文件math.h if (i % j == 0) return 0; } return 1; } int main() { int i = 0; int count=0;//用来计数的 for (i = 100; i <= 200; i++) { //判断i是否为素数 if (1 == is_prime(i)) { count++;//是的话就加1 printf("%d", i); } } printf("\ncount=%d\n",count); }
2. 写一个函数判断1000-2000年哪些是闰年。
// 如果是闰年,返回1 // 不是闰年,返回0 int is_leap_year(int y) { if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) return 1; else return 0; } int main() { int y = 0; for (y = 1000; y <= 2000; y++) { //首先打印1000到2000之间的年份 if (1==is_leap_year(y)) { printf("%d ", y); } } }
其中函数部分也可写成:
3. 写一个函数,实现一个整形有序数组的二分查找。(二分查找针对的是有序数组)
二分查找法:
能被查找的条件:
left<=right
int binary_search(int arr[],int k,int sz) { int left = 0; int right = sz - 1; int mid = left + (right-left) / 2; while (left <= right) { if (arr[mid] < k) { left = mid + 1; } else if( arr[mid]>k){ right = mid - 1; } else { return mid; } } return -1; } int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 0; scanf("%d", &k); int sz = sizeof(arr) / sizeof(arr[0]); //找到了就返回下标,找不到返回-1(不要用0,会和下标0冲突) int ret = binary_search(arr, k,sz); //找的时候要知道这个数组arr,查找的元素k,数组的长度sz if (ret == -1) printf("找不到\n"); else printf("找到了,下标是%d\n",ret); return 0; }
错误示范:把sz放入函数中计算,不作为实参传入,结果会报错
4. 写一个函数,每调用一次这个函数,就会将 num 的值增加1。
方法一:
void Add(int* p) { (*p)++;//*p=*p+1; //因为++要高于*,所以不上括号是在p上++,而不是p所指向的值上++ } 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; }
方法二:
int Add(int n) { return n + 1; } int main() { int num = 0; num = Add(num); printf("%d ", num); num = Add(num); printf("%d ", num); num = Add(num); printf("%d ", num); return 0; }
你学到了吗小伙伴们😜😜
如果对你有帮助的话,希望小伙伴们点个赞和关注一下哦~💗💗💗我也会继续更新学习的内容,感谢友友们的支持!😚