赞
踩
1.写一个函数判断是否是素数
逻辑一:拿2~i-1之间的数字去除1
- //打印100-200之间的素数
- #include <stdio.h>
-
- int main()
- {
- int count = 0;
- int i = 0;
- for (i = 100; i <= 200; i++)
- {
- int flag = 1;//flag是1表示是素数
- int j = 0;
- for (j = 2; j < i; j++)
- {
- if (i % j == 0)
- {
- flag = 0;
- break;
- }
- }
- if (flag == 1)
- {
- count++;
- printf("%d ", i);
- }
- }
- printf("\ncount = %d", count);
- return 0;
- }
逻辑二:拿2~sqrt(i)之间的数字去除1
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- int count = 0;
- int i = 0;
- for (i = 100; i <= 200; i++)
- {
- int flag = 1;//flag是1表示是素数
- int j = 0;
- for (j = 2; j <= sqrt(i); j++)
- {
- if (i % j == 0)
- {
- flag = 0;
- break;
- }
- }
- if (flag == 1)
- {
- count++;
- printf("%d ", i);
- }
- }
- printf("\ncount = %d", count);
- return 0;
- }
逻辑三:逻辑二的基础上只生成奇数
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- int count = 0;
- int i = 0;
- for (i = 101; i <= 200; i+=2)
- {
- int flag = 1;//flag是1表示是素数
- int j = 0;
- for (j = 2; j <= sqrt(i); j++)
- {
- if (i % j == 0)
- {
- flag = 0;
- break;
- }
- }
- if (flag == 1)
- {
- count++;
- printf("%d ", i);
- }
- }
- printf("\ncount = %d", count);
- return 0;
- }
逻辑四:is_prime函数版本
- #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;
- }
- }
- return 1;
- }
-
- int main()
- {
- int count = 0;
- int i = 0;
- for (i = 101; i <= 200; i+=2)
- {
- if (is_prime(i))
- {
- printf("%d ", i);
- count++;
- }
- }
- printf("\ncount = %d", count);
- return 0;
- }
2.写一个函数判断是否是闰年
闰年判断的规则:1.能被4整除且不能被100整除
2.能被400整除
逻辑一:分两种情况判断非函数版本
- #include <stdio.h>
- //打印1000-2000之间的所有的闰年
- int main()
- {
- int year = 0;
- for (year = 1000; year <= 2000; year++)
- {
- if (year % 4 == 0)
- {
- if (year % 100 != 0)
- {
- printf("%d ", year);
- }
- }
- if (year % 400 == 0)
- printf("%d ", year);
- }
- return 0;
- }
逻辑二:一个判断表达式非函数版本
- #include <stdio.h>
- //打印1000-2000之间的所有的闰年
- int main()
- {
- int year = 0;
- for (year = 1000; year <= 2000; year++)
- {
- if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
- {
- printf("%d ", year);
- }
- }
- return 0;
- }
逻辑三:is_leap_year函数版本
- #include <stdio.h>
-
- int is_leap_year(int n)
- {
- if (((n % 4 == 0) && (n % 100 != 0)) || (n % 400 == 0))
- return 1;
- return 0;
- }
- int main()
- {
- int year = 0;
- for (year = 1000; year <= 2000; year++)
- {
- if (is_leap_year(year))
- printf("%d ", year);
- }
- 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)
- {
- int mid = left + (right - left) / 2;
- if (arr[mid] == k)
- {
- return mid;
- }
- else if (arr[mid] > k)
- {
- right = mid - 1;
- }
- else
- {
- left = mid + 1;
- }
- }
- return -1;
- }
-
- int main()
- {
- int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
- int k = 7;
- int sz = sizeof(arr) / sizeof(arr[0]);
- //找到了,返回下标
- //找不到,返回-1
- int ret = binary_search(arr, k, sz);
- if (ret == -1)
- {
- printf("找不到\n");
- }
- else
- {
- printf("找到了,下标是:%d", ret);
- }
- return 0;
- }
坑点:1.找不到,返回的不能是0(因为数组下标也可能是0),应该返回-1
2.不能在数组内部计算sz,因为传参传的数组名实际上是数组首元素的地址,不知道数组一共多少个元素
4.写一个函数,每调用一次,num加1
逻辑一:传址调用
- #include <stdio.h>
-
- void Add(int* p)
- {
- (*p)++;
- }
- int main()
- {
- int num = 1;
- printf("%d ", num);//1
- Add(&num);
- printf("%d ", num);//2
- Add(&num);
- printf("%d ", num);//3
- return 0;
- }
逻辑二:传值调用
- int Add(int n)
- {
- return n + 1;
- }
- int main()
- {
- int num = 1;
- printf("%d ", num);//1
- num = Add(num);
- printf("%d ", num);//2
- num = Add(num);
- printf("%d ", num);//3
- return 0;
- }
坑点:尽量不要使用全局变量,不安全
5.经典链式访问
- #include <stdio.h>
-
- int main()
- {
- printf("%d", printf("%d", printf("%d", 43)));
- return 0;
- }
结果:4321
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。