1,打印100~200之间的素数
#include <stdio.h>
#include <math.h>
int is_prime(int x)
{
int z = 0;
for (z = 2; z <= sqrt(x); z++)//使用sqrt()优化,引入库函数math.h
{
if (0 == x % z)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)//打印100-200之间的所有数
{
if (is_prime(i) == 1)//调用函数进行判断i是否为素数
//为素数返回1,为非素数返回0
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
打印结果:
2,写一个函数判断1000~2000之间的闰年
#include <stdio.h>
int is_leap_year(int n)
{
return((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0));
}
int main()
{
int count = 0;
int y = 0;
for (y = 1000; y <= 2000; y++)
{
if (1 == is_leap_year(y))//调用函数进行判断y是否为闰年
//为闰年返回1,非闰年返回0
{
count++;
printf("%d ", y);
}
}
printf("\ncount = %d\n", count);
return 0;
}
打印结果:
3,写一个函数,实现一个整型有序数组的二分查找
#include <stdio.h>
int binary_search(int a[], int k, int s)//int binary_search(int* a, int k, int s)
{
int left = 0;
int right = s - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if (a[mid] > k)
{
right = mid - 1;
}
else if (a[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]);
//找到返回找到的位置的下标
//找不到返回-1
int ret = binary_search(arr,key,sz);
//数组arr传参,实际传递的不是数组本身,仅仅传过去了数组首元素的地址
//数组传参本质上为传址调用
if (-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了,下标为:%d\n", ret);
}
return 0;
}
打印结果:
4,写一个函数,每调用一次这个函数,就会将num的值增加1
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
while (num < 3)//调用3次
{
Add(&num);
printf("%d\n", num);
}
return 0;
}
打印结果: