求改错

乐猪 2019-05-21 11:41:37
#include <stdio.h> void main() { float a,b; float add_result,sub_result; scanf("%f%f",&a,&b); add_result=calculate(a,b,&sub_result); printf("a*a+b*b=%d,a*a-b*b=%d\n",add_result,sub_result); } calculate(float a,float b,float *sub) { float *temp; *sub=a*a-b*b; *temp=a*a+b*b; return *temp; }
...全文
130 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-05-22
  • 打赏
  • 举报
回复
#include <stdio.h>

float calculate(float a,float b,float *sub);

void main()
{
float a,b;
float add_result,sub_result;
scanf("%f%f",&a,&b);
add_result = calculate(a,b,&sub_result);
//printf("a*a+b*b=%d,a*a-b*b=%d\n",add_result,sub_result);
printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);
}

float calculate(float a,float b,float *sub)
{
float temp;

*sub=a*a-b*b;
temp=a*a+b*b;
return temp;
}


供参考~
CaptainXue 2019-05-22
  • 打赏
  • 举报
回复
引用 4 楼 weixin_43596402 的回复:
[quote=引用 2 楼 袁君元的回复:]你的程序存在以下问题: 1、你的main函数的写法在有的编译器中有的会报错,建议这样写:

int main(){

return 0;
}
2、你的printf函数中应该是%f的格式控制; 3、你的自定义函数calculate的实现写在调用该函数的后面,所以需要在调用之间声明一下该函数;或者你直接把calculate的实现写在main函数之前,就不需要再声明了! 4、你的自定义函数calculate实现时,应该有函数类型吧!这个是自定义函数实现的基本格式——函数类型 函数名(参数列表) 5、根据你的程序,可以看出你的自定义函数calculate要计算出两个结果,而我们的自定义函数只能返回一个值。可以采取下面的方式: 用两个全局变量存储calculate函数计算的两个结果,这样我们就不需要返回值,直接在main函数中输出这两个全局变量的值即可,此时的calculate函数类型为void型。(空型不需要返回值,全局变量的寿命一直到程序的结束为止) 有关自定义函数的使用,可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036 附上修改后的代码,错误的地方有标注:有什么不懂再问哦!

#include <stdio.h>
float add_result,sub_result;//定义为全局变量
void calculate(float a,float b);//函数必须先声明
int main() {
	float a,b;
	scanf("%f%f",&a,&b);
	calculate(a,b);
	printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f不是%d 
	return 0;
}
void calculate(float a,float b) {//函数类型必须有,这里是void型
	add_result=a*a+b*b;
	sub_result=a*a-b*b;
}
其实这个代码是书上一道改错题,我搞不懂的是那两个指针,其它的错误,我有的注意到了有的没注意。(最好还是不要用全局变量)[/quote] sub指针指向的是sub_result的地址,*sub=a*a-b*b;是直接将计算的结果存储在sub指向的sub_result所在的地址里面,这样即使calculate函数调用完成,得到的sub_result值还是存在。temp指针是一个地址变量,它存储的是a*a+b*b的值,当运行结构后,将temp这个地址的值返回给add_result。 修改后的程序如下:

#include <stdio.h>
int main() {
	float a,b;
	float add_result,sub_result;
	float calculate(float a,float b,float *sub);//函数声明 
	scanf("%f%f",&a,&b);
	add_result=calculate(a,b,&sub_result);
	printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f而不是%d,因为定义的是float型
return 0;
}

float calculate(float a,float b,float *sub) {//函数类型float 
	float *temp;
	*sub=a*a-b*b;
	*temp=a*a+b*b;
	return *temp;
}
2019别做废物 2019-05-22
  • 打赏
  • 举报
回复
引用 5 楼 weixin_43596402 的回复:
[quote=引用 3 楼 2019别做废物的回复:]#include <stdio.h> float calculate(float a, float b, float *sub); void main() { float a, b; float add_result, sub_result; scanf("%f%f", &a, &b); add_result = calculate(a, b, &sub_result); printf("a*a+b*b=%f,a*a-b*b=%f\n", add_result, sub_result); } float calculate(float a, float b, float *sub) { float temp ; *sub = a * a - b * b; temp = a * a + b * b; return temp; } 如果float *temp然后直接运算赋值的话会报错 应该给temp一个初值然这个指针指向某一个变量再使用
我起初看不懂的也是那个指针,又不知道怎么改。(这道题考的也是指针)谢谢你。[/quote] 那就这样 #include <stdio.h> float calculate(float a, float b, float *sub); void main() { float a, b; float add_result, sub_result; scanf("%f%f", &a, &b); add_result = calculate(a, b, &sub_result); printf("a*a+b*b=%f,a*a-b*b=%f\n", add_result, sub_result); } float calculate(float a,float b,float *sub) { float num; float *temp = # *sub=a*a-b*b; *temp=a*a+b*b; return *temp; } 不只是指针的错误 这道题如果不设定函数类型的话 因为你要返回值是float型 所以会出现很奇怪的错误 甚至一些编译器中直接报错 VS2010的.c文件中这种情况是可以编译过的 会有一个警告 好像是因为用的c99标准吧 具体原因记不太清了
csucxy 2019-05-22
  • 打赏
  • 举报
