计算机系统基础实验报告
学院  信电学院    专业    计算机        班级    1401     
 学号  1402*****    姓名   段登赢      实验时间:           
一、实验名称:Linux下的C语言编程
二、实验目的和要求:
实验目的:
(1) 掌握VMware虚拟机的使用及Linux操作系统的安装;
(2) 熟练Linux操作系统的基本使用;
(3) 掌握GCC编译环境的使用;
实验要求:
linux下gcc编译的四个步骤
描述你的分析过程;说明你做实验的过程(重要步骤用屏幕截图表示);提交源程序和可执行文件。
三、实验环境(软、硬件):
硬件:个人电脑一台 
软件:在虚拟机Vmware上的Ubuntu
GCC编辑器:vi编辑器
四、实验内容:
要求:在GCC编译环境下用C语言编程完成下列题目。
(1)人口普查
(2)旧键盘
(3)集体照
1、常用的Linux命令总结
Tab 快捷键,自动补全
切换用户:格式 su [用户名];su - root
查看目录和文件:格式 ls [-a -l ] [目录和文件], 其中-a是显示目录下所有的文件和目录(含隐藏文件)-l是显示目录下的文件和目录的详细信息
改变工作目录:格式 cd  /目录名;cd .. 返回上一目录
复制文件:格式 cp [ -r ] 源文件或目录 目标文件和目录,其中-r是复制目录
移动或更名:格式 mv 源文件 目标文件
删除文件或目录:格式 rm [ -r ] 文件名或目录名,其中-r是删除目录
创建目录:格式 mkdir 目录名
查看目录大小:格式 du 目录名
压缩文件:格式 gzip [-d] 文件名,其中-d是解压缩
打包文件:格式 tar 目录或文件
解包文件:格式 xvf 目录或文件
终止程序:Ctrl+c
后台运行:Ctrl+z
Gcc编译:格式 gcc [-o -O -c -g -w] 文件名,其中-o是确定输出自定义文件的名字,-O对程序的编译和链接进行优化,-c是不进行链接,生成.o后缀的文件,-g是产生调试工具,-w不生成警告信息。
2. 在Linux系统中对所给的题目进行编程和分析
    (1)打开虚拟机运行ubuntu
    (2)打开虚拟机终端(ctrl+Alt+T)
    (3)键入命令cd  /home/duan/桌面 进入到桌面
        (4)键入命令mkdir  shiyan,创建名字为shiyan的文件夹,更改用户权限
    (5)然后cd  /shiyan进入的shiyan文件夹里面
    (6)键入命令touch renkou.c创建.c文件。如下图所示
(7)键入命令gcc renkou.c进行编译c程序,生成可执行文件。
(8)键入命令./a.out运行可执行文件,如下图所示。
五、实验结果及分析:
1、人口普查
实验结果:
          过程分析:
      (1)定义三个char类型的数组,a[100]用来存储输入的名字信息,a1[100]用来存储最小年龄的名字,a2[100]用来存储最大年龄的名字。
      (2)利用y = y * 10000 + m * 100 + d; 把输入的生日信息转换成一个个可以用来比较大小的数字。
      (3)由题目给出的条件可以得到合法的年龄的数字的区间是:[ 18140906,20140906 ],第一次数字之间的大小的比较判断合法的年龄并用count记录合法的次数;第二次比较大小判断出年龄最长和最年轻的人,利用strcpy(a1, a)函数把名字信息存储到数组中去。
      (4)按照题目所给的格式打印输出
  2、旧键盘
实验结果:
  过程分析:
(1)定义两个char类型的数字s1,s2分别用来存储第一次和第二次输入的字符。
(2)定义一个char类型的数组s_output用来存储坏键的字符。
(3)利用for循环遍历s1中的每一个字符,再使用strchr(s2,s1[i])判断坏键以及判断坏键没有重复出现。
(4)利用s1[i]-=32把小写字母转换成大写字母。
(5)把坏键的字符放入s_output中。
(6)打印输出s_output数组。
3、集体照
实验结果:
  过程分析:
(1)首先定义一个含有姓名和身高的结构体,命名为info。
(2)使用动态内存分配函数malloc(n*sizeof(info))产生一个动态的info类型的数组group,用来存储输入的信息。再产生一个普通的动态数组result,用来存储输出的信息。
(3)使用qsort(group,n,sizeof(info),compare)函数把group中的信息按照身高从大到小进行排列。
(4)利用公式cols=total-n/k*(k-i-1);计算每一排的人数。
(5)利用公式result[offset+cols/2+(j%2==0?-j/2:j/2)]=id++;把group数组的下标按照题目所给的要求放到result数组中。
(6)输出时按照result数组下标到group数组的下标并且按照result数组的下标输出。
六、实验心得
    通过这次实验我首先学到了虚拟机的安装和Linux系统的使用方法,第一次接触命令行操作确实感到特别的烦躁,但之后我学会了如何使用Linux的gcc编译器。在用gcc编译运行的过程中,我又一次复习了C语言的基础内容,也学到了一些自己曾经没有使用过的库函数。总之,通过这次实验收获满满,成就感十足。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。