实现一个函数display(int a),该函数的功能是根据参数指定的整数,在屏幕上输出数阶。例如,传给参数a一个4,在屏幕上输出
1
2 3
4 5 6
7 8 9 10
再编写一个程序,在程序中输入a值,调用这个display函数,并将结果在屏幕上显示。
思路:
就是类似杨辉三角,把每个元素当成一个坐标的坐标的话,你会发现每个每一行最后一个行数等于列数,所以列数《=行数。
对比T5,bug也是函数调用
有bug:最后多输出了一位数
原因:因为在display函数中最后自己已经输出了结果,但是在主函数调用display函数时,却又在主函数输出了一次,但是为什么每次输出都是输入n的n+1的原因暂时未知
有bug代码:
#include<stdio.h>
#define N 100
int display(int n)
{
int a[N][N],m=1;
for(int i=1;i<=n;i++)
{ for(int j=1;j<=i;j++)
{
if(j!=i)
{
a[i][j]=m;
m++;
}
else
a[i][j]=m;
}
m++;
}
for(int i=1;i<=n;i++)
{ for(int j=1;j<=i;j++)
printf("%d\t", a[i][j]);// /t制表符,在九九乘法表中学到
printf("\n");
}
}
int main()
{
int a;
scanf("%d", &a);
printf("%d", display(a));
return 0;
}
修正版:
#include<stdio.h>
#define N 100
void display(int n)
{
int a[N][N],m=1;
for(int i=1;i<=n;i++)
{ for(int j=1;j<=i;j++)
{
if(j!=i)
{
a[i][j]=m;
m++;// 这两个m++也很关键
}
else
a[i][j]=m;
}
m++;
}
for(int i=1;i<=n;i++)
{ for(int j=1;j<=i;j++)
printf("%d\t", a[i][j]);
printf("\n");
}
}
int main()
{
int a;
scanf("%d", &a);
display(a);
return 0;
}