嵌入式实训第三天(20200705) 日报表
姓名:吴航 班级:物171
项目名称 | 【苏嵌实训-嵌入式 linux C 第 3 天】 |
今日进度以及任务 | 复习c(重点:指针,链表)和数据结构 |
本日开发收获 | 编写的c程序刚好也在为考研中的数据结构的学习相吻合,学起来还是很有干劲的。逐渐通过这次培训进入数据结构复习的状态。 |
今日看新东方网课跟随敲的部分代码
#include"stdio.h"
#include"stdlib.h"
int main()
{
/*const int AMOUNT=100;
int price=0;
printf("请输入金额:\n");
scanf("%d",&price);
int change=AMOUNT-price;
printf("找您%d元",change);
return 0;*/
/*int a=5;
int b=6;
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d",a,b);*/
//int x=13;
/*int cnt=0;
for(int x=3;cnt<50;x++)
{
int isPrime=1;
for(int i=2;i<x;i++)
{
if (x%i==0)
{
isPrime=0;
break;
}
}
if(isPrime)
{
printf("%d\t",x);
cnt++;
if(cnt%5==0)
printf("\n");
}
}*/
//int i;
//while(++i>0);
//char j=0xff;
//printf("int 类型最大数:%u\n",i-1);
//printf("%d",i);
/*int *p;
int cnt=0;
while(p=(int *)malloc(100*1024*1024))
{
cnt++;
}
printf("可为您分配%d00MB空间",cnt);
*/
int a[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,};
/*printf("%p\n",a);
printf("%p\n",a[0]);
printf("%p\n",&a[0][0]);
printf("%d\n",*a);
printf("%d\n",*(a[0]));*/
printf("%d",a[1,1]);
}
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct student
{ long num;
float tel;
char add[10];
long zip;
struct student *next;
};
int n; /* n 为全局变量,用于统计结点的个数*/
/*―――――――---――――-―――creat函数――――――----――――――――*/
struct student *creat() /* 创建creat函数用于建立链表*/
{
struct student *head;
struct student *p1,*p2;
n=0;
p2=(struct student *)malloc(LEN); /* 开辟一个大小为LEN的内存单元*/
p1=p2;
printf("请输入学号:");scanf("%ld",&p1->num); /* 输入学号*/
if(p1->num!=0)
{ printf("请输入电话:");scanf("%f",&p1->tel); /* 输入电话号码*/
printf("请输入地址:");scanf("%s",p1->add); /* 输入地址*/
printf("请输入邮编:");scanf("%ld",&p1->zip); /* 输入邮编*/
printf("ok! 请输入下一个结点的信息\n"); /* 提示已经输好了一位同学的信息*/
}
head=NULL;
while(p1->num!=0) /* 如果输入的学号不是0,刚继续输入其余的同学的信息*/
{ n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
printf("请输入学号:");scanf("%ld",&p1->num);
if(p1->num!=0)
{ printf("请输入电话:");scanf("%f",&p1->tel);
printf("请输入地址:");scanf("%s",p1->add);
printf("请输入邮编:");scanf("%ld",&p1->zip);
printf("ok! 请输入下一个结点的信息\n");
}
}
p2->next=NULL;
return head; /* 结束creat函数*/
}
/*―――――――---――――-―――print函数――――――----――――――――*/
void print(struct student *head) /* 开始打印函数*/
{ struct student *p;
printf("\n Now,These %d records are:\n",n);
p=head;
if(head!=NULL) /* 如果链表不是空,则打印每个结点信息*/
{ printf("-------------|------------ |-------------|--------\n");
printf("学号 |电话 |地址 |邮编 \n");
do
{ printf("-------------|------------ |-------------|--------\n");
printf("0%-12ld|%-13.0f|%-13s|%-13ld\n",p->num,p->tel,p->add,p->zip);
p=p->next;
}while(p!=NULL);
printf("-------------|------------ |-------------|--------\n");
}
else printf("链表是空的!\n"); /* 如果链表是空表,刚提示这个链表是空表*/
} /* 结束print函数*/
/*―――――――---――――---―――del函数――――――-----――――――――*/
struct student *del(struct student *head,long num) /* 开始创建del函数,用于删除结束*/
{ struct student *p1,*p2;
if(head==NULL) {printf("\n链表是空的!\n"); return head; } /* 用于检查链表是否为空,如果为空,刚提示这个链表为空表*/
p1=head;
while(num!=p1->num && p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num) /* 找到对应的结点*/
{ if(p1==head) head=p1->next;
else p2->next=p1->next;
printf("删除:0%ld\n",num);
n=n-1;
}
else printf("0%ld 没有找到!\n",num); /* 没有打到对应的结点,则提示没有找到*/
return head;
}
/*―――――――---――――-―――insert函数――――――----――――――――*/
struct student *insert(struct student *head,struct student *lnew) /* 创建insert函数,用于插入结点,返回值为一个指针*/
{ struct student *p0,*p1,*p2;
p1=head;
p0=lnew;
if(head==NULL) {head=p0;p0->next=NULL;} /* 结果链表为空表,刚把插入的结点指针给头指针,结点的next为空*/
else
{ while((p0->num>p1->num) && (p1->next!=NULL)) /* 寻找该插入的位置*/
{p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num) /* 找到了该插入的位置*/
{if(head==p1) head=p0; /* 放在最前面*/
else p2->next=p0; /* 结点插到p1,p2之间*/
p0->next=p1;
}
else {p1->next=p0;p0->next=NULL;} /* 结点插到最后*/
}
n=n+1;
return head; /* 结点数加*/
} /* 结束insert函数的建立*/
/*―――――――---――――-―――menubar函数――――――----――――――――*/
int menubar() /*创建菜单函数*/
{ int flag=1; /*用来做记号*/
int c; /*用来存储使用者选择的菜单代号*/
printf("\n\n************** 链表综合处理 ***************\n");
printf("0:创建链表 ----\n");
printf("1:输出链表\n");
printf("2:插入结点 菜单\n");
printf("3:删除结点\n");
printf("4:退出 ----\n");
printf("*************************************************");
printf("\n请根据你想执行的命令,输入对应的0~4的数:");
scanf("%d",&c); /*接收使用都所输入的代号*/
while(flag) /*flag用来标记,如果为链表为空,或者使用者第一次输入的不是0或者不是4,则需要重新输入*/
{if(n==0&&c!=0&&c!=4)
{printf("在建立链表之前请先输入建立链表\n");
printf("\n请输入0~4的数:");
scanf("%d",&c);
flag=1;
}
else flag=0 ;
}
while( c<0 || c>4 ) /*表示链表已经创建,但输入的不能大于4,或者小于0*/
{ printf("\n请输入~4的数:");
scanf("%d",&c);
}
return c; /*返回c的值*/
}
/*―――――――---――――-―――main函数――――――----――――――――*/
void main() /*开始主函数*/
{ struct student *head,*lnew;
long del_num;
for(;;) /*开始for循环*/
{ switch (menubar())
{ case 0:printf("请输入创建的链表的结点的信息:\n");
head=creat();
break;
case 1:print(head);
break;
case 2: printf("\n请输入要插入的结点的信息:\n");
lnew=(struct student *)malloc(LEN);
printf("请输入学号:");scanf("%ld",&lnew->num);
if(lnew->num!=0)
{ printf("请输入电话:");scanf("%f",&lnew->tel);
printf("请输入地址:");scanf("%s",lnew->add);
printf("请输入邮编:");scanf("%ld",&lnew->zip);
}
while(lnew->num!=0)
{ head=insert(head,lnew);
print(head);
printf("请输入下一个要插入的结点的信息:\n");
lnew=(struct student *)malloc(LEN);
printf("请输入学号:");scanf("%ld",&lnew->num);
if(lnew->num!=0)
{ printf("请输入电话");scanf("%f",&lnew->tel);
printf("请输入地址:");scanf("%s",lnew->add);
printf("请输入邮编:");scanf("%ld",&lnew->zip);
printf("ok! 请输入下一个要插入的结点的信息\n");
}
}
break;
case 3:printf("\n请输入你想删除的结点的学号:");
scanf("%ld",&del_num);
while(del_num!=0)
{ head=del(head,del_num);
print(head);
printf("\n请输入你想删除的结点的学号:");
scanf("%ld",&del_num);
}
break;
case 4: system("CLS");
printf("谢谢您的使用\n\n\n\n");
getch();
exit(0); /*退出for循环*/
}
}
} /*结束主函数*/