当前位置:首页 > 购物技巧 > 正文内容

c语言程序带注释50个(C语言程序注释)

hacker3年前 (2022-06-26)购物技巧66

本文目录一览:

求30行以上简单的C语言程序,要每行都有注释,明天用

C语言程序设计(第7章结构体与共用体)

插入的节点可以在表头、表中或表尾。假定我们按照以学号为顺序建立链表,则插入的

节点依次与表中节点相比较,找到插入位置。由于插入的节点可能在链表的头,会对链表的

头指针造成修改,所以定义插入节点的函数的返回值定义为返回结构体类型的指针。节点的

插入函数如下:

struct

node

*insert(head,pstr,n)

/*插入学号为n、姓名为pstr的节点*/

struct

node

*head;

/*链表的头指针*/

char

*pstr;

int

n;

{

struct

node

*p1,*p2,*p3;

p1=(struct

node*)malloc(sizeof(struct

node));/*

分配一个新节点*

/

strcpy(p1-str,pstr);

/*

写入节点的姓名字串*/

p1-num=n;

/*

学号*/

p2=head;

if(head==NULL)

/*

空表*/

{

head=p1;

p1-next=NULL;/*新节点插入表头*/

}

else

{

/*非空表*

/

while(np2-nump2-next!=NULL)

/

*输入的学号小于节点的学号,并且未到表尾*

/

{

p3=p2;

p2=p2-next;

/*

跟踪链表增长*/

}

if(n=p2-num)

/*找到插入位置*/

if

(head==p2)

/

*

插入位置在表头*

/

{

head=p1;

p1-next=p2;

}

else

{

/*插入位置在表中*/

p3-next=p1;

p1-next=p2;

}

else

{

/*插入位置在表尾*/

p2-next=p1;

p1-next=NULL;

}

}

return(head);/*

返回链表的头指针*/

}

求c语言程序,500行左右,要有详细注释。

#include stdio.h

#include windows.h

#include stdlib.h

typedef struct JOB

{

int hour;//用于存储输入的时

int min;//用于存储输入的分

int ID;//记录此作业的号

int requesttime;//存储作业所估计运行时间

int runtime;//作业周转时间

int cometime;//作业进入时间

int finishtime;//作业结束时间

int starttime;//作业开始时间

float runtime2;//带权周转时间

int prior;//响应比

}JOB;

float counttime1=0;//用于存储总的周转时间

float counttime2=0;//用于存储总的带权周转时间

int nowtime;

int flat=0;

int sign=0;

void insert(JOB [],JOB);

void FCFS();

void SJF();

void HRN();

void getprior(JOB a,int b);

int getmin(int i);

int gethour(int i);

int trans(int i,int j);

#define N 100

JOB job[N];

JOB wait[N];//用于SJF中存储等待的作业的时间

JOB job2[N];//由于在SJF中不好控制输出时按照作业序号的顺序输出,用一个数组存储

int co=0;

int jobnum;

void main()

{

int i;

printf("输入作业数:\n");

scanf("%d",i);

jobnum=i;

FILE *fp;

fp = fopen("in.txt","rb");

if(fp == NULL)

{

printf("Can't open in.txt");

exit(0);

}

for(int j=0;ji;j++)

{

fscanf(fp,"%d:%d %d",job[j].hour,job[j].min,job[j].requesttime);

job[j].ID=j+1;

job[j].cometime=job[j].hour*60 + job[j].min;

printf("%d\n",job[j].requesttime);

}

printf("\n ================================");

printf("\n | 1:FCFS 2:SJF |");

printf("\n | 3:HRN |");

printf("\n ================================");

printf("\nPlease select a number from (1,2,3):");

scanf("%d",i);

switch(i)

{

case 1: FCFS();break;

case 2: SJF();break;

case 3: HRN();break;

}

}

void FCFS()

