“Morning:3”通过精心收集,向本站投稿了7篇c语言之良好的编程习惯,以下是小编为大家整理后的c语言之良好的编程习惯,欢迎参阅,希望可以帮助到有需要的朋友。

c语言之良好的编程习惯

篇1:c语言之良好的编程习惯

1.在使用变量时应该遵循一下良好的编程习惯,

<1>定义有意义的变量名,有助于程序自成文档,可以减少注释。

<2>用作变量名的标识符,第一个字母应该小写。大写字母开头和字母全部大写的标识符有专门的含义。

<3>变量名使用多个单词可使程序具有更好的可读性,这种情况下,需要将第一个单词外的每个单词首字母大写或在每个单词之间加入下划线_以区分不同的单词。

2.只有内建数据类型和函数对象类型适用于传值调用。对于其他类型,建议使用引用常量传参,而不是传值。因为引用常量参数的方式更高效,而且可以避免“截断问题”

3.定义的静态存储变量无论是全局的还是局部的,该变量定义和初始化都是在程序编译时进行的。在实际应用中,如果没有为静态变量赋初值,某些编译器进行编译时,可能会出

错,为了安全起见,应该在声明变量时进行初始化。

4.并非所有的递归数学公式都可以转为递归程序。在递归结构进行大型程序设计时,需要考虑到可理解性和效率之间的关系。

5.任何递归程序都可以通过控制系统堆栈转为非递归程序。

6.仅当程序大部分函数都使用某个变量时,才应将其变量声明为全局变量。如果只有一些函数,则应将该变量作为参数传递给这些函数,并不将他们声明为全局变量。

7.内部函数(staic)在一些情况下具有非常重要的作用,

例如使用内部函数可以防止在其他文件代码中由于误操作调用该函数而破坏其数据。

8.用户编写登录程序时使用getch函数,在输入用户名密码时不显示输入信息。

9.使用putchar和putch函数输出字符,当输出超过窗口的右边界时会自动转到下一行的开始继续输出。当窗口内填满内容仍然没有结束输出时,窗口屏幕会自动逐行上移直到输

出结束为止。

10.用户使用完文件之后关闭文件,如果程序在结束后没有显示地关闭文件,有可能会丢失数据。如果文件不是正常关闭,缓冲区的内容可能没有写在磁盘上。

11.在文本模式下最好少用fseek函数,因为已存在库函数的转义,在文本模式下“\r\n”还是被fseek函数当作两个字符。

12.c语言的高级文件处理能被大多数程序员理解,因此如果用户使用的是fopen(),fgetc()等此类高级函数,将会帮助程序员更好的理解代码。

13.文件句柄可以是任何有效的标识符,由大小写字母、数字、下划线字符组成。文件句柄没有标志性的前缀,因此为了使得文件句柄有所区别,程序员经常以

全部大写字母表示。

14.使用rename()函数时需要注意一下两点。

<1>在重命名打开文件之前,必须先关闭该文件

<2>当使用rename函数将某个文件从不受保护的位置复制到受保护的位置时,该文件仍保持较低的限制权限,即该文件不受保护。

15.同上,使用remove()函数时必须先关闭它。

篇2:重拾c语言之动态内存分配

动态内存分配传统数组的缺点:1数组长度必须事先制定,且只能是长整数不能是变量2传统形式定义的数组该数组的内存程序无法手动释放3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数运行结束4数组的长度不能再函数的运行的过程中动态的扩充或者缩小5不能跨函数使用为什么需要动态分配内存动态内存分配内存举例――动态数组的构造静态内存分配和动态内存分配跨函数使用内存的问题#includevoid f(void){int a[5]={0,1,2,3,4}//无法手动释放要本函数运行完之后要系统释放}int main(){f();}#incliude#includeint main(){int i=5;/*静态分配*//*分配八个字节p存储首地址编号*/int *P=(int *)malloic(4);/* 第二个int *强制转换成int型 *//*表示四个字节但是只用首地址表示*/free(p);//free(p)表示把p所指向的内存给释放掉//p本身的内存是不能程序员手动释放}/*malloc只能呢过返回首地址*/p本身所占的内存是静态分配的 p是所指的内存的动态

//malloc函数学习动态内存分配#includevoid f(int *q){*q=200;如果这里写free(p);则后面主函数中的无意义}int main(){int *p=(int*)malloc(sizeof(int))*p=10;printf(“%d\n”,*p);f(p);/*free(p);*/这样也是错的因为已经释放内存printf(“%d\n”,*p); } zhan存储结构 堆分配 战区 兑取

