本文共 6395 字,大约阅读时间需要 21 分钟。
作业1:
输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置。5 4 3 2 1 i = 0 = min1 4 3 2 5 i+11 2 3 4 5 1 2 3 4 5
作业2:
从前有个人叫约瑟夫不幸入狱,监狱枪毙犯人。让33个犯人围成一个圈, 从1-7报数,数到7的出列枪毙,最后只有一个人能活下来。聪敏的约瑟夫稍加 计算活下来了,问这个位置在哪?(编程解决问题) 12 需要思考的问题 1)数组是连续的线性结构,如何构成一个环? 数组下标 k if ( k > 32 ) k = 0; 2)如何处理死去的犯人? for (i = 0; i < 7; i++) { //从1-7报数 if (criminal == DEAD) { i–; } }作业3:输出如下图形:
* 5 1 *** 4 3 ***** 3 5 ******* 2 7 ********* 1 9 *********** 0 11 i=0 5-i 2*i+1********* 1 9
******* 2 7 ***** 3 5 *** 4 3 * 5 1 i=0 i+1 9-2*i逻辑推理题:(不必写代码)
1、怎样分财宝? 有两位探险家穿越沙漠,甲携带5瓶水,乙携带3瓶水,计划8天走出沙漠, 甲乙二人约定每天每人喝半瓶水。 在旅程刚开始(水还未损耗时),二人碰上一个富商,该富商说他家就在沙漠 另一端(即甲乙二人+的目的地),如果甲乙二人能护送他顺利到家,则会分给 甲乙二人一笔巨额财宝。 由于多了一个人,所以每天每人喝1/3瓶水。 8天后,三人成功穿越沙漠。富商兑现诺言,按甲乙二人携带的水量, 按5:3的比例分给二人一笔财宝。此时甲说:“您的分配方式不公平”。 问:富商的分配方式是否公平?若不公平,则正确的分配方式应该是多少? 7:1 8/3 甲 7/3 已 1/3 2、哪一瓶为毒药? 现有100瓶液体已经编好号,其中99瓶为水,1瓶为毒药。 毒药的外观、性状、气味等与水完全相同。若小白鼠饮下毒药, 则会在24小时后死亡。 现在需要找出哪瓶为毒药,但是由于时间紧迫,只有1天时间, 为了加快验证速度,我们给你7只小白鼠。 问:设计一种给小白鼠喂食液体的验证方案,在24小时之后立即找出哪瓶为毒药1 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 1 0 3 0 0 0 0 0 0 1 1 4 0 0 0 0 0 1 0 0 5 0 0 0 0 0 1 0 1 …3、球的重量?
有8个球,其中一个比另外的要略重。现在只有一个天枰,在不使用砝码的情况 下最少需要称几次,才能找出这个球? 2次 三组 3 3 24.沙漠中的尸体?
一个人被发现死在沙漠里,手中捏这一个火柴,周围没有任何足迹,也没有其他 线索。他是怎么死的呢?===================================================================================
1.结构体 struct 我们学过的数据类型(int、char、float等)是C语言提供的基本数据类型。 【1】什么是结构体 用户自定的一种构造类型。 用于保存不同数据类型的数据的一种构造类型。在结构体中包含了若干不同类型的 和不同含义的数据项(相同也可以),将这些数据综合起来反映某个信息。【2】定义/声明结构体类型
struct 结构体名 { 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; … 数据类型 成员n; }; 注意:struct 结构体名 变量名;
eg :
struct worker stuff;练习:声明以下结构体类型及变量
1)学生成绩单:成员表列包括:学生学号、学生姓名、语文成绩、数学成绩、英语成绩 struct Score { int id; char name[32]; float chinese; float math; float english; }; struct Score score;2)产品生产批号:成员表列包括:产品批次、产品生产日期(年、月、日)、产地
struct Date { int year; int month; int day; };struct Goods { int pici; char chandi[32]; struct Date riqi;}struct Goods goods;
【4】结构体变量的使用
因为结构是一个整体,不能给整个结构体赋值,只能给结构成员赋值。 struct Goods goods; goods = {20200909, luan, {2020,9,9}}; 错误❌ 引用结构体的成员 : 结构体变量名.成员名 //“.” 成员运算符 eg: struct Date riqi; riqi.year = 2020; riqi.month = 9; riqi.day = 9;注意:
1)如果结构体的成员本身也是一个结构,需要使用成员运算符一级一级找到最低的一级成员赋值。 struct Goods goods; goods.riqi.year = 2020; goods.riqi.month = 9; goods.riqi.day = 9; 2)如果两个结构体变量类型相同可以相互赋值 struct worker stuff; struct worker manger; stuff = manger;练习:
键盘上输入两个学生的信息,输入的信息的信息保存在结构体中。比较两个学生的成绩高低。 出成绩高的学生信息,如果两个学生成绩相等则两个学生的信息都输出 (学号、姓名、成绩、年龄)【5】结构体数组
如果数组内存储的数据都是结构,则该数组是结构体数组 定义结构体数组 : 数据类型 数组名[元素个数]; struct 结构体名 数组名[元素个数]; eg : struct student stu[10]; 引用结构体数组元素 数组名[下标] eg: stu[0]; 引用结构体数组元素的成员 数组名[下标].成员名 eg: stu[0].age = 20;1.FS4412 开发板
【1】核心板(高速设备) SOC Samsung Exynos4412(ARM) Flash Emmc(4/8G) RAM 1G 电源管理单元(unit) 【2】外围板(低速设备) 串口(serial) 网卡(DM9000) 蜂鸣器(beep) LED灯 LCD显示器 红外接收器 DS18B20 温度传感器 KEY 拨码开关(设置开发板的启动方式) SD卡 USB接口 电源 & 开关2.系统移植(Linux 操作系统)
2.1 串口调试 先安装CH340 USB转串口驱动 使用串口调试工具 (以putty为例) connection type -> Serial Serial line -> COM3 (根据自身电脑) speed -> 115200 Saved session ->2.2 网络配置 (使用网络传输数据)
【1】配置ubuntu的网络 1) sudo vim /etc/network/interfaces //网络配置文件 2) 修改文件内容 auto eth0 //设置以太网卡 iface eth0 inet static //设置静态IP address 192.168.1.3 //设置IP地址 netmask 255.255.255.0 //设置子网掩码 gateway 192.168.1.1 //设置网关的IP 3) sudo /etc/init.d/networking restart //重启网络服务使配置生效 4) 虚拟机->设置->网络适配器->桥接模式 5) ifconfig //查看网络配置 注意:不要连接无线网络【2】配置开发板的网络
Uboot (universal boot loader) 通用引导程序 相当于PC中的BIOS 负责引导 操作系统启动(初始化设备 …) 使用者需要使用uboot的指令与 uboot进行交互uboot 网络设置
setenv ipaddr 192.168.1.2 //设置开发板IP setenv netmask 255.255.255.0 //设置子网掩码 setenv gatewayip 192.168.1.1 //设置网关IP setenv serverip 192.168.1.3 //设置服务器IP saveenv网络测试
ping 192.168.1.3 显示结果 host 192.168.1.3 is alive 代表成功 host 192.168.1.3 is not alive 代表成功2.2 设置tftp服务
tftp 简单文本传输协议 开发板可以使用tftp服务从ubuntu中下载操作系统 启动需要的文件 uImage //Linux系统的镜像文件 exynos4412-fs4412.dtb //设备树 1)准备工作 sudo mkdir /tftpboot sudo chmod 777 /tftpboot -R 将 开发板镜像\uImage //Linux系统的镜像文件 exynos4412-fs4412.dtb //设备树 拷贝到/tftpboot sudo chmod 777 /tftpboot -R2)ubuntu下的配置 打开配置文件 sudo vim /etc/default/tftpd-hpa 修改配置文件的第4和第6行 # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure -c" 重启配置服务,使配置生效 sudo /etc/init.d/tftpd-hpa restart3)开发板的配置 下载 uImage //Linux 压缩内核镜像 exynos4412-fs4412.dtb //设备树 setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000 saveenv
2.3 设置nfs服务
nfs (network file system) 网络文件系统 开发板可以通过nfs与ubuntu共享文件系统(方便代码调试) 1)准备工作 sudo mkdir /source sudo chmod 777 /source -R 将 开发板镜像\rootfs.tar.gz 拷贝到 /source cd /source tar -xvf rootfs.tar.gz //解压压缩包 sudo chmod 777 /source -R 2)Ubuntu下的配置 打开配置文件 sudo vim /etc/exports 修改文件内容 (注意只需要修改最后一行即可) # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /source/rootfs *(rw,sync,no_subtree_check) 重启配置服务,使配置生效 sudo /etc/init.d/nfs-kernel-server restart 3)开发板的配置 挂载Linux根文件系统 setenv bootargs root=/dev/nfs nfsroot=192.168.1.3:/source/rootfs ip=192.168.1.2 init=/linuxrc console=ttySAC2,115200 rw saveenv完场以上所有配置后,重启开发板,不要打断开发板启动,即可看到Linux成功运行
3.设置交叉编译环境
step 1: 将gcc-4.6.4.tar.xz 拷贝到虚拟机中并解压 fs@ubuntu:~$ tar -xvf gcc-4.6.4.tar.xz step 2: 将解压的好的文件gcc-4.6.4 剪切到/目录并重命名为toolchain fs@ubuntu:~$ mv gcc-4.6.4 toolchain fs@ubuntu:~$ sudo mv toolchain / step 3: 修改文件权限 fs@ubuntu:~$ sudo chmod 777 /toolchain -R step 4: 打开配置文件并修改 fs@ubuntu:~$ sudo vim /etc/bash.bashrc 在最后一行新建一行 export PATH= P A T H : / t o o l c h a i n / b i n s t e p 5 : 重 加 加 载 脚 本 配 置 文 件 f s @ u b u n t u : PATH:/toolchain/bin step 5: 重加加载脚本配置文件 fs@ubuntu:~ PATH:/toolchain/binstep5:重加加载脚本配置文件fs@ubuntu: source /etc/bash.bashrc 检查是否配置成功 fs@ubuntu:~$ arm-n 如果能够自动补全 fs@ubuntu:~$ arm-none-linux-gnueabi-今日作业
根据笔记完成笔记上的所有配置转载地址:http://futgn.baihongyu.com/