嵌入式C语言开发技

更新时间:2023-03-13 06:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

实验一 Linux编程环境实验(4学时) .................... 1 实验二 循环程序设计(2学时) .......................... 4 实验三 分支程序设计(2学时) .......................... 5 实验四 实验五 实验六 Linux实验七 实验八 实验九 实验十 Linux

函数实验(2学时) .............................. 6 指针实验(2学时) .............................. 7 常见数据结构实验(2学时) ................ 8 文件读写实验(2学时) .......................... 9 多线程实验(2学时) ........................... 10 网络编程实验(2学时) ......................... 11 应用程序的编写(4学时) ................. 12

实验一 Linux编程环境实验(4学时)

实验目的:

1.掌握Linux操作系统的基本命令,能对文件、文件夹进行相应的操作; 2.熟练掌握Linux下编辑器的使用;

3.学会使用编译器GCC对源程序进行编译; 4.掌握调试程序GDB的使用以及调试过程;

实验内容:

1.Linux常用命令;

1) 以root账号登陆Linux系统,创建新用户:student 2) 更改该用户密码为:123456 3) 切换到student账户

4) 查看用户主目录(/home/student)下的目录、文件信息 5) 创建新目录/home/student/source

6) 查看source的属性,并重新设置其权限为777

7) 查看/usr/include目录下所有后缀为.h的文件,并将它们都复制到

/home/student/souce目录下

8) 在用户主目录下创建新目录destination,并设置其权限为777 9) 将source目录下的文件都移动到destination目录下 10) 删除destination目录下的所有文件

11) 用man命令查看rename的使用手册(还有哪些方法可以获得命令帮

助?)

12) 重命名source目录为haha

13) 删除haha目录和destination目录

2.Vi编辑器的使用;

熟练完成vimtutor中的练习;(写完成以后的体会,字数不限!)

3.GCC编译器的使用;

1) 用gcc带不同参数编译下列C程序,并观察每次的运行结果。

#include int main(void) {

printf(“hello linux!\\n”); return 0; }

2) 用编辑器创建main.c, compute.c, input.c, compute.h, input.h和

main.h文件。下面是它们的内容。注意compute.h和input.h文件仅包含了compute和input函数的声明但是没有定义。定义部分在

1

compute.c和input.c文件中。main.c包含的是两条显示给用户的提示信息。

$cat compute.h

/*compute函数的声明原形*/ double compute(double, double);

$cat input.h

/*input 函数的声明原形*/ double input(char *);

$cat main.h

/*声明用户提示*/

#define PROMPT1 \请输入x的值:\#define PROMPT2 \请输入y的值:\

$cat compute.c #include #include #include \

double compute(double x, double y) { return(pow((double)x, (double)y)); }

$cat input.c

#include #include \double input(char *s) { float x; printf(\ scanf(\ return(x); }

$cat main.c

#include #include \#include \#include \int main(void) { double x, y;

2

printf(\本程序从标准输入获取x和y的值并显示x的y次方.\\n\ x = input(PROMPT1); y = input(PROMPT2); printf(\的y次方是:%6.3f\\n\ retun 0; }

创建上述三个源文件和相应的头文件,用gcc编译器,生成power可执行文件,并运行power程序。给出完成上述工作的步骤和程序运行结果。注意:在生成可执行代码时不要忘了链接上数学库。

创建makefile文件,使用make命令,生成power可执行文件,并运行power程序。给出完成上述工作的步骤和程序运行结果。

4.GDB调试器的使用;

使用GDB调试器调试上述程序,给出调试的步骤。

5.make与makefile实验练习

本实验是关于makefile内容的,不需要在计算机上进行编程运行,只需要回答下面这些问题。

CC = gcc

OPTIONS = -O3 -o

OBJECTS = main.o stack.o misc.o SOURCES = main.c stack.c misc.c HEADERS = main.h stack.h misc.h polish:main.c$(OBJECTS)

$(CC)$(OBJECTS) power $(OBJECTS) -lm main.o:main.c main.h misc.h stack.o:stack.c stack.h misc.h misc.o:misc.c misc.h

1) 所有宏定义的名字; 2) 所有目标文件的名字; 3) 每个目标的依赖文件;

4) 画出makefile对应的依赖关系树; 5) 生成每个目标文件所需要执行的命令;

6) 生成main.o stack.o 和misc.o时会执行哪些命令,为什么?

3

实验二 循环程序设计(2学时)

实验目的:

1.熟练掌握Linux下编辑器的使用;

2.学会使用编译器GCC对源程序进行编译; 3.熟练掌握循环语句的使用; 4.掌握循环程序的设计方法;

实验题目:

1.求s = a + aa +aaa + aaaa + aa…a的值,其中a是一个数字。例如2 + 22 + 222 +2222 +22222(此时共有5个数相加), 几个数相加由键盘控制。

2.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

3.判断101~200之间有多少个素数,并输出所有素数。

4.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

5.将一个正整数分解质因数。例如:输入90,打印出90 = 2×3×3×5。

4

实验三 分支程序设计(2学时)

实验目的:

1.熟练掌握if、switch语句的使用 2.掌握分支程序的设计方法 3.能用分支语句解决实际问题

实验题目:

1.有一函数:

y=

写一程序,输入x值,输出y值。

2.输入一学生分数,判断此分数为哪一等。设等级如下: 100 —— 80:A 79 —— 70:B 69 —— 60:C 59 —— 0:D 其他:输入错误。

3.输入某年某月某日,判断这一天是这一年的第几天。

5

实验四 函数实验(2学时)

实验目的:

1.熟练掌握函数的应用; 2.掌握实际问题功能的划分; 3.熟练掌握函数的设计方法; 4.掌握函数接口的设计;

实验内容:

1.编写函数,求两个直角边对应的斜边长度。

2.编写函数,求两个正整数的最小公倍数和最大公约数,并输出。 3.按下面要求编写程序:

1)定义函数 total(n)计算1+2+3+....+n;

2)定义函数,输入正整数n,计算并输出下列算式的值。

要求调用函数 total(n) 计算1+2+3+....+n。

4.编写一个函数求1k + 2k + 3k + ... + nk的值,假设k为4,n为6。6

实验五 指针实验(2学时)

实验目的:

1.熟练掌握指针的应用;

2.能用指针解决实际问题,总结指针与数组的不同; 3.熟练掌握指针使用的技巧及方法; 4.掌握不同类型指针的处理方法;

实验内容:

1.编程实现:任意输入的10个数,求其平均值。

要求:

1) 10个数采用scanf语句读入;

2) 利用指针实现对这10个数的访问; 3) 要求平均值的精度为小数后面2位。

2.编程实现:输入三个整数,按由大到小的顺序输出。

要求:

1) 通过scanf函数输入三个数据并存入三个变量中; 2) 利用指针实现从大到小输出;

3) 修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出;

4) 修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出;

5) 体会指针对不同数据处理的特点。

3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。

要求:

1) 在主函数中以初始化方式输入一个字符串; 2) 调用newcopy()函数;

3) 在主函数中输出处理后的结果。

4.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。

要求:

1) 整数数组由初始化方式输入。任意整数由scanf函数输入; 2) 实现过程采用指针处理;

3) 输出原始数组数据以及插入数据后的数组数据并加以相应说明。

7

实验六 Linux常见数据结构实验(2学时)

实验目的:

1.掌握链表的生成方法; 2.能够构造出一个二叉树;

3.能对构造的二叉树进行常见操作;

实验内容:

1.编程实现:建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点内容输出;

2.调试验证课本138页“构建顺序二叉树”程序,并先序遍历该二叉树;

8

实验七 文件读写实验(2学时)

实验目的:

1.熟练掌握文件的打开、关闭方法;

2.熟练掌握文件的基本操作,能针对不同的使用,采用不同方式打开文件; 3.掌握文件中数据的读出、查找以及插入; 4.熟练掌握文件指针的作用;

实验内容:

1.编程实现:调用fopen函数,打开当前目录下的“a.c”文件(如果没有该文件,可以自己创建一个),若成功,在屏幕上显示“file open successfully…”,若失败,在屏幕上显示“can not open the file…”

2.有5个学生,每个学生有三门课成绩,从键盘键入以上数据(包括学生号、姓名、3门课成绩),并存放在磁盘文件“stud”中。

3.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入到一个新文件“stud_sort”中。

9

实验八 多线程实验(2学时)

实验目的:

1.掌握线程的基本知识;

2.能设计一个简单的多线程程序; 3.学会多个线程之间的数据传递方法; 4.掌握多线程之间的协调工作;

实验内容:

1.进程创建:父进程通过调用fork()函数创建子进程,父进程每间隔5s打印消息“This is parent process!”,子进程每间隔2s打印消息“This is child process!”

2.线程的创建与与终止:进程中使用pthread_creat()创建5个线程(线程P1~P5),每个线程都间隔1s输出打印该线程的线程ID。

10

实验九 网络编程实验(2学时)

实验目的:

1.学会使用网络套接字; 2.利用套接字建立网络连接; 3.实现网络数据的传输;

实验内容:

编程实现基于服务器——客户端的聊天程序:服务器和客户端之间使用面向非连接方式通信,服务器端创建并配置socket可以响应任意一个客户端的连接,客户端和服务器端根据相应的配置信息实现聊天通信。

11

实验十 Linux应用程序的编写(4学时)

实验目的:

1.搭建基于Linux操作系统的ARM系统实验所需的环境构件; 2.学习编写添加Linux应用程序;

实验内容:

1.搭建实验环境;

1) 用串口线连接主机和实验系统,配置超级终端; 2) 安装交叉编译器; 3) 配置NFS网络文件系统;

4) 用交叉网线连接主机和实验系统; 2.Linux应用程序的编写,添加,运行;

1) 在主机端编写一个简单的应用程序,如hello_world程序,交叉编译

该应用程序; 2) 在实验系统上添加,运行该应用程序; 3) 编译运行一个LED应用程序;

12

本文来源:https://www.bwwdw.com/article/r20o.html

Top