C语言--函数

本文介绍了C语言中函数的定义和调用方法,包括有返回值和无返回值的函数,强调了函数参数的实际参数和形式参数的区别。通过多个示例,如交换变量、求最大值、判断素数、输出闰年和计算阶乘等,展示了函数的使用技巧,包括传值调用和传址调用的差异。此外,还涉及了十进制转二进制的函数实现,并给出了一个使用素数测试验证哥德巴赫猜想的程序片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数的定义与调用

(一)返回值类型   函数名  ([参数1][参数2][...])

{

        函数体

        return 返回值;

}

(二)(void) 函数名 ([参数1][参数2][...])

void:表示该函数不返回任何值,也不需要返回

TIPS:

(—)定义函数时指定的函数类型一般应该与return语句中的表达式类型一致。但不一致时函数类型决定返回值的类型

如:double min(int x,int y) //函数值为双精度型           

       int max(double x,double y) //函数值为整型

(二)使用自定义函数时,如果该函数的位置在调用它的函数(主函数)之后(同一个文件中),应该在主函数中对被调函数作声明。如下面的例子:求两数之和

(三)return语句后面可以是一个值也可以是一个表达式:

eg:max(int x,int y){

        return (x>y?x:y)

        }

*函数的参数

1.实际参数:真实传给函数的参数。可以是:常量、变量、表达式、函数等,无论实参是何种类型的值,在进行函数调用时,必须要有确定的值,以便将这些值传给形式参数。

2.形式参数:函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才分配内存单元,所以叫形式参数。当函数调用完成时就自动销毁了,因而形式参数只在函数中有效。

 例一:交换两个整型变量(不需要返回值)

 仅仅是x和y在不停交换,并没有影响a和b的值

修改👇👇

 

 

完整代码:

 Swap1:传值调用:函数的形参和实参占有不同的内存块,对形参的修改不会影响实参。

Swap2:传址调用:把函数外部创建变量的内存地址传递给函数参数。可以让函数内外建立真正的联系,函数内部也可以直接操作函数外部的变量。

 例二:求两个数的较大值

//1.求两个数的较大值
int max2(int x,int y)
{
	int z;
	z=x>y? x:y;
	return z;
}
#include <stdio.h>
int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	int max =max2(a,b);
	printf("%d",max);
	return 0;
}

求三个数:

//2.求三个数的最大值

int max3(int x,int y,int z)
{
	int t=x;
	if(y>t){
		t=y;
	}
	if(z>t){
		t=z;
	}
	return t;
}
#include <stdio.h>
int main()
{
	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	int max =max3(a,b,c);
	printf("%d",max);
	return 0;
}

例三:判断一个数是否为素数

int isPrime(int n)
{
	if(n<2){
		return 0;
	}
	for(int i=2;i<=n/i;i++){
		if(n%i==0){
		return 0;
		}
	}
	return 1;
}

#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	if(isPrime(n)){
		printf("Yes\n",n);
		
	}
	else{
		printf("No\n",n);
	}
	return 0;
}

例四:输出1000到3000的所有闰年

int is_leap(int n)
{
	if((n%4==0&&n%100!=0)||(n%100==0)){
		return 1;
	}
	else{
		return 0;
	}

}
#include <stdio.h>
int main()
{
	int n;
	for(int n=1000;n<=3000;n++){
		if(is_leap(n)){
			printf("%d ",n);
		}
	}
	return 0;
}

例五:求前n个数的阶乘

int product(int n)
{
	int result=1;
	for(int i=1;i<=n;i++){
		result=result*i5;
	}
	return result;
	
}


#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int k=product(n);
	printf("%d",k);
	return 0;
}

例六-1:求前n个数阶乘之和

int product(int n)
{
	int result=1;
	for(int i=1;i<=n;i++){
		result=result*i;
	}
	return result;
	
}
#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	//int k=;
	int s=0;
	for(int i=1;i<=n;i++){
		s=s+product(i);//这里括号里面不要写成n了 如果是n的话就会带入n的值计算 累加n次n的阶乘
	}
	printf("%d",s);
	return 0;
}

例七:十进制转二进制

#include <stdio.h>
//输入一个十进制数转化为二进制并输出
void decToBin(int);
int main()
{
	int x;
	while(scanf("%d",&x)!=EOF){
		decToBin(x);
		printf("\n");
	}
	return 0;
}

void decToBin(int n)
{
	char s[35]="";
	if(n==0){
		printf("0");
		return;
	}
	if(n<0){
		printf("-");
		n=-n;
		
	}
	int m=0;
	while(n>0){
		int t=n%2;
		s[m] = t+'0';
		m=m+1;
		n=n/2;
		
	}	
	for(int i=0;i<m/2;i++){
		int k=s[i];
		s[i]=s[m-1-i];
		s[m-1-i]=k;
	}
	printf("%s",s);
}
void decToBin(int n)
{
	int s[35];
	if(n==0){
		printf("0");
		return;
	}
	if(n<0){
		printf("-");
		n=-n;
		
	}
	int m=0,i;
	while(n>0){
	  s[m]=n%2;
		m=m+1;
		n=n/2;
		
	}	
	for(int i=0;i<m/2;i++){
		int k=s[i];
		s[i]=s[m-1-i];
		s[m-1-i]=k;
	}

	for(int i=0;i<m;i++){
		printf("%d",s[i]);
	}

	
}

第一种是用字符数组写的 第二种就是int数组(注意输出格式!!!!)

例七:使用素数测试函数验证哥德巴赫猜想

 

 

int isPrime(int a)
{
	for(int i=2;i<=a/i;i++){
		if(a%i==0){
		return 0;
		}
	}
	return 1;
}
#include <stdio.h>
int main()
{
	int n;
	while(~(scanf("%d",&n))){
		if(n==4){
			printf("2 2\n");//  4的情况要单独考虑
		}
		else{
				for(int a=2;a<=n/2;a++){
			if(isPrime(a)&&isPrime(n-a)){
					printf("%d %d\n",a,n-a);
					break;  //找到了就break 题目要求的是输出差值最大的即可
				}
			}	
		}
	
	}

		return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值