C语言程序写版式.docx

上传人:b****5 文档编号:6193894 上传时间:2023-01-04 格式:DOCX 页数:42 大小:29.89KB
下载 相关 举报
C语言程序写版式.docx_第1页
第1页 / 共42页
C语言程序写版式.docx_第2页
第2页 / 共42页
C语言程序写版式.docx_第3页
第3页 / 共42页
C语言程序写版式.docx_第4页
第4页 / 共42页
C语言程序写版式.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

C语言程序写版式.docx

《C语言程序写版式.docx》由会员分享,可在线阅读,更多相关《C语言程序写版式.docx(42页珍藏版)》请在冰豆网上搜索。

C语言程序写版式.docx

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=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1