一、实验内容
编程及调试题
(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
#make
②如果按照下面的目录结构存放文件,请改写Makefile文件。
bin:存放生成的可执行文件
obj:存放.o文件;
include:存放visit.h、study.h
src:存放main.c、visit.c、study.c和Makefile
Makefile文件如下:
#vim Makefile
#make
③如果按照下面的目录结构存放文件,请改写Makefile文件。
bin:存放生成的可执行文件
obj:存放.o文件;
include:存放visit.h、study.h
src:存放main.c和Makefile
src1:存放visit.c
src2:存放study.c
Makefile文件如下:
#vim Makefile
#make
(2)采用下面程序。
有四个盒子,第一个盒子里装着8个小球,第二个5个小球,第三个3个小球,第四个2个小球。有四个小朋友,每个轮流从装有最多小球的盒子拿出三个球平均分到其它的盒子里,依此类推,问第1999次时,球的组合是?
原始的组合:8 5 3 2
一轮后的组合:5 6 4 3
#include "stdio.h"使用以下命令执行程序,发现结果不是想要的结果,所以使用gdb进行调试。
#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]);
}
}
发现与预设结果不符合,预设结果应该是{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;
}
}
最后程序修改如下: