Linux实验六Word下载.docx
- 文档编号:15818204
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:15
- 大小:256.44KB
Linux实验六Word下载.docx
《Linux实验六Word下载.docx》由会员分享,可在线阅读,更多相关《Linux实验六Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
【二】试验预习(小四黑体)
1.Linux环境下C程序设计的步骤包括:
编辑源程序(vi)、编译连接程序(gcc)、调试程序(gdb,可选)和运行可执行文件。
2.gcc的基本用法为“gcc[选项]文件”,常用选项包括
-ofilename:
指定输出结果文件名
-c:
生成.o目标文件
-O1/-O2/O3:
代码优化
-g1/-g2/-g3:
产生调试信息
-ansi:
关闭GCC中某些不兼容ANSIC的特性
-Wall:
启用所有警告信息
-Werror:
把所有警告当作错误
3.执行“gdb”或“gdb可执行文件”即可启动gdb。
启动gdb后就可采用各种gdb命令完成程序调试。
常用gdb命令包括
filefilename:
加载被调试的可执行文件
break行号/函数名:
设置断点
deletebreak:
删除断点
infobreak:
查看断点信息
run:
运行程序
kill:
终止当前程序
step:
单步跟踪
next:
执行下一条
print变量/表达式:
打印变量或表达式值
list:
列出源代码
continue:
恢复程序的正常运行
quit:
退出gdb
【三】实验内容(小四黑体)
1.编写程序打印字符串“Hellogcc!
”
启动vi编辑器编写程序并存盘,假定存储为hello.c,在Shell中执行
$gcchello.c//$为命令提示符
$./a.out
查看运行结果,然后调用ls命令查看当前目录下生成的新文件。
2.启动vi,输入以下程序
#include<
stdio.h>
voidmain()//int
{
intvar=2016;
printf("
Showwarningforgcc!
\n"
);
}//缺乏return0;
存储程序,假定存储为warning.c,顺序执行
$gcc-pedanticwarning.c-owarning1
$gcc-Wallwarning.c-owarning2
$gcc-Werrorwarning.c-owarning3
仔细查看提示信息,然后调用ls命令查看当前目录下生成的新文件。
根据提示信息修改源程序,重新编译并运行程序,查看运行结果。
3.启动vi,输入以下程序
intmain()
unsignedlongcount;
unsignedlongresult;
unsignedlongtemp;
unsignedfive;
inti;
for(count=0;
count<
2009*2009*100/4+2010;
count+=(10-6)/4)
{
temp=count/1977;
for(i=0;
i<
20;
i++)
five=200*200/8000;
}
result=count;
resultis%ld\n"
result);
return0;
}
程序存盘,假定存储为inefficient.c,在Shell中执行
$gcc-Wallinefficient.c-oineffi1
$time./ineffi1//给出进程执行时间
$gcc-Wall-Oinefficient.c-oineffi2
$time./ineffi2
$gcc-Wall-O2inefficient.c-oineffi3
$time./ineffi3
$gcc-Wall-O3inefficient.c-oineffi4
$time./ineffi4
查看提示信息以比较各种优化选项的差别。
然后调用ls命令查看当前目录下生成的新文件。
修改源程序使之效率提高,重新执行以上命令,并调用time命令查看其运行时间,然后和未修改程序的执行结果进行比较并加以分析。
优化代码后不加–O时间
优化代码:
100904035;
count++)
4.启动vi,分别编辑以下三个文件
hello2.c
#include"
hello2.h"
//hello2.c
intmain()
charstr[]="
Helloworld!
"
;
print(str);
hello2_sub.c
//hello2_sub.c
string.h>
voidprint(char*str)
i<
strlen(str)+4;
i++)
%c"
star);
%c%s%c\n"
star,str,star);
hello2.h
#definestar'
*'
//hello2.h
voidprint(char*str);
存盘后执行
$gcc-chello2.c
$gcc-chello2_sub.c
$gcchello2.ohello2_sub.o-ohello2
或者把以上三条指令合并为如下一条指令
$gcchello2.chello2_sub.c-ohello2
$./hello2
查看运行结果,然后调用ls命令查看当前目录下生成的新文件,并分析各条指令的具体含义。
5.编写一个打印2~100之间素数的程序,在其中定义函数“intisprime(intn)”,用以判断参数“n”所代表的整数是否为素数。
用GCC编译该程序,编译时可以加不同的参数,然后运行并查看运行结果
问题:
将上述程序的源代码分散在三个文件中,其中第一个文件包含main()函数,第二个文件包含isprime()函数,头文件声明isprime()函数。
用GCC编译程序,然后运行并查看运行结果
6.启动vi,输入以下程序并存盘
stdlib.h>
intsquare_sum(intx,inty);
intnum_1,num_2,result;
while
(1)
Inputtwointegers,oruse00toexit:
"
scanf("
%d%d"
&
num_1,&
num_2);
if(num_1==0&
&
num_2==0)
exit(0);
result=square_sum(num_1,num_2);
Resultis%d\n"
intsquare_sum(intx,inty)
returnx*x+y*y;
假定存储为gdb_ssum.c,在Shell中执行
$gcc-g3gdb_ssum.c-ogdb2
然后执行
$gdbgdb2
进入gdb调试环境,执行以下命令(注意,以下命令不能保证和调试过程一一对应,某些地方应根据调试输出信息作相应修改)
(gdb)breakmain//(gdb)为命令提示符
(gdb)infobreak
断点信息
(gdb)list
显示代码
(gdb)listn//n代表行号
(gdb)listn1,n2//同上
(gdb)listsquare_sum
(gdb)run
(gdb)next
(gdb)n//next的简写
(gdb)?
?
//输入两个数
(gdb)n
…
(gdb)kill
(gdb)filegdb2
(gdb)delete//删除所有断点
(gdb)break12
(gdb)run
(gdb)n
//输入两个整数
(gdb)printnum_1
(gdb)printnum_2
(gdb)setnum_1=?
//设置num_1为?
(gdb)setnum_2=?
//设置num_2为?
...
(gdb)quit
分析各条gdb命令的输出信息。
7.启动vi,输入以下程序并存盘
score_mgr.h
#defineN10//score_mgr.h
structStudent
charnum[8];
charname[16];
doublescore;
chargrade;
};
structStatistic
intcount_A;
intcount_B;
intcount_C;
intcount_D;
intcount_E;
doubleavg,var;
voidinput(structStudent*p,intn);
voidssort(structStudent*p,intn);
voidstatistic(structStudent*p,intn,structStatistic*q);
voidoutput(structStudent*p,intn,structStatistic*q);
score_mgr.c
//score_mgr.c
score_mgr.h"
structStudentstu[N];
structStatisticstat;
input(stu,N);
//printf("
\nBeforestatistics:
//outpu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 实验