C语言编程--杨辉三角找错误 满意追加50分

刚才编了杨辉三角运行居然有N个错误~~~555希望大侠帮帮我帮我找找不胜感激~~!!main(){intm[i][j],i,j;for(i=0;i<=5;i++){m[i... 刚才编了杨辉三角 运行居然有N个错误~~~555 希望大侠帮帮我 帮我找找 不胜感激~~!!
main()
{int m[i][j],i,j;
for(i=0;i<=5;i++)
{m[i][0]=1
m[i][i]=1;}
for(i=2;i<=5;i++)
for(j=1;j=i-1;j++)
m[i][j]=m[i-1][j-1]+m[i-1][j];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%5d",m[i][j]);
printf("\n");
}}

请不要在网上找答案粘贴 请认真修改 满意追加50分!!
真想哭啊~是让大家帮我指出错误 而不是重新写啊~~~~~~~~
谢谢大家了~~可以用变量啊 定义下就好
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

辛苦大家了:)
“海边的沙雕” 你怎么把我做的copy过去了?!
展开
 我来答
百度网友f99d3cebe
2007-02-10 · TA获得超过101个赞
知道答主
回答量:64
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
int main()
{int m[j][i],i,j; // 不能用变量定义数组长度,而且i,j大小未知
for(i=0;i<=5;i++)
{m[i][0]=1 // 这里掉了个分号;
m[i][i]=1;}
for(i=2;i<=5;i++)
for(j=1;j=i-1;j++) // 注意这里j = i - 1将会造成死循环,掉了个!吧,应该是!=才对,而且如幻冰所说应该
// 把i - 1改为i才对
m[i][j]=m[i-1][j-1]+m[i-1][j];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%5d",m[i][j]);
printf("\n");
}}

改正后
#include <stdio.h>
int main( )
{
int i,j,m[10][10];
for(i = 0; i <= 5; ++i){
m[i][0] = 1;
m[i][i] = 1;
}
for(i = 2; i <= 5; ++i)
for(j = 1; j != i; ++j)
m[i][j] = m[i-1][j-1] + m[i-1][j];
for(i = 0; i <= 5; ++i){
for(j = 0; j <= i; ++j)
printf("%5d",m[i][j]);
printf("\n");
}
}

另外献上我原来用C++编的杨辉三角函数代码,我把它改成了C,只不过多用了几个函数控制输出格式,而且打印多个空格显得冗长乏味,但它却是我初学之时的得意之作。输出的时候你要把你的控制台窗口(那个黑框)的屏幕缓冲区宽度调大点,不然显示会和下一行重叠,造成很混乱的输出:

// 杨辉三角函数

void YH_triangle( )
{
int h,n,a,m,x,y,c;
int tempA[20] = {1};
int tempB[20];
y = 0;
printf("Enter the number of the triangle's height(1~20): ");
scanf("%d",&n);
h = n;
for (a = 2; n > 0; --n,++a){
for (m = n; m > 0; --m)
//cout << " ";
h_space(h);
++y;
for (x = 0; x < y; ++x){
if (0 == a % 2){
format_out(h,tempA[x]);
for (c = 0; c < y; ++c)
tempB[c+1] = tempA[c] + tempA[c+1];
tempB[0] = tempB[y] = 1;
}
else {
format_out(h,tempB[x]);
for (c = 0;c < y; ++c)
tempA[c+1] = tempB[c] + tempB[c+1];
tempA[0] = tempA[y] = 1;
}
}
printf("\n");
}
}

// 每行打印数字之前的控制空白打印函数

void h_space(int ht)
{
if (ht < 6)
printf(" ");
else if ( ht >= 6 && ht < 10)
printf(" ");
else if (ht >=10 && ht < 14)
printf(" ");
else if (ht >=14 && ht < 16)
printf(" ");
else if (ht >=16 && ht <= 20)
printf(" ");
}

// 格式化输出打印函数(数字之间的空格)

void format_out(int ht,int X)
{
if (ht < 6)
printf("%d ",X);
else if ( ht >= 6 && ht < 10){
if (X < 10)
printf(" %d ",X);
else
printf(" %d ",X);
}
else if (ht >=10 && ht < 14){
if (X < 10)
printf(" %d ",X);
else if (X >= 10 && X <= 100)
printf(" %d ",X);
else
printf(" %d ",X);
}
else if (ht >=14 && ht < 16){
if (X < 10)
printf(" %d ",X);
else if (X >= 10 && X <= 100)
printf(" %d ",X);
else if (X >=100 && X < 1000)
printf(" %d ",X);
else
printf(" %d ",X);
}
else if (ht >=16 && ht <= 20){
if (X < 10)
printf(" %d ",X);
else if (X >= 10 && X <= 100)
printf(" %d ",X);
else if (X >=100 && X < 1000)
printf(" %d ",X);
else if (X >=1000 && X < 10000)
printf(" %d ",X);
else
printf("%d ",X);

}
}

