生产实习报告_生产实习实习报告

2020-02-28 实习报告 下载本文

生产实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“生产实习实习报告”。

一.实习记录

1.7月2日

① 讲述Gcc Gcc工具链四个步骤:预处理、编译、汇编、链接。

在Linux操作系统下,在终端中文本编辑的命令为vim +文件名(如test123.c),回车进入文件,然后进行编写。编译命令:gcc +源文件名+-o+可执行文件名。运行:./ +可执行文件名。输入命令gcc-c test.c 时,则会生成.o文件。

在文本编辑情况下,有三种模式:命令、输入、末行,它们之间的转换关系图为:

a:输入i/o/a;b:esc;c:冒号,其中可以为wq:保存退出

q!不保存退出,应注意的是保存退出需在末行模式下进行

几种命令:gcc-o test test.c-Wall 把所有警告显示出来

gcc-o test test.c-O2

提高效率(在底层开发运用)

gcc-o test test.c-g

进入gdb调试模式

② Gdb调试器

可设置断点、单步执行、查看变量、查看文件 a.-g 编译

gcc 源文件-o 可执行文件名-g b.gdb空格./test 运行 c.l +数字

显示代码 d.b +数字/函数名

设置断点 e.r

执行程序 f.p +变量

打印变量 g.n 单步执行

h.c 依次继续往下执行

Ctrl +c停止 i.q 退出

j.s 进入函数

info break 断点信息

快捷键:方向键:翻命令

Tab键:补全命令

修改vim属性命令:vim ~/.vimrc(~表示当前用户根目录,.表示隐藏文件)然后编写:set tabstop=4 set

shiftwidth=4 set

autoindent set

cindent set

nu 2.7月3日

① 版权和版本声明:

位于头文件和函数定义的开头,包括版本、作者、更新日期 注释:函数介绍、输入参数、输出参数、返回值 /***** 函数名称: 函数功能介绍: 函数参数;函数返回值: 其他: *****/ int GStuNum,匈牙利命名规则;int g_stu_num,unix规范

调用多文件编译

gcc-o test test.c fun.c 两个源文件生成一个test文件 编写makefile文件:vim makefile,make编译。在makefile文件里,要有目标并写出依赖,命令前需加tab键。例如: main:test.o

fun.o

gcc-o main-test.o fun.o

test.o:test.c

gcc-c test.c

fun.o:fun.c

gcc-c fun.c

如图:

也可以用变量代替:开头CC=gcc(PC平台),CC=arm-linux-gcc(arm平台),则可写成:

$(CC)-o main test.o fun.o

$为使用变量值 clean:rm *.o-rf

rm main-rf ② 数据结构

C基本语法:1.变量2.语句3.分支4.循环5.函数6.存取7.类8.封装集成。C++的特性:封装,集成,多态

