首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
为编程高手的五个阶段- -| 回首页 | 2005年索引 | - -基础软件人才需具备6个基本素质!

C语言的魅力!

                                      

感受一下C语言的魅力吧!原来C语言这么有用啊!
如果我想要写一个程序,当sex=0的时候表示母鸡,1的时候表示公鸡,用number表示鸡的数量。并把他们用在一个英文句子中显示出来,你会如何做?(请注意英语中的可数名词的复数要+s)

也许你会去分配大量的if语句,并写出四个句子??你不得不这样做,因为我并没给你多余的变量或者字符串,你可不能违背神的意志自己创造出几个新的东西出来哦。

void main(){
int sex=0,number=1;
if(sex==0)
if(number==1)
printf("There is %d hen in the garden.\n",number);
else
printf("There are %d hens in the garden.\n",number);
else
if(number==1)
printf("There is %d cock in the garden.\n",number);
else
printf("There are %d cocks in the garden.\n",number);
getch();
}

程序原理:先判断sex,确定这只(些)鸡是公的还是母的,然后再判断number,确定是应该用单数还是复数。

这样是不是很烦琐?其实C语言要解决这样的问题只用"一句简单的printf()函数"就够了。


void main(){
int sex=0,number=10;
printf("There %s %d %s in the graden.\n",
number==1?"is":"are",
number,
number==1?(sex?"cock":"hen"):(sex?"cocks":"hens"));
getch();
}

程序原理:略了。。。。应该都看的明白了~~!!!

为什么可以这样用?:呢?我们都知道,在C语言中任何一个""都是一个字符串。比如"abc"就是一个字符串。
但是如果我们这样定义一个int a="abc";会怎么样?也许大家都知道了,a中的值就是"abc"的首地址。所以我们得到一个结论,"abc"如果把它看成是一个整体,那么它的值不是一个字符串,而是指向"abc"首地址的一个8bit数据(标准编译模式下)。

于是,我们可以这样解释number==1?"is":"are"了。
number==1?("is"的首地址):("are"的首地址)
如果number==1,则表达式的值就是"is"的首地址
如果number!=1,则表达式的值就是"are"的首地址
所以,表达式的值被printf()函数中的%s按照字符串的首地址接收、显示出来。

同样的道理,我们可以去解释sex?"cock":"hen"

【作者: 刘加开】【访问统计:】【2005年03月21日 星期一 17:29】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=986909

回复

- 评论人:gggggg   2007-09-16 09:25:02   

gffffff

- 评论人:nvsdzjl   2007-01-12 02:58:19   

理解的很深刻啊!多谢!
不过好象缺少了" 头文件"

- 评论人:flown   2005-03-21 21:45:50   

good

验证码:   
评论内容: