在 C 程序中打印出准确的一行
Printing out an exact line in a C program
你能告诉我,我怎么打印出来吗
2
2 4 2
2 4 6 4 2
...
在一个程序中...其中 N 表示行数,并且该模式依此类推...
我想到了:
#include <stdio.h>
int main(){
int c, n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
for(row = 0, col = 1, val = 2; row < n; row++, col += 2){
for (c = 0; c < col; c++, val += 2){
printf("%d ", val);
}
printf("\n");
}
return 0;
}
但它只完成了一半的工作。
输出永远上升...我不希望这样..
2
4 6 8
10 12 14 16 18
...
当它连续达到最大值时,如何让它也按降序打印数字?
您代码中的主要问题是您没有在新行开始后重置 val
。此外,它不包含任何管理降序的逻辑。
此代码的行为符合您的预期:
#include <stdio.h>
int main()
{
int c, n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
for(row = 1; row <= n; row++)
{
for(val=2; val<=2*row; val+=2)
{
printf("%d ", val);
}
for(val=2*row-2; val>0; val-=2)
{
printf("%d ", val);
}
printf("\n");
}
return 0;
}
一些评论:
- 从
row
1 开始:这将很有用,因为每行的最大值必须是 2*row
- 在第一个循环中,我添加了两个
for
循环:第一个上升和第二个下降
- 内部升序循环必须从
2
开始,直到达到值 2*row
- 内部升序循环必须从
2*row-2
开始(而不是 2*row
,因为我们已经打印了该值)直到达到值 2
(因此,我们检查它以大于 0)
您不会再次减去该值,只会不断增加,并且您不会在每次迭代后重置您的值。在此处查看基于您的代码的 运行 示例:https://ideone.com/j6xHZE
#include <stdio.h>
int main() {
int n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
// Iterate through the desired rows
for (row = 0; row < n; row++) {
val = 0; // Reset val for each row
// Iterate until we have reached as many columns as the row
// number we are at
for (col = 0; col <= row; col++) {
val += 2;
printf("%d ", val);
}
// After this continue one less iteration where we decrease
// the value
for (col = 0; col < row; col++) {
val -= 2;
printf("%d ", val);
}
printf("\n");
}
return 0;
}
输出:
Provide value of N: 5
2
2 4 2
2 4 6 4 2
2 4 6 8 6 4 2
2 4 6 8 10 8 6 4 2
你能告诉我,我怎么打印出来吗
2
2 4 2
2 4 6 4 2
...
在一个程序中...其中 N 表示行数,并且该模式依此类推...
我想到了:
#include <stdio.h>
int main(){
int c, n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
for(row = 0, col = 1, val = 2; row < n; row++, col += 2){
for (c = 0; c < col; c++, val += 2){
printf("%d ", val);
}
printf("\n");
}
return 0;
}
但它只完成了一半的工作。
输出永远上升...我不希望这样..
2
4 6 8
10 12 14 16 18
...
当它连续达到最大值时,如何让它也按降序打印数字?
您代码中的主要问题是您没有在新行开始后重置 val
。此外,它不包含任何管理降序的逻辑。
此代码的行为符合您的预期:
#include <stdio.h>
int main()
{
int c, n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
for(row = 1; row <= n; row++)
{
for(val=2; val<=2*row; val+=2)
{
printf("%d ", val);
}
for(val=2*row-2; val>0; val-=2)
{
printf("%d ", val);
}
printf("\n");
}
return 0;
}
一些评论:
- 从
row
1 开始:这将很有用,因为每行的最大值必须是2*row
- 在第一个循环中,我添加了两个
for
循环:第一个上升和第二个下降 - 内部升序循环必须从
2
开始,直到达到值2*row
- 内部升序循环必须从
2*row-2
开始(而不是2*row
,因为我们已经打印了该值)直到达到值2
(因此,我们检查它以大于 0)
您不会再次减去该值,只会不断增加,并且您不会在每次迭代后重置您的值。在此处查看基于您的代码的 运行 示例:https://ideone.com/j6xHZE
#include <stdio.h>
int main() {
int n, col, row, val;
printf("Provide value of N: ");
scanf("%d", &n);
// Iterate through the desired rows
for (row = 0; row < n; row++) {
val = 0; // Reset val for each row
// Iterate until we have reached as many columns as the row
// number we are at
for (col = 0; col <= row; col++) {
val += 2;
printf("%d ", val);
}
// After this continue one less iteration where we decrease
// the value
for (col = 0; col < row; col++) {
val -= 2;
printf("%d ", val);
}
printf("\n");
}
return 0;
}
输出:
Provide value of N: 5
2
2 4 2
2 4 6 4 2
2 4 6 8 6 4 2
2 4 6 8 10 8 6 4 2