链表,最重要的是双向链表(单环),基本操作:添加、查找、删除。定义:typedef struct node{ datatype data;struct node *next;}LNode,*LinkList;指向本结点类型的指针是实现链表的基础,数据量大时用链表存储,少时用数组。指针最大值为2^32=4G,指针0~4G的一个数字。头指针为“NULL”则表示一个空表。内存分配函数有malloc和calloc.语句:算术语句,如i=i+1;i++;关系语句,i>2;逻辑语句,i10两个同时成立就成立,||(或)一个成立就成立; 分支:if else 计算闰年if(year%400==0||(year%4==0&&year%100!=0))循环:while(),do{}while();for(i=0;i

usleep();sleep(1);1秒跳一次fflush(stdout);题目(1.声明数组2.录入学生信息3.求最高分4.打印)代码:struct stu{int s;int num;char name[16];};

int main {struct stu stu_arry[10];} 3.7月4日 链表

链表的创建与遍历及查找、增加、删除结点各项操作,给出部分代码进行练习,对链表的操作进行熟悉。着重强调增加结点(尾插入)的操作,得到尾结点的代码如下:

for(p=h;p!=NULL;p=p->next){if(p->next==NULL)pp=p;} p=malloc(sizeof(struct node));p->num=num;strcpy(p->name,name);pp->next=p;p->next=NULL;return h;4.7月5日

① 熟悉链表的各项操作,老师给出代码,加强出错部分的练习。删除结点时的考虑,删除的是头结点和非头结点,代码如下:

struct node *link_del_node_by_num(struct node *h,int num){

struct node *p;

struct node *pp;

/*find node by num*/

for(pp=p=h;p!=NULL;pp=p,p=p->next)

{

if(p->num==num)

break;

}

/*del node is head node*/

if(p==h)

{

h=h->next;

free(p);

}

/*del node is not head node*/

else

{

pp->next=p->next;

free(p);

}

if(p==NULL)

return NULL;

return h;} ②哈希表

哈希表存储的基本思想以数据表中的每个记录的关键字k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。

构造方法:1.直接定址法 H(k)=k+c 2.除留余数 H(k)=k%m 3.平方取中法 取关键字平方后的中间几位作为哈希函数的地址冲突解决方法:开放定址法 H(k)=(k*k+i)%m,Hi=(H(k)+d(i))%m,i=1,2,„„k(d为增量函数)编写代码,实现对哈希表的添加、查找操作。

5.7月6日

整理哈希表的操作代码,对各个部分进行完善,并编写出了删除结点的程序代码。在删除头结点的时候,程序运行结果总是出错,询问老师过后,经过老师的讲解,最后完成了代码。

6.7月7日

接口设计 词典的存储格式:文本文件,索引;查询方式:字符串匹配,二分查找 版本管理工具(git)找出版本之间的差异,回到以前的版本,原则:迭代开发(逐渐找出功能)、接口分离

$ ^ 所有的依赖文件,$

7.7月8日

讲述部分函数的意义,memset直接设置内存,memset(trans,0,WORD_LEN);从trans开始,长度为多少,都设为0。Shift+* 移光标

#if 0„„#endif 此时这里的内容不需要编译;#if 1„„#endif 能打开

8.7月9日

①如何将windows中的文件传到虚拟机中?

控制面板—>网络连接—>Vmware Workstation启用,在终端输入命令ifconfig eth 0 找到地址192.168.8.131;然后虚拟机打开ftp命令 /etc/init.d/vsftpd start nestar-an|grep 20是查看ftp状况的,修改密码命令pawd student,解压缩文件tar xf dict.tar.bz2 ②文件的操作

FILE *pFile=fopen(filename,“rb”)fclose(pFile)关闭文件

fread(buffer,size,size_count,pFile)从文件可读取size*size_count到buffer中。在代码中实现退格键的操作。

9.7月10日

实现了退格键操作,并对代码进行完善。下午编写删除操作,结果失败。

10.7月11日

老师验收程序,进行演示。二.设计过程

1.题目

(1)建立一个哈希表,并实现添加、删除、查找的功能(2)设计一个英汉字典,要求实现退格输出功能

2.题目思路

⑴哈希表存储的基本思想以数据表中的每个记录的关键字k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。需要用除留余数法构造。首先找到地址标号后,然后再根据链表的方式存储进去。能够实现可选择性的添加数据,然后显示出哈希表。可根据查找的数据,显示出位置,及根据数据删除时,出现的新哈希表。

⑵英汉词典需要在二进制文件里,建立一个字典库,然后再查找编写一系列功能函数。此程序用的是联想输入法,在非标准模式下实现。能够按首字母查询并且实现选择单词,出现意思的功能,并且能够实现退格输出。此时需要编写查找匹配单词的函数,及得到单词意思的函数。老师已经给出部分代码,再编写实现退格键的操作即可。

3.如何实现

⑴实现哈希表的流程图

利用除留余数,得到数据位置的代码 int hash_hash_fun(int data){

int pos;

pos=data%HASH_MAX;

return pos;} 在添加数据时,应给P开辟空间,之后找到所属位置,进行存储即可。部分主要代码如下:

/*malloc memory*/

p=(struct node*)malloc(sizeof(struct node));

/*input data*/

printf(“input add data:n”);

scanf(“%d”,&add_data);

getchar();

pos=hash_hash_fun(add_data);

p->num=add_data;

p->next=hash[pos];

hash[pos]=p;

在查找数据时,首先进入 hash_hash_fun函数,找到位置后,方可进行查找,此函数是整个程序的关键,输出结果为位置加上数据的形式。代码如下:

struct node *hash_find(struct node *hash[],int f_num){

int pos;

struct node *p;

printf(“input find f_num:n”);

scanf(“%d”,&f_num);

pos=hash_hash_fun(f_num);

for(p=hash[pos];p!=NULL;p=p->next)

{

if(p->num==f_num)

{

printf(“[%d] %dn”,pos,p->num);

break;

}

}

if(p==NULL)

printf(“no find.n”);

return p;}

在删除的时候,需要三方面的考虑,删除的是头结点,非头结点,及指针所指的为空,这样才能更准确的删除表中数据。代码如下:

struct node *hash_del(struct node *hash[],int num){

int pos;

struct node *h=NULL;

struct node *p;

struct node *pp;

printf(“input del num:n”);

scanf(“%d”,&num);

pos=hash_hash_fun(num);

for(pp=p=h=hash[pos];p!=NULL;pp=p,p=p->next)

{

if(p->num==num)

break;

}

printf(“[%d] %dn”,pos,p->num);

if(p==h)

{

hash[pos] = p->next;

free(p);

}

else

{

pp->next=p->next;

free(p);

}

if(p==NULL)

return NULL;} ⑵实现英汉词典退格功能 在实现查找功能时,需要进行输入数据的判断如果是字母的话,应怎样运行,如果是退格键时,是怎样,以及是数字时是怎样,这里需调用两个函数isalpha()判断字母和isdigit()判断数字。这里把字母的判断和退格键的判断写到了一块,代码如下:

if(isalpha(c)||(c=='177'))

{

trans[n] = c;

//back space

if(c == '177')

{

n--;

if(n

trans[n] = '';

if(n > 0)printf(“nAfter you input backspace:%sn”, trans);

}

else n++;

//find and update match words.//m = find_match_words(trans, example_words, ARRAY_SIZE(example_words));

m = world_find(trans, items, VISUAL_CNT);

//display match words.if(m){ printf(“Words display:n”);display_match_words(items, m);}else{ n = 0;memset(trans, 0, sizeof(trans));}

根据词典位置词取这条单词

static int read_world_by_pos(int pos, char *buffer, int buf_len){ int i;int ch;fseek(s_file, s_world_count*sizeof(int)+4+pos, SEEK_SET);for(i = 0;i

ch = fgetc(s_file);

if(EOF == ch)

{

buffer[i] = '';

return i;

}

if('/' == ch)

{

buffer[i] = '';

return i;

}

buffer[i] = ch;}

return 0;} 对文件进行二分查找

int world_find(const char *a_world, DictItem *items, int max_world_count){ /*二分查找*/ char input[MAX_WORLD_LEN+1];char buf_world[MAX_WORLD_LEN+1];int begin = 0;int end = s_world_count-1;int mid;int compare;

strcpy(input, a_world);to_lower(input);while(begin

mid =(end+begin)/2;

read_world_by_pos(s_wordindex[mid], buf_world, sizeof(buf_world));

to_lower(buf_world);

compare = strcmp(input, buf_world);

if(compare

{

end = midcur)

max_world_count = s_world_count48;if(k >=0 && k

} else{ } printf(“nchoose errorn”);//display the translation world_get_content(items[k].world_pos, buffer, sizeof(buffer));printf(“%s:n%sn”, items[k].world, buffer);n = 0;memset(trans, 0, sizeof(trans));memset(items, 0, sizeof(items));break;

}

} } // C-d exit if(c == '04')break;int main(int argc, char **argv){

} if(dict_init(“./dict.bin”)

《生产实习报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
生产实习报告
点击下载文档
相关专题 生产实习实习报告 实习报告 生产实习实习报告 实习报告
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文