P48函数的调用
练习
1.写一个函数可以判断一个数是不是素数
之(打印100-200之间的素数)
#include<stdio.h>
//打印100-200之间所有的素数
int is_prime(int n); //函数声明
int main()
{
int i = 0;
int count = 0;
for(i=100; i<=200; i++)//这里可以优化代码写成i+=2,因为偶数肯定不是素数
{
//判断是否为素数,素数只能被1和它本身整除
if(is_prime(i) == 1)
{
count++;//计算素数的个数
printf("%d ", i);
}
}
printf("\ncount = %d ", count);
return 0;
}
int is_prime(int n)
{
//2到i-1 之间的数字
int j = 0;
for(j=2; j<n; j++)
{
if(n%j==0)
{
return 0;
}
}
return 1; //来到这说明已经跳出循环,即不满足if
}
2.写一个函数判断一年是不是闰年
之(打印1000-2000之间的闰年)
#include <stdio.h>
int is_leap_year(int year);//函数声明,可以没有变量名称,但是不可以没有变量类型
int main()
{
int count = 0;
int i;
for(i=1000; i<=2000; i++)
{
if(1==is_leap_year(i))
{
count++;
printf("%d是闰年\n", i);
}
}
printf("\ncount=%d", count);
return 0;
}
int is_leap_year(int year)
{
if((0==year%4) && (0!=year%100) || (0==year%400))
{
return 1;
}else{
return 0;
}
}
3.写一个函数,实现一个整型有序数组的二分查找
#include <stdio.h>
//该函数参数意思是在数组int arr[]的sz个元素里面查找key
//该函数是要返回下标,故返回类型为int
int binary_search(int a[],int k, int s)//此处传进去的不是是整个arr[],而是数组的地址
{ //相当于int binary_search(int* a, int k)
// int sz = sizeof(a)/sizeof(a[0]); //求不出数组元素的个数,因为a是指针占4个字节,4/4=1
//所以参数传进数组个数的时候,一定要在main函数里面先求好函数个数再传,无法在函数内部求数组个数
int left = 0;
int right = s-1;//元素个数-1为最后一个元素的下标
while(left<=right)//说明左下标和右下标之间是有元素的
{
int mid = (left+right)/2;//每一次的mid都要重新计算mid
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;
printf("请输入你要查找的数字:>");
scanf("%d", &key);
int sz = sizeof(arr)/sizeof(arr[0]);//求出数组元素的个数
//找到了就返回找到的位置的下标
//找不到返回-1(-1不可能是数组的下标)
//数组arr传参,实际上传递的不是数组的本身,
//仅仅传过去的是数组首元素的地址
int result = binary_search(arr, key, sz);
if(-1 == result) //说明找不到
{
printf("找不到\n");
}else
{
printf("找到了,下标是:%d\n", result);
}
return 0;
}
4.写一个函数,每调用一次这个函数,就会将num的值增加1
#include <stdio.h>
void Add(int* p);
int main()
{
int num = 0;
//调用函数,使得num每次增加1
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}
void Add(int* p)
{
(*p)++;
}