为什么这段代码无法调用子函数void sum(float a,float b) { float sum; sum=a+b; printf(“%d+%d=%d”,a,b,sum); } void sub(float a,float b ) { float sub; sub=a-b; printf(“%d+%d=%d”,a,b,sub); } void mulit (float a,float b ) { float mulit ; sub=a-b; printf(“%d+%d=%d”,a,b,mulit ); } void divide(float a,float b ) { float divide ; sub=a-b; printf(“%d+%d=%d”,a,b,divide); } int main() { int i; float num1,num2; printf(“四则计算器\n”); printf(“*******************\n”); printf(“1.+. 2.-”\n); printf (“请选择你想进行的运算\n”); scanf(“%d”,&i); printf(“输入你想计算的数字\n”); printf(“第一个数字: ” ); scanf(“%lf”,&num1); printf (“第二个数字:” ); scanf(“%lf”,&num2); if(i==1)sum(num1,num2); if(i==2)sub(num1,num2); if(i==3)mulit(num1,num2); if(i==4)divide(num1,num2); return 0; }
时间: 2024-01-24 21:01:39 浏览: 71
这段代码无法调用子函数的原因可能是因为函数定义中的参数类型与实际参数类型不匹配。在函数定义中,参数类型应该为 float,而在函数调用时却使用了 %d 进行格式化输出,这会导致编译错误。应该将 printf 中的 %d 改为 %f,即可正确输出结果。另外,在运算函数中的变量名与函数名不匹配也会导致错误,需要将变量名改为与函数名相同的名称。修复这些问题之后,代码应该可以正确调用子函数了。
相关问题
void sum(float a,float b) { float sum; sum=a+b; printf(“%d+%d=%d”,a,b,sum); } void sub(float a,float b ) { float sub; sub=a-b; printf(“%d+%d=%d”,a,b,sub); } void mulit (float a,float b ) { float mulit ; sub=a-b; printf(“%d+%d=%d”,a,b,mulit ); } void divide(float a,float b ) { float divide ; sub=a-b; printf(“%d+%d=%d”,a,b,divide); } int main() { int i; float num1,num2; printf(“四则计算器\n”); printf(“*******************\n”); printf(“1.+. 2.-”\n); printf (“请选择你想进行的运算\n”); scanf(“%d”,&i); printf(“输入你想计算的数字\n”); printf(“第一个数字: ” ); scanf(“%lf”,&num1); printf (“第二个数字:” ); scanf(“%lf”,&num2); if(i==1)sum(num1,num2); if(i==2)sub(num1,num2); if(i==3)mulit(num1,num2); if(i==4)divide(num1,num2); return 0; }
这段代码是一个简单的四则运算器,包含加减乘除四个基本运算。在 main 函数中,首先让用户选择想要进行的运算,然后输入两个数字,根据用户的选择调用相应的函数进行计算并输出结果。其中四个函数分别实现了加、减、乘、除四种运算,通过传入两个参数进行计算并输出结果。值得注意的是,这段代码中的变量类型应该为 float 而不是 int,因为输入的数字是小数而不是整数。
#include <stdio.h> void main() { int a[5][3],i,j; float b[5],c[3],sum; printf("input scores: n"); for(i=l;i<=5;i++) { for(j=l;j<=3;j++) scanf("ed",&a[i][j]); } for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) sum=sum+a[i][j]; b[i]=sum/3.0; } for(j=0;j<3;j++) { sum=0; for(i=0;i<5;i++) sum=sum+a[i][j]; c[jl=sum/5.0; } for(i=0;i<5;i++) printf("No.%d:%8.2f\n",i+1,b[i]); printf("English:%8.2f\nMath: %8.2f\nC languag: %8.2f",c[0],c[1],c[2]); }
这段代码有一些问题,可能会导致程序出错:
1. `void main()` 应该改为 `int main()`。
2. 第一层循环应该从 `i=0` 开始,而不是 `i=l`。
3. `scanf("ed",&a[i][j]);` 中的格式控制符应该是 `%d`,而不是 `ed`。
4. 在计算每个学生的平均分时,第二层循环应该从 `j=0` 开始,而不是 `j=l`。
5. 在计算每门课程的平均分时,第一层循环应该从 `i=0` 开始,而不是 `i=l`。
6. 在计算每门课程的平均分时,第二层循环中的变量 `j` 和数组 `c` 的下标应该对应,即 `c[j]`,而不是 `c[jl]`。
7. 在调用 `printf` 输出每个学生的平均分时,应该将格式控制符 `%8.2f` 改为 `%6.2f`,因为最多只有 6 个字符。
8. 在调用 `printf` 输出每门课程的平均分时,应该在每个字符串后面加上一个换行符 `\n`。
下面是修改后的代码:
```c
#include <stdio.h>
int main() {
int a[5][3], i, j;
float b[5], c[3], sum;
printf("Input scores:\n");
for (i = 0; i < 5; i++) {
for (j = 0; j < 3; j++) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 5; i++) {
sum = 0;
for (j = 0; j < 3; j++) {
sum += a[i][j];
}
b[i] = sum / 3.0;
}
for (j = 0; j < 3; j++) {
sum = 0;
for (i = 0; i < 5; i++) {
sum += a[i][j];
}
c[j] = sum / 5.0;
}
for (i = 0; i < 5; i++) {
printf("No.%d: %6.2f\n", i + 1, b[i]);
}
printf("English: %6.2f\nMath: %6.2f\nC language: %6.2f\n", c[0], c[1], c[2]);
return 0;
}
```
阅读全文