鹏哥视频代码练习题
P40 函数
1.写一个数判断是不是素数
代码如下:
//写一个数判断一个数是不是素数
#include<stdio.h>
#include<windows.h>
int sushu( int a )
{
int i=2;
while (1)
{
if (a % i == 0 &&i!=a)
return 1;
i++;
if (i > a)
return 0;
}
}
int main()
{
int a;
printf("请输入要判断的数字\n");
scanf_s("%d", &a);
if (sushu(a))
{
printf("不是素数\n");
}
else
printf("是素数\n");
system("pause");
}
结果如下:
思路:素数是只能被1和它本身整除的数。
当输入1时i>a,返回0。if的括号内值为零不走if内的代码而走else。
当输入其他值时,i会对其进行求模取余,直到确认只有1和其本身可以整除传入的值时,判定为素数,返回1,走if 输出。或者i的值变的比传入的值还大,那么就确定不止有1和其本身可以整除传入的值,判定为非素数,返回0,走else 输出。
2.判断一年是不是闰年
代码如下:
//写一个函数判断一年是不是闰年
#include<stdio.h>
#include<windows.h>
int runnian(int a)
{
int b;
b = a % 100;
if (b == 0)
{
if (a % 400 == 0 )
return 1;
else return 0;
}
if (a % 4==0)
return 1;
else return 0;
}
int main()
{
printf("请输入需要判断的年份\n");
int a;
scanf_s("%d", & a);
if (runnian(a))
{
printf("是闰年\n");
}
else printf("不是闰年\n");
system("pause");
}
结果如下:
思路如下:
闰年的定义如下:当为整百年时,年份被400整除才算闰年;当为杂年时,年份被4整除即算闰年。
3.实现对整型有序数组的二分查找
//实现对整型有序数组的二分查找
#include<stdio.h>
#include<windows.h>
int erfenchazhao(int arr[], int a,int b) {
int left = 0, right = b;
int mid = (left + right) / 2;
while (1)
{
if (b > mid)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
if (arr[mid] == b)
return 1;
if (left > right)
return 0;
mid = (left + right) / 2;
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int a,b;
printf("请输入你要查找的数字\n");
scanf_s("%d", &a);
b = sizeof(arr) / sizeof(arr[0]);
if (erfenchazhao(arr, a,b))
{
printf("查找成功\n");
}
else printf("查找失败\n");
system("pause");
}
结果如下:
难点分析:
函数调用中不能求数组长度,因为当数组传递给函数时,他会退化成指向数组首元素的指针。
用sizeof(arr)/sizeof(arr[0])会得到2。因为sizeof(arr)=8,sizeof(arr[0])=4。所以只能在主函数里边求出长度放进函数里。
4.调用函数n值加一
//调用函数n值加一
#include<stdio.h>
#include<windows.h>
int qiuhe(int a, int b)
{
static int n = 0;
n++;
int z;
z = a + b;
printf("n的值为:%d\n", n);
return z;
}
int main()
{
int a, b,c,d=5;
printf("输入俩数字求和\n");
scanf_s("%d %d", &a, &b);
while(d)
{
c = qiuhe(qiuhe(a,qiuhe(a,b)), b);
d--;
}
printf("c的值为:%d\n", c);
system("pause");
}
结果如下:
思路分析:在函数里边加一个静态变量就可以让其一直保留,直到工程结束而不是函数结束。