我是C语言的初学者和大学新生。 我在这里需要进行测试,需要一些帮助。 我想制作一个显示有序数字的嵌套循环。像这样排序:
22 23 24 25 26 27 28
... ... ...依此类推,具体取决于您输入的行数
我已经尝试制作粗略的试错测试代码:
int i;
int j;
int limit;
int number1 = 1;
int number2 = 3;
int spesial = 0;
printf("Input limit : ");
scanf("%d", &limit);
for (i=1;i<=limit;i++)
{
for(j=1;j<=i;j++)
{
if (i%2==0)
{
printf("%d ", number2);
number2--;
}
else
{
printf("%d ", number1);
}
number1++;
}
if (i%2==0)
{
number2=(i*6)-i+(spesial*1);
spesial+=1;
}
printf("\n");
}
I managed to make it sorted to the 7th rows, but the rest are not..
请帮助... 我想知道我们是否真的可以像这样简单地控制输出的位置。 另外,对不起我的英语...我不是真的来自一个讲英语的国家,这是我第一次在这个网站上发帖/提问。 感谢您阅读这个冗长的问题,希望您有个美好的一天和美好的夜晚。
答案 0 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int rows;
int i, j;
int n = 0;
printf ("How many rows do you want? ");
if (scanf("%d", & rows) != 1 || rows < 1) return EXIT_FAILURE;
printf ("\n");
for (i = 1; i <= rows; ++ i) {
for (j = 0; j < i; ++ j) {
printf ("%4d", n + (i % 2 == 0 ? i - j : j + 1));
}
printf ("\n");
n = n + i;
}
return EXIT_SUCCESS;
}
答案 1 :(得分:1)
创建另一个将计算最大行数的函数(我称为lineMax
)会更方便。
int lineMax(int num){
int cnt=0;
for (int i=1;i<=num;i++)
cnt+=i;
return cnt;
}
void main(){
int i,j,limit;
printf("Input limit : ");
scanf("%d", &limit);
for(i=1;i<=limit;i++){
if(i%2==0){ //right to left
for(j=lineMax(i);j>=lineMax(i-1)+1;j--)
printf("%d ",j);
}
else{ //left to right
for(j=lineMax(i-1)+1;j<=lineMax(i);j++)
printf("%d ",j);
}
printf("\n");
}
}
答案 2 :(得分:0)
您正在使用number1
,number2
和special
做很多特殊情况。这不适用于较大的数字。
一种方法是计算count
,它将为您提供从j
的每个循环开始的值。 count += i
,然后每次打印count -j
count = 0;
for (i=1;i<=limit;i++)
{
count += i;
for(j=0;j< i;j++)
{
printf ("%d ",count-j);
}
printf("\n");
}