int main( ){
YH_triangle( );
}

for循环里的更新条件不是特殊需要的话用前自增比较好,虽然++a和a++的在循环更新中效果相同,但从效率上来考虑用++a较好。

++a就是a += 1;程序先生成一个temp量来存储a + 1,然后在把这个temp值赋给a;

a++则不大相同,程序要先生成二个temp量来存储,第一个假设叫temp1用来存储a,第二个假设叫temp2用来存储++a也就是 a += 1。而作为for的更新部分,除了在特殊情况下需要获取a的当前值而用a++,比如:

#include <stdio.h>
int main( ){
int i,j;
for(i = 0,j = 0; i < 5;j = i++)
printf("%d",j);
printf("\n");
for(i = 0,j = 0; i < 5;j = ++i)
printf("%d",j);
}

第一个for打出00123,第二个for打出01234,这个时候++i和i++才有所不同。

其他时候由第一个temp1存储的a始终不起什么作用,而且还白白浪费了一个临时变量的存储空间,这对于小程序来说可能不算什么,但是在大型程序中将会加大对存储空间的需求,是很不划算的。

学编程一方面要注重思想,另一方面要注重效率,像这种由++a和a++所引起的微小变化往往很容易被人们所忽略,而有时候恰恰是细小的地方才能真正体现一个程序员的品质。

