21.写一个代码:打印100-200之间的素数
答:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break; //break有两种情况1.已经被整除;2.全部都不能被整除
}
}
if(i==j)
{
printf("%d\n", i);
}
}
return 0;
}
tips:
//素数-质数, 是只能被1或者自己整除的自然数
//可以写:2至i-1之间的数字去试除i,看能不能整除
第二种答案:
#include<stdio.h>
int main()
{
int count = 0;
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
int flag = 1; //假设i就是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag= 0; //不是素数
break; //break有两种情况1.已经被整除;2.全部都不能被整除
}
}
if(flag==1)
{
count++;
printf("%d\n", i); //素数
}
}
printf("\n总计=%d\n", count);
return 0;
}
第三种优化:
#include<stdio.h>
#include<math.h>
int main()
{
int count = 0;
int i = 0;
//m=a*b(按因子) 16=2*8=4*4
//a和b中一定有一个数字是<=开平方m的 <math.h>
for (i = 101; i <= 200; i+=2) //直接跳过偶数,从源头上减少了计算数据
{
int j = 0;
int flag = 1; //假设i就是素数
for (j = 2; j <=sqrt (i); j++) //sqrt--是开平方的函数
{
if (i % j == 0)
{
flag= 0; //不是素数
break; //break有两种情况1.已经被整除;2.全部都不能被整除
}
}
if(flag==1)
{
count++;
printf("%d\n", i); //素数
}
}
printf("\n总计=%d\n", count);
return 0;
}
//判断101是不是素数:2-100之间的数字去试除的。现在:2-sqrt(101)之间的数字去试除就行
22. 练习:写一个函数判断一个数是不是素数
#include<stdio.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j < n; j++) //for (j = 2; j <= sqrt(n); j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{ //100-200之间的素数/质数
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
23.写一个函数判断是不是闰年
int is_leap_year(int n)
{
if ((n % 4 == 0) && (n % 100 != 0)||(n % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int y = 0;
for(y=1000;y<=2000;y++)
{
if(is_leap_year(y) == 1)
{
printf("%d ", y);
}
}
return 0;
}
24. 写一个函数,实现一个整形有序数组的二分查找
#include<stdio.h>
//写一个函数,实现一个整形有序数组的二分查找
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
//数组arr传参,实际传递的不是数组本身,仅仅传过去了数组首元素的地址
int ret = binary_search(arr,key,sz);
if (-1==ret)
{
printf("找不到\n");
}
else
{
printf("找到了:%d\n", ret);
}
return 0;
}
25. 写一个函数,每调用一次这个函数,就会将num的值增加1。
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}