Linux 第六次上机题目

Linux 第6次上机实习题目

1. 简答题

(1) 一个C/C++程序从开始编码到生成可执行的二进制文件至少需要经过哪四个步骤?
预处理、编译、汇编和链接
(2) 如何用gcc 将源程序hello.c 编译生成可执行程序?
gcc hello.c -o hello
(3) 什么是makefile 文件?编写makefile 文件的一般格式是什么?
makefile 文件存有用于编译程序的规则集合的文本文件,该文件说明生成最终的二进制代码依赖哪些模块以及这些模块如何生成。
makefile 文件的一般格式是:
目标:依赖项列表
(Tab 缩进)命令
(4) 什么叫做程序调试?程序的错误可以分为哪两类?gdb 工具针对程序可以实现什么样的调试?
在程序开发中,所有寻找错误、改正错误的过程都可以成为程序调试。
程序错误分为:编译时的错误和运行时的错误。gdb 工具针对程序可以实现运行时的错误的调试。

2. 编程题

(1) 编写一个shell 脚本,从终端输入10个数,显示最大值、最小值和平
均值

#!/bin/bash
i=1
while [ $i -le 10 ]
do
read -p "input a number: " a
if [ $i -eq 1 ];then
minX=$a
maxX=$a
meanX=$a
else
minX=$(echo "$minX $a" | awk '{if($1<$2){print $1}else{print $2}}')
maxX=$(echo "$maxX $a" | awk '{if($1>$2){print $1}else{print $2}}')
meanX=$(echo "$meanX $a" | awk '{print $1+$2}')
fi
let i++
done
let i--
meanX=`echo "scale=6;$meanX/$i" | bc`
echo "minX=$minX,maxX=$maxX,meanX=$meanX"

结果
(2)编写一个脚本实现如下功能:
(1)当用户从终端输入y、Y、YES、yes、Yes、yEs、yeS、YEs、yES 或YeS 时打印当前路径;
(2)当用户从终端输入n、N、NO、No、no 或者nO 时显示当前路径下的文件及文件夹;
(3)当用户从终端输入exit 时,显示“goodbye!”并退出终端输入,否则一直等待用户输入。

#!/bin/bash
while [ 1 = 1 ]
do
read -p "input your choice: " choice
case $choice in
y|Y|YES|yes|Yes|yES|yeS|YES|yES|YeS|yEs)
pwd
;;
n|N|NO|No|no|nO)
ls -lath
;;
exit)
echo "goodbye"
break
esac
done

结果
(3) 进入网页"http://www.globalcmt.org/CMTsearch.html" 进行地震目录查询。
查询条件是:Start date: 2017/12/8 End date: 2017/12/11其他采用默认参数。将查询结果保存到文件earthquake_catalog.txt。
编写一个脚本,提取该文件中的地震震级数据(例如:Mw
=6.1 所对应地震震级为6.1)和标量矩数据
(例如:ScalarMoment=5.68e+25 表示地震能量为5.68e+25 达因·厘米)
利用公式Mw = 23log10 (M0 )−10.7验证地震能量所对应的地震震级与所提取的地震震级是近似相等的。
查询条件

#!/bin/bash
file=earthquake_catalog.txt
sed '1,13d' $file | grep 'Mw' | \
awk '{print $3,$13,2/3*log($13)/log(10)-10.7}'

结果
(4)同第3 小题,但计算地震震级Mw = 23log10 (M0 )−10.7时,要求采用编写C程序实现,然后利用shell和C程序联合处理实现第3小题的功能。
earthquake_catalog_C.sh 脚本内容:

#!/bin/bash
file=earthquake_catalog.txt
sed '1,13d' $file | grep 'Mw' | \
awk '{print $3,$13}' > temp.txt
gcc M0toMw.c -o M0toMw -lm
while read str
do
checkedMw=`echo "$str" | awk '{print $2}' | ./M0toMw`
echo "$str $checkedMw"
done < temp.txt

M0toMW.c 源程序中的内容:

#include"stdio.h"
#include"math.h"
int main()
{
double M0,Mw;
scanf("%lf",&M0);
Mw=2.0/3.0*log10(M0)-10.7;
printf("%8.3f\n",Mw);
}

运行文件
结果
(5) 编写一个脚本。要求如下
(1)脚本中编写两个数相加的函数sum 和三个数相乘的函数multiply;
(2)根据脚本参数个数来调用sum 函数或multiply 函数;
(3)输出最后计算结果。

#!/bin/bash
sum()
{
x=`echo "scale=4;$1+$2" |bc`
echo "$1 + $2 = $x"
}
multiply()
{
y=`echo "scale=4;$1*$2*$3"|bc`
echo "$1*$2*$3=$y"
}
if [ $# -eq 2 ];then
sum $1 $2
elif [ $# -eq 3 ];then
multiply $1 $2 $3
else
echo "Usage: ./$(basename $0) 1.2 2.3 or ./$(basename $0) 1.2 1.2 2.0"
fi

结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值