C语言指针练习(指针变量作为函数参数)

一系列C语言编程练习题,涉及使用指针作为函数参数,包括实数交换、整数排序、鸡兔问题、日期计算、一元二次方程求解、三角形外心坐标计算、累加和、两数和差、三角形周长和面积计算等。通过这些练习,深入理解C语言中指针与函数交互的用法。
摘要由CSDN通过智能技术生成

Problem A:【函数的指针参数】交换2个实数

题目描述
用指针变量作为函数形参,编写函数实现2个实数的交换
函数接口定义:
void mySwap(double*,double*);
裁判测试程序样例:
在这里插入图片描述

输入

测试数据有多组,处理到输入结束

输出

输出交换后的2个实数,保留2位小数。
每个输出占1行

样例输入

3.5 5.25
5 3

样例输出

5.25 3.50
3.00 5.00

答案

void mySwap(double *p1,double *p2){
   
    double temp;
    temp= *p1;
    *p1=*p2;
    *p2=temp;
}

Problem B:【函数的指针参数】三个整数的排序

题目描述
使用自定义函数sort(int a,int b)完成从小到大的排序功能
函数的参数:两个指针指向待排序的两个整数,函数执行完毕,使得
a≤
b
裁判测试程序样例:
在这里插入图片描述

样例输入

4 3 2

样例输出

2 3 4

答案

void sort(int *p1, int *p2){
   
    int temp;
    if(*p1>*p2){
   
    temp= *p1;
    *p1=*p2;
    *p2=temp;
	}
}

Problem C:【函数的指针参数】求解鸡兔问题

题目描述
使用自定义函数int calc(int,int,int*,int*)求解鸡兔问题
函数的参数:头的总数量h与脚的总数量f,通过两个指针参数获得计算结果
如果无解,则返回0,否则返回1.
裁判测试程序样例:
#include <stdio.h>
#include <stdio.h>
int calc(int,int,int*,int*);
int main()
{
int h,f;
while(scanf("%d%d",&h,&f)!=EOF){
int c,r;
if(calc(h,f,&c,&r))
printf("%d %d\n",c,r);
else
printf(“no solution\n”);
}
return 0;
}

// 你的代码将被嵌在这里

输入

测试数据有多组,处理到输入结束。

输出

输出对应的鸡和兔的数量,中间用空格隔开。
每个输出占1行。

样例输入

5 16
2 4

样例输出

2 3
2 0

答案

int calc(int h,int f,int *p1, int *p2){
   
    *p2=(f-2*h)/2;
    *p1=h-*p2;
    if(f-2*h<0 || (f-2*h)%2==1)
        return 0;
    else if(*p1<0)
        return 0;
    else
        return 1;
}

Problem D:【函数的指针参数】日期问题

题目描述
输入年和天数,输出对应的月和日。例如:输入2000和61,输出3和1。
函数接口定义:
void month_day(int,int,int*,int*);
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void month_day(int,int,int*,int*);
int main( )
{
int d,m,y,yd;
while(scanf("%d%d",&y,&yd)!=EOF){
month_day(y,yd,&m,&d);
printf("%d-%d\n",m,d);
}
}

/* 你的代码将被嵌在这里 */

输入

输入年和天数;测试数据有多组,处理到输入结束。

输出

输出对应的月和日。
每个输出占1行。

样例输入

2010 1
2010 32

样例输出

1-1
2-1

答案

void month_day(int year,int yearday,int *pmonth,int *pday){
   
int pd,i;
int tab[2][13]={
   
{
   0,31,28,31,30,31,30,31,31,30,31,30,31},
  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值