篇3:结合单片机学习板学习c语言之AD转换

目的:通过STC单片

机接收ADC0804

的数字量,并把该数字

量通过8155控制的

LED显示出来,

/*本程序利用查询法

得到ADC0804的

AD转换后的数字量。

*/

#include“a

t89x51.h”

#include“a

bsacc.h”

#include “intrins.h

#include

tdio.h>

#include“m

ath.h”

#define uchar unsigned char

sfr ISP_CONTR =0xE7;

uchar advalue,ad

l,adh;

uchar code BitdisL[]=

{0x1f,0x2f

,0x37,0x3b

,0x3d,0x3e

};

uchar code Chardis[]=

{0x3f,0x06

,0x5b,0x4f

,0x66,0x6d

,0x7d,0x07

,0x7f,0x6f

,0x77,0x7c

,0x39,0x5e

,0x79,0x71

};

delay_05s(

)

{

int count;

count=647

395;

for(;coun

t!=0;count

--);

}

/*void ad interrupt 2 //如果想要用中断法

,可以使用这个子程序

{

//EX1=0;

RD=0;

advalue=P

0;

adl=adval

ue & 0x0f;

adh=_cror

_(advalue,

4);

RD=1;

//P1=~P1;

//P1=adva

lue;

WR=0;

_nop_();

WR=1;

//EX1=1;

}*/

void serial() interrupt 4 //编号0-4,外中

断0,定时器0,外中

断1,定时器1,串行

中断

{

uchar a;

RI=0;

a=SBUF;

if (a==0xFE)

{P1_0=0;

delay_05

s();

delay_05

s();

ISP_CONT

R=0x60;}

else if(a=='A')

{P1_1=0;

delay_05

s();

P1_1=1;

}

}

void main(void)

