//练习1:写一个函数在100-200之间可以判断一个数是不是素数
#include<stdio.h>
int is_prime(int z)
{
int j = 0;
for (j = 2; j < z; j++)
{
if (z % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
printf("%d ", i);
}
return 0;
}
//练习2:写一个函数判断在1000-2000年之间的闰年
#include<stdio.h>
int is_run_year(int z)
{
if ((z % 4 == 0) && (z % 100 != 0) || (z % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int i = 0;
for (i = 1000; i <= 2000; i++)
{
//判断i是否为闰年
int ret = is_run_year(i);
if (ret == 1)//这里必须改为ret,不能是is_run_year==1
printf("%d ", i);
}
return 0;
}
//练习3:写一个函数,实现一个整形有序数组的二分查找
#include<stdio.h>
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 left = 0;
int right = sz - 1;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;//这里不能加int给mid
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
break;
}
if (left <= right)
printf("找到了,下标是%d", mid);
else
printf("找不到");
return 0;
}
//二分查找函数版
//本质上arr是一个指针
binary_search(int arr[], int k,int sz)
{
//算法的实现
int left = 0;
int right = sz - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
//在一个有序数组中查找具体的某个数
//如果找到了返回这个数的下标,找不到返回-1
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);//在arr里找k。传过去的是arr首元素的地址
if (ret == -1)
{
printf("找不到指定的数字");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
//练习4:写一个函数,每调用一次这个函数,就会将num的值增加1
#include<stdio.h>
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("num=%d\n", num);
Add(&num);
printf("num=%d\n", num);
Add(&num);
printf("num=%d\n", num);
return 0;
}