大佬们帮忙看看是哪里有问题吧(显示柱状图)感激不尽!
描述根据输入的数字和符号生成相应的柱状图显示。
输入
每个输入包含一个测试用例,第一个整数m(1<=m<=20),表示随后有m组数据,每组数据由一个数字n(-15<=n<=15)和一个字符组成,每组数据之间用空格分隔。数字代表柱状图的高度,字母代表该柱使用的画图符号。如果数字后没有字母,默认该柱的画图符号使用加号’+’。
输出
每个柱之间用1个空格间隔,图的空白处用空格填充。用减号’-’表示x轴。正数柱状向上,负数柱状向下。
样例
输入
6 1a 3 4b 2 -2 1
输出
b
+ b
+ b +
a + b + +
-----------
+
+
程序代码:
#include <stdio.h> #include <stdlib.h> int main(void) { int m,i; scanf("%d",&m);//输入一个整数 char histogram[21][31];//声明一个名为柱状图的字符型数组 char str[20];//声明存入字母的数组 int num[20];//声明存入数字的数组 if(1<=m<=20){ for(i=0;i<m;i++){//将数据存入数组中 scanf("%d",&num[i]); scanf("%c",&str[i]); } int shang,xia;//shang表示x轴上方的行数,xia表示x轴下方的行数 shang=0; xia=0; for(i=0;i<m;i++){ if(num[i]>0&&shang<num[i]){ shang=num[i];//找出上方应该有的行数 } else if(num[i]<=0&&xia>num[i]){ xia=num[i];//找出下方应该有的行数 } } int hang,lie; hang=shang-xia+1;//总的行数 lie=m;//总的列数 int j; for(j=0;j<lie;j++){//一列一列的看,先对列进行循环 if(num[j]>0){//讨论在数字大于零时的情况 for(i=0;i<hang;i++){//再对行进行循环 if(i<shang-num[j]){//x轴上方为空格的情况 histogram[i][j]=' '; } else if(i>=shang-num[j]&&i<shang){ if(str[j]==' '||str[j]=='\n'){//数字后不带字母的情况 histogram[i][j]='+'; } else//数字后带字母的情况 histogram[i][j]=str[j]; } else if(i==shang)//x轴 histogram[i][j]='-'; else//在x轴下方为空格的情况 histogram[i][j]=' '; } } else if(num[j]>=0) {//讨论数字小于等于零时的情况 for(i=0;i<hang;i++){ if(i<shang){//因数字小于零,在x轴上方都是空格 histogram[i][j]=' '; } else if(i==shang)//x轴 histogram[i][j]='-'; else if(i>shang&&i<=shang-num[j]){ if(str[j]==' '||str[j]=='\n'){//数字后无字母 histogram[i][j]='+'; } else//数字后有字母 histogram[i][j]=str[j]; } else//在这列中的其他行是空格 histogram[i][j]=' '; } } } for(i=0;i<shang;i++){ if(i==shang){ for(j=0;j<lie;j++) { if(j==lie-1) { printf("%c",histogram[i][j]);} else { printf("%c-",histogram[i][j]);} } } else { for(j=0;j<lie;j++) { printf("%c ",histogram[i][j]);} } printf("\n"); } } return 0; }
我的运行结果如下:
6 1a 3 4b 2 -2 1
b
+ b
+ b +
a + b + ?+
麻烦帮我看看到底是哪里出了错,已经想了很久了,可是运行结果就是不对