{

unsigned int b;

unsigned char cmd,temp;

TMOD=0x20

;

TH1=0xf4;

TL1=0XF4;

TR1=1;

SCON=0XF8

c语言之良好的编程习惯;

PCON=0X80

;

IT0=1;

EA=1;

ES=1;

RI=0;

cmd=0x0F;

XBYTE[0X7

FF0]=cmd;

WR=0;

_nop_();

WR=1;

while(1)

{

WR=0;

_nop_();

WR=1;

while(P3

_3);

RD=0;

advalue=

P0;

RD=1;

if (cabs(adva

lue-temp)>

0x01)/*该句仅

仅为了显示值不会老是

变动,但代价是显示精

度减少了,有的电压不

能用数字显示出来,

*

/

{

temp=ad

value;

adl=adv

alue & 0x0f;

adh=adv

alue>>4;

}

XBYTE[0X

7FF3]=Bitd

isL[1];

XBYTE[0X

7FF1]=Char

dis[adl];

for(b=0;

b<500;b++)

;

XBYTE[0X

7FF3]=Bitd

isL[0];

XBYTE[0X

7FF1]=Char

dis[adh];

for(b=0;

b<500;b++)

;

}

}

【重点难点】

1.启动ADC080

4,有的书写MOVX

@Ri,A (即XBYTE[0X

0000]=0X00

;),用这个语句来启

动单片机,我个人认为

,程序没错,但是它可

能针对低频晶振用的,

当用到高频晶振,WR

篇4:C语言之函数调用03―最大公约数和最小公倍数

//函数调用/*======================================================题目:求两个数的最大公约数和最小公倍数,

C语言之函数调用03―最大公约数和最小公倍数

。如:16和12的最大公约数是:4 16和12的最小公倍数是:48======================================================*/#includeint GY(int m,int n){ int t,r; if(n>m) {t=m;m=n;n=t;} while((r=m%n)!=0) { m=n; n=r; } return(n);}int GB(int m,int n){ int k; k=m*n/GY(m,n); return(k);}main(){ int x,y,gys,gbs; printf(输入两数:); scanf(%d%d,&x,&y); gys=GY(x,y); gbs=GB(x,y); printf(%d和%d的最大公约数是:%d,x,y,gys); printf(%d和%d的最小公倍数是:%d,x,y,gbs);}/*=========================================================评:通过独立写两个函数GB—求最小公倍数和GY—求最大公约数,使得程序非常紧凑并很好维护和检查,=========================================================

篇5:结合单片机学习板学习c语言之led数码管显示

目的:STC单片机通

过控制8155I/O

扩展芯片驱动6位7段

LED数码管显示,

/*本程序通过单片机

控制8155的PA与

PC口,在6位的LE

D上显示123456

*/

#include“a

t89x51.h”

#include“a

bsacc.h”

#include “intrins.h

#include

tdio.h>

#define uchar unsigned char

sfr ISP_CONTR =0xE7;

uchar code BitdisL[]=

{0x1f,0x2f

,0x37,0x3b

,0x3d,0x3e

};

uchar code Chardis[]=

{0x3f,0x06

,0x5b,0x4f

,0x66,0x6d

,0x7d,0x07

,0x7f,0x6f

,0x77,0x7c

,0x39,0x5e

,0x79,0x71

};

delay_05s(

)

{

int count;

count=647

395;

for(;coun

t!=0;count

--);

}

void serial interrupt 4 //编号0-4,外中

断0,定时器0,外中

断1,定时器1,串行

中断

{

int a;

RI=0;

a=SBUF;

if (a==0xFE)

{delay_0

5s();

delay_05

s();

ISP_CONT

R=0x60;}

else

SBUF='A'

;

while(!T

I);

TI=0;

}

void main(void)

{

unsigned int b,i;

unsigned char cmd,a;

TMOD=0x20

;

TH1=0xf4;

TL1=0XF4;

TR1=1;

SCON=0XF8

;

PCON=0X80

;

EA=1;

ES=1;

RI=0;

cmd=0x0F;

XBYTE[0X7

FF0]=cmd;

a=0xfe;

while(1)

{

XBYTE[0X7

FF3]=Bitdi

sL[i];

XBYTE[0X7

FF1]=Chard

is[i];

for(b=0;

b<500;b++)

;

i++;

if (i>6)

i=0;

}

}

【重点难点】

1.熟悉8155的端

口分配,

2.确定8155地址

,由上图可以看出,由

于当8155的IO/

M=1,CE=0时,

才能对8155设置命

令寄存器和A,B,C

口。由上图不难得出命

令寄存器的地址是0x

7ff0(该地址不唯

一,也可以是0x40

00等)

3.每位LED显示时

间为“for(b=0

;b<500;b++

);”比较合适,延时

太短了,每个LED显

示变暗,这在后一个实

验中即可出现。延时太

长了,就会出现形如C

RT刷新率不高时闪烁

现象。

篇6:C语言之函数调用01―1到n的阶乘和

//函数法

/*

==========================================================

题目:求1~n的阶乘和!(0<=n<=25)

==========================================================

*/

#include

#define M 25

#define H printf(--------------------------- );

int J(int n)

{

int t=1,i;

for(i=1;i<=n;i++)

t*=i;

return(t);

}

main()

{

int i,n,sum=0,flag=1;

while(flag)

{

printf(输入要计算阶乘和的最大数(0<25): n=");

scanf(%d,&n);

if((n0))

flag=0;

}

for(i=1;i<=n;i++)

sum+=J(i);

H;printf(1!+2!+...+%d!=%d ,n,sum);H

}

/*

==========================================================

评:首先写函数求一个数的阶乘,然后通过输入数字确定求和范围,进而调用

函数并求和,

C语言之函数调用01―1到n的阶乘和

输入时用一个开关变量flag确保输入的数值可用。

==========================================================

*/

<25):>

篇7:C语言之函数调用02―一个三位数的正整数=它的各位数字的阶乘之和

//函数调用+枚举法

/*

==========================================================

题目:求一个三位数的正整数=它的各位数字的阶乘之和!

如:145=1!+4!+5!.

==========================================================

*/

#include

int J(int n)

{

int t=1,i;

for(i=1;i<=n;i++)

t*=i;

return(t);

}

main()

{

int s,i,ge,shi,bai,qian;

for(s=100;s<1000;s++)

{

ge=s%10;

shi=s/10%10;

bai=s/100%10;

if(s==J(ge)+J(shi)+J(bai))

printf(%d=%d!+%d!+%d! ,s,bai,shi,ge);

}

}

/*

==========================================================

评:首先写一个求阶乘的函数J,然后用除法和余数求出“个十百”

位上的数字,通过枚举法找到符合if条件的数,

C语言之函数调用02―一个三位数的正整数=它的各位数字的阶乘之和

==========================================================

*/

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。