用C语言将键盘输入的若干行数字,在显示器上显示得像计算器一样。输入包括若干行,每行表示一个要显示的数。每行有两个整数s和n(1<=s<=100<=n<= 99999999),这里n是要显示的数,s是要显示的数的尺寸。如果某行输入包括两个0表示输入结束
时间: 2024-02-19 10:58:24 浏览: 71
C语言 从键盘上输入的一组正整数(以输入0为结束),统计并计算出最小值数字的数 量在这组数字中的占比,显示最终结果
好的,这是一个比较典型的C语言练手题目,可以通过循环读入每行数字,然后根据尺寸进行格式化输出。下面是一个可能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
int main() {
int s, n;
while (scanf("%d%d", &s, &n) == 2 && s != 0 && n != 0) {
// 将数字转化为字符串
char str[MAX_N + 1];
sprintf(str, "%d", n);
// 计算需要输出的行数和列数
int len = strlen(str);
int row = 2 * s + 3, col = s + 2 + len;
// 根据尺寸输出数字
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
char c;
if (i == 0) {
if (j == 0 || j == col - 1 || j == s + 1) c = ' ';
else c = '-';
} else if (i == s + 1) {
if (j == 0 || j == col - 1) c = '|';
else c = ' ';
} else if (i == row - 1) {
if (j == 0 || j == col - 1 || j == s + 1) c = ' ';
else c = '-';
} else {
if (j == 0 || j == s + 1) c = '|';
else if (j == col - 1) c = '|';
else {
int idx = i < s + 1 ? i - 1 : i - s - 2;
int digit = str[idx] - '0';
if ((s - idx) == j - 1) c = digit + '0';
else c = ' ';
}
}
putchar(c);
}
putchar('\n');
}
putchar('\n');
}
return 0;
}
```
这个程序的基本思路是,每次读入一个数字后,将其转化为字符串。然后根据字符串的长度和尺寸计算需要输出的行数和列数,在循环中逐个输出每个字符。具体来说,我们使用一个双重循环来遍历每个位置,然后根据当前行和列的位置,以及数字的字符串表示,来决定输出的字符。特别地,在第一行、中间行、最后一行和数字中间的竖线上,需要输出不同的字符。
这个程序还有一些可以改进的地方,比如可以增加错误检查和异常处理,可以将循环中的重复代码提取成函数等等。但是,这个实现已经足够演示如何使用C语言实现这个问题了。
阅读全文