| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12336 人关注过本帖, 41 人收藏
标题:C语言循环的小艺术(质数判断,菱形打印,奇数阶幻方,字符串循环移位)
只看楼主 加入收藏
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
以下是引用c语言一手在2011-1-9 14:55:03的发言:

if ( IABS(x) == IABS(y))
怎么不能换成 if(x==y||x+y==0)??
看不出我第一个程序己经用吗,我只是比较两个程序

小代码,大智慧
2011-01-09 14:59
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
"实用" (practical)
"花哨" (fancy)

"愚版"美琴,孔乙已把他那"回"字的四种写法也当作是艺术呢!


[ 本帖最后由 BlueGuy 于 2011-1-9 15:15 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-01-09 15:05
wwl23
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-1-9
收藏
得分:0 
  
2011-01-09 15:23
c语言一手
Rank: 1
等 级:禁止发言
帖 子:20
专家分:0
注 册:2011-1-6
收藏
得分:0 
回复 20楼 c语言一手
提示: 作者被禁止或删除 内容自动屏蔽
2011-01-09 15:25
xufan123
Rank: 5Rank: 5
等 级:职业侠客
帖 子:226
专家分:318
注 册:2010-11-15
收藏
得分:0 
回复 22楼 BlueGuy
貌似你很厉害
2011-01-09 15:31
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
回复 楼主 御坂美琴
#include <stdio.h>
#define IABS(x) ( (x) >= 0 ? (x) : -(x) ) //定义一个计算绝对值的宏
void print(int size) // size是这个菱形的半径,直径会是size * 2 + 1
{
    int x, y;
    for (y = -size; y <= size; y++)
    {
        for (x = -size; x <= size; x++)
        {
            if ( IABS(x) + IABS(y) <= size ) //x和y各自的绝对值的和,即 |x| + |y| <= size
                putchar( 'A' + (size - IABS(x) - IABS(y)) ); //留意这里的计算方法
            else
                putchar(' ');
        }
        putchar('\n');
    }
}


int main()
{
    print(26); //这里如为26 即26个字母输出菱形来。怎么最中心多了一个小东西‘[’呢?
    getchar();
    return 0;
}
如果比26更大时。还会成小写字母及一些怪符呢。
2011-01-09 15:32
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
嗯,如果要做比26更大的话,最好的解决办法是用一个字符串表:
#include <stdio.h>
#define IABS(x) ( (x) >= 0 ? (x) : -(x) ) //定义一个计算绝对值的宏
char* strmap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  //就是这个表
void print(int size) // size是这个菱形的半径,直径会是size * 2 + 1
{
    int x, y;
    for (y = -size; y <= size; y++)
    {
        for (x = -size; x <= size; x++)
        {
            if ( IABS(x) + IABS(y) <= size ) //x和y各自的绝对值的和,即 |x| + |y| <= size
                putchar( strmap[size - IABS(x) - IABS(y)] ); //留意这里的计算方法
            else
                putchar(' ');
        }
        putchar('\n');
    }
}


int main()
{
    print(26); //这里如为26 即26个字母输出菱形来。怎么最中心多了一个小东西‘[’呢?
    getchar();
    return 0;
}

这样的话print(61)也不成问题,如果更大,那就适当增加那个strmap字符串的长度就可以了

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-01-09 15:41
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
明白了。谢谢 !
2011-01-09 16:13
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
奇数阶幻方
程序代码:
#include<stdio.h>
int main()
{
    int i;
    const int N=5;

for(i=1;i<2*N;i++)
  {
   printf("%d ",(N+(i>N ?2*N-i:i-N?i:0)*(i%N>N/2 ?1 :-1))); 
   if(!(i%3))
       putchar('\n');
   }
   scanf("%d",i);
}
,如果时间允许可以全部用乘除表示


[ 本帖最后由 点线面 于 2011-1-9 16:51 编辑 ]

小代码,大智慧
2011-01-09 16:46
卡其
Rank: 2
等 级:论坛游民
帖 子:96
专家分:36
注 册:2010-8-30
收藏
得分:0 
太长啦。下次再仔细的看看
2011-01-09 17:30
快速回复:C语言循环的小艺术(质数判断,菱形打印,奇数阶幻方,字符串循环移位 ...
数据加载中...
 
   



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

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