开发者社区> 问答> 正文

大神们!这个程序在没有错误,能运行,为什么一到蓝桥杯提交时间就会显示编译错误的?

评测结果 编译出错
得分 0
CPU使用 编译出错
内存使用 编译出错
试题名称 算法训练 P1103
语言 C
源代码

#include
#include
#include
struct fushu{
double real;
double i;
};
fushu* add(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real + b.real;
ret->i = a.i + b.i;
return ret;
}
fushu* minus(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real - b.real;
ret->i = a.i - b.i;
return ret;
}
fushu* multiply(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real*b.real - a.i*b.i;
ret->i = a.real*b.i + a.i*b.real;
return ret;
}
fushu* divide(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = (a.real*b.real + a.i*b.i)/(b.real*b.real + b.i*b.i);
ret->i = (a.i*b.real - a.real*b.i)/(b.real*b.real + b.i*b.i);
return ret;
}
int main()
{

char sign;
fushu m;
fushu n;
scanf("%c%lf%lf%lf%lf",&sign,&m.real,&m.i,&n.real,&n.i);
if( sign == '+' ){
add(m,n);
printf("%.2lf+%.2lfi\n",add(m,n)->real,add(m,n)->i);
}
if( sign == '-' ){
minus(m,n);
printf("%.2lf+%.2lfi\n",minus(m,n)->real,minus(m,n)->i);
}
if( sign == '*' ){
multiply(m,n);
printf("%.2lf+%.2lfi\n",multiply(m,n)->real,multiply(m,n)->i);
}
if( sign == '/' ){
divide(m,n);
printf("%.2lf+%.2lfi\n",divide(m,n)->real,divide(m,n)->i);
}
return 0;
}
编译信息

code.c:8:2: error: unknown type name 'fushu' 
fushu* add(fushu a, fushu b){ 
^ 
code.c:8:13: error: unknown type name 'fushu' 
fushu* add(fushu a, fushu b){ 
^ 
code.c:8:22: error: unknown type name 'fushu' 
fushu* add(fushu a, fushu b){ 
^ 
code.c:14:2: error: unknown type name 'fushu' 
fushu* minus(fushu a, fushu b){ 
^ 
code.c:14:15: error: unknown type name 'fushu' 
fushu* minus(fushu a, fushu b){ 
^ 
code.c:14:24: error: unknown type name 'fushu' 
fushu* minus(fushu a, fushu b){ 
^ 
code.c:20:2: error: unknown type name 'fushu' 
fushu* multiply(fushu a, fushu b){ 
^ 
code.c:20:18: error: unknown type name 'fushu' 
fushu* multiply(fushu a, fushu b){ 
^ 
code.c:20:27: error: unknown type name 'fushu' 
fushu* multiply(fushu a, fushu b){ 
^ 
code.c:26:2: error: unknown type name 'fushu' 
fushu* divide(fushu a, fushu b){ 
^ 
code.c:26:16: error: unknown type name 'fushu' 
fushu* divide(fushu a, fushu b){ 
^ 
code.c:26:25: error: unknown type name 'fushu' 
fushu* divide(fushu a, fushu b){ 
^ 
code.c: In function 'main': 
code.c:35:2: error: unknown type name 'fushu' 
fushu m; 
^ 
code.c:36:2: error: unknown type name 'fushu' 
fushu n; 
^ 
code.c:37:33: error: request for member 'real' in something not a structure or union 
scanf("%c%lf%lf%
详细记录

评测点序号 评测结果 得分 CPU使用 内存使用 下载评测数据
1 编译出错 0.00 0ms 0B 输入 输出
2 编译出错 0.00 0ms 0B VIP特权
3 编译出错 0.00 0ms 0B VIP特权
4 编译出错 0.00 0ms 0B VIP特权

展开
收起
a123456678 2016-03-24 10:15:46 4581 0
1 条回答
写回答
取消 提交回答
  • 1、如果是c语言,必须用struct fusht_t 来定义结构体变量,如果是c++,可以省略struct;
    或者这样定义:
    
     typedef struct {
        double real;
        double i;
    }fushu;
    2、你的程序有一些不合理的地方,每一次调用函数都会动态申请了一个结构体变量,但都没有释放。
    修改如下,供参考:
    
     #include <stdio.h>
    #include <stdlib.h>
    typedef struct {
        double real;
        double i;
    }fushu;
    
    fushu* add(fushu a, fushu b){
        fushu* ret = (fushu*)malloc(sizeof(fushu));
        ret->real = a.real + b.real;
        ret->i = a.i + b.i;
        return ret;
    }
    fushu* minus(fushu a, fushu b){
        fushu* ret = (fushu*)malloc(sizeof(fushu));
        ret->real = a.real - b.real;
        ret->i = a.i - b.i;
        return ret;
    }
    fushu* multiply(fushu a, fushu b){
        fushu* ret = (fushu*)malloc(sizeof(fushu));
        ret->real = a.real*b.real - a.i*b.i;
        ret->i = a.real*b.i + a.i*b.real;
        return ret;
    }
    fushu* divide(fushu a, fushu b){
        fushu* ret = (fushu*)malloc(sizeof(fushu));
        ret->real = (a.real*b.real + a.i*b.i)/(b.real*b.real + b.i*b.i);
        ret->i = (a.i*b.real - a.real*b.i)/(b.real*b.real + b.i*b.i);
        return ret;
    }
    int main()
    {
    
        char sign;
        fushu m;
        fushu n;
        fushu *p=NULL;
        scanf("%c%lf%lf%lf%lf",&sign,&m.real,&m.i,&n.real,&n.i);
        if( sign == '+' ){
            p=add(m,n);
            printf("%.2lf+%.2lfi\n",p->real,p->i);
        }
        if( sign == '-' ){
            p=minus(m,n);
            printf("%.2lf+%.2lfi\n",p->real,p->i);
        }
        if( sign == '*' ){
            p=multiply(m,n);
            printf("%.2lf+%.2lfi\n",p->real,p->i);
        }
        if( sign == '/' ){
            p=divide(m,n);
            printf("%.2lf+%.2lfi\n",p->real,p->i);
        }
        if(p) delete p;
    
        return 0;
    }
    
    2019-07-17 19:12:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载