自学编程想请教题目,最好可以有注释

img


如题

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i=0,j,k,n,t,a[30];//最多30组数据,如果更多组,把30改成更大的数
    while(scanf("%d",&n)!=EOF) //读取多组输入数据存放在数组a中
        a[i++] = n;
    n = i; //n记录组数

    for (k = 0;k<n;k++)//遍历所有组
    {
        for (i=1;i<=a[k];i++) //对每一组数据,输出a[k]*a[k]的矩阵
        {
            t = 1; //没一行都是从1开始
            for(j=1;j<=a[k];j++)
            {
                if(j<i) //列数小于行数的时候,显示数字,并将数字+1
                {
                    printf("%3d",t);
                    t++;
                }else
                    printf("%3d",t); //列数大于行数的时候,直接显示数字,数字不再+1
            }
            printf("\n"); //每行结束后输出换行符
        }

    }

    
    
    return 0;
}

抱歉没时间写代码,不过我能提供一下我的思路给你
需要用到二位数组
1,创建一个array[n][n]的数组。
2,然后用循环进行赋值,至于赋值多少,我想了一个简单的方法,
比较两个下标的大小,将值赋为较小的那个下标数加1。
3,遍历输出(记得换行)。

img


// caimi5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    // 用于存放的数组
    int iDuoGen[200] = {0};
    // 输入多组
    printf("输入多组 每组间用回车分隔 输入“0回车”结束\n");
    int in; // 输入临时变量
    int iCount = 0;  // 输入计数
    do
    {
        scanf_s("%d", &in);
        if (in <0 ||in >30)
        {
            continue;  //如果在范围之外 不记录 进行下一次输入
        }
        iDuoGen[iCount] = in;
        iCount++;
        printf_s("OK,还可以输入%d组\n", 200 - iCount);

    } while (in != 0 || 200 - iCount ==0);


    for (int i = 0; i < iCount; i++)
    {
        int iTemp = iDuoGen[i];

        for (int j = 1; j <= iTemp; j++)
        {
            for (int k = 1; k <= iTemp; k++)
            {
                int iSubTemp = k < j ? k : j;  // 选择两个脚标中较小的那一个
                if (iSubTemp>=10)  // 是个两位数  print后跟一个空格 凑成**3个位**
                {
                    printf_s("%d ", iSubTemp);
                }
                else// 是个一位数  print后跟两个空格 凑成**3个位**
                {
                    printf_s("%d  ", iSubTemp);
                }
            }
            printf_s("\n");
        }
            
    }

    _tsystem(L"pause");
    

    return 0;
}