C语言程序的书写版式版式虽然不会影响程序的功能,但会影响可读性程序的版式追求清晰、美观, 要构成因素可以把程序的版式比喻为“书法” 致勃勃差的程序“书法”如螃蟹爬行,让人看是程序风格的重 好的“书法” 可让人对程序一目了然,看得兴 得索然无味,更令维护者烦恼有加1. 空行空行得体 (不过多也不过少 )将使程序的布局更 加清晰空行不会浪费内存,虽然打印含有空行的程序是会多消 耗一些纸张,但是值得所以不要舍不得用空行规则 1-1 】在每个声明之后、每个函数定义结束之后都要加空行 间的空行的示例空行起着分隔程序段落的作用面是函数之void Fun cti on1( …){}/* 空行*/void Function2(…){}/* 空行*/void Function3( …){【规则 1-2 】在一个函数体内,逻辑上密切相关的语句之间不加空行, 加空行分隔下面是函数内部的空行的示例其它地方应void Function3( …)while (condition){statement1;// 空行if (condition){statement2;}else{statement3;}// 空行 statement4;2.代码行【规则2-1】一行代码只做一件事情,如只定义一个变量,或只写一 条语句。
这样的代码容易阅读,并且方便于写注释规则2-2】if、for、while、do等语句自占一行,执行语 句不得紧跟其后不论执行语句有多少都要加 {}这样可以防止书写失误风格良好的代码行示例:int width; // 宽度int height; // 高度int depth; // 深度 x = a + b; y = c + d; z = e + f;if (width < height){dosometh in g();for (in itializati on; con diti on; update) {dosometh in g();//空行other();风格不良的代码行示例:int width, height, depth; // 宽度高度深度X = a + b; y = c + d; z = e + f;if (width < height) dosometh in g();for (in itializati on; con diti on; update) dosomethi ng(); other();【建议】 尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被 忘记。
如果引用了未被初始化的变量, 可能会导致程序错误本建议可以减少隐患例如:int width = 10; //intheight = 10; //intdepth = 10; // 定义并初绐化 width定义并初绐化 height定义并初绐化 depth3. 代码行内的空格【规则 3-1 】关键字之后要留空格象 const 、 virtual 、 inline case 等关键字之 后至少要留一个空格,否则无法辨析关键字象 if 、 for while 等关键字之后应留一个空格再跟 左括号‘ (' ,以突出关键字规则 3-2 】函数名之后不要留空格,紧跟左括号‘ (' ,以与关键字 区别规则 3-3 】‘(' 向后紧跟,‘ )' 、‘, ' 、‘ ; ' 向前紧跟,紧 跟处不留空格规则 3-4 】‘,' 之后要留空格,如 Function(x, y, z) 如果‘ ; ' 不是一行的结束 符号,其后要留空格,如 for (i=1; i<10; i++) 域操作符,如“ = ” += ” “>= ” <“< &”& ,”“、“元操|作| ”符如“ “ & ” (地址运算符 ) 等前后不加空【格规则【规3-则6 】3-7 】象“ []”、 【建 议】对于表达式比较长的 适当地去掉一些空格, 如: && (c<=d))<= ”、“ + ”、“ * ”、“ % 等二元操作符的前后应当加空格。
a » a » a »、“->” 语句这类操作符前后不加空格 语 for 和 if 句,为了紧凑起见可以 i++) 和 if for(i=0;i<10; ((a<=b)【规则 3-5 】赋值操作符、比较操作符、算术操作符、逻辑操作符、位代码行内的空格示例:void Func1(int x, int y, int z); // 良好的风格void Func1 (int x,int y,int z); // 不良的风格if (year >= 2000) // 良好的风格 if(year>=2000) // 不良的风格if ((a>=b) && (c<=d)) // 良好的风格if(a>=b&&c<=d) // 不良的风格for (i=0; i<10; i++) // 良好的风格 for(i=0;i<10;i++) // 不良的风格 for (i = 0; i < 10; i ++) // 过 多的空格x = a < b ? a : b; // 良好的风格x=aFunction(); //不要写成 b -> Function();4. 对齐【规则 4-1 】程序的分界符‘ { ' 和‘ } ' 应独占一行并且 位于同一列,同时与引用它们的语句左对齐。
规则 4-2 】 { } 之内的代码块在‘ { ' 右边数格处左对齐风格良好的对齐示例 : void Function(int x){…// program code}if (condition){… // program code}else{… // program code}for (initialization; condition; update){… // program code}While (condition){… // program code}如果出现嵌套的 {}, 则使用缩进对齐,如 : {{}}风格不良的对齐示例 :void Function(int x){ … // program code }if (con diti on){ ?…// program code }else {…// program code }for (initialization; condition; update){ … // program code }while (condition){ … // program code }5. 长行拆分【规则 5-1】代码行最大长度宜控制在 70 至 80 个字符以内。
代 码行不要过 长,否则眼睛看不过来,也不便于打印规则 5-2 】长表达式要在低优先级操作符处拆分成新行, 操作符放在新行之首 (以 便突出操作符 ) 拆分出的新行要进行适当的缩进, 使排版整齐, 语句可读例如:if ((very_longer_variable1 >= very_longer_variable12)&& (very_longer_variable3 <= very_longer_variable14)&& (very_longer_variable5 <= very_longer_variable16)) dosomething();}for (very_longer_initialization;very_longer_condition; very_longer_update) { dosomething();}在 C 语言中,是如何取得这个随机数的?一个语句: rand();它的作用就是随机取 0 到 RAND_MAX 间的任何数 ANSI 标准指出, RAND_MA 值的范围至少是 32767 ,也就是双字节整数的最大值下面我们用一个例子来取得从 1到 6的随机整数: #include #include main(){ int i;for(i=1;i<=20;i++) printf("%10d",1+(rand()%6));}第2行的stdlib.h是rand()函数的头文件,第 7行就是实现功 能的语句了。
前面我们以经说过函数取的值是介于 0到 RANDMA 之间的,而我们 所要的是 1到6之间的整 数想一想就知道:任一整数除以 6所得的余数是 0~5 之间的整数, 再加一之后就是 1到 6 了,也就是我们的目标 利用这个原理我们 使用 %号对随机数进行了缩放OK 运行两次程序:一:6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 二: 6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 发现:两次运行的结果完全一样 结论:这算什么随机数具有讽刺意味的是, 这种重复性是 rand 的一个重要特点, 在调试程序时, 这种重复性是必不可少的, 因为它可以证明对程序的修改能够正常运行实际上, rand 函数产生的是伪随机数但我们需要的是随机数 于是,需要对程序进行随机化, 这就需要使用标准库函数 srand 来实现了 这二个函数的具体工作过程 如下:1) 首先给 srand() 提供一个种子,它是一个 unsigned int 类型,其取值范围 从 0~65535 ;2) 然后调用 rand() ,它会根据提供给 srand() 的种子值返回一个 随机数 (在 0到 32767 之间)3) 根据需要多次调用 rand() ,从而不间断地得到新的随机数;4) 无论什么时候,都可以给 srand() 提供一个新的种子,从而进一步“随机化” rand() 的输出结果。
以下是一个产生随机数的例子#include #include main(){int i;unsignde seed;printf("Enter a seed:"); scanf("%u",&seed); srand(seed);for( i = 1;i<=20;i++) printf(""%10d",1+(rand()%6));}程序的运行结果是当我们输入不同的 SEED 寸,产生不同组的随机 数这句 话的意思有两个:一:当输入相同的 SEED 寸,产生的同组随机数;二: 每次运行我们都要输 入一个 SEED 如果我们希望不用每次。