目录
3) 实现一个函数,判断一个数是不是素数。利用上面实现的函数打印100到200之间的素数。
开始之前,要明白为什么要有函数?因为函数功能多样,在主函数中仅需简单的代码调用就可以完成相应的功能。
1)写一个求两个数的最大值的函数
int getmax(int x, int y)
{
int z = 0;
z = (x > y ? x: y);
return z;
}//在这里我们定义一个函数,这个函数比较两个int类型的数并返回较大的数
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = getmax(a, b);//这里调用函数getmax
printf("%d\n", m);
return 0;
}
函数的基本形式需要一个类型(如int),按照需要来看需不需要返回值。如果不需要返回值仅需用void即可。
2)写一个函数可以交换2个整型变量的内容
在第一次写这个函数时,出现了这样的情况
#include<stdio.h> void swap(int x, int y) { int z = 0; z = x; x = y; y = z; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换前a=%d b=%d\n", a, b); swap(a, b); printf("交换后a=%d b=%d\n", a, b); return 0; }
为什么会这样子呢?我们按F10打开调试并且按F11进入函数段,监视a,b的值以及他们的地址,发现实参和形参的地址并不相同。
原因是:当函数调用的时候,实参传给形参,形参其实是实参的一份临时拷贝,所以对形参的修改,不会影响实参
那么该如何修改呢?在函数调用时有两种方式:传址调用、传值调用。既然传值调用不行,那就试试传址调用:
void swap(int *pa, int *pb) { int z = 0; z = *pa; *pa = *pb; *pb = z; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换前a=%d b=%d\n", a, b); swap(&a, &b); printf("交换后a=%d b=%d\n", a, b); return 0; }
这样便能完成相关数字的交换。
3) 实现一个函数,判断一个数是不是素数。利用上面实现的函数打印100到200之间的素数。
int sushu(int i)
{
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
return 0;//返回值为0,即主函数中的代码为0
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (sushu(i) == 1)//上面返回值若为0,则变成了 0 == 1,为假,便不会进入if语句
{
printf("%d ", i);
}
}
return 0;
}
4)实现函数判断year是不是润年
int runnian(int i)
{
if (((i % 4 == 0) && (i % 100 !=0)) || i % 400 == 0)
return 1;
}
int main()
{
int count = 0;
int i = 0;
for (i = 1000; i <=2000; i++)
{
if (runnian(i) == 1)
{
printf("%d ", i);
count++;
}
}
printf("%d", count);
return 0;
}