| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 717 人关注过本帖
标题:刚学C两个月,不懂程序那里出错了,求助大侠
只看楼主 加入收藏
电子门外汉
Rank: 2
等 级:论坛游民
帖 子:57
专家分:29
注 册:2010-5-16
结帖率:90.91%
收藏
已结贴  问题点数:50 回复次数:9 
刚学C两个月,不懂程序那里出错了,求助大侠
程序代码:
#include<stdio.h>
main()
{
    int i,j,row=0,colum=0,max;
    int a[3][4]={{1,2,3,4},{9,8,7,6,},{-10,10,-5,5}};
    max=a[0][0];
    for(i<0;i<=2;i++)
        for(j=1;j<=3;j++)
        if(a[i][j]>max)
        {max=a[i][j];
         row=i;
         colum=j;
        }
    printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
  
求二维数组中的最大数程序。运行,连接无错误提示,但运行时提求"该内存不能为Read"。俺是刚学C语言二个月,不知是那里出错了,望各位大侠指教。谢谢
搜索更多相关主题的帖子: color 
2010-07-25 23:45
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:10 
你的外层的for循环中初始条件应该写成i=0,而不是i<0……
max=a[0][0];
    for(i<0;i<=2;i++)…………………………………………这里……应该是i=0……
        for(j=1;j<=3;j++)
        if(a[i][j]>max)

我很懒,但我讨厌别人说我懒……
2010-07-26 00:15
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:5 
回复 楼主 电子门外汉
在for循环里有两个错误,如下
 for(i<0;i<=2;i++)/*这里i<0并未给i赋值,所以编译器会报错*/
        for(j=1;j<=3;j++)/*这里应该是j=0,数组第一个元素的下标是0*/
        if(a[i][j]>max)
        {max=a[i][j];
         row=i;
         colum=j;
        }
2010-07-26 14:07
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
错误为:
for(i<0;i<=2;i++)/*这里i<0并未给i赋值,所以编译器会报错*/
        for(j=1;j<=3;j++)/*这里应该是j=0,数组第一个元素的下标是0*/
        if(a[i][j]>max)
        {max=a[i][j];
         row=i;
         colum=j;
        }

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-26 15:44
灰色代言
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-07-26 17:09
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:30 
再给个for循环的用法:
for语句

  for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式为:

for(表达式1;表达式2;表达3)

语句; 表达式1 通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。

  表达式2 通常是循环条件,一般为关系表达式或逻辑表达式。

  表达式3 通常可用来修改循环变量的值,一般是赋值语句。

  这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。

  一般形式中的“语句”即为循环体语句。for语句的语义是:

1.首先计算表达式1的值。

  2.再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。

  3.然后再计算表达式3的值,转回第2步重复执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式,3则可能计算多次。循环体可能多次执行,也可能一次都不执行。for 语句的执行过程如图所示。

void main(){

int n,s=0;

for(n=1;n<=100;n++)

s=s+n; printf("s=%d\n",s);

} 用for语句计算s=1+2+3+...+99+100
int n,s=0;

for(n=1;n<=100;n++)

s=s+n; printf("s=%d\n",s);

  本例for语句中的表达式3为n++,实际上也是一种赋值语句,相当于n=n+1,以改变循环变量的值。

void main(){

int a=0,n;

printf("\n input n: ");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d ",a*2);

} 用for语句修改例题。从0开始,输出n个连续的偶数。

int a=0,n;

printf("\n input n: ");

scanf("%d",&n);

for(;n>0;a++,n--)

printf("%d ",a*2);

  本例的for语句中,表达式1已省去,循环变量的初值在for语句之前由scanf语句取得,表达式3是一个逗号表达式,由a++,n-- 两个表达式组成。每循环一次a自增1,n自减1。a的变化使输出的偶数递增,n的变化控制循次数。

在使用for语句中要注意以下几点

  1.for语句中的各表达式都可省略,但分号间隔符不能少。如:for(;表达式;表达式)省去了表达式1。for(表达式;;表达式)省去了表达式2。

  for(表达式;表达式;)省去了表达式3。for(;;)省去了全部表达式。
  2.在循环变量已赋初值时,可省去表达式1,如例3.27即属于这种情形。如省去表达式2或表达式3则将造成无限循环,这时应在循环体内设法结束循环。例题即属于此情况。

void main(){

int a=0,n;

printf("\n input n: ");

scanf("%d",&n);

for(;n>0;)

{ a++;n--;

printf("%d ",a*2);

} } 本例中省略了表达式1和表达式3,由循环体内的n--语句进行循环变量n的递减,以控制循环次数。

void main(){

int a=0,n;

printf("\n input n: ");

scanf("%d",&n);

for(;;){ a++;n--; printf("%d ",a*2);

if(n==0)break;

} } 本例中for语句的表达式全部省去。由循环体中的语句实现循环变量的递减和循环条件的判断。当n值为0时,由break语句中止循环,转去执行for以后的程序。在此情况下,for语句已等效于while( 1)语句。如在循环体中没有相应的控制手段,则造成死循环。
3.循环体可以是空语句。

#include"stdio.h"

void main(){

int n=0; printf("input a string:\n");

for(;getchar()!='\n';n++);

printf("%d",n);

} 本例中,省去了for语句的表达式1,表达式3也不是用来修改循环变量,而是用作输入字符的计数。这样,就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语句。应注意的是,空语句后的分号不可少,如缺少此分号,则把后面的printf 语句当成循环体来执行。反过来说,如循环体不为空语句时,决不能在表达式的括号后加分号,这样又会认为循环体是空语句而不能反复执行。这些都是编程中常见的错误,要十分注意。

  4.for语句也可与while,do-while语句相互嵌套,构成多重循环。以下形成都合法的嵌套。

(1)for(){…

while() {…} … } (2)do{ … for() {…} …

}while();

(3)while(){

… for() {…} … } (4)for(){

… for(){ … } } void main(){

int i,j,k;

for(i=1;i<=3;i++)

{ for(j=1;j<=3-i+5;j++)

printf(" ");

for(k=1;k<=2*i-1+5;k++)

{ if(k<=5) printf(" ");

else printf("*");

} printf("\n");

} }
  for语句是最灵活也是最常用的循环结构。Java主要提供了两种形式的for语句:数值型for循环和基于集合的for循环。

1. 数值型for循环

数值型for循环的一般形式为:

for(表达式1;表达式2;表达式3)

语句; 在关键字for后的括号内有3个表达式语句,其中表达式1和表达式3可以是任意表达式语句或空语句,甚至是逗号表达式;表达式2必须为boolean型的常量、变量或表达式。它的执行过程如图5-9所示,说明如下:

  (1)先求解表达式1,然后求解表达式2,若其值为真(true),则执行for语句中内嵌的循环语句;若其值为假(false),则转到第5步结束循环。

(2)求解表达式3。

(3)转回上面求解表达式2,继续执行。

(4)循环结束,执行for语句下面的一个语句。

  在使用数值型for循环时,常把表达式1用于初始化循环变量,表达式2是循环的判定条件,表达式3常用作循环增量表达式。其形式如下:

for(初始化循环变量;循环条件;循环变量增量)

语句; 如例2.6求1 2 3 4 5,其算法实现如下:

【例5.8】

程序执行结果如下:

1 2 3 4 5=120

使用注意事项:

  (1)for循环中的表达式1(循环变量初始化)、表达式2(循环条件)和表达式3(循环变量增量)都是可选项, 即可为空语句,但“;”不能缺省。

  省略了“表达式1(循环变量初始化)”,表示不对循环控制变量初始化。循环变量的初始化工作可置于for循环之前。

  省略了“表达式2(循环条件)”,则for循环将成为死循环,不停的执行循环体。如:

for(int i=2; ;i++)

{ t= t*i; } 相当于: for(int i=2;true;i++)

{ t= t*i; } 省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。如:

for(int i=2;i<=5 ;i++)

{ t= t*i; } 相当于: for(int i=2;i<=5;)

{ t= t*i; i++; } 省略了“表达式1(循环变量初始化)”和“表达式3(循环变量增量)”。如:

for(int i=2;i<=5 ;i++)

{ t= t*i; } 相当于: int i=2; for(;i<=5;)

{ t= t*i; i++; } 当然,3个表达式可以同时省略。如:

for(int i=2;i<=5 ;i++)

{ t= t*i; } 相当于: int i=2; for(;;) { t = t*i;

i++; if(i<=5) break; //如果i<=5,则跳出循环体。

} (2)表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。如:

int t=1; for(int i=2;i<=5;i++)

{ t= t*i; } 相当于: int t,i; for(t=1,i=2;i<=5;t=t*i,i++); //该语句虽简洁,但不够清晰,建议程序中不要这么写。

2. 基于集合的for循环

  基于集合的for循环是在JDK5.0版本之后,为简化集合类、枚举和数组的迭代过程而提出来的。其一般形式如下:

for(类型 标识符:可迭代的表达式) 语句;

  在关键字for后的括号中有两个控制元素,它们之间用一个冒号“:”分隔开。第一个元素用于指定的一个类型标识符;而第二个元素指定了一个可迭代的表达式(结果通常是集合或数组)。第一个元素指定的类型标识符其类型应与集合或数组中存放的对象相兼容。它的语义可描述如下,其流程如图5-10所示。

类型 标识符 =null;

for(int i=0; i<可迭代表达式结果长度; i++)

{ 标识符= 可迭代表达式结果.get(i);

语句; } 集合类和枚举将在后面章节详细介绍,这里举个在数组中运用的例子。如例2.9有50个学生,要求将他们之中成绩在80分以上者打印出来。

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-26 18:36
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
数组的给两个网址:http://developer.
http://

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-26 18:37
电子门外汉
Rank: 2
等 级:论坛游民
帖 子:57
专家分:29
注 册:2010-5-16
收藏
得分:0 
回复 7楼 sunyh1999
很感谢大侠的指教。Thank you!
俺学得不够透彻。大侠作为过来人,可不可以再传授点学C语言的方法。Thank you
2010-07-26 19:13
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:0 
回复 6楼 sunyh1999
这样算不算刷分啊
2010-07-26 23:12
tangxuena
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2010-4-22
收藏
得分:0 
#include<stdio.h>
main()
{
    int i,j,row=0,colum=0,max;
    int a[3][4]={{1,2,3,4},{9,8,7,6,},{-10,10,-5,5}};
    max=a[0][0];
    for(i<0;i<=2;i++);        {for(j=0;j<=3;j++)
        if(a[i][j]>max)
        {max=a[i][j];
         row=i;
         colum=j;
        }
}    printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
  
2010-07-27 13:40
快速回复:刚学C两个月,不懂程序那里出错了,求助大侠
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038945 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved