| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 326 人关注过本帖
标题:函数调用问题
只看楼主 加入收藏
a187326700
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-2-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
函数调用问题
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define    LEN    20

void transform(double *source, double *target, int n, double (*fp)(double));

int    main(void)
{
    double    source[LEN];//源数组
    double    target[LEN];//目标数组
    double    num;
    transform(source, target, LEN, sin(num)); //这里提示 错误
    return    0;
}
void transform(double sou[LEN], double tar[LEN], int LEN, double sin(double num))
{
    int i;
    srand((unsigned)time(NULL));
    for(i = 0; i < LEN; i++)        //为源数组赋值
    {
        sou[i] = rand() % 100 +1;
        printf("%.2f  ", sou[i]);
    }
    for(i = 0; i < LEN; i++)        //把源数组值求正玄值赋值给目标数组
    {
        tar[i] = sin(sou[i]);
        printf("%.2f  ", tar[i]);
    }        
}

[Error] cannot convert 'double' to 'double (*)(double)' for argument '4' to 'void transform(double*, double*, int, double (*)(double))'
搜索更多相关主题的帖子: double int void 数组 include 
2021-07-11 05:42
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:71
帖 子:874
专家分:4485
注 册:2010-3-16
收藏
得分:7 
程序代码:
int main(void)
{
    double    source[LEN];//源数组
    double    target[LEN];//目标数组
    double    num;    
    transform(source, target, LEN, &sin); //这里提示 错误
    return    0;
}
void transform(double sou[], double tar[], int LEN, double (*fp)(double))
{
    int i;
    srand((unsigned)time(NULL));
    for(i = 0; i < LEN; i++)        //为源数组赋值
    {
        sou[i] = rand() % 100 +1;
        printf("%.2f  ", sou[i]);
    }
    printf("\n");
    for(i = 0; i < LEN; i++)        //把源数组值求正玄值赋值给目标数组
    {
        tar[i] = fp(sou[i]*3.14159265/180);//库函数 double sin(double x) 参数是弧度角。
        printf("%.2f  ", tar[i]);
    }        
}

2021-07-11 11:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:418
帖 子:8024
专家分:47205
注 册:2011-1-18
收藏
得分:7 
此外,
从 transform 这个名字来看,不应该将 给sou赋值 的代码放入其中
2021-07-11 23:41
a187326700
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-2-26
收藏
得分:0 
怎么改才能编译通过呀,二楼的代码也编译不过呀。。。
图片附件: 游客没有浏览图片的权限,请 登录注册



以上是改成二楼的代码提示的信息
2021-07-12 10:39
zbjzbj
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:52
帖 子:618
专家分:3001
注 册:2011-4-22
收藏
得分:7 
#define    LEN    20

void transform(double sou[LEN], double tar[LEN], int LEN, double sin(double num))

LEN 冲突
2021-07-12 12:01
a187326700
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-2-26
收藏
得分:0 
回复 5楼 zbjzbj
能说明白点吗,改完能编译通过了

但还是不太明白原因

[此贴子已经被作者于2021-7-12 12:35编辑过]

2021-07-12 12:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:418
帖 子:8024
专家分:47205
注 册:2011-1-18
收藏
得分:0 
按照我的猜测(只是“猜测”,因为题主没有给出“题目要求”),应该是

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

void transform( const double* restrict src, double* restrict dst, size_t n, double(*fp)(double) )
{
    for( size_t i=0; i!=n; ++i )
        dst[i] = fp( src[i] );
}

int main( void )
{
    enum { LEN = 20 };
    double src[LEN];
    srand( (unsigned)time(NULL) );
    for( size_t i=0; i!=LEN; ++i )
        src[i] = (int)(rand()/(RAND_MAX+1.)*100) + 1;

    double dst[LEN];
    transform( src, dst, LEN, &sin );

    for( size_t i=0; i!=LEN; ++i )
        printf( "%5.2f%c", src[i], " \n"[i+1==LEN] );
    for( size_t i=0; i!=LEN; ++i )
        printf( "%+5.2f%c", dst[i], " \n"[i+1==LEN] );
}


一种可能的输出是
84.00 42.00 3.00 34.00 9.00 4.00 25.00 78.00 18.00 17.00 61.00 54.00 22.00 68.00 48.00 93.00 39.00 18.00 4.00 95.00
+0.73 -0.92 +0.14 +0.53 +0.41 -0.76 -0.13 +0.51 -0.75 -0.96 -0.97 -0.56 -0.01 -0.90 -0.77 -0.95 +0.96 -0.75 -0.76 +0.68


[此贴子已经被作者于2021-7-12 13:15编辑过]

2021-07-12 13:10
快速回复:函数调用问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054191 second(s), 9 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved