C语言程序写版式.docx
- 文档编号:6193894
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:42
- 大小:29.89KB
C语言程序写版式.docx
《C语言程序写版式.docx》由会员分享,可在线阅读,更多相关《C语言程序写版式.docx(42页珍藏版)》请在冰豆网上搜索。
C语言程序写版式
C语言程序的书写版式
版式虽然不会影响程序的功能,但会影响可读性。
程序的版式追求清晰、美观,是程序风格的重要构成因素。
可以把程序的版式比喻为“书法”。
好的“书法”可让人对程序一目了然,看得兴致勃勃。
差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。
1.空行
空行起着分隔程序段落的作用。
空行得体(不过多也不过少)将使程序的布局更加清晰。
空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。
所以不要舍不得用空行。
【规则1-1】在每个声明之后、每个函数定义结束之后都要加空行。
下面是函数之间的空行的示例。
voidFunction1(…)
{
…
}
/*空行*/
voidFunction2(…)
{
…
}
/*空行*/
voidFunction3(…)
{
…
}
【规则1-2】在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。
下面是函数内部的空行的示例。
voidFunction3(…)
while(condition)
{
statement1;
//空行
if(condition)
{
statement2;
}
else
{
statement3;
}
//空行
statement4;
}
2.代码行
【规则2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。
这样的代码容易阅读,并且方便于写注释。
【规则2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。
不论执行语句有多少都要加{}。
这样可以防止书写失误。
风格良好的代码行示例:
intwidth;//宽度
intheight;//高度
intdepth;//深度
x=a+b;
y=c+d;
z=e+f;
if(width { dosomething(); } for(initialization;condition;update) { dosomething(); } //空行 other(); 风格不良的代码行示例: intwidth,height,depth;//宽度高度深度 X=a+b;y=c+d;z=e+f; if(width for(initialization;condition;update) dosomething(); other(); 【建议】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。 如果引用了未被初始化的变量,可能会导致程序错误。 本建议可以减少隐患。 例如: intwidth=10;//定义并初绐化width intheight=10;//定义并初绐化height intdepth=10;//定义并初绐化depth 3.代码行内的空格 【规则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-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。 【规则3-6】一元操作符如“! ”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。 【规则3-7】象“[]”、“.”、“->”这类操作符前后不加空格。 【建议】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如: for(i=0;i<10;i++)和if((a<=b)&&(c<=d)) 代码行内的空格示例: voidFunc1(intx,inty,intz);//良好的风格 voidFunc1(intx,inty,intz);//不良的风格 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 a: b;//良好的风格 x=a a: b;//不好的风格 int*x=&y;//良好的风格 int*x=&y;//不良的风格 array[5]=0;//不要写成array[5]=0; a.Function();//不要写成a.Function(); b->Function();//不要写成b->Function(); 4.对齐 【规则4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。 【规则4-2】{}之内的代码块在‘{’右边数格处左对齐。 风格良好的对齐示例: voidFunction(intx) { …//programcode } if(condition) { …//programcode } else { …//programcode } for(initialization;condition;update) { …//programcode } While(condition) { …//programcode } 如果出现嵌套的{},则使用缩进对齐,如: { … { … } … } 风格不良的对齐示例: voidFunction(intx) {…//programcode} if(condition){…//programcode} else{…//programcode} for(initialization;condition;update) {…//programcode} while(condition){…//programcode} 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_MAX值的范围至少是32767,也就是双字节整数的最大值。 下面我们用一个例子来取得从1到6的随机整数: #include #include main() { inti; for(i=1;i<=20;i++) printf("%10d",1+(rand()%6)); } 第2行的stdlib.h是rand()函数的头文件,第7行就是实现功能的语句了。 前面我们以经说过函数取的值是介于0到RANDMAX之间的,而我们所要的是1到6之间的整数。 想一想就知道: 任一整数除以6所得的余数是0~5之间的整数,再加一之后就是1到6了,也就是我们的目标。 利用这个原理我们使用%号对随机数进行了缩放。 OK,运行两次程序: 一: 66556511536624262341 二: 66556511536624262341 发现: 两次运行的结果完全一样。 结论: 这算什么随机数。 具有讽刺意味的是,这种重复性是rand的一个重要特点,在调试程序时,这种重复性是必不可少的,因为它可以证明对程序的修改能够正常运行。 实际上,rand函数产生的是伪随机数。 但我们需要的是随机数。 于是,需要对程序进行随机化,这就需要使用标准库函数srand来实现了。 这二个函数的具体工作过程如下: 1)首先给srand()提供一个种子,它是一个unsignedint类型,其取值范围从0~65535; 2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3)根据需要多次调用rand(),从而不间断地得到新的随机数; 4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 以下是一个产生随机数的例子 #include #include main() { inti; unsigndeseed; printf("Enteraseed: "); scanf("%u",&seed); srand(seed); for(i=1;i<=20;i++) printf(""%10d",1+(rand()%6)); } 程序的运行结果是当我们输入不同的SEED时,产生不同组的随机数。 这句话的意思有两个: 一: 当输入相同的SEED时,产生的同组随机数;二: 每次运行我们都要输入一个SEED。 如果我们希望不用每次输入SEED值,而且每次运行时SEED值都是不同的,我们可以用下面语句代替上面的第三块的三个语句: srand(time(NULL)); 这会使计算机自动读取自己的时钟以获得SEED值。 于是我们就获值了每次运行都会改变的SEED,同样也就获得了真正的随机数。 下面是两个使用随机数的例子。 例1: 输出10个在[60-100]之间随机的整数。 利用公式rand()%(b-a)+a,就会产生在[a,b]之间的一个随机数 #include #include #include main() {intmagic,i; srand(time(NULL)); for(i=1;i<10;i++) {magic=rand()%40+60; printf("%10d",magic); } printf("\n"); } 例2: 输出5个在[4-30]之间随机的整数。 #include #include #include main() {intmagic,i; srand(time(NULL)); for(i=1;i<10;i++) {magic=rand()%(30-4)+4; printf("%10d",magic); } printf("\n"); } 例3: 猜数游戏(范围: 10-100) #include #include #include main() {intmagic,num; intcount; srand(time(NULL)); magic=rand()%(100-10)+10; count=0; while (1) { printf("pleaseguessthenum: \n"); scanf("%d",&num); count++; if(num>magic)printf("big"); elseif(num else{printf("right");printf("count=%d",count);break;} } } 3顺序题 方法不是唯一的,仅供参考。 题目4: #include"stdio.h" main() {floatf,c; printf("inputf: "); scanf("%f",&f); c=5*(f-32)/9; printf("c=%6.2f\n",c); } 题目5: #include"stdio.h" main() {charc1,c2,b,d; printf("pleaseinputasmallletter: "); scanf("%c",&c1); c2=c1-32; b=c2-1; d=c2+1; printf("thebigletteris%c\n",c2); printf("beforeis%c,lateris%c\n",b,d); } 题目6: #include"stdio.h" main() {intx,y,h,f; scanf("%d%d",&h,&f); x=2*h-f/2; y=f/2-h; printf("x=%d,y=%d\n",x,y); } 题目7: #include"stdio.h" main() {floatx,y,h,s; scanf("%f%f%f",&x,&y,&h); s=(x+y)*h/2; printf("s=%f\n",s); } 题目8: #include"stdio.h" main() {charx,y; printf("pleaseinputtwoletter: \n"); scanf("%c,%c",&x,&y); printf("theloweris%c,%c\n",x+32,y+32); printf("theasciiis%d,%d\n",x+32,y+32); } 题目9: #include"stdio.h" #include"math.h" main() {floatx,y,z; scanf("%f%f",&x,&y); z=sqrt(y)+pow(x,5)/2; printf("z=%f\n",z); } 选择题 方法不是唯一的,仅供参考。 。 题目1: main() {inta,b,c,max; printf("inputthreeinteger: "); scanf("%d%d%d",&a,&b,&c); if(a if(b max=c; else max=b; else if(a max=c; else max=a; printf("max=%d",max); } 题目2: main() {intx,y; printf("inputx: "); scanf("%d",&x); if(x<1) {y=x;printf("x=%d,y=x=%d",x,y);} elseif(x<10) {y=2*x-1;printf("x=%d,y=2x-1=%d",x,y);} else {y=3*x-11;printf("x=%d,y=3x-11=%d",x,y);} } 题目3: main() { floatscore; chargrade; printf("pleaseinputascore: "); scanf("%f",&score); switch((int)(score/10)) { case10: case9: grade='A';break; case8: grade='B';break; case7: grade='C';break; case6: grade='D';break; case5: case4: case3: case2: case1: case0: grade='E';break; } printf("score: %5.1f,grade: %c\n",score,grade); } 题目5: main() {inta,b,x,y; printf("inputa,b: "); scanf("%d%d",&a,&b); x=a*a+b*b; if(x>100) {y=x/100;printf("%d",y);} else printf("%d",a+b); } 题目6: #include"stdio.h" main() {charch; printf("pleaseinputachar: "); ch=getchar(); if(ch<32) printf("\nThecharisacontrolchar.\n"); elseif(ch>='A'&&ch<='Z') printf("\nThecharisacaptalchar.\n"); elseif(ch>='a'&&ch<='z') printf("\nThecharisalowerchar.\n"); elseif(ch>='1'&&ch<='9') printf("\nThecharisadigitchar.\n"); else printf("\nThecharisanotherchar.\n"); } 题目8: operator break default 说明: g格式符: 以f格式或e格式输出实数,且不输出无意义的零。 选择f格式或e格式的原则是: 那种格式输出时所占宽度较小,即使用其为g格式符的输出形式。 题目9: #include"math.h" main() {inta,b,c,t,min; scanf("%d,%d,%d",&a,&b,&c); t=(abs(a) a: b; min=(abs(t) t: c; printf("%d",min); } 题目10: main() {intm,n,x; scanf("%d,%d,%d",&m,&n,&x); if((x%n==0&&x%m==0)&&(n%x==0&&m%x==0)) printf("既是公约数,又是公倍数\n"); elseif(x%n==0&&x%m==0) printf("公倍数\n"); elseif(n%x==0&&m%x==0) printf("公约数\n"); else printf("既不是公约数,又不是公倍数\n"); } 题目11: #include"math.h" main() {inta,b; scanf("%d,%d",&a,&b); if(sqrt(a*a+b*b)<15) printf("in"); elseif(sqrt(a*a+b*b)==15) printf("on"); else printf("out"); } 题目12: #include"stdio.h" main() {charch;intm; ch=getchar(); switch(ch) {case'1': scanf("%d",&m); printf(" (1): 10to16---%x",m);break; case'2': scanf("%d",&m); printf(" (2): 10to8---%o",m);break; case'3': scanf("%o",&m); printf("(3): 8to10---%d",m);break; case'4': printf("quit");} } 循环试题 实验题 题目4: sn=sn+tn tn=tn+a 题目5: (1) main() {inti,j,k,m; for(i=100;i<=999;i++) { j=i/100; k=i/10-j*10; m=i%10; if(i==j*j*j+k*k*k+m*m*m) printf("%5d",i); } } (2) main() {inti,j,k,n,m; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) {m=i*100+j*10+k; n=i*i*i+j*j*j+k*k*k; if(m=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 版式