{

printf("\n\n根据先来先服务算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

if(i==0)//如果是第一个任务

{

job[i].starttime=job[i].cometime;

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

}

else

{

job[i].starttime=(job[i-1].finishtimejob[i].cometime ? job[i-1].finishtime : job[i].cometime);

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

}

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("FCFS.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;ijobnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jjobnum;j++)

if(job[j].IDjob[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

int a,b,c,d;

a=gethour(job[i].starttime);

b=getmin(job[i].starttime);

c=gethour(job[i].finishtime);

d=getmin(job[i].finishtime);

printf("JOB%d ",job[i].ID);

fprintf(fp,"JOB%d ",job[i].ID);

if(job[i].min==0)

{

printf("%d:%d0 ",job[i].hour,job[i].min);

fprintf(fp,"%d:%d0 ",job[i].hour,job[i].min);

}

else

{

printf("%d:%d ",job[i].hour,job[i].min);

fprintf(fp,"%d:%d ",job[i].hour,job[i].min);

}

printf("%11d ",job[i].requesttime);

fprintf(fp,"%11d ",job[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job[i].runtime,job[i].runtime2);

fprintf(fp,"%13d%13f\n",job[i].runtime,job[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

system("pause");

}

int trans(int i,int j)

{

return i*60 + j;

}

int gethour(int i)

{

return i/60;

}

int getmin(int i)

{

return i%60;

}

void SJF()

{

printf("\n\n根据短作业优先算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

int numbers=jobnum;

int realnum=jobnum;

for(int i=0;inumbers;i++)

{

if(i==0)//假如是第一个,则直接进入cpu进行作业

{

job[i].starttime=job[i].cometime;

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime;

nowtime=job[i].finishtime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

job2[co++]=job[i];

for(int u=0;ujobnum-1;u++)//把第一个从job序列的移除

job[u]=job[u+1];

jobnum--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

while(jjobnum)//将已经转移的job从job序列中移除

{

job[i]=job[j];

i++;

j++;

}

jobnum=i;

}

if(flat1)//如果wait序列中不止一个等待作业

{

int r;

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime)

r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

else

{

if(flat==0)//如果wait序列中没有,即没有等待的序列,则将job序列中的第一个作业放入cpu进行运行

{

job[0].starttime=job[0].cometime;

job[0].finishtime=job[0].starttime+job[0].requesttime;

job[0].runtime=job[0].finishtime-job[0].cometime;

job[0].runtime2=(float)job[0].runtime/(float)job[0].requesttime;

nowtime=job[0].finishtime;

counttime1+=job[0].runtime;

counttime2+=job[0].runtime2;

job2[co++]=job[0];

for(int u=0;ujobnum-1;u++)//将放入运行的作业从job序列中移除

job[u]=job[u+1];

jobnum--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

while(jjobnum)

{

job[i]=job[j];

i++;

j++;

}

jobnum=j;

}

int r;

if(flat1)//如果wait序列中不止一个等待作业

{

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime) r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

else//否则如果wait序列中有等待作业,则调用wait序列的第一个作业

{

wait[0].starttime=nowtime;

wait[0].finishtime=nowtime+wait[0].requesttime;

wait[0].runtime=wait[0].finishtime-wait[0].cometime;

wait[0].runtime2=(float)(wait[0].runtime)/(float)(wait[0].requesttime);

nowtime=wait[0].finishtime;

counttime1+=wait[0].runtime;

counttime2+=wait[0].runtime2;

job2[co++]=wait[0];

for(int i=0;iflat;i++)//将wait序列的第一个作业从wait中移除

wait[i]=wait[i+1];

flat--;

int j=0;

while(job[j].cometime=nowtimejjobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中

{

wait[flat++]=job[j++];

}

int i=0;

if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中

{

if(j==1jobnum==1)//job序列中最后一个作业已经转移到wait中,则将jobnum自减一到0

jobnum--;

else

{

while(jjobnum)//否则将已转移的作业从job中移除

{

job[i]=job[j];

i++;

j++;

}

jobnum=j;

}

}

int r;

if(flat1)//如果wait里的等待序列多余一个,则进行重新排序

{

for(int x=0;xflat-1;x++)//将等待数组按照估计运行时间先后排序。

{

r=x;

for(int y=x+1;yflat;y++)

{

if(wait[y].requesttimewait[r].requesttime)

r=y;

}

if(r!=x)

{

JOB a;

a=wait[r];

wait[r]=wait[x];

wait[x]=a;

}

}

}

}

}

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("SJF.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;irealnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jrealnum;j++)

if(job2[j].IDjob2[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job2[k];

job2[k]=job2[i];

job2[i]=a;

}

}

for(int i=0;irealnum;i++)

{

int a,b,c,d;

a=gethour(job2[i].starttime);

b=getmin(job2[i].starttime);

c=gethour(job2[i].finishtime);

d=getmin(job2[i].finishtime);

printf("JOB%d ",job2[i].ID);

fprintf(fp,"JOB%d ",job2[i].ID);

if(job2[i].min==0)

{

printf("%d:%d0 ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min);

}

else

{

printf("%d:%d ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min);

}

printf("%11d ",job2[i].requesttime);

fprintf(fp,"%11d ",job2[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2);

fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum);

system("pause");

}

void HRN()

{

co=0;

printf("\n\n根据最高响应比优先算法:\n");

int k;

for(int i=0;ijobnum-1;i++)//将作业数组按照进入时间先后排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].cometimejob[k].cometime) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

nowtime=job[0].cometime;

for(int i=0;ijobnum;i++)

{

int j=i;

int xx=i;

while(j++jobnum)//依次求得未完成的作业的优先级

job[j].prior=1+(float)(nowtime-job[j].cometime)/job[j].requesttime;

int k;

for(int i=xx;ijobnum-1;i++)//将作业数组按照响应比由高到低排序。

{

k=i;

for(int j=i+1;jjobnum;j++)

{

if(job[j].priorjob[k].prior) k=j;

}

if(k!=i)

{

JOB a;

a=job[k];

job[k]=job[i];

job[i]=a;

}

}

if(job[i].prior=1)//有等待的则让等待的开始时间等于现在时间

job[i].starttime=nowtime;

else

job[i].starttime=job[i].cometime;//没有等待的作业的话就让下一次第一个进入的工作的时间当作其开始时间并且赋给当前时间

job[i].finishtime=job[i].starttime+job[i].requesttime;

job[i].runtime=job[i].finishtime-job[i].cometime;

job[i].runtime2=(float)job[i].runtime/job[i].requesttime;

nowtime=job[i].finishtime;

counttime1+=job[i].runtime;

counttime2+=job[i].runtime2;

job2[co++]=job[i];

}

printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

FILE *fp;

fp = fopen("HRN.txt","w");

if(fp==NULL)

{

printf("Can't create file : SJF.txt\n");

exit(0);

}

fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n");

for(int i=0;ijobnum-1;i++)//将作业数组按照作业的ID排序

{

k=i;

for(int j=i+1;jjobnum;j++)

if(job2[j].IDjob2[k].ID)

k=j;

if(k!=i)

{

JOB a;

a=job2[k];

job2[k]=job2[i];

job2[i]=a;

}

}

for(int i=0;ijobnum;i++)

{

int a,b,c,d;

a=gethour(job2[i].starttime);

b=getmin(job2[i].starttime);

c=gethour(job2[i].finishtime);

d=getmin(job2[i].finishtime);

printf("JOB%d ",job2[i].ID);

fprintf(fp,"JOB%d ",job2[i].ID);

if(job2[i].min==0)

{

printf("%d:%d0 ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min);

}

else

{

printf("%d:%d ",job2[i].hour,job2[i].min);

fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min);

}

printf("%11d ",job2[i].requesttime);

fprintf(fp,"%11d ",job2[i].requesttime);

if(b==0)

{

printf("%d:%d0 ",a,b);

fprintf(fp,"%d:%d0 ",a,b);

}

else

{

printf("%d:%d ",a,b);

fprintf(fp,"%d:%d ",a,b);

}

if(d==0){

printf("%d:%d0 ",c,d);

fprintf(fp,"%d:%d0 ",c,d);

}

else{

printf("%d:%d ",c,d);

fprintf(fp,"%d:%d ",c,d);

}

printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2);

fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2);

}

printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum);

system("pause");

}

作业调度

求用c语言编写的程序,最好带着注释(越详细越好!!)

#includestdio.h

#includestring.h

#includestdlib.h

#include"conio.h"

#define N 20

struct depositor

{char num[20];br char name[20];br char per[20];br float sec;br float mon;br};

void menu();

int reads(struct depositor dep[N]);

void save(struct depositor dep[N],int n);

void add();

void del();

void change();

void show();

void main()

{

int n;

while(1)

{

menu();

printf("\n 请输入您要选择的操作序号,按回车键确认:");

scanf("%d",n);

switch(n)

{

case 1: add();break;

case 2: show();break;

case 3: del();break;

case 4: change();break;

case 5: exit(0);

default: printf("输入错误,请输入列表中存在的序号!\n ");

}

}}

void menu()

{

printf(" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");

printf("\n ************************* 银行个人账户管理系统*************************** ");

printf("\n 1 储户开户");

printf("\n 2 余额查询");

printf("\n 3 储户销户");

printf("\n 4 密码修改");

printf("\n 5 退出");

printf("\n ************************************************************************** ");

printf("\n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");

}

int reads(struct depositor dep[N]) // 读取储户内容

{

FILE *fp;

int i=0;

if((fp=fopen("account.dat","r"))==NULL)

{

printf("文件打开失败!\n");

return 0;

}

else

{

for(i=0;!feof(fp);i++)

fscanf(fp,"\n%s %s %s %f %f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon);

}

fclose(fp);

return i;

}

void save(struct depositor dep[N],int n) // 储户保存后信息

{

FILE *fp;

int i=0;

if((fp=fopen("account.dat","w"))==NULL)

{

printf("文件打开失败!\n");

return ;

}

else

{

for(i=0;in;i++)

fprintf(fp,"\n%s %s %s %f %f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon );

}

fclose(fp);

}

void add()/*储户开户*/

{

FILE *fp;

struct depositor dep;

if((fp=fopen("account.dat","a"))==NULL) //如果文件已经存在,可以追加储户信息

{

if((fp=fopen("account.dat","w"))==NULL) // 文件不存在时,创建新文件,输入储户信息

{

printf("用户不存在!\n");

return ;

}

}

printf("\n请输入储户帐号,并按回车键确认:\n");

scanf("%s",dep.num);

fprintf(fp,"\n%s\n",dep.num);

printf("\n请输入储户姓名,并用回车键确认: \n");

scanf("%s",dep.name);

fprintf(fp,"\n%s\n",dep.name);

printf("\n请输入储户身份证号,并用回车键确认: \n");

scanf("%s",dep.per);

fprintf(fp,"\n%s\n",dep.per);

printf("\n请输入储户密码,并用回车键确认: \n");

scanf("%f",dep.sec);

fprintf(fp,"\n%f\n",dep.sec);

printf("\n请输入储户金额,并按回车键确认: \n");

scanf("%f",dep.mon);

fprintf(fp,"\n%f\n",dep.mon);

if(dep.mon10 )

{ printf("\n 储户金额低于十元,不予开户 \n");

return ;

}

printf("\n **********************开户成功*************************\n");

fclose(fp);

}

void show() //余额查询

{

struct depositor dep[N];

int i,n ;

char s[20];

float t ;

n=reads(dep);

printf("\n请用户输入账号,密码,用空格隔开,按回车键确认:\n");

scanf("%s %f",s,t);

for(i=0;in;i++)

if (strcmp(s,dep[i].num)==0 t==dep[i].sec) break;

if (i=n || t!=dep[i].sec)

{

printf("\n 输入错误 \n");

return ;

}

else

{ printf("*********************储户的余额如下**********************\n");

printf(" 余额 \n");

printf("\n %11.2f \n", dep[i].mon);

printf("**********************************************************\n");

}

}

void del() /*储户信息删除函数*/

{

struct depositor dep[N];

char number[20];

float t;

int n,i,j;

n=reads(dep);

printf("\n请输入要删除储户账号,密码,用空格隔开,按回车键确认:");

scanf("%s %f",number,t);

for(i=0;in;i++)

if(strcmp(number,dep[i].num)==0t==dep[i].sec) break;

if(i=n||t!=dep[i].sec)

{

printf("没有找到该储户信息!\n");

return;

}

else

{

for(j=i+1;jn;j++)

dep[j-1]=dep[j];

}

save(dep,n-1);

printf("销户成功!\n");

}

void change() //储户密码更改

{

struct depositor dep[N];

int n,i;

float t;

char number[20];

printf("\n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:");

scanf("%s %f",number,t);

n=reads(dep);

for(i=0;in;i++)

if(strcmp(number,dep[i].num)==0t==dep[i].sec)

break;

if(i=n||t!=dep[i].sec)

{

printf("无此储户信息!");

return;

}

printf("\n请输入更改后密码,按回车键确认:\n");

scanf("%f",dep[i].sec);

save(dep,n);

printf("\n修改成功\n");

}

谁提供一原创C语言完整程序,50行以上,有程序注释,急用

#includereg52.h

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit rs=P2^6; //液晶引脚位定义

sbit rw=P2^5;

sbit en=P2^7;

sbit k5=P2^3; //独立键盘位定义

sbit k6=P2^2;

sbit k7=P2^4;

sbit sda=P2^1; //EEPROM位定义

sbit scl=P2^0;

sbit JD=P1^4;

uchar i,tt,a;

char shi,fen,miao;

uchar code D[]=" 2011-3-24";

uchar code D1[]=" : : ";

void delay1() //延时函数,延时时间约4us

{;;}

void start() //EEPROM中开始信号

{

sda=1;

delay1();

scl=1;

delay1();

sda=0;

delay1();

}

void stop() //EEPROM中停止信号

{

sda=0;

delay1();

scl=1;

delay1();

sda=1;

delay1();}

void response() //EEPROM中应答信号

{

uint i;

scl=0;

delay1();

scl=1;

delay1();

while((sda==1)(i250))i++)

scl=0;

delay1();

}

void write_byte(uchar shu)//在EEPROM中写8位2进制数

{

uint i;

uchar temp;

temp=shu;

for(i=0;i8;i++)

{

temp=temp1;

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();

}

scl=0;

delay1();

sda=1;

delay1();

}

uchar read_byte()//从EEPROM中读8位2进制数

{

uint i;

uchar a;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i8;i++)

{

scl=1;

delay1();

a=(a1)|sda;

delay1();

scl=0;

delay1();

}

return a;

}

void write(uchar address,uchar date)//在EEPROM指定地址写入数据

{

start();

write_byte(0xa0);

response();

write_byte(address);

response();

write_byte(date);

response();

stop();}

uchar read(uchar address) //从EEPROM中指定地址读数据

{

uchar date;

start();

write_byte(0xa0);

response();

write_byte(address);

response();

start();

write_byte(0xa1);

response();

date=read_byte();

stop();

return date;

}

void delay(uchar z) //延时函数

{

uchar x,y;

for(x=z;x0;x--)

for(y=120;y0;y--);

}

write_com(uchar com) //给液晶写指令

{

en=0;

rs=0;

rw=0;

P0=com;

delay(5);

en=1;

delay(5);

en=0;

}

write_date(uchar date) //给液晶写数据

{

en=0;

rs=1;

rw=0;

P0=date;

delay(5);

en=1;

delay(5);

en=0;

}

void write_sfm(uchar add,char date)//液晶在指定位置开始写指定的数

{ char x,y;

x=date/10;

y=date%10;

write_com(0x80+0x40+add);

write_date(0x30+x);

write_date(0x30+y);

}

void init()

{ TMOD=0x01; //定时器0的初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;ET0=1;

TR0=1;

write_com(0x38); //液晶的初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(i=0;i12;i++) //显示液晶的第一行

{write_date(D[i]);br delay(20);br }

write_com(0x80+0x40);//显示液晶的第二行

for(i=0;i12;i++)

{write_date(D1[i]);br delay(20);br }

shi=read(4);//从eeprom中读值分别赋给时分秒

fen=read(5);

miao=read(2);

write_sfm(4,shi);//液晶第二行显示时分秒

write_sfm(7,fen);

write_sfm(10,miao);}

void main()

{

init();

while(1)

{

if(k5==0)

{

delay(5);

if(k5==0)

{

while(!k5);//松手检测

delay(5);

while(!k5);

a++;

TR0=0;

if(a==4)

{

a=0;

TR0=1;

tt=0;

}

}

}

switch(a)

{

case 1: //秒的调整

{ write_com(0x80+0x40+11);//调光标到秒的位置

write_com(0x0f); //光标闪烁

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

miao++;

if(miao==60)

miao=0;

write(2,miao);

write_sfm(10,miao);

write_com(0x80+0x40+11);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

miao--;

if(miao0)

miao=59;

write(2,miao);

write_sfm(10,miao);

write_com(0x80+0x40+11);

}

}

} break;

case 2: //分钟的调整

{ write_com(0x80+0x40+8);//调光标到分的位置

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

fen++;

if(fen==60)

fen=0;

write(5,fen);

write_sfm(7,fen);

write_com(0x80+0x40+8);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

fen--;

if(fen0)

fen=59;

write(5,fen);

write_sfm(7,fen);

write_com(0x80+0x40+8);

}

}

} break;

case 3: //小时的调整

{ write_com(0x80+0x40+5);//调光标到小时的位置

if(k6==0)

{

delay(5);

if(k6==0)

{ while(!k6);

delay(5);

while(!k6);

shi++;

if(shi==24)

shi=0;

write(4,shi);

write_sfm(4,shi);

write_com(0x80+0x40+5);

}

}

if(k7==0)

{

delay(5);

if(k7==0)

{ while(!k7);

delay(5);

while(!k7);

shi--;

if(shi0)

shi=23;

write(4,shi);

write_sfm(4,shi);

write_com(0x80+0x40+5);

}

}

} break;

case 0:

{

write_com(0x0c); //开液晶显示,不显光标,光标不闪

if(tt==20) //每过一秒时钟走一秒

{

tt=0;

miao++;

if(miao==60)

{

JD=0;

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

shi=0;

write_sfm(4,shi);

write(4,shi);

}

write_sfm(7,fen);

write(5,fen);

}

write_sfm(10,miao);

write(2,miao);

if(miao==30)

JD=1;

}

}

}

}

}

void timer0() interrupt 1 //定时器0函数

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}

C++的~~LCD时钟程序

给C语言程序加上注释

第一个程序 (/* */内为注释)

#define X 10 /* 定义X为10 */

#define Y 30 /* 定义Y为30 */

#define N 20 /* 定义N为20 */

int A[N]={2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,80,5};/* 定义一个20位的数组A[N]并赋值 */

#includestdio.h /* 引用头文件stdio.h */

void del(int *A, int *n, int x, int y)/* 定义一个函数del,输入参数为int型的指针A,n和int型的x,y,作用是删去数组中大于x或小于y的数 */

{

int i,j;/* 定义整数型变量i,j */

for(i=j=0; i*n; i++)/*循环,初始条件i=j=0,终止条件i指针n的值,循环步长为1 */

if(A[i]y||A[i]x) /* 判断条件如果数组元素A[i]的值大于y或者小于x */

A[j++]=A[i]; /* 将数组元素A[i]赋值给数组元素A[j],然后j加1 */

*n=j; /* 给指针n赋值为j */

}

void output(int *A, int n)/* 定义函数output,输入参数为整型指针A和整型变量n,作用为输出数组前n个数 */

{

int i;/* 定义整型变量i */

printf("\n数组有%d个元素:\n",n);/* 在屏幕输出“数组有n个元素:”,(n为输入量或所赋值的量)*/

for(i=0; in; i++){ /* 循环,初始条件i=0,终止条件in,步长为1 */

printf("%7d",A[i]); /* 在屏幕输出数组A[i]的各个值 */

if((i+1)%10==0) /* 判断,条件为如果(i+1)除以10取余数等于0 */

printf("\n"); /* 在屏幕上输出换行 */

}

printf("\n");/* 在屏幕上输出换行 */

}

void main()/* 主程序 */

{

int n;/* 定义一个整型变量n */

n=N; /给n赋值为N,之前有定义N为20,所以实际n=20 */

output(A,n);/* 以数组A和n为参数,执行函数output */

del(A,n,X,Y);/* 执行函数del */

output(A,n);/* 执行函数output */

}

带注释的c语言程序

#includereg52.h

#define uchar unsigned char

#define uint unsigned int

bit write=0; //写24C02的标志;

sbit sda=P2^0;

sbit scl=P2^1;

sbit dula=P2^6;

sbit wela=P2^7;

uchar sec,tcnt;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay()

{ ;; }

void delay1ms(uint z)

{

uint x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

void start() //开始信号

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}

void stop() //停止

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}

void respons() //应答

{

uchar i;

scl=1;

delay();

while((sda==1)(i250))i++;

scl=0;

delay();

}

void init()

{

sda=1;

delay();

scl=1;

delay();

}

void write_byte(uchar date)

{

uchar i,temp;

temp=date;

for(i=0;i8;i++)

{

temp=temp1;

scl=0;

delay();

sda=CY;

delay();

scl=1;

delay();

}

scl=0;

delay();

sda=1;

delay();

}

uchar read_byte()

{

uchar i,k;

scl=0;

delay();

sda=1;

delay();

for(i=0;i8;i++)

{

scl=1;

delay();

k=(k1)|sda;

scl=0;

delay();

}

return k;

}

void write_add(uchar address,uchar date)

{

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

uchar read_add(uchar address)

{

uchar date;

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

return date;

}

void display(uchar bai_c,uchar sh_c) //显示程序

{

dula=0;

P0=table[bai_c]; //显示第一位

dula=1;

dula=0;

wela=0;

P0=0x7e;

wela=1;

wela=0;

delay1ms(5);

dula=0;

P0=table[sh_c]; //显示第二位

dula=1;

dula=0;

wela=0;

P0=0x7d;

wela=1;

wela=0;

delay1ms(5);

}

void main()

{

init();

sec=read_add(2); //读出保存的数据赋于sec

if(sec100) //防止首次读取出错误数据

sec=0;

TMOD=0x01; //定时器工作在方式1

ET0=1;

EA=1;

TH0=(65536-50000)/256; //对TH0 TL0赋值

TL0=(65536-50000)%256; //使定时器0.05秒中断一次

TR0=1; //开始计时

while(1)

{

display(sec/10,sec%10);

if(write==1) //判断计时器是否计时一秒

{

write=0; //清零

write_add(2,sec); //在24c02的地址2中写入数据sec

}

}

}

void t0() interrupt 1 //定时中断服务函数

{

TH0=(65536-50000)/256; //对TH0 TL0赋值

TL0=(65536-50000)%256; //重装计数初值

tcnt++; //每过50ms tcnt加一

if(tcnt==20) //计满20次(1秒)时

{

tcnt=0; //重新再计

sec++;

write=1; //1秒写一次24C02

if(sec==100) //定时100秒,再从零开始计时

sec=0;

}

}

扫描二维码推送至手机访问。

版权声明:本文由万物知识分享发布,如需转载请注明出处。

本文链接:http://qmsspa.com/43401.html

分享给朋友:

“c语言程序带注释50个(C语言程序注释)” 的相关文章

国外lead网赚英文网站源码011-015(健康

任何的源码皆带数据,铺设下来否以间接运用,申请账号必用 源码列表: 0 一 一俏丽 康健 主题源码nav 0 一 二收集 科技主题源码nycomputertech 0 一 三金融主体源码sailfinancial 0 一 四游览主题源码travelesworld 0 一 五减瘦主题源码wei...

史上最全的YouTube SEO 优化教程

做为世界第两年夜 搜刮 引擎,YouTube给咱们带去的流质是伟大 的。这么怎么样从Youtube重大的流质外,猎取本身 的一杯羹呢? 起首 让咱们去看看Youtube的重大流质暗地里的一点儿数据: YouTube天天 的搜刮 质仄均有 三 七亿次 仄均每一分钟的上传到YouTube的望频有 四 ...

我又注册了一个微信官方账号:红歌笔记。

我又注册了一个微信官方账号:红歌笔记。

年夜 野早晨孬。昨天领帖有点早了。单纯分享一高尔昨天作了甚么! 晚上录了 一0盘灌音 带,比来 念经由过程 怒马推俗仄台引流。假如 您如今 缺少 精确 的人脉,否以尝尝 。排火后果 很孬。详情请 浏览原文。怒马推俗排火体系 下昼 给社区成员讲了baidu霸屏,语音输出变换文字的齐进程 。...

如何快速查找YouTube网红?| 营销工具

 以前写过一点儿Youtube的文章,是实认为 本身 超专心 写啊,有木有! 归到昨天的主题,咱们 晓得年夜 野正在作营销的时刻 ,为了更年夜 水平 上 对于产物 入止的暴光,咱们否能会抉择许多 渠叙,好比 :  SEO  社接  告白  红人  Affiliate 个中 告白 ,战红人尔信任...

百度搜索引擎算法规则大全(2022年更新)

百度搜索引擎算法规则大全(2022年更新)

baidu占外国搜刮 引擎商场的 七 一. 一0%,这么对付 SEOer去说,相识 搜刮 引擎算法便异常 有需要 了,原文体系 化将搜刮 算法入止梳理及更新,并说明 了搜刮 劣化进程 外没有许可 产生 的违规答题、需规躲的经营“雷点”。SEOer必读指北。  一. 飓风算法  三.0 ——页里内容量...

阿里云开发者社区乘风者计划(阿里云乘风者计划)

阿面巴巴云开辟 者社区“骑脚打算 ”通闭秘笈 ,如下内容由宋九暂编纂 自阿面巴巴云开辟 者社区民间形容。 社区仄台周全 进级 ,特殊 拉没“骑脚打算 ”,约请 数千名技术专主进驻。 不管您是小皂照样 年夜 神,咱们皆迎接 更多的开辟 者去到社区,畅所欲言,书写世界。 ;vertical-...

评论列表

晴枙过活
3年前 (2022-06-26)

fclose(fp);}void show() //余额查询{ struct depositor dep[N]; int i,n ; char s[20]; float t ;

闹旅浪胚
3年前 (2022-06-26)

.runtime2=(float)job[i].runtime/job[i].requesttime; nowtime=job[i].finishtime; counttime1+=job[i]

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。