| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 940 人关注过本帖
标题:为什么第一行执行反常??
只看楼主 加入收藏
wandison
Rank: 1
等 级:新手上路
帖 子:50
专家分:4
注 册:2006-11-7
收藏
 问题点数:0 回复次数:13 
为什么第一行执行反常??

为什么这程序执行时第一行反常???
#include<stdio.h>
用*输出一个正方形
#include<stdio.h>
main()
{
int i=1, n;

printf("input the n=");
scanf("%d",&n);

while(i<=n*n){
if(i<(n-1))
printf("* ");
if(i>=n*(n-1))
printf("* ");
else if(i%n==1||i%n==0)
printf("* ");
else
printf(" ");
if(i%n==0)
printf("\n");
i++;
}
}
谢谢!!

搜索更多相关主题的帖子: include 正方形 color 
2006-11-07 12:31
aisqa
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-3
收藏
得分:0 

楼主可能是一个初学者,你需要注意的是:
C语言中,对整型变量的除法,是把结果直接转换为整型变量的。也就是说,当i<n时,i/n总是为零的。
所以你上面的几种情况的分类是错误的,在有的i值情况下,会执行多个操作。
我等一下把自己写的代码放上来。

2006-11-07 14:08
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
空心:
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==0||j==0||i==n-1||j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}

实心那就更简单了,连判断都不要,直接输出*


倚天照海花无数,流水高山心自知。
2006-11-07 14:15
aisqa
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-3
收藏
得分:0 
楼上不考虑换行?
2006-11-07 14:40
aisqa
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-3
收藏
得分:0 

#include<stdio.h>
main()
{
int x, y, n;

printf("input the n=");
scanf("%d",&n);

for(x=1; x<=n; x++) \\ x y相当于坐标
for(y=1; y<=n; y++)
{
if(y==n) \\如果在最后一列,输入换行符
printf("*\n");
else if ((x!=1)&&(x!=n)&&(y!=1)) \\如果不在正方形的最后一列,也不在其余三条边上,输入空格
printf(" ");
else
printf("* "); \\其余地方输入" * "
}
}

[此贴子已经被作者于2006-11-7 14:49:30编辑过]

2006-11-07 14:46
jqbbccn
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-17
收藏
得分:0 
#include<stdio.h>
main()
{
int i,j,n;
printf("请输入正方形的边长:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("* ");
printf("\n");
}
}
只要正方形就可以了吗?

2006-11-07 14:58
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用aisqa在2006-11-7 14:40:05的发言:
楼上不考虑换行?


写的太快,忘了.不好意思,应该在第二个循环后加上换行的.


倚天照海花无数,流水高山心自知。
2006-11-07 14:59
dmshfut
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-7
收藏
得分:0 

空心:
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==0||j==0||i==n-1||j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}

改一下:
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j%n==0)
printf("\n");

if(i==0||j==0||i==n-1||j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}
}
这样就OK了

2006-11-07 16:23
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用dmshfut在2006-11-7 16:23:09的发言:

空心:
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==0||j==0||i==n-1||j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}

改一下:
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j%n==0)
printf("\n");//貌似这条语句执行是先输出换行吧.


if(i==0||j==0||i==n-1||j==n-1)
{
printf("*");
}
else
{
printf(" ");
}
}
}
这样就OK了


倚天照海花无数,流水高山心自知。
2006-11-07 16:25
wandison
Rank: 1
等 级:新手上路
帖 子:50
专家分:4
注 册:2006-11-7
收藏
得分:0 

我是新手,刚学C语言,各位多多指教,谢谢!!


2006-11-07 19:45
快速回复:为什么第一行执行反常??
数据加载中...
 
   



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

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