回复
#include <stdio.h>

float calculate(float a, float b, float* sub);

//void main()
int main(void)
{
float a, b;
float add_result, sub_result;
scanf("%f%f", &a, &b);
add_result = calculate(a, b, &sub_result);
//printf("a*a+b*b=%d,a*a-b*b=%d\n", add_result, sub_result);
printf("a*a+b*b=%f,a*a-b*b=%f\n", add_result, sub_result);

return 0;
}

//calculate(float a, float b, float* sub)
float calculate(float a, float b, float* sub)
{
//float* temp;
float temp;
*sub = a * a - b * b;
//*temp = a * a + b * b;
temp = a * a + b * b;
//return *temp;
return temp;
}
乐猪 2019-05-22
  • 打赏
  • 举报
回复
引用 3 楼 2019别做废物的回复:
#include <stdio.h>
float calculate(float a, float b, float *sub);
void main()
{
float a, b;
float add_result, sub_result;
scanf("%f%f", &a, &b);
add_result = calculate(a, b, &sub_result);
printf("a*a+b*b=%f,a*a-b*b=%f\n", add_result, sub_result);
}

float calculate(float a, float b, float *sub)
{

float temp ;
*sub = a * a - b * b;
temp = a * a + b * b;
return temp;
}

如果float *temp然后直接运算赋值的话会报错 应该给temp一个初值然这个指针指向某一个变量再使用
我起初看不懂的也是那个指针,又不知道怎么改。(这道题考的也是指针)谢谢你。
乐猪 2019-05-22
  • 打赏
  • 举报
回复
引用 2 楼 袁君元的回复:
你的程序存在以下问题:
1、你的main函数的写法在有的编译器中有的会报错,建议这样写:

int main(){

return 0;
}

2、你的printf函数中应该是%f的格式控制;
3、你的自定义函数calculate的实现写在调用该函数的后面,所以需要在调用之间声明一下该函数;或者你直接把calculate的实现写在main函数之前,就不需要再声明了!
4、你的自定义函数calculate实现时,应该有函数类型吧!这个是自定义函数实现的基本格式——函数类型 函数名(参数列表)
5、根据你的程序,可以看出你的自定义函数calculate要计算出两个结果,而我们的自定义函数只能返回一个值。可以采取下面的方式:
用两个全局变量存储calculate函数计算的两个结果,这样我们就不需要返回值,直接在main函数中输出这两个全局变量的值即可,此时的calculate函数类型为void型。(空型不需要返回值,全局变量的寿命一直到程序的结束为止)
有关自定义函数的使用,可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036
附上修改后的代码,错误的地方有标注:有什么不懂再问哦!

#include <stdio.h>
float add_result,sub_result;//定义为全局变量
void calculate(float a,float b);//函数必须先声明
int main() {
float a,b;
scanf("%f%f",&a,&b);
calculate(a,b);
printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f不是%d
return 0;
}
void calculate(float a,float b) {//函数类型必须有,这里是void型
add_result=a*a+b*b;
sub_result=a*a-b*b;
}
其实这个代码是书上一道改错题,我搞不懂的是那两个指针,其它的错误,我有的注意到了有的没注意。(最好还是不要用全局变量)
CaptainXue 2019-05-22
  • 打赏
  • 举报
回复
你的子函数实现是在调用之后,肯定要在调用之前声明子函数,至于你写在main中,还是main前面都可以的
乐猪 2019-05-22
  • 打赏
  • 举报
回复
引用 8 楼 袁君元的回复:
[quote=引用 4 楼 weixin_43596402 的回复:] [quote=引用 2 楼 袁君元的回复:]你的程序存在以下问题: 1、你的main函数的写法在有的编译器中有的会报错,建议这样写:

