自学C语言(23)函数练习题

前言:初步认识了函数,我们来写几个函数练习题练习一下吧

文章目录:

目录

一.练习

1.写一个函数可以判断是不是素数

2.写一个函数判断一年是不是闰年

3.写一个函数,实现一个整形有序数组二分查找

4.写一个函数,每次调用num+1

(1)素数

(2)闰年

(3)每调用num+1

(4)二分查找法

总结:


一.练习

1.写一个函数可以判断是不是素数

2.写一个函数判断一年是不是闰年

3.写一个函数,实现一个整形有序数组二分查找

4.写一个函数,每次调用num+1

先想函数怎么使用,在实现

(1)素数

素数是什么?

素数就是质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,即素数;否则称为合数

有了思路我们就可以写一下

#include<stdio.h>
#include<math.h>
int ss(int n) 
{
	int j = 0;
	for (j = 2; j <= sqrt(n); j++)   //sqrt是开平方函数头文件math.h
	{
		if (n%j == 0)     
		{
			return 0;
		}
		return 1;
	}
}
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		if (ss(i) == 1)
		{
			printf("素数:%d\n", i);
		}
	}
}

这就是使用函数调用实现素数的代码

注意事项:

  • 大于1就从2开始试除
  • 使用了开平方sqrt库函数需要引用头文件<math.h>
  • sqrt(144)=12 就在2—12的范围试除就可以了 还可以节省空间

(2)闰年

啥是闰年?

(1)四年一闰百年不闰:即如果能够被4整除,但是不能被100整除,则是闰年。

(2)每四百年再一闰:如果能够被400整除,则是闰年

我们得知被4整除 不能被100整除 可以被400整除

有了思路我们来实现

#include<stdio.h>
int rn_year(int 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++) //1000年——2000年
	{
		if (rn_year(year)==1) //返回值接收
		{
			printf("闰年%d\n", year);
		}
	}
}

根据题意我们就可以写出闰年函数代码

(3)每调用num+1

题目言简意赅 就是每次调用函数的时候num+1

#include<stdio.h>
void add(int*num) //指针接收
{
	++*num; //++优先级更高 先++num后解引用
}
int main()
{
	int num = 0;
	int i = 0;
	for (i = 0; i < 4; i++)
	{
	add(&num); //传址调用 因为要改变外部的值 不传址每次调用自动销毁
	}
	printf("%d", num);
	return 0;
}

注意事项:

函数参数选择传址调用 因为要改变外部的值 不传址每次调用自动销毁

(4)二分查找法

之前我们学过在主函数实现二分查找

这次我们用函数调用来解决

#include<stdio.h>
int cz(int arr[], int sz, int k) 
{
	int left = 0;    //左下标
	int right = sz - 1;     //右下标 因为数组从0开始要-1
	while (left <=right)         //要求左下标必须小于右下标
	{
		int mid = (left + right) / 2;        //计算中间值
		if (arr[mid]>k)        //如果中间值大于要找的数 说明在值的右边
			right = mid - 1; //右下标从中间值的左边开始
		else if (arr[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 k = 8;
	int sz = sizeof(arr) / sizeof(arr[0]); //计算元素个数
	int ret = cz(arr,sz,k);    //调用函数
	if (ret == 1)            //如果函数返回的是1 打印找不到
 		printf("找不到\n");
	else
		printf("找到了%d\n", ret);     //找到了,打印返回数值
	return 0;
}

注意事项:

  • 元素个数只能在函数外部计算 数组传参只传首元素地址 即是指针 4/4=1
  • 数组下标从0开始 所以右下标要-1
  • 如果中间值比求值大 就比如要求的值是4 中间值是6 所以肯定在1-5之间 所以右下标要-1  

总结:

初学函数 这几个练习题值得认真思考

传值和传址要搞清楚 传值改变外部变量传值自动销毁

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>