C语言程序设计 8.2角色互换

这篇博客通过示例详细解释了如何使用函数参数和指针来交换变量值以及返回多个函数值。示例中展示了在不使用额外变量的情况下,通过指针交换两个变量的值,以及如何在函数中计算年月日和求两个数的和与差。此外,还介绍了使用指针作为函数参数来改变实参变量值的概念。

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

例8-3:有两个角色分别用变量a和b表示。

//通过函数调用来交换变量值 的示例程序 
#include<stdio.h>
void s1(int x,int y),s2(int *px,int *py),s3(int *px,int *py);
int main()
{
	int a=1,b=2;
	int *pa=&a,*pb=&b;
	s1(a,b);//使用变量a b调用函数s1()
//s1被调用时,实参a b的值传递给了形参x y,在s1中实现了x y的交换
//但当返回主调函数后,s1中定义的变量都销毁了,而主调函数的a b的值没有任何改变 
	printf("After calling s1: a=%d, b=%d\n",a,b);
	
	a=1;b=2;
	s2(pa,pb);//使用指针pa pb调用函数s2()
	printf("After calling s2: a=%d, b=%d\n",a,b);
	
	a=1;b=2;
	s3(pa,pb);//使用指针pa pb调用s3()
	printf("After calling s3: a=%d, b=%d\n",a,b);
	return 0;
}
void s1(int x,int y)
{
	int t;
	t=x;x=y;y=t;
}
void s2(int *px,int *py)
{
	int t;
	t=*px;*px=*py;*py=t;//交换了pa pb指向的变量 
}
void s3(int *px,int *py)
{
	int *pt;
	pt=px;px=py;py=pt;//交换了pa pb 
}

例8-4:输入年份和天数,输出对应的年月日。

//使用指针作为函数参数 返回多个函数值的示例
#include<stdio.h>
void month_day(int year,int yearday,int *pmonth,int *pday);
int main()
{
	int day,month,year,yearday;//定义代表日 月 年 和天数的变量
	printf("input year and yearday: ");//提示输入数据:年 天数 
	scanf("%d%d",&year,&yearday);
	
	month_day(year,yearday,&month,&day);//调用函数计算月日,这里用了& &
	//p=&a; 表示把变量 a的地址赋给指针 p,即 p指向 a 
	printf("%d-%d-%d\n",year,month,day);
	return 0; 
}
void month_day(int year,int yearday,int *pmonth,int *pday)
//函数的参数包括实参和形参。如果将某个变量的地址 作为函数的实参,相应的形参就是指针 
//将变量month和day的地址作为实参,在被调函数中 用形参指针pmonth和pday分别接收地址,并改变了形参所指向变量的值
//所以month和day中的值也随之改变 
{
	int k,leap;
	int tab[2][13]=  //定义数组存放非闰年和闰年每个月的天数 
	{
		{0,31,28,31,30,31,30,31,31,30,31,30,31},
		{0,31,29,31,30,31,30,31,31,30,31,30,31}
	};
	
	leap=(year%4==0&&year%100!=0)||year%400==0;//建立闰年判别条件leap
	
	for(k=1;yearday>tab[leap][k];k++)
	  yearday=yearday-tab[leap][k];
	
	*pmonth=k; //对指针 p所指的变量进行赋值 
	*pday=yearday;
}

练习8-2:调用函数求两个数的和与差。

#include <stdio.h>
void sum_diff( float op1, float op2, float *psum, float *pdiff );
int main()
{
    float a, b, sum, diff;
    scanf("%f %f", &a, &b);//输入两个数 
    sum_diff(a, b, &sum, &diff);//调用函数 
    printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
    return 0; 
}
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
	float sum,diff;
	sum=op1+op2;
	diff=op1-op2;
    *psum=sum;
	*pdiff=diff;
}

这个在拼题网上有,代码区就只用函数的定义那部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值