本关任务:从一个数组中读取数据,并以直方图的形式显示信息。/*请完善程序使实现功能:打印直方图。*/ #include <stdio.h> #include <math.h> int main( ) { int a[5]; int i; for(i=0;i<5; i++) scanf("%d",&a[i]); /*****代码开始*****/ /*****代码结束*****/ return 0; }
时间: 2025-06-01 07:05:17 浏览: 16
### 实现C语言数组输入数据并打印直方图
以下是一个完整的C语言程序,能够实现从用户输入的数组中读取数据,并以直方图的形式显示信息。此代码结合了引用中的思想[^1],同时扩展了功能以确保程序更加完善和易用。
```c
#include <stdio.h>
int main() {
int a[5]; // 定义一个大小为5的数组
int i, j;
printf("请输入5个整数:\n");
for (i = 0; i < 5; i++) { // 循环读取用户输入的数据
scanf("%d", &a[i]);
}
printf("直方图如下:\n");
for (i = 0; i < 5; i++) { // 遍历数组中的每个元素
for (j = 1; j <= a[i]; j++) { // 根据数组值打印对应数量的星号
printf("*");
}
printf("\n"); // 每一行结束后换行
}
return 0;
}
```
上述代码实现了基本的直方图打印功能。如果需要更复杂的直方图(例如垂直方向的直方图),可以参考以下扩展代码[^2]:
```c
#include <stdio.h>
void printVerticalHistogram(int arr[], int size) {
int max = 0;
for (int i = 0; i < size; i++) {
if (arr[i] > max) {
max = arr[i]; // 找到数组中的最大值
}
}
for (int row = max; row >= 1; row--) { // 从最大值开始逐行打印
for (int col = 0; col < size; col++) {
if (arr[col] >= row) {
printf("* "); // 如果当前列的高度大于等于当前行,则打印星号
} else {
printf(" "); // 否则打印空格
}
}
printf("\n"); // 换行
}
for (int i = 0; i < size; i++) {
printf("%d ", i); // 打印底部的索引
}
printf("\n");
}
int main() {
int a[5];
int i;
printf("请输入5个整数:\n");
for (i = 0; i < 5; i++) {
scanf("%d", &a[i]);
}
printf("垂直直方图如下:\n");
printVerticalHistogram(a, 5);
return 0;
}
```
上述代码实现了垂直方向的直方图打印功能[^3]。通过先找到数组中的最大值,然后逐行打印星号或空格,最终形成垂直直方图。
### 注意事项
- 用户输入的数组值应为非负整数,否则可能导致直方图显示异常。
- 垂直直方图的实现逻辑较为复杂,需确保数组的最大值被正确计算[^4]。
阅读全文
相关推荐


















