(嵌入式软件设计)Linux编程基础

时间:2020-12-26 18:37:11

一、实验内容

编程及调试题

(1).根据要求编写Makefile文件。有5个文件分别是main.c、visit.h、study.h、visit.c、study.c。具体代码如下:

main.c文件

#include<stdio.h>

main()

{

int i;

printf("please input the value of i from 1 to 5:\n");

scanf("%d",&i);

if(i==1)

visit();

if(i==2)

study();

}

visit.h文件

void visit();

study.h文件

void study();

visit.c文件

#include"visit.h"

void visit()

{

printf("visit friend today\n");

}

study.c文件

#include"study.h"

void study()

{

printf("study embedded system today\n");

}

①如果上述文件在同一目录下,请编写Makefile文件,用于生成可执行程序zhs。

Makefile文件如下:

#vim Makefile

(嵌入式软件设计)Linux编程基础

#make

(嵌入式软件设计)Linux编程基础

②如果按照下面的目录结构存放文件,请改写Makefile文件。

bin:存放生成的可执行文件

obj:存放.o文件;

include:存放visit.h、study.h

src:存放main.c、visit.c、study.c和Makefile

Makefile文件如下:

#vim Makefile

(嵌入式软件设计)Linux编程基础

#make

(嵌入式软件设计)Linux编程基础

③如果按照下面的目录结构存放文件,请改写Makefile文件。

bin:存放生成的可执行文件

obj:存放.o文件;

include:存放visit.h、study.h

src:存放main.c和Makefile

src1:存放visit.c

src2:存放study.c

Makefile文件如下:

#vim Makefile

(嵌入式软件设计)Linux编程基础

#make

(嵌入式软件设计)Linux编程基础

(2)采用下面程序。

有四个盒子,第一个盒子里装着8个小球,第二个5个小球,第三个3个小球,第四个2个小球。有四个小朋友,每个轮流从装有最多小球的盒子拿出三个球平均分到其它的盒子里,依此类推,问第1999次时,球的组合是?
原始的组合:8 5 3 2
一轮后的组合:5 6 4 3 

#include "stdio.h"
#include "string.h"
int main()
{
int a[4]={8,5,3,2};
int i,j,k,l,t;
for(i=1;i<=1999;i++)
{
for(j=1;j<4;j++)
{
if(a[0]<a[j])
{
t=a[0];
a[0]=a[j];
a[j]=t;
}
}
a[0]-=3;
for(k=1;k<4;k++)
{
a[k]+=1;
}
}
for(l=0;l<4;l++)
{
printf("%d ",a[l]);
}
}
使用以下命令执行程序,发现结果不是想要的结果,所以使用gdb进行调试。

(嵌入式软件设计)Linux编程基础

(嵌入式软件设计)Linux编程基础

(嵌入式软件设计)Linux编程基础

(嵌入式软件设计)Linux编程基础

(嵌入式软件设计)Linux编程基础

发现与预设结果不符合,预设结果应该是{6,3,5,4},经过调试发现,第一次与第二次比较得出,第一次没有进入循环比较语句而第二次有,所以问题出现在循环比较语句

for(j=1;j<4;j++)
       {
          if(a[0]<a[j])
          {
              t=a[0];
              a[0]=a[j];
              a[j]=t;
           }
      }
最后程序修改如下:

(嵌入式软件设计)Linux编程基础

(嵌入式软件设计)Linux编程基础