函数的调用分为两种:
传值调用和传址调用
将值调用过去
将地址调用过去
所以函数内部想改变函数的外部,则需要将地址传出去;若只是想将数值传过去,则用传值调用
/*写一个函数打印100到200之间的素数:*/
#include<stdio.h>
int f_judge(int n)
{
//2——(n-1)之间的数
int j = 0;
for (j = 2; j < n; j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断 i 是否为素数
if (f_judge(i) == 1)
{
count++;
printf("%d ", i);
}
}
printf("\n有%d个素数\n", count);
return 0;
}
函数编写成功
/*写一个函数打印1000到2000年的闰年:*/
int is_leap_year(int x)
{
if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
return 1;
else
return 0;
} //一个函数如果不返回类型,则默认返回int类型6
int main()
{
int y = 0;
for (y = 1000; y <= 2000; y++)
{
if (is_leap_year(y) == 1)
{
printf("%d ", y);
}
}
return 0;
}
函数编写成功
在这题的函数编写上,还可以简化为如下:
int is_leap_year(int x)
{
return (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0);
}
/*写一个函数,实现一个整型有序数组的二分查找:*/
int binary_search(int arr1[], int k, int s)
{
int left = 0;
int right = s - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr1[mid] > k)
{
right = mid - 1;
}
else if (arr1[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 sz = sizeof(arr) / sizeof(arr[0]);
int key = 7;
//找到了就返回找到的位置的下标
//找不到返回 -1
int ret = binary_search(arr,key,sz);
if (ret == -1)
{
printf("没找到\n");
}
else
{
printf("找到了,下标为:%d\n", ret);
}
return 0;
}
注意!数组arr传参时,实际传递的的不是数组本身,而是只传过去了数组首元素的地址!
所以在本题不能在创建的函数内进行数组元素个数的计算