CPP2022-15-函数传参(指针与引用)

6-1 总秒数转时、分、秒

分数 10

全屏浏览题目

切换布局

作者 李祥

单位 湖北经济学院

请编写函数,将当天的总秒数转换成时间(时、分和秒数)。

函数原型

 

void ToHms(int *hour, int *minute, double *second, double total);

说明:hour、minute 和 second 分别为指示时、分和秒数的指针,total 为当天的总秒数。函数根据总秒数 total 计算时、分和秒数,分别保存至 hourminute 和 second 所指示的变量中。

裁判程序

 

#include <stdio.h> #include <math.h> void TimeOutput(int hour, int minute, double second); void ToHms(int *hour, int *minute, double *second, double total); int main() { int h, m; double s, t; scanf("%lg", &t); ToHms(&h, &m, &s, t); TimeOutput(h, m, s); return 0; } void TimeOutput(int hour, int minute, double second) { ...(略)... } /* 你提交的代码将被嵌在这里 */

输入样例

29405.5

输出样例

08:10:05.50
void ToHms(int *hour, int *minute, double *second, double total)
{
    int time=total;
    *hour=time/3600;
    *minute=time/60%60;
    *second=total-*hour*3600-*minute*60;
}

 

6-2 三整数排序(升序)

分数 10

全屏浏览题目

切换布局

作者 李祥

单位 湖北经济学院

请编写函数,对三个整数按升序排序。

函数原型

 

void IntSortAsc3(int *x, int *y, int *z);

说明:参数 x、y 和 z 为指示三个整型变量的指针,函数值对这三个整型变量进行排序,使 x、y 和 z 所指变量的值按由小到大的顺序排列。

裁判程序

 

#include <stdio.h> void IntSwap(int *x, int *y); void IntSortAsc3(int *x, int *y, int *z); int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); IntSortAsc3(&a, &b, &c); printf("%d %d %d\n", a, b, c); return 0; } void IntSwap(int *x, int *y) { ...(略)... } /* 你提交的代码将被嵌在这里 */

输入样例

15 -27 36

输出样例

-27 15 36

要求:调用前面作业中的 IntSwap 函数交换两个整数的值。


关联习题:交换整数。

void IntSortAsc3(int *x, int *y, int *z)
{
    if(*x>*y)
    {
        IntSwap( x,  y);
    }
    if(*x>*z)
    {
        IntSwap( x,  z);
    }
    if(*y>*z)
    {
        IntSwap( y, z);
    }
}

 

6-3 使用函数找出数组中的最大值

分数 20

全屏浏览题目

切换布局

作者 张泳

单位 浙大城市学院

本题要求实现一个找出整型数组中最大值的函数。

函数接口定义:

 

int FindArrayMax( int a[], int n );

其中a是用户传入的数组,n是数组a中元素的个数。函数返回数组a中的最大值。

裁判测试程序样例:

 

#include <stdio.h> #define MAXN 10 int FindArrayMax( int a[], int n ); int main() { int i, n; int a[MAXN]; scanf("%d", &n); for( i=0; i<n; i++ ){ scanf("%d", &a[i]); } printf("%d\n", FindArrayMax(a, n)); return 0; } /* 请在这里填写答案 */

输入样例:

4
20 78 99 -14

输出样例:

99
int FindArrayMax( int a[], int n )
{
    int m=a[0];
    for(int i=0;i<n;i++)
    {
        if(m<a[i])
        {
            m=a[i];
        }
    }
    return m;
}

 

6-4 指针做参数: 求解鸡兔同笼。

分数 20

全屏浏览题目

切换布局

作者 苑丽红

单位 长春理工大学

鸡兔同笼是中国古代的数学名题之一。 大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?这四句话的意思是:
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
本题要求编写函数,利用指针做参数求解鸡兔同笼问题。头和脚的数目从键盘输入。

函数接口定义:

 

void fun ( int h,int f,int *p,int *q );

其中h和f由主函数传入,代表头和脚的数目, (假定输入数据都合理)。 函数fun可求出鸡和兔的数目,并在主函数输出。

裁判测试程序样例:

 

