目录
1.写一个函数可以判断一个数是不是素数(只能1和他本身整除的数)
非函数的写法::
函数的写法:
2.写一个函数判断一年是不是闰年
非函数的写法:
函数的写法:
3.写一个函数,实现一个有序数组的二分查找
非函数的写法:
函数的写法:
4.写一个函数,每调用一次这个函数,就会将num的值增加1
5.补充知识:布尔类型
#include
int main()
{
int i = 0;
for (i = 101;i <= 200;i+=2)
{
//判断i是不是素数
//是素数就打印
//拿2~i-1之间的数字去试除
int flag = 1;//flag是1,表示为素数
int j = 0;
for (j = 2;j <= sqrt(i);j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag==1)
{
printf("%d ", i);
}
}
return 0;
}
我们这里引入一个库函数sqrt(m),这个库函数的意思是开方,例如:sqrt(4)= 2。素数是不能开方的我们就利用这个性质,去找素数
#include
#include//sqrt(m)的头文件
//我们就规定不是素数就返回0,0为假,不打印
int is_prime(int n)
{
int j = 0;
for (j = 2;j <= sqrt(n);j++)
{
if (n % j == 0)
{
return 0;
}
}
}
int main()
{
int i = 0;
int count = 0;//这个是计数。计一共有几个素数
for (i = 101;i <= 200;i += 2)
{
if (is_prime(i))
{
printf("%d ", i);
count++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
闰年判断的规则:
1.能被4整除,并且不能被100整除是闰年
2.能被400整除是闰年
#include
//打印1000年到2000之间的闰年
int main()
{
int year = 0;
for (year = 1000;year <= 2000;year++)
{
if (((year %4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("%d ", year);
}
}
return 0;
}
#include
//我们规定是闰年返回1,不是闰年返回0
int is_leap_year(y)
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int year = 0;
for (year = 1000;year <= 2000;year++)
{
if (is_leap_year(year))
{
printf("%d ", year);
}
}
return 0;
}
非函数的写法我们在循环练习里面已经演示过了。为了方便大家,预览,我们在打一遍。
#include
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 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 {
printf("找到了,下标是:%d\n", mid);
break;
}
if (left > right)
{
printf("找不到\n");
}
}
return 0;
}
这里我们函数不返回0给主函数的原因是数组的下标是以0开始的,会冲突,导致无法达到想要的效果
#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;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 5;
int sz = sizeof(arr) / sizeof(arr[0]);
//找到了,返回下标
//找不到,返回-1
int ret = binary_search(arr , k , sz);
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n",ret);
}
return 0;
}
#include
void Add(int* p)//这里我们就用到了传址调用,形参可以直接改变实参的值
//void表示不返回,值回主函数,所以这里我们也不用加return
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}
C语言内置的类型:
char
short
int
long
float
double
C99中引入了布尔类型:bool用来表示真假的,如果只想要表示真假时就用bool
#include
#include
bool is_prime(int n)
{
int j = 0;
for (j = 2;j <= sqrt(n);j++)
{
if (n % j == 0)
{
return false;//假
}
}
return true;//真
}
int main()
{
int i = 0;
for (i = 101;i <= 200;i += 2)
{
if (is_prime(i))
{
printf("%d ", i);
count++;
}
}
return 0;
}