int main(){

return 0;
}
2、你的printf函数中应该是%f的格式控制; 3、你的自定义函数calculate的实现写在调用该函数的后面,所以需要在调用之间声明一下该函数;或者你直接把calculate的实现写在main函数之前,就不需要再声明了! 4、你的自定义函数calculate实现时,应该有函数类型吧!这个是自定义函数实现的基本格式——函数类型 函数名(参数列表) 5、根据你的程序,可以看出你的自定义函数calculate要计算出两个结果,而我们的自定义函数只能返回一个值。可以采取下面的方式: 用两个全局变量存储calculate函数计算的两个结果,这样我们就不需要返回值,直接在main函数中输出这两个全局变量的值即可,此时的calculate函数类型为void型。(空型不需要返回值,全局变量的寿命一直到程序的结束为止) 有关自定义函数的使用,可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036 附上修改后的代码,错误的地方有标注:有什么不懂再问哦!

#include <stdio.h>
float add_result,sub_result;//定义为全局变量
void calculate(float a,float b);//函数必须先声明
int main() {
	float a,b;
	scanf("%f%f",&a,&b);
	calculate(a,b);
	printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f不是%d 
	return 0;
}
void calculate(float a,float b) {//函数类型必须有,这里是void型
	add_result=a*a+b*b;
	sub_result=a*a-b*b;
}
其实这个代码是书上一道改错题,我搞不懂的是那两个指针,其它的错误,我有的注意到了有的没注意。(最好还是不要用全局变量)[/quote] sub指针指向的是sub_result的地址,*sub=a*a-b*b;是直接将计算的结果存储在sub指向的sub_result所在的地址里面,这样即使calculate函数调用完成,得到的sub_result值还是存在。temp指针是一个地址变量,它存储的是a*a+b*b的值,当运行结构后,将temp这个地址的值返回给add_result。 修改后的程序如下:

#include <stdio.h>
int main() {
	float a,b;
	float add_result,sub_result;
	float calculate(float a,float b,float *sub);//函数声明 
	scanf("%f%f",&a,&b);
	add_result=calculate(a,b,&sub_result);
	printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f而不是%d,因为定义的是float型
return 0;
}

float calculate(float a,float b,float *sub) {//函数类型float 
	float *temp;
	*sub=a*a-b*b;
	*temp=a*a+b*b;
	return *temp;
}
[/quote] 主函数里不是不能声明子函数的吗?*temp返回的是地址内储存的值啊,我一直以为它是先返回指针再去访问它指向的变量的值,但函数结束后指针变量就没有了,而且它指向的地址也不知道。。。感觉我指针学的有点云里雾里的。。。
636f6c696e 2019-05-21
  • 打赏
  • 举报
回复
编译都编不过吧 1. 没有在main函数之前声明calculate。 2. calculate函数没有返回值类型 3. main函数printf输出用%f而不是%d
2019别做废物 2019-05-21
  • 打赏
  • 举报
回复
#include <stdio.h>
float calculate(float a, float b, float *sub);
void main()
{
float a, b;
float add_result, sub_result;
scanf("%f%f", &a, &b);
add_result = calculate(a, b, &sub_result);
printf("a*a+b*b=%f,a*a-b*b=%f\n", add_result, sub_result);
}

float calculate(float a, float b, float *sub)
{

float temp ;
*sub = a * a - b * b;
temp = a * a + b * b;
return temp;
}

如果float *temp然后直接运算赋值的话会报错 应该给temp一个初值然这个指针指向某一个变量再使用
CaptainXue 2019-05-21
  • 打赏
  • 举报
回复
你的程序存在以下问题:
1、你的main函数的写法在有的编译器中有的会报错,建议这样写:

int main(){

return 0;
}

2、你的printf函数中应该是%f的格式控制;
3、你的自定义函数calculate的实现写在调用该函数的后面,所以需要在调用之间声明一下该函数;或者你直接把calculate的实现写在main函数之前,就不需要再声明了!
4、你的自定义函数calculate实现时,应该有函数类型吧!这个是自定义函数实现的基本格式——函数类型 函数名(参数列表)
5、根据你的程序,可以看出你的自定义函数calculate要计算出两个结果,而我们的自定义函数只能返回一个值。可以采取下面的方式:
用两个全局变量存储calculate函数计算的两个结果,这样我们就不需要返回值,直接在main函数中输出这两个全局变量的值即可,此时的calculate函数类型为void型。(空型不需要返回值,全局变量的寿命一直到程序的结束为止)
有关自定义函数的使用,可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036
附上修改后的代码,错误的地方有标注:有什么不懂再问哦!

#include <stdio.h>
float add_result,sub_result;//定义为全局变量
void calculate(float a,float b);//函数必须先声明
int main() {
float a,b;
scanf("%f%f",&a,&b);
calculate(a,b);
printf("a*a+b*b=%f,a*a-b*b=%f\n",add_result,sub_result);//这里是%f不是%d
return 0;
}
void calculate(float a,float b) {//函数类型必须有,这里是void型
add_result=a*a+b*b;
sub_result=a*a-b*b;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