Arrays 试图在一个for循环中使用多个条件,但只执行两个
我想知道是否有人能帮助我做错事 该程序的思想是获取代表年薪的10个用户输入值,并输出在所述工资的纳税范围内所欠的总税款。所有年薪低于2万美元的员工需缴纳10%的税费,2万至5万美元的员工需缴纳20%的税费,5万至10万美元的员工需缴纳30%的税费,10万美元以上的员工需缴纳40%的税费。然而,当我为每个假设的税级输入测试工资时,只有描述工资低于20000美元以及介于20000美元和50000美元之间的工资才能正确执行。其余的人似乎默认20%的税率,即使我输入的工资是10万美元Arrays 试图在一个for循环中使用多个条件,但只执行两个,arrays,c,for-loop,if-statement,Arrays,C,For Loop,If Statement,我想知道是否有人能帮助我做错事 该程序的思想是获取代表年薪的10个用户输入值,并输出在所述工资的纳税范围内所欠的总税款。所有年薪低于2万美元的员工需缴纳10%的税费,2万至5万美元的员工需缴纳20%的税费,5万至10万美元的员工需缴纳30%的税费,10万美元以上的员工需缴纳40%的税费。然而,当我为每个假设的税级输入测试工资时,只有描述工资低于20000美元以及介于20000美元和50000美元之间的工资才能正确执行。其余的人似乎默认20%的税率,即使我输入的工资是10万美元 #include
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int salaryBase [] = {20000, 50000, 100000};
float taxBase [] = {0.10, 0.20, 0.30, 0.40};
int annualSalaries [11];
float taxesToPay [11];
for (int i=0;i<10;i++)
{
printf("Enter annual salary\n");
scanf("%d", &annualSalaries[i]);
}
for (int n=0;n<10;n++)
{
if(annualSalaries[n]<=salaryBase[0])
{
taxesToPay[n]=annualSalaries[n]*taxBase[0];
}
else if(salaryBase[0]<annualSalaries[n]<=salaryBase[1])
{
taxesToPay[n]=annualSalaries[n]*taxBase[1];
}
else if(salaryBase[1]<annualSalaries[n]<=salaryBase[2])
{
taxesToPay[n]=annualSalaries[n]*taxBase[2];
}
else if(annualSalaries[n]>salaryBase[2])
{
taxesToPay[n]=annualSalaries[n]*taxBase[3];
}
}
printf("SALARY TAXES\n");
for (int g=0;g<10;g++)
{
printf("$%d $%.2f\n", annualSalaries[g], taxesToPay[g]);
}
return 0;
}
#包括
#包括
内部主(空){
国际工资基数[]={20000,50000,100000};
浮动税基[]={0.10,0.20,0.30,0.40};
国际年报[11];
浮动税停止日[11];
对于(int i=0;i如注释所示,您不能说aasalaryBase[0]OT:为了便于可读性和理解(对于我们人类来说,编译器不关心)请始终缩进代码。在每个左大括号“{”之后缩进。在每个右大括号“}”之前取消缩进。建议每个缩进级别为4个空格。注意:缩进宽度较小(例如2个空格)使用可变宽度fontsC时将“丢失”。fontsC不支持链接条件。C不遵循经典的算术约定。salaryBase[0]OT:为了便于可读性和理解(对于我们人类,编译器不关心),请一致地缩进代码。在每个大括号后缩进'{.Unindent在每个右大括号“}”之前。建议每个缩进级别为4个空格。注意:使用可变宽度字体时,较小的缩进宽度(例如2个空格)将“丢失”:参考:float taxBase[]={0.10,0.20,0.30,0.40}
将double
值转换为float
值。这不是一个好主意,建议:float taxBase[]={0.10f,0.20f,0.30f,0.40f};
注意值后面的f
,这使得它们float
值为(j=0;j
根据int
的大小,这将循环12或24次。建议:for(j=0;j
这将循环3次关于:taxesToPay[i]=annualSalaries[i]*taxBase[sizeof taxBase];
1)taxBase的大小,取决于int
的大小,将乘以16或32,而不是您想要的。2)这将访问超出数组末尾的部分taxBase@user3629249感谢您的评论和建议。我犯了错误。我已相应地更正了我的答案。BR.关于:float taxBase[]={0.10,0.20,0.30,0.40}
将double
值转换为float
值。这不是一个好主意,建议:float taxBase[]={0.10f,0.20f,0.30f,0.40f};
注意值后面的f
,这使得它们float
值为(j=0;j
根据int
的大小,这将循环12或24次。建议:用于(j=0;j
这将循环3次关于:taxesToPay[i]=annualSalaries[i]*taxBase[sizeof taxBase];
1)taxBase的大小,取决于int
的大小,将乘以16或32,而不是您想要的。2)这将访问超出数组末尾的部分taxBase@user3629249谢谢您的评论和建议。我犯了错误。我已相应地更正了我的答案。BR。
#include <stdio.h>
#include <stdlib.h>
#define N 10 // you should not embed the "magic number" in the code
int main(void) {
int salaryBase [] = {20000, 50000, 100000};
float taxBase [] = {0.10f, 0.20f, 0.30f, 0.40f};
int annualSalaries[N];
float taxesToPay[N];
char buf[BUFSIZ];
int i, j;
for (i = 0; i < N; i++) {
printf("Enter annual salary (No.%d)\n", i + 1);
fgets(buf, sizeof buf, stdin);
sscanf(buf, "%d", &annualSalaries[i]); // should not use scanf()
}
for (i = 0; i < N; i++) {
taxesToPay[i] = annualSalaries[i] * taxBase[sizeof taxBase / sizeof taxBase[0] - 1]; // assign to the default value
for (j = 0; j < sizeof salaryBase / sizeof salaryBase[0]; j++) {
if (annualSalaries[i] <= salaryBase[j]) {
taxesToPay[i] = annualSalaries[i] * taxBase[j];
break;
}
}
}
printf("SALARY TAXES\n");
for (i = 0; i < N; i++) {
printf("$%d $%.2f\n", annualSalaries[i], taxesToPay[i]);
}
return EXIT_SUCCESS;
}