在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> void fun ( int h,int f,int *p,int *q ); int main() { int h,f,x,y ; scanf("%d%d", &h, &f); fun (h ,f, &x,&y ); //x、y代表鸡和兔的数目 printf("cocks=%d,rabbits=%d", x,y); return 0; } /* 您填写的代码将嵌入这里,注意无需写主函数,只需完成fun的设计 */

输入样例:

35 94

输出样例:

cocks=23,rabbits=12
void  fun ( int h,int f,int *p,int *q )
{
    for(int i=0;i<=h;i++)
    {
        for(int j=0;j<=f;j++)
        {
            if((i+j==h)&&(2*i+4*j==f))
            {
                *p=i;
                *q=j;
            }
        }
    }
}

 

6-5 指针做参数: 求两数的和、积、平均值。

分数 10

全屏浏览题目

切换布局

作者 苑丽红

单位 长春理工大学

本题求两整数的和、积、平均值。要求用原型是 void fun(int x, int y, int *p, int *q,float *s) 的函数来实现。

函数接口定义:

 

void fun(int x, int y, int *p, int *q,float *s) ;

其中x和y是需要计算的两个数,p、 q、s指向的变量保存计算结果。

裁判测试程序样例:

 

在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> void fun(int x, int y, int *p, int *q, float *s) ; int main() { int x,y,sum,product; float aver; scanf("%d%d", &x, &y); fun (x ,y, &sum,&product,&aver ); printf("%d,%d,%.1f", sum,product,aver); return 0; } /* 请在这里填写答案 */

输入样例:

31 2

输出样例:

33,62,16.5
void fun(int x, int y, int *p, int *q,float *s) 
{
    *p=x+y;
    *q=x*y;
    *s=(double)(x+y)/2;
}

 

6-6 实现两数据值的交换

分数 10

全屏浏览题目

切换布局

作者 王宇

单位 集美大学诚毅学院

本题要求实现一个函数,该函数完成主调函数传递的数据实现值的交换。

函数接口定义:

 

在这里描述函数接口。例如: void swap( int *x,int *y );

在这里解释接口参数。例如:其中 x 和 y都是用户传入的参数。 当x的间访值大于y的间访值; x与y指向空间的值发生交换。

裁判测试程序样例:

 

在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> void swap( int *x,int *y ); int main() { int a,b; scanf("%d%d",&a,&b); printf("%d %d\n",a,b); swap( &a,&b ); //如果a>b,则交换,否则不交换 printf("%d %d\n",a,b); return 0; } /* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

2 1

输出样例:

在这里给出相应的输出。例如:

2 1
1 2

在这里给出一组输入。例如:

1 2

输出样例:

在这里给出相应的输出。例如:

1 2
1 2
void swap( int *x,int *y )
{
    if(*x>*y)
    {
        int temp=*y;
        *y=*x;
        *x=temp;
    }
}

 

6-7 引用作函数形参交换两个整数

分数 10

全屏浏览题目

切换布局

作者 李廷元

单位 中国民用航空飞行学院

设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。

裁判测试程序样例:

 

#include <iostream> using namespace std; /* 请在这里填写答案 */ int main() { int a, b; cin >> a >> b; Swap(a, b); cout << a << " " << b << endl; return 0; }

输入样例:

3 5

输出样例:

5 3
void Swap(int &a,int &b)
{
    int temp=b;
    b=a;
    a=temp;
}

 

6-8 买一送一(引用传参、引用作为函数返回值)

分数 10

全屏浏览题目

切换布局

作者 徐婉珍

单位 广东东软学院

某商店开展买一送一活动,购买两件商品时,只需支付价格较高的商品的金额。要求程序在输入两个商品的价格后,输出所应支付的金额,请根据裁判程序编写函数cut,将代码补充完整。

裁判测试程序样例:

 

#include <iostream> using namespace std; //请在此处添加代码 int main(){ float a,b; cin>>a>>b; cut(a,b)=0; cout<<"to pay:"<<a+b<<endl; return 0; }

输入样例:

在这里给出一组输入。例如:

239 180

输出样例:

在这里给出相应的输出。例如:

239
float &cut(float &a,float &b)
{
    if(a>b)
    {
        return b;
    }
    else
    {
        return a;
    }
}

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,结构体是一种用户自定义的数据类型,可以包含不同类型的成员变量和成员函数。结构体函数传参指的是将结构体作为参数传递给函数。 结构体函数传参有以下几种方式: 1. 值传递:将结构体作为参数传递给函数时,会创建一个结构体的副本,并将副本传递给函数。在函数内部对结构体的修改不会影响原始结构体的值。 2. 引用传递:使用引用作为函数参数,可以直接操作原始结构体的值,而不需要创建副本。在函数内部对结构体的修改会影响原始结构体的值。 3. 指针传递:使用指针作为函数参数,可以通过指针来访问和修改结构体的成员。在函数内部对结构体的修改会影响原始结构体的值。 下面是一个示例代码,演示了以上三种方式: ```cpp #include <iostream> using namespace std; struct Point { int x; int y; }; // 值传递 void funcByValue(Point p) { p.x = 10; p.y = 20; } // 引用传递 void funcByReference(Point& p) { p.x = 10; p.y = 20; } // 指针传递 void funcByPointer(Point* p) { p->x = 10; p->y = 20; } int main() { Point p1 = {1, 2}; Point p2 = {3, 4}; Point p3 = {5, 6}; funcByValue(p1); cout << "p1 after funcByValue: (" << p1.x << ", " << p1.y << ")" << endl; funcByReference(p2); cout << "p2 after funcByReference: (" << p2.x << ", " << p2.y << ")" << endl; funcByPointer(&p3); cout << "p3 after funcByPointer: (" << p3.x << ", " << p3.y << ")" << endl; return 0; } ``` 输出结果为: ``` p1 after funcByValue: (1, 2) p2 after funcByReference: (10, 20) p3 after funcByPointer: (10, 20) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值