PS:写完了之后怎么自我感觉有点孔乙己??
佘芷0gr2e9
2007-02-10 · TA获得超过113个赞
知道答主
回答量:137
采纳率:0%
帮助的人:0
展开全部
你是语法错误,还是结果错误?
你把杨辉三角的格式发下呗(两年没摸C语言了,不太记得了).
让我试试
main()
{int m[i][j],i,j;
for(i=0;i<=5;i++)
{ m[i][0]=1
m[i][i]=1;}
for(i=2;i<=5;i++)
{ for(j=1; j <= i-1;j++)
{m[i][j]=m[i-1][j-1]+m[i-1][j];}}
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%5d",m[i][j]);
printf("\n");
}
}
和你的不一样吧......
参考下楼上和楼下的,定义规则我都忘没了,二维数组不记得怎么定义了.
幻冰的答案我觉得是对的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af60faf09
2007-02-09 · TA获得超过1636个赞
知道大有可为答主
回答量:774
采纳率:0%
帮助的人:918万
展开全部
main() {
int m[100][100], i, j; //数组必须在定义时确定大小,也可用指针动态申请
for(i = 0; i <= 5; i++) {
m[i][0] = 1;
m[i][i] = 1;
}
for(i = 2; i <= 5; i++)
for(j = 1; j < i; j++) //i-1改成i
m[i][j] = m[i-1][j-1] + m[i-1][j];
for(i = 0; i <= 5; i++) {
for(j = 0; j <= i; j++)
printf("%5d",m[i][j]);
printf("\n");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘渺世间天
2007-02-11 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1107万
展开全部
对不起发现有点问题,我就是snakejm。
上面的程序没带#include <stdio.h>,而且控制输出格式printf()中的空格全都变为一个了,百度把多个空格显示为了一个*_*,而且我的修改次数已经上限——巨寒-_-!!。所以重注册了个号来修改(百度限制修改次数并优化显示内容(多个空格只显示一个)的做法的确节约了不少资源,但他有想过还有N多人会因为遭遇和我一样的情况而重新注册个号来达到修改目的吗?百度到底达到了他这样做的目的还是适得其反呢,呵呵^_^),为了显示正确我把空格都替换为了空格的转义序列码\40。

#include <stdio.h>

// 杨辉三角函数

void YH_triangle( )
{
int h,n,a,m,x,y,c;
int tempA[20] = {1};
int tempB[20];
y = 0;
printf("Enter the number of the triangle's height(1~20): ");
scanf("%d",&n);
h = n;
for (a = 2; n > 0; --n,++a){
for (m = n; m > 0; --m)
h_space(h);
++y;
for (x = 0; x < y; ++x){
if (0 == a % 2){
format_out(h,tempA[x]);
for (c = 0; c < y; ++c)
tempB[c+1] = tempA[c] + tempA[c+1];
tempB[0] = tempB[y] = 1;
}
else {
format_out(h,tempB[x]);
for (c = 0;c < y; ++c)
tempA[c+1] = tempB[c] + tempB[c+1];
tempA[0] = tempA[y] = 1;
}
}
printf("\n");
}
}

// 每行打印数字之前的控制空白打印函数

void h_space(int ht)
{
if (ht < 6)
printf("\40");
else if ( ht >= 6 && ht < 10)
printf("\40\40\40\40\40");
else if (ht >=10 && ht < 14)
printf("\40\40\40\40\40");
else if (ht >=14 && ht < 16)
printf("\40\40\40\40\40\40");
else if (ht >=16 && ht <= 20)
printf("\40\40\40\40\40");
}

// 格式化输出打印函数(数字之间的空格)

void format_out(int ht,int X)
{
if (ht < 6)
printf("%d\40",X);
else if ( ht >= 6 && ht < 10){
if (X < 10)
printf("\40\40\40\40%d\40\40\40\40\40",X);
else
printf("\40\40\40%d\40\40\40\40\40",X);
}
else if (ht >=10 && ht < 14){
if (X < 10)
printf("\40\40\40\40%d\40\40\40\40\40",X);
else if (X >= 10 && X <= 100)
printf("\40\40\40%d\40\40\40\40\40",X);
else
printf("\40\40%d\40\40\40\40\40",X);
}
else if (ht >=14 && ht < 16){
if (X < 10)
printf("\40\40\40\40\40%d\40\40\40\40\40\40",X);
else if (X >= 10 && X <= 100)
printf("\40\40\40\40%d\40\40\40\40\40\40",X);
else if (X >=100 && X < 1000)
printf("\40\40\40%d\40\40\40\40\40\40",X);
else
printf("\40\40%d\40\40\40\40\40\40",X);
}
else if (ht >=16 && ht <= 20){
if (X < 10)
printf("\40\40\40\40%d\40\40\40\40\40",X);
else if (X >= 10 && X <= 100)
printf("\40\40\40%d\40\40\40\40\40",X);
else if (X >=100 && X < 1000)
printf("\40\40%d\40\40\40\40\40",X);
else if (X >=1000 && X < 10000)
printf("\40%d\40\40\40\40\40",X);
else
printf("%d\40\40\40\40\40",X);

}
}

int main( ){
YH_triangle();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
相超
2007-02-24 · TA获得超过380个赞
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:52.5万
展开全部
晕.小妹妹呀.不要哭嘛 这个题看看就能够明白的呀 还是哥哥来帮帮你吧
嘿嘿 应该是弟弟啦 俺18岁 88年的...............山东潍坊的 我们算是老乡了 不过我现在在长春..........郁闷 还是帮帮你吧 我研究了半个小时 终于出来结果了 如果俺回答的不是很好 你就不要选俺当最佳答案了 但是呢你最好加俺好友 哈 毕竟为你这个付出了半个小时嘛 是吧 也改安慰安慰俺哈 嘿嘿
#include"stdio.h"
main()
{int m[6][6],i,j;/* 不能用没有复值的变量定义数组*/
for(i=0;i<=5;i++)
{m[i][0]=1;/*你缺少了;号*/
m[i][i]=1;}
for(i=2;i<=5;i++)
for(j=1;j<=i-1;j++) /*你的语句循环条件错了*/
m[i][j]=m[i-1][j-1]+m[i-1][j];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%5d",m[i][j]);
printf("\n\n\n"); /*换行多点漂亮,不信可以试一下*/
}
}
下面是最简单的程序代码如果有时间的话就看看哈 没时间就不看了
#include"stdio.h"
main()
{
int a[10][10],b,c;
for(b=0;b<=9;b++)
{
a[b][0]=1;
a[b][b]=1;
}
for(b=0;b<=9;b++)
{for(c=0;c<=b;c++)
if(c==0||b==c)printf("%5d",a[b][c]);
else {a[b][c]=a[b-1][c-1]+a[b-1][c];printf("%5d",a[b][c]);}
printf("\n\n\n");}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tim7212
2007-02-24 · TA获得超过248个赞
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
main()
{int m[i][j],i,j;
for(i=0;i<=5;i++)
{m[i][0]=1
m[i][i]=1;}
for(i=2;i<=5;i++)
for(j=1;j=i-1;j++)
m[i][j]=m[i-1][j-1]+m[i-1][j];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%5d",m[i][j]);
printf("\n");
}}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式