打印数来的结果乱码,一是因为arr数组的foloat类型与scanf获取输入的整数类型不对,二是arr数组没有初始化;
可以在双层循环中,逐个判断输入的数是否可以整除面额500到面额1之间的数,如果可以,则将此数置0,如果不可以则将此数置为相除的余数,如此循环计算下去,即可将此数分解成几个因数了。
代码如下:
#include <stdio.h>
int main(void){
int i,n,m,t;
int arr[5][10];
int salary[10]={0,500,200,100,50,20,10,5,2,1};
int num[10]={0};
for(i=0;i<5;i++){
printf("Give the salary for the %d. employee > ",i+1);
scanf("%d",&n);
arr[i][0] = n;
}
printf("Salary\t500\t200\t100\t50\t20\t10\t5\t2\t1\n");
for(i=0;i<5;i++){
printf("%d\t",arr[i][0]);
t=arr[i][0];
for(m=1;m<10;m++){
printf("%d\t",t/salary[m]); //打印输入的数除以当前面额的整数商
if(t%salary[m]==0){ //如果可以整除,则将t置0,同时将商累加到当前面额的数量
num[m]+=t/salary[m];
//t= t%salary[m];
t=0;
}else{ //如果不可以整除,则将t置为余数,同时将商累加到当前面额的数量
num[m]+=t/salary[m];
t=t-t/salary[m]*salary[m];
}
}
printf("\n"); //打印换行
}
printf("Total\t");
//打印每种面额各有多少个
for(m=1;m<10;m++){
printf("%d\t",num[m]);
}
printf("\n");
return 0;
}