素数或质数(prime number)是指在大于1的自然数中,除了1和它本身以外不再有其他的因数自然数。
#include
#include
int is_prime(int n)
{
int j = 0;
//m=a*b,a和b中一定至少有一个数<=√m
//sqrt()函数是一个数学库函数,表示开平方,头文件是math.h
for (j = 2; j <= sqrt(n); j++)//用2-sqrt(n)之间的数去试除n
{
if (n % j == 0)//n能被j整除
{
return 0;//不是素数返回0
}
}
return 1;//是素数返回1
}
或者使用布尔类型
//#include //该头文件定义了布尔类型
//bool is_prime(int n)
//{
// int j = 0;
// for (j = 2; j <= sqrt(n); j++)
// {
// if (n % j == 0)
// {
// return false;//不是素数返回false
// }
// }
// return true;//是素数返回true
//}
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2) //大于2的偶数都不是素数,所以可以从101开始判断,并且每次调整加2
{
if (is_prime(i))
{
printf("%d ", i);
//结果为101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
count++;//计数
}
}
printf("\ncount = %d\n", count);//count = 21
return 0;
}
2. 打印1000-2000之间的闰年并计数
闰年(Leap Year)判断标准:能被4整除且不能被100整除,或能被400整除。
#include
int is_leap_year(int y)
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
return 1;//是闰年返回1
else
return 0;//不是闰年返回0
}
int main()
{
int year = 0;
int count = 0;
for (year = 1000; year <= 2000; year++)
{
if (is_leap_year(year))
{
printf("%d ", year);
count++;
}
}
printf("\ncount = %d\n", count);//count = 243
return 0;
}
3. 写一个函数,实现一个整形有序数组的二分查找
二分查找,也称折半查找(Binary Search)。
#include
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)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;//找到了返回下标
}
}
return -1;//找不到返回-1,不能返回0因为找到了返回的下标可能是0
}
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 ret = binary_search(arr, k, sz);
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
//结果为:找到了,下标是:6
int sz = sizeof(arr) / sizeof(arr[0]);不能放在binary_search函数内。数组传参实际上传递的是数组首元素的地址,而不是整个数组,所以不能在函数内部计算一个函数参数部分的数组的元素个数。形参arr看上去是数组,本质是指针变量。
4. 写一个函数,每调用一次这个函数,就会将num 的值增加1//使用传址调用
#include
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n", num);//1
Add(&num);
printf("%d\n", num);//2
Add(&num);
printf("%d\n", num);//3
Add(&num);
printf("%d\n", num);//4
return 0;
}
//使用传值调用
#include
int Add(int n)
{
return ++n;
}
int main()
{
int num = 0;
num = Add(num);
printf("%d\n", num);//1
num = Add(num);
printf("%d\n", num);//2
num = Add(num);
printf("%d\n", num);//3
num = Add(num);
printf("%d\n", num);//4
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)