这个问题不知道为什么推给我好多次,不知道为什么大家对这个问题会表现出热忱。
如何智能的在每个数字中间加一个',',头尾部都没有',',用c语言实现
不用if
例如:
输入:
a[6]={1,2,3,4,5,6}
输出:1,2,3,4,5,6
我实在不知道这个讨论的意义在哪。讨论数据处理方式的第一个前提应该是数据源,即数据的组织和输入方式/格式,不同的源数据组织方式肯定有不同的优化处理方式。所以这个问题如果不按照“例如”给出的例子来说,就丝毫没有可以说的具体点。而如果按照“例如”里的例子来说,又确实没太多说的,无非是一个C语言最最基本语法的“使用比拼”(当然如果你非要绕一个老大的弯子也不是不可以),而这种“比拼”甚至都没有类似下面这种基础问题更有可说的地方:
我一直的观点就是(不针对任何个人),初学者学完语法后就接着往下学,不要总在语法这玩花,继续学习计算机科学的知识,然后用语言到具体的计算机科学的问题上去玩。想通过花哨的语法来展现自己实力的行为并不成熟。
为避免又被举报答非所问,如下:
#include <stdio.h> int main(void) { int a[6]={1,2,3,4,5,6}; int i; printf("%d", a[0]); for(i=1; i<sizeof(a)/sizeof(int); i++) printf(", %d", a[i]); printf("
"); return 0; }
执行结果:
$ gcc -o mytest mytest.c -Wall $ ./mytest 1, 2, 3, 4, 5, 6
举一个例子来说明一下什么叫钻牛角尖式的扣语法。下述例子并不针对个人,下面只是我与一个经常问我问题的一个小同学的一段对话,抛开指向性,仅作为一个例子。
很多初学者的第一个误解就是:能用越少的行或越不容易一眼看懂的写法写出的程序就越牛。很多人为了钻研此道,在根本不了解编译器的情况下,就像是要测试编译器一样,不惜一切代价挑战编译器的语法极限。比如下面这个:
printf("%d", (a!=0)&&(a!=1)?exit(0):NULL);
可以用匪夷所思来形容,这简直不知道是在脑子里构造了多少行语法后,再使劲压缩合并出来的“怪胎”。本来很简单很普通的几个逻辑,非想要想办法搞成“高深莫测”的样子。
接着,在我说exit(0)没有返回值后,又开始想通过return 0来替换exit(0),他可能是心想“return 0不就是返回0的意思么,这回应该有返回值了”。结果当然还是不行,不过好在这样他能理解三目运算符需要的是“表达式”,只是到底“表达式”的定义是什么,不知道他真正理解了没有。
最后的最后,在实在没有别的可“钻”的时候,针对上了a!=0&&a!=1的“优化和简化”,这就越少行数越牛的价值观的变相体现——越少的字符就越牛。其实在没有更多场景说明的情况下,a!=0&&a!=1这种写法已经没有什么可诟病的了,足够清晰,且一目了然。不知道为什么看到大家都能一眼看懂的语句就觉得“不够高级”,就非得觉得绕的弯越多越高级。就好象觉得写a=a+b的就low爆了,写a+=b的B格就上来了似的。
初学者研究语法本身无可厚非,熟练掌握编程语言语法是使用其编程的基本需要。但是这不代表你要陷进语言语法的坑里不出来了,抠一些极限语法的字眼,但是却又不研究编译原理。我们学习编程语言的主要目的是为了解决实际的问题,比如驱动设备、通信协议、图像处理、数据管理、任务调度、算法等等等等,而不是比谁的语法用的刁钻。