❶ 什么是c语言程序设计
什么是C语言?C语言的简介。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
语言特点:C是中级语言/C是结构式语言/C语言功能齐全/C语言适用范围大/简洁紧凑、灵活方便/运算符丰富/数据类型丰富/C是结构式语言/语法限制不太严格,程序设计自由度大/适用范围大,可移植性好。
❷ 图书馆图书管理系统(c语言)
完整的C语言图书管理系统
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "graphics.h"
#include "math.h"
#define m 1
struct data
{ int year;
int month;
int day;
};
struct ReaderNode
{
char num[20];
struct data bro;
struct data back;
};
struct BookNode
{
char title[15];
char writer[15];
int currentnum;
int totalnum;
char brief[30];
struct ReaderNode reader[20];
};
struct TreeNode
{
int n;
struct TreeNode *prt;
int key[2*m];
struct BookNode *rec[2*m];
struct TreeNode *link[2*m+1];
};
struct BookNode *InputNode();
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag);
struct TreeNode *mbinsert(struct TreeNode *bth);
struct TreeNode *mbdel(struct TreeNode *bth);
void OutputNode(struct TreeNode *bth);
void borrow(struct TreeNode *bth);
void payback(struct TreeNode *bth);
char menu(void);
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag)
{
struct TreeNode *p,*q;
p=bth; *flag=0; q=p;
while( (p!=NULL) && (*flag==0) )
{
*k=1;q=p;
while( (*k < q->n) && ( q->key[*k-1] < x) ) *k=*k+1;
if( q->key[*k-1]==x) *flag=1;
else if( ( *k==q->n ) && ( q->key[*k-1] < x) ) {p=q->link[*k];p->prt=q;}
else { p=q->link[*k-1]; p->prt=q;*k=*k-1;}
}
return(q);
}
struct TreeNode *mbinsert(struct TreeNode *bth)
{
int flag,j,k,t;
int y,x,z;
struct TreeNode *p,*q,*u,*s;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to insert: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
printf("\n\tHas %d this kind of book,do you want to add another?(y/n)\n",(q->rec[k-1])->totalnum);
z=getch();
if(z=='y'||z=='Y')
{
(q->rec[k-1])->totalnum++; (q->rec[k-1])->currentnum++;
printf("\n\tNow total has %d this kind of book,",(q->rec[k-1])->totalnum);
printf("\n\tand current has %d in the library.",(q->rec[k-1])->currentnum);
}
return(bth);
}
r=InputNode(bth);
if(bth==NULL)
{
bth=p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=1; p->key[0]=x; p->rec[0]=r;p->prt=NULL;
for(j=1;j<=2*m+1;j++) p->link[j-1]=NULL;
return(p);
}
p=NULL; t=0;
while(t==0)
{
if(k==q->n) {y=x;l=r;u=p;}
else
{
y=q->key[q->n-1]; l=q->rec[q->n-1];u=q->link[q->n];
for(j=(q->n)-1; j>=k+1; j--)
{
q->key[j]=q->key[j-1];q->rec[j]=q->rec[j-1];q->link[j+1]=q->link[j];
}
q->key[k]=x;q->rec[k]=r;q->link[k+1]=p;
if(p!=NULL) p->prt=q;
}
if(q->n<2*m)
{
q->n=(q->n)+1;
t=1;
q->key[(q->n)-1]=y; q->rec[(q->n)-1]=l; q->link[q->n]=u;
if(u!=NULL) u->prt=q;
}
else
{
p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=m; q->n=m; p->prt=q->prt;
x=q->key[m];r=q->rec[m];
for(j=1;j<=m-1;j++)
{
p->key[j-1]=q->key[m+j];p->rec[j-1]=q->rec[m+j];p->link[j-1]=q->link[m+j];
if(q->link[m+j]!=NULL) (q->link[m+j])->prt=p;
}
p->link[m-1]=q->link[2*m];
p->link[m]=u;
p->key[m-1]=y;
p->rec[m-1]=l;
if(u!=NULL) u->prt=p;
for(j=m+2;j<=2*m+1;j++)
{
q->link[j-1]=NULL;p->link[j-1]=NULL;
}
if(q->prt==NULL)
{
s=(struct TreeNode *)malloc(sizeof(struct TreeNode));
s->key[0]=x; s->rec[0]=r;
s->link[0]=q; s->link[1]=p;
s->n=1; s->prt=NULL; q->prt=s; p->prt=s;
for(j=3;j<=2*m+1;j++) s->link[j-1]=NULL;
bth=s; t=1;
}
else
{
q=q->prt; k=1;
while((k<=q->n)&&(q->key[k-1]<x)) k=k+1;
k=k-1;
}
}
}
return(bth);
}
struct TreeNode *mbdel(struct TreeNode *bth)
{
int flag,j,k,t;
int x,y;
struct TreeNode *u,*s,*p,*q;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to delete: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==0) { printf("\n\tThe book is not exist!\n"); return(bth);}
p=q->link[k];
if(p!=NULL)
{
while(p->link[0]!=NULL) p=p->link[0];
q->key[k-1]=p->key[0];
q->rec[k-1]=p->rec[0];
k=1;q=p;
}
for(j=k;j<=q->n-1;j++)
{
q->key[j-1]=q->key[j];
q->rec[j-1]=q->rec[j];
}
q->n=q->n-1;
while ((q!=bth)&&(q->n<m))
{
p=q->prt;j=1;
while(p->link[j-1]!=q) j=j+1;
if((j<=p->n)&&((p->link[j])->n>m))
{
s=p->link[j];
y=s->key[0];
l=s->rec[0];
u=s->link[0];
for(k=1;k<=s->n-1;k++)
{
s->key[k-1]=s->key[k];
s->rec[k-1]=s->rec[k];
s->link[k-1]=s->link[k];
}
s->link[s->n-1]=s->link[s->n];
s->link[s->n]=NULL;
s->n=s->n-1; q->n=q->n+1;
q->key[q->n-1]=p->key[j-1];
q->rec[q->n-1]=p->rec[j-1];
q->link[q->n]=u;
p->key[j-1]=y;
p->rec[j-1]=l;
if(u!=NULL) u->prt=q;
}
else if((j>1)&&((p->link[j-2])->n>m))
{
s=p->link[j-2];
q->n=q->n+1;
q->link[q->n]=q->link[q->n-1];
for(k=q->n-1;k>=1;k--)
{
q->key[k]=q->key[k-1];
q->rec[k]=q->rec[k-1];
q->link[k]=q->link[k-1];
}
q->key[0]=p->key[j-2];
q->rec[0]=p->rec[j-2];
u=s->link[s->n];
q->link[0]=u;
if(u!=NULL) u->prt=q;
p->key[j-2]=s->key[s->n-1];
p->rec[j-2]=s->rec[s->n-1];
s->link[s->n]=NULL;
s->n=s->n-1;
}
else
{
if(j==p->n+1)
{ q=p->link[j-2]; s=p->link[j-1]; j=j-1;}
else s=p->link[j];
q->key[q->n]=p->key[j-1];
q->rec[q->n]=p->rec[j-1];
t=q->n+1;
for(k=1;k<=s->n;k++)
{ q->key[t+k-1]=s->key[k-1];
q->rec[t+k-1]=s->rec[k-1];
u=s->link[k-1];
q->link[t+k-1]=u;
if(u!=NULL) u->prt=q;
}
u=s->link[s->n]; q->link[t+s->n]=u;
if(u!=NULL) u->prt=q;
q->n=2*m;
free(s);
for(k=j;k<=p->n-1;k++)
{
p->key[k-1]=p->key[k];
p->rec[k-1]=p->rec[k];
p->link[k]=p->link[k+1];
}
p->n=p->n-1; s=q; q=p;
}
}
if((q==bth)&&(q->n==0))
{ free(bth); bth=s; bth->prt=NULL;
if(s->n==0) {bth=NULL; free(s); }
}
printf("\n\tThe book has been delete !");
return(bth);
}
struct BookNode *InputNode()
{
struct BookNode *p;
int i;
p=(struct BookNode *)malloc(sizeof(struct BookNode));
clrscr();
fflush(stdin);
printf("\n\tInput the title: ");
gets(p->title);
printf("\n\tInput the writer: ");
gets(p->writer);
printf("\n\tInput the book current amount: ");
scanf("%d",&p->currentnum);
printf("\n\tInput the book total amount: ");
scanf("%d",&p->totalnum);
fflush(stdin);
printf("\n\tInput the book brief instruction: ");
gets(p->brief);
for(i=0;i<20;i++)
(p->reader[i]).num[0]='\0';
return(p);
}
void OutputNode(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int k;
int x;
int flag;
clrscr();
printf("\n\tPlease input the book you want to search: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s\n",p->brief);
}
else printf("\n\tThis book is not exist!");
}
void borrow(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
struct ReaderNode *r;
int i,k, x, flag,t;
clrscr();
printf("\n\tPlease input the book you want to borrow: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum)==0) printf("\n\tSorry,this book has all borrow out...");
else
{
clrscr();
for(i=0;i<20;i++) if( (p->reader[i]).num[0]=='\0') break;
printf("\n\tPlease input your certificate number: ");
scanf("%s",(p->reader[i]).num);
printf("\n\tPlease input the borrow data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).bro.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).bro.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).bro.day));
printf("\n\tPlease input the payback data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).back.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).back.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).back.day));
p->currentnum--;
printf("\n\tYou have borrow the book.");}
}
}
else printf("\n\tThis book is not exist!");
}
void payback(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int i,k, x, flag,t,j;
int year,month,day,d;
float pay;
char temp[20];
clrscr();
printf("\n\tPlease input the book you want to payback: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want to payback this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum) >=(p->totalnum) )
printf("\n\tYou want to offer a more book ??\n");
else
{
clrscr();
printf("\n\tPlease input your certificate number: ");
scanf("%s",temp);
j=0;
for(i=0;i<20;i++)
{
if(! (strcmp(temp,(p->reader[i]).num))) {j=1;break;}
}
if(j==0) {printf("\n\tYou haven't borrow this book.");return;}
printf("\n\tToday is:");
printf("\n\tYear: ");
scanf("%d",&year);
printf("\tMonth: ");
scanf("%d",&month);
printf("\tDay: ");
scanf("%d",&day);
d=0;
if(year<(p->reader[i]).back.year) d=1;
if(year<=(p->reader[i]).back.year && month<(p->reader[i]).back.month) d=1;
if(year<=(p->reader[i]).back.year && month<=(p->reader[i]).back.month && day<(p->reader[i]).back.day) d=1;
if(d==0)
{
clrscr();
pay=(year-(p->reader[i]).back.year)*365+(month-(p->reader[i]).back.month)*30+(day-(p->reader[i]).back.day);
printf("\n\tYou borrow this book is in %d-%d-%d",(p->reader[i]).bro.year,(p->reader[i]).bro.month,(p->reader[i]).bro.day);
printf("\n\tYou should pay it back in %d-%d-%d",(p->reader[i]).back.year,(p->reader[i]).back.month,(p->reader[i]).back.day);
printf("\n\tToday is %d-%d-%d",year,month,day);
printf("\n\n\tSo you have go out the payback day");
printf("\n\tYou have to pay %2.1f Yuan.",0.1*pay);
}
(p->reader[i]).num[0]='\0';
p->currentnum++;
printf("\n\tYou have payback the book.");
}
}
}
else printf("\n\tYou want to payback an inexistence book ???");
}
donghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
clrscr();
for(i=0;i<=150;i+=5)
{setcolor(i);
textbackground(RED);
settextstyle(0,0,2);
outtextxy(100,i+140,"Liberary management System");
delay(10000000);
clrscr();
}
setcolor(RED);
outtextxy(50,200,"Loading");
delay(100000000000);
outtextxy(50,200,"Loading.");
delay(100000000000);
outtextxy(50,200,"Loading..");
delay(100000000000);
outtextxy(50,200,"Loading...");
delay(100000000000);
outtextxy(50,200,"Loading....");
delay(100000000000);
outtextxy(50,200,"Loading.....");
delay(100000000000);
outtextxy(50,200,"Loading......");
delay(100000000000);
outtextxy(50,200,"Loading.......");
delay(100000000000);
outtextxy(50,200,"Loading........");
delay(100000000000);
outtextxy(50,200,"Loading.........");
delay(100000000000);
outtextxy(50,200,"Loading..........");
delay(100000000000);
outtextxy(50,200,"Loading...........");
outtextxy(50,200,"Loading............");
delay(100000000000);
for(i=0;i<=10;i++)
delay(100000000000);
clrscr();
}
char menu(void)
{
clrscr();
window(1,1,80,25);
textmode(MONO);
textbackground(BLACK);
textcolor(5);
printf("\n\t ****************************************************");
printf("\n\t ***** Welcome to Liberary management System *****");
printf("\n\t ****************************************************");
printf("\n\t ****************************************************");
printf("\n\t *1.Add a book *");
printf("\n\t ****************************************************");
printf("\n\t *2.Delete a book *");
printf("\n\t ****************************************************");
printf("\n\t *3.Search a book *");
printf("\n\t ****************************************************");
printf("\n\t *4.Borrow a book *");
printf("\n\t ****************************************************");
printf("\n\t *5.Payback a book *");
printf("\n\t ****************************************************");
printf("\n\t *0.exit *");
printf("\n\t ****************************************************");
printf("\n\t please select: ");
return getch();
}
bofangdonghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
char c;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
/*************shi fou bo fang dong hua?**************/
printf:{setcolor(RED);
settextstyle(3,0,5);
outtextxy(100,30,"bo fang dong hua?");
outtextxy(150,80,"Yes");
outtextxy(300,80,"No");
c=getch();
if(c=='Y'||c=='y')
{donghua();
menu();
}
else
if(c=='N'||c=='n')
menu();
else
{setcolor(GREEN);
settextstyle(3,0,8);
outtextxy(200,240,"Error!");
delay(10000000000);
clrscr();
goto printf;
}
}
/**************************************/
}
void main()
{
char c,t;
int x;
int k,flag,p=1;
struct TreeNode *bth=NULL;
bofangdonghua();
while(1)
{
c=menu();
putch(c);
getch();
switch(c)
{
case '1': bth=mbinsert(bth);
break;
case '2': bth=mbdel(bth);
break;
case '3': OutputNode(bth);
break;
case '4': borrow(bth);
break;
case '5': payback(bth);
break;
case '0': clrscr();
printf("\n\tDo you want to return ?(y/n)");
t=getch();
if(t=='y'||t=='Y') exit(0);
break;
defult :break;
}
printf("\n\tPress any key to the main menu....");
getch();
}
}
❸ 怎样用C语言制作学生信息管理系统
还真不想再写代码了啊。。。。。
直接跟你说下思路吧。。。。
首先创建一个结构体,如——
struct student
{
char num[10]; //学号
char name[20]; //姓名
char sex[4]; //性别
int age; //年龄
int flag; //一个标示符(下面会说用法)
};
然后就定义一个student类型的数组stu[max],在前面#define max 1000000,你也可以把max定义得小一点,这是用来表示最大能容纳多少个学生信息。。。。
说到flag的用处,我不清楚你了不了解,还是先跟你说下吧。。。。
先考一下你,知道怎样把一个数组里面的某一个元素清空吗?清空就表示能在那个位置再次赋值,没清空的位置就不能重复赋值。把那个元素设为a[x],可能你会想着把a[x]=0不就得啦,那好,如果用这种方法,那么如果你想寻找数组a中可以再次赋值的元素,然后进行赋值,你是不是要通过一个判别式来对数组a的每一个元素进行判断,看看它是否能被再赋值,对吧,那这个判别式肯定就是判断a中的数值是否为零了。但是你想一下,如果一开始a中某个元素的值就是等于0,并不表示清空状态,那你这样的判别式能成立吗,所以我们要用到一个标示符flag。。。。
当flag=1时,表示该数组的元素已存在,当flag=0时,表示该数组的元素是无效的,这样的话就不需要对数组中的每个元素进行什么清空操作了,就像上面的数组stu,这么多元素,你怎么清空。。。。
然后有一个最重要的是怎样存储数据,因为没用到数据库,所以就用txt文件来存储吧,给你一个相关的代码——
int load_student() //把已存在的储存数据的txt文件打开
{
FILE *fp;
if((fp=fopen("student.txt","rb"))==NULL) //判断文件是否存在
{
printf("不能打开此文件.\n");
exit(0);
}
for(int i=0;i<SIZE;i++) //存在的话就打开它
{
fread(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
return 0;
}
int save_student() //把数据存放进txt文件中
{
FILE *fp;
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("不能打开此文件.\n");
exit(0);
}
for(int i=0;i<SIZE;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);
return 0;
}
这是一个比较基本的代码,你可以灵活的修改一下,实现读写过程的代码也就是这样了。。。。
然后是功能的实现,这方面就得看你的要求了,不过我建议你把每个界面做成一个函数,实现模块化,如——
int shouye() //首页
{
system("cls"); //清屏
int num1;
printf("**********************************\n");
printf(" 学生信息管理系统 \n");
printf("**********************************\n");
printf("\n\n");
printf("1、更改学生信息\n\n");
printf("2、查看学生信息\n\n");
printf("3、退出系统\n\n");
scanf("%d",&num1); //输入操作
if(num1==1)
update(); //进入学生信息更改模块
else if(num1==2)
check(); //进入学生信息查看模块
else
exit(0); //退出系统
return 0;
}
在给多你一个界面函数的代码吧——
int update()
{
system("cls");
int num2;
printf("**********************************\n");
printf(" 更改成绩 \n");
printf("**********************************\n");
printf("\n\n");
printf("1、增加学生信息\n\n");
printf("2、修改学生信息\n\n");
printf("3、返回上一层\n\n");
scanf("%d",&num2);
if(num2==1)
add();
else if(num2==2)
correct();
else
shouye();
return 0;
}
大概就是这种模式,我就不多弄了,你自己开拓一下吧,可能你会问我主函数怎么实现,大概就是这样吧——
int main()
{
load_student(); //读取txt里面的内容
shouye();
return 0;
}
这里要说明一下,我给你这代码还不怎么完善的,只是简单跟你说下思路罢了,如果你招着复制的话,要记住,在你第一次运行之前,要先在你这工程目录低下创建一个名字为student的txt文件,不然会显示错误,因为load_student()那里就会判断是否存在student.txt文件,没的话就会显示错误的。。。。
我建议你简单地画下流程图,这样可以让你的编程思路更清晰,如果还有什么不清楚的地方可以Q我,410430209。。。。
希望这些对你有所帮助。。。。
❹ 单片机开发与典型工程项目实例详解的目 录
1.1 单片机的应用和特点 1
1.1.1 单片机的应用 1
1.1.2 主流单片机的种类及特点 3
1.2 MCS-51系列单片机的内部结构 7
1.3 MCS-51单片机的引脚功能与时序 9
1.3.1 MCS-51系列单片机引脚说明 10
1.3.2 MCS-51单片机的时序 16
1.4 MCS-51单片机的存储器组织 17
1.4.1 程序存储器 18
1.4.2 数据存储器 19
1.4.3 特殊功能寄存器 21
1.5 单片机最小系统 24
1.5.1 单片机最小系统 24
1.5.2 彩灯控制器的设计 25
1.5.3 顺序控制器的设计 27
1.6 本章小结 29 2.1 单片机C语言宏配置介绍 30
2.1.1 处理器的配置 30
2.1.2 ID区域 31
2.1.3 EEPROM数据 31
2.2 单片机数据结构 31
2.2.1 类型限定词 32
2.2.2 常数 33
2.2.3 变量 34
2.2.4 构造数据类型 38
2.2.5 函数 46
2.2.6 中断 49
2.2.7 C语言和汇编语言的嵌套使用 53
2.2.8 伪指令 54
2.3 MPLAB IDE编译器简介 57
2.3.1 MPLAB工程管理器(MPLAB Project Manager) 57
2.3.2 MPLAB文本编辑器(MPLAB Editor) 57
2.3.3 MPLAB软件仿真器(MPLAB-SIM Simulator) 58
2.3.4 MPLAB在线仿真器(MPLAB-ICE Simulator) 58
2.4 MPLAB IDE的安装和使用 58
2.4.1 MPLAB IDE的安装要求 58
2.4.2 MPLAB IDE的使用 59
2.4.3 实例应用 59
2.4.4 MPLAB IDE中的工程 62
2.4.5 MPLAB IDE工程的编译 65
2.4.6 MPLAB IDE的软件仿真 66
2.5 MCC18基础 68
2.5.1 MCC18的安装目录浏览 68
2.5.2 MCC18的语言执行流程 70
2.5.3 MCC18举例 70
2.5.4 MCC18的编译环境 72
2.5.5 MCC18和单片机的比较 73
2.6 单片机的混合开发 74
2.6.1 C51和汇编语言的性能比较 74
2.6.2 C51和汇编语言的混合编程 74
2.7 本章小结 79 3.1 单片机应用系统设计的流程 80
3.2 单片机应用系统两设计原则 82
3.2.1 硬件系统设计原则 82
3.2.2 应用软件设计原则 83
3.3 单片机的选型 83
3.3.1 单片机选型的原则 83
3.3.2 单片机选型参考 85
3.3.3 开发工具的选择 86
3.4 系统常见故障与调试 87
3.5 本章小结 88 4.1 数字滤波算法 89
4.1.1 算术平均值滤波 90
4.1.2 滑动平均值滤波 92
4.1.3 防脉冲干扰平均值滤波 93
4.1.4 中值滤波 95
4.1.5 一阶滞后滤波 96
4.2 数字PID控制算法 97
4.2.1 位置式PID控制算法 98
4.2.2 增量式PID控制算法 100
4.2.3 积分分离的PID控制算法 102
4.2.4 变速积分PID控制算法 103
4.3 本章小结 104 5.1 键盘设计的组成和分类 105
5.1.1 键盘的物理结构 106
5.1.2 键盘的组成形式 106
5.2 键盘接口的工作过程和工作方式 111
5.2.1 键盘的抖动干扰和消除方法 111
5.2.2 盘接口的工作过程 112
5.2.3 键盘的工作方式 112
5.3 键位置的判别方法 113
5.4 键盘接口设计的储存芯片和
5.4 相关协议 114
5.4.1 键盘接口设计的储存芯片 114
5.4.2 AT24CXX系列的芯片及I2C协议 114
5.4.3 A93CXX系列的芯片及SPI协议 124
5.5 键盘接口实现的工程实例 132
5.5.1 矩阵键盘接口的工程实例 132
5.5.2 矩阵式中断扫描键盘的设计 137
5.5.3 二进制编码键盘接口的工程实例 139
5.6 重点与难点 141 6.1 交通灯顺序控制 143
6.1.1 硬件系统的设计 143
6.1.2 反向器74F06 145
6.1.3 控制字 145
6.1.4 程序设计 145
6.2 设计一种基于模糊理论的单片机控制交通路口调度系统 148
6.2.1 系统的总体设计 148
6.2.2 十字路口调度系统模糊控制器的设计 149
6.2.3 电路设计 151
6.2.4 车流量检测电路 154
6.2.5 系统主程序和模糊控制程序设计 155
6.2.6 系统显示程序设计 157
6.3 重点与难点 159 7.1 显示屏显示原理及串行通信基本概念 161
7.1.1 显示屏显示原理 161
7.1.2 串行通信 163
7.1.3 阵列式LED显示屏的实现 166
7.2 显示屏硬件电路设计 166
7.2.1 硬件电路介绍 168
7.2.2 外扩数据存储器电路 170
7.3 列式LED显示屏显示程序的171
7.3.1 汉字点阵数据的提取 171
7.3.2 显示主程序 174
7.3.3 串口中断处理程序 176
7.3.4 显示驱动函数 179
7.3.5 外部存储器读写程序 181
7.3.6 串口通信程序 181
7.3.7 文字显示特效程序 182
7.4 本章小结 191 8.1 IC卡基础 192
8.1.1 IC卡的分类 192
8.1.2 IC卡的标准 194
8.2 接触型IC卡读写系统的开发 194
8.2.1 IC卡读写系统的时序 195
8.2.2 IC卡读写系统的硬件连196
8.2.3 IC卡读写系统的软件系统 197
8.3 基于SLE4442加密卡读写系统的开发 201
8.3.1 SLE4442卡的介绍 201
8.3.2 SLE4442的模式 203
8.3.3 SLE4442的操作命令 205
8.3.4 SLE4442读/写系统的软硬件设计 208
8.4 重点与难点 215 9.1 无刷直流电机控制原理 216
9.1.1 无刷直流电机的组成 217
9.1.2 无刷直流电机的工作原理 217
9.1.3 无刷直流电机的控制方法 219
9.2 无刷直流电机的工作特性 220
9.3 直流无刷电机控制的应用实现 221
9.3.1 总体设计概述 221
9.3.2 直流无刷电机控制的硬件设计 222
9.3.3 直流无刷电机控制的软件设计 224
9.3.4 无刷直流电机速度闭环控制系统 227
9.4 本章小结 230 10.1 永磁同步电机的结构与分类 231
10.2 永磁同步电机的矢量控制 232
10.3 永磁同步电机控制 236
10.3.1 控制电路设计 237
10.3.2 光电隔离电路设计 238
10.3.3 功率电路设计 239
10.4 永磁同步电机控制的软件实现 239
10.4.1 电压SVPVM的DSPIC33f软件实现 241
10.4.2 转子位置检测 243
10.4.3 AD转换模块 245
10.5 本章小结 246 11.1 汽车行驶记录仪功能介绍 247
11.2 简易汽车行驶记录仪的设计 249
11.2.1 汽车行驶记录仪的考虑因素 250
11.2.1 MSP430 251
11.2.2 车模拟信号的采集 254
11.2.4 数字信号采集电路 255
11.2.5 SST39VF160芯片介绍 257
11.3 记录仪的软件设计 257
11.3.1 软件流程图 258
11.3.2 数据存储格式 259
11.3.3 SST39VF160存储器数据读写的实现 259
11.4 数据采集的程序实现 263
11.5 本章小结 264 12.1 USB-GPIB控制器简介 265
12.1.1 认识USB 266
12.1.2 GPIB 269
12.2 USB-GPIB控制器的硬件电路设计 271
12.2.1 器件的选择 272
12.2.2 USB-GPIB控制器电路设计 278
12.3 USB-GPIB控制器的软件程序的实现 287
12.3.1 USB单片机协议控制芯片与主机(计算机)的数据交互 288
12.3.2 USB协议控制芯片与GPIB控制器的数据交互 299
12.4 USB-GPIB控制器固件的调试与固化 300
12.4.1 USB-GPIB控制器固件的调试 301
12.4.2 USB-GPIB控制器固件程序的固化 302
12.5 本章小结 303 13.1 研究抗干扰技术的重要性 304
13.2 干扰的分类 305
13.2.1 按噪声产生的原因分类 306
13.2.2 按噪声传导模式分类 306
13.2.3 按噪声波形及性质分类 307
13.3 干扰的耦合方式 308
13.4 单片机系统可靠性的设计任务与方法 310
13.4.1 单片机系统可靠性设计的任务 310
13.4.2 可靠性设计一般方法 311
13.5 本章小结 313 14.1 无源滤波器抗干扰 314
14.1.1 电容滤波器 315
14.1.2 电感滤波器 316
14.1.3 RC低通滤波器 316
14.1.4 1LC低通滤波器 318
14.1.5 低通滤波器的结构选择 319
14.1.6 低通滤波器的平衡结构与串联形式 319
14.2 有源滤波器抗干扰 321
14.2.1 一级低通有源滤波器 321
14.2.2 二级低通有源滤波器 322
14.3 去耦电路 324
14.3.1 尖峰电流的形成原理 324
14.3.2 去耦电容的配置 325
14.3.3 光电隔离 326
14.3.4 继电器隔离 328
14.3.5 变压器隔离 328
14.3.6 布线隔离 329
14.4 接地技术 330
14.5 本章小结 334 15.1 概述 335
15.2 指令冗余技术 336
15.2.1 单字节指令冗余 337
15.2.2 重要指令冗余 337
15.3 软件陷阱技术 337
15.3.1 未使用的中断向量区设置陷阱 338
15.3.2 RAM数据区中设置陷阱 338
15.3.3 未使用的EPROM数据区设置陷阱 339
15.3.4 非EPROM单片机空间设置陷阱 339
15.3.5 运行程序区设置陷阱 339
15.4 看门狗技术 339
15.4.1 硬件看门狗技术 340
15.4.2 软件看门狗技术 342
15.5 本章小结 345
❺ 各位大佬C语言程序设计题,帮帮忙
/****************************************************************/
/* 程 序: 学生成绩管理系统 */
/* 功 能: 主菜单的选择 */
/* 作 者: 戴鹏 */
/* 时 间: 2019-12-11 */
/* 修 改: (请修改为自己的姓名) */
/* 时 间: 2019-12- */
/****************************************************************/
#include "stdafx.h"
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//#include <memory.h>
#include<string>
using namespace std;
#define MAX_SIZE 30 //学生成绩单最大长度
#define MATH_COL 0 //数学成绩的列号
#define CHI_COL 1 //语文成绩的列号
#define ENG_COL 2 //英语成绩的列号
#define AVE_COL 3 //平均成绩的列号
//输入一条学生记录
void InputLst(char *number, char *name, float *score)
{
printf("请输入学号:"); //输入学号
gets(number);
printf("请输入姓名:"); //输入姓名
gets(name);
score[AVE_COL]=0;
printf("请输入数学成绩:"); //输入数学成绩
cin>>score[MATH_COL];
score[AVE_COL]+=score[MATH_COL];
printf("请输入语文成绩:"); //输入语文成绩
cin>>score[CHI_COL];
score[AVE_COL]+=score[CHI_COL];
printf("请输入英语成绩:"); //输入英语成绩
cin>>score[ENG_COL];
score[AVE_COL]+=score[ENG_COL];
score[AVE_COL]/=3; //计算平均成绩
}
int main(void)
{
int stuListSize; //学生成绩单实际长度,初始情况下长度为0
char number[MAX_SIZE][10]; //学号
char name[MAX_SIZE][11]; //姓名
float score[MAX_SIZE][4]; //各科成绩,按照数组第二维下标,分别对应数学、语文、英语、平均成绩
int statistics[4][5]; //分段统计结果,分数段分别是[100,90],(90,80],(80,70],(70,60],(60,0]
char subject[4][5]={"数学","语文","英语","平均"}; //科目名称
//统计成绩模块使用
char choice; //表示编号
int n,i,j;
stuListSize=0; //创建空表
do
{
system("cls");
printf(" *------------------------------------------------------------*\n");
printf(" | 中国****大学学生成绩管理系统 |\n");
printf(" | 请输入选项编号(0~8): |\n");
printf(" |------------------------------------------------------------|\n");
printf(" | |\n");
printf(" | 1 —— 创建成绩单 |\n");
printf(" | 2 —— 添加学生 |\n");
printf(" | 3 —— 编辑学生 |\n");
printf(" | 4 —— 删除学生 |\n");
printf(" | 5 —— 查找学生 |\n");
printf(" | 6 —— 浏览成绩单 |\n");
printf(" | 7 —— 排序成绩单 |\n");
printf(" | 8 —— 统计成绩 |\n");
printf(" | 0 —— 退 出 |\n");
printf(" |------------------------------------------------------------|\n");
printf(" | 开发者:软件工程系- 戴鹏 @2019 |\n");
printf(" *------------------------------------------------------------*\n");
printf("请同学们自己完成:3,5,7三个功能。\n");
choice=getch(); //接收选项
switch(choice) //实现点菜
{
case '1': //创建成绩单
if(stuListSize>0) //非空表
{
printf("\n不能重新创建学生成绩单!\n");
}
else //空表
{
printf("请输入学生人数:"); //输入学生人数
scanf("%d",&n);
if(n>0&&n<=MAX_SIZE) //学生人数合法,[1,MAX_SIZE]
{
for(i=0;i<n;i++) //输入n个学生
{
fflush(stdin); //清空键盘缓冲区
printf("请输入第%2d条记录\n",i+1);
InputLst(number[i],name[i],score[i]);
}
stuListSize=n; //设置当前表长为n;
printf("创建%d条学生记录成功!\n",stuListSize);
}
else //学生人数不合法
{
printf("学生人数范围应在[1,%d]之间,创建学生成绩单失败!\n",MAX_SIZE);
}
}
break;
case '2':
printf("您选择了\"2 —— 添加学生\"\n");
if(stuListSize==MAX_SIZE)
{
printf("学生人数范围应在[1,%d]之间,添加学生失败!\n",MAX_SIZE);
}
else if(stuListSize==0)
{
printf("成绩单为空,请先创建成绩单!\n");
}
else
{
fflush(stdin); //清空键盘缓冲区
printf("请输入第%2d条记录\n",stuListSize+1);
InputLst(number[stuListSize],name[stuListSize],score[stuListSize]);
printf("请输入学号:"); //输入学号
gets(number[stuListSize]);
for(i=0;i<stuListSize;i++) //学号不能重复
{
if(strcmp(number[i],number[stuListSize])==0)
{
printf("输入学号重复!请重新输入!");
break;
}
}
if(i==stuListSize)
InputLst(number[i],name[i],score[i]);
}
break;
case '3'://请完成(可以编辑每一个学生的信息)
printf("您选择了\"3 —— 编辑学生\"\n");
// 请补充以下代码;
break;
case '4': //请完成(可以根据学号删除学生)
printf("您选择了\"4 —— 删除学生\"\n");
fflush(stdin);
printf("请输入学号:");
gets(number[stuListSize]);
for(i=0;i<stuListSize;i++)
{
if(strcmp(number[i],number[stuListSize])==0)
{
if(i==stuListSize-1)
stuListSize--;
else {
for(j=0;j<10;j++)
{
char temp;
temp=number[i][j];
number[i][j]=number[stuListSize-1][j];
number[stuListSize-1][j]=temp;
}
stuListSize--;
}
}
if(i==stuListSize)
printf("查找不到该学生!");
}
break;
case '5':
printf("您选择了\"5 —— 查找学生\"\n");
// 请补充以下代码;
break;
case '6': //浏览成绩单
if( 0 == stuListSize ) //表空
{
printf("无学生记录,请创建成绩单或添加学生!\n");
}
else //表不空
{
//输出表头
printf("%4s%12s%12s%10s%10s%10s%10s\n",
"序号","学号","姓名","数学","语文","英语","平均");
for(i=1;i<=68;i++)
putchar('=');
printf("\n");
//输出表体
for(i=0;i<stuListSize;i++) //输出stuListSize个学生成绩信息
{
printf("%4d%12s%12s",i+1,number[i],name[i]); //输出学号、姓名
for(j=0;j<4;j++) //输出数学、语文、英语、平均成绩
printf("%10.1f",score[i][j]);
printf("\n");
}
}
break;
case '7': //排序成绩单
printf("您选择了\"7 —— 排序成绩单\"\n");
// 请补充以下代码;
break;
case '8':
if( 0== stuListSize ) //表空
{
printf("无学生记录,请创建成绩单!\n");
break; //结束switch
}
memset(statistics,0,sizeof(statistics)); //初始化statistics数组元素都为0
for(i=0;i<stuListSize;i++) //统计
{
for(j=0;j<4;j++)
{
if( score[i][j]<=100 && score[i][j]>=90 ) //[100,90]
statistics[j][0]++;
else
if( score[i][j]<90 && score[i][j]>=80 ) //(90,80]
statistics[j][1]++;
else
if( score[i][j]<80 && score[i][j]>=70 ) //(80,70]
statistics[j][2]++;
else
if( score[i][j]<70 && score[i][j]>=60 ) //(70,60]
statistics[j][3]++;
else
statistics[j][4]++;
}
}
//显示统计结果
printf("%10s%10s%10s%10s%10s%10s\n", //打印表头
"科目","90分以上","80~89","70~79","60~69","60分以下");
for(i=0;i<4;i++) //打印四行数据(4科),每行包括:科目名称,5个分数段人次数
{
printf("%10s",subject[i]);
for(j=0;j<5;j++)
printf("%10d",statistics[i][j]);
printf("\n");
}
break;
case '0':
printf("您选择了\"0 —— 退出\"\n");
break;
default:
printf("非法输入\n");
break;
}
system("pause"); //提示用户“按任意键继续......”
}while(choice!='0'); //当选择0编号时退出系统
return 0;
}
❻ C语言工程师一般都做什么什么项目的开发
现在几乎没大有做C语言的项目,C语言工程师就更少了。
❼ 工程管理系统C语言代码
呵呵,300多分一个Q币,100分很难招到人才出来的大哥。劝你一句。找专业人士来帮忙吧
❽ 求介绍一些关于C语言在工程中 各种文件的管理的 书
这种书是没有的,网络经验之类的网上东西很多的。建议您多看看网上的,再自己摸索。
❾ 四个人用C语言做一个小项目该如何分工呢比如做一个图书馆管理系统
传统意义上的项目管理软件更多的是管理项目的资源、任务、进度、质量,而忽略了项目管理的最终目标——项目成本控制。诺明软件为例,通过项目管理软件,可全面核算各类项目成本,其中包括人工、费用、材料、设备、管理分摊、外包等项目成本的精细化管理,帮助财务人员轻松完成项目成本核算过程,同时帮助项目经理实时了解项目实际产生的各项成本。
❿ C语言简单小题目:编写程序,输入一个十进制整数,将其变换为二进制后存储在一个数组中。并用make工程管理
#include <stdio.h>
#define MAX (sizeof(int)*8)
int main()
{
int a[MAX];
int num;
int i;
int sign=1;
printf("please input the number:");
scanf("%d",&num);
if(num<0)
{
num=~num+1;
sign=-1;
}
if(sign==1)
a[0]=0;
else
a[0]=1;
for(i=MAX-1;i>0;i--)
{
a[i]=num & 1;
num=num>>1;
}
for(i=0;i<MAX;i++)
{
printf("%d",a[i]);
}
putchar('\n');
return 0;
}