目录
1.打印100-200之间的素数
思路:100-200内穷举,判断函数中从(2-根号n)之间穷举是否能整除n
#include<math.h>
//还用is_prime函数判断是否为素数
int is_prime(int n)
{
int m = 0;
//若n可以写成a*b形式 ,则ab中至少有一个数小于或等于根号n
for (m = 2; m <= sqrt(n); m++)
{
if (n % m == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
//素数一定是奇数,所以只尝试奇数即可
for (i = 101; i <= 200; i += 2)
{
//判断i是否为素数
if (is_prime(i) == 1)
{
count++;
printf("%d ", i);
}
}
printf("\n%d\n", count);
return 0;
}
2.打印1000-2000年之间的闰年
闰年判定规则:1.能被4整除但不能被100整除 2.或者能被400整除
int is_leap_year(int a)
{
return (a % 4 == 0 && a % 100 != 0 || a % 400 == 0);
}
int main()
{
int i = 0;
for (i = 1000; i <= 2000; i++)
{
//判断是否是闰年
if (is_leap_year(i) == 1)
{
printf("%d ", i);
}
}
return 0;
}
3.整型有序数组的二分查找
注意:求数组元素个数只能在主函数中先求好,因为数组传参时传过去的是数组第一个元素的地址,不是整个数组中的元素
int binary_search(int arr[], int k, int s)//形参和实参可以同名
{
int left = 0;
int right = s - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[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);
if (-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了,下标为%d\n", ret);
}
return 0;
}