gpt4 book ai didi

C编程制作乘法表(1-12)

转载 作者:行者123 更新时间:2023-11-30 16:27:08 28 4
gpt4 key购买 nike

我想制作一个程序,它采用单个整数命令行参数 (n) 并制作类似于下面 4x4 示例的 n x n 乘法表。它应该仅为 1 到 12,但不能更小或更大。所以如果没有足够的参数,应该打印一个用法:Usage: program <n> \n或者如果超出范围,则应打印:n out of range (1-12)\n然后退出。

示例:./程序4

*    1   2   3   4
+----------------
1| 1 2 3 4
2| 2 4 6 8
3| 3 6 9 12
4| 4 8 12 16

我的代码我已经尝试过,但没有成功。我复制的编译的不是我所期望的,如下所示。

#include <stdio.h>

int main(void)
{
int i, j;

printf(" +");
for (i = 1; i < 13; ++i)
{
printf("%#3d ", i);
printf("\n");
}

for (i = 1; i < 64; ++i)
{
printf("-");
printf("\n");
}

for (i = 1; i < 13; ++i)
{
printf("%#2d |", i);

for (j = 1; j < 11; ++j)
{
printf("%#3d ", i * j);
printf("\n");
}
}

return 0;
}

After compile:

gcc version 4.6.3

+ 1
2
3
4
5
6
7
8
9
10
11
12
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 | 1
2
3
4
5
6
7
8
9
10
2 | 2
4
6
8
10
12
14
16
18
20
3 | 3
6
9
12
15
18
21
24
27
30
4 | 4
8
12
16
20
24
28
32
36
40
5 | 5
10
15
20
25
30
35
40
45
50
6 | 6
12
18
24
30
36
42
48
54
60
7 | 7
14
21
28
35
42
49
56
63
70
8 | 8
16
24
32
40
48
56
64
72
80
9 | 9
18
27
36
45
54
63
72
81
90
10 | 10
20
30
40
50
60
70
80
90
100
11 | 11
22
33
44
55
66
77
88
99
110
12 | 12
24
36
48
60
72
84
96
108
120

我已经被这个问题困扰了两天,并试图找出为什么它会直接下降..谢谢。

最佳答案

以下代码:

  1. 更正输出格式,
  2. 检查是否有命令行参数,
  3. 遵循公理:每行只有一个语句,并且每个语句(最多)一个变量声明。
  4. 检查命令行参数以确保其为数字且在 1...12 范围内
  5. 限制每个变量的范围
  6. 在适当的情况下调用 puts(),因为 printf() 的 CPU 周期非常昂贵
  7. 使用适当的水平间距以提高可读性

现在,建议的代码:

#include <stdio.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <ctype.h> // isdigit()

#define MAX_VALUE 12
#define MIN_VALUE 1

int main( int argc, char *argv[] )
{

if( argc != 2 )
{
fprintf( stderr, "USAGE: %s <maxTableSize: range 1...12>\n", argv[0] );
exit( EXIT_FAILURE );
}

// implied else, user entered a command line parameter

if( !isdigit( argv[1][0] ) )
{
fprintf( stderr, "command line parameter not numeric\n" );
exit( EXIT_FAILURE );
}

// implied else, command line parameter starts with digit

int maxTableSize = atoi( argv[1] );

if( MIN_VALUE > maxTableSize || maxTableSize > MAX_VALUE )
{
fprintf( stderr, "command line parameter not in valid range ( 1...12 )\n");
exit( EXIT_FAILURE );
}

// implied else, command line parameter contains valid value

printf(" + ");
for ( int i = 1; i <= maxTableSize; ++i )
{
printf("%4d ", i);
}
puts("");

for ( int i = 1; i < 5+(maxTableSize*5); ++i )
{
printf( "-" );
}
puts("");

for ( int i = 1; i <= maxTableSize; ++i )
{
printf( "%2d |", i );

for ( int j = 1; j <= maxTableSize; ++j )
{
printf( "%4d ", i * j );
}
puts("");
}

return 0;
}

下面演示了程序运行的各种情况。 (其中 untitled 是程序的名称。)

./untitled
USAGE: ./untitled <maxTableSize: range 1...12>

./untitled a
command line parameter not numeric

./untitled 0
command line parameter not in valid range ( 1...12 )

./untitled 13
command line parameter not in valid range ( 1...12 )


./untitled 1
+ 1
--------
1 | 1

./untitled 2
+ 1 2
------------
1 | 1 2
2 | 2 4

.....

./untitled 12
+ 1 2 3 4 5 6 7 8 9 10 11 12
----------------------------------------------------------------
1 | 1 2 3 4 5 6 7 8 9 10 11 12
2 | 2 4 6 8 10 12 14 16 18 20 22 24
3 | 3 6 9 12 15 18 21 24 27 30 33 36
4 | 4 8 12 16 20 24 28 32 36 40 44 48
5 | 5 10 15 20 25 30 35 40 45 50 55 60
6 | 6 12 18 24 30 36 42 48 54 60 66 72
7 | 7 14 21 28 35 42 49 56 63 70 77 84
8 | 8 16 24 32 40 48 56 64 72 80 88 96
9 | 9 18 27 36 45 54 63 72 81 90 99 108
10 | 10 20 30 40 50 60 70 80 90 100 110 120
11 | 11 22 33 44 55 66 77 88 99 110 121 132
12 | 12 24 36 48 60 72 84 96 108 120 132 144

关于C编程制作乘法表(1-12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com