Linux shell 输入一个成绩,用case语句判断成绩的等级 (结题思路:将成绩/10) [80-100] A 8,9,10 [60-80 ) B 6,7 [0-60 ) C 0,1,2,3,4,5 如果成绩非法不是[0-100],则提示用户输入的成绩是非法的成绩
时间: 2023-03-20 19:01:40 浏览: 355
可以使用以下的Linux shell代码来实现对成绩的等级判断:
```
read -p "请输入成绩: " score
case $((score/10)) in
10|9|8)
echo "成绩等级为 A"
;;
7|6)
echo "成绩等级为 B"
;;
5|4|3|2|1|0)
echo "成绩等级为 C"
;;
*)
echo "您输入的成绩非法"
;;
esac
```
该代码首先使用`read`命令获取用户输入的成绩,然后使用`$((score/10))`计算出成绩的十位数,再根据十位数的不同使用`case`语句判断成绩的等级,最后输出相应的结果。
需要注意的是,最后一个`*)`分支是用来处理成绩非法的情况,即成绩不在[0-100]范围内的情况。如果用户输入的成绩非法,则会输出提示信息"您输入的成绩非法"。
相关问题
1 ·肿瘤大小分析 肿瘤大小V生长的遗率与V的a 灭方成正比,其中a为形状参数,0<=a<=1;而比例系数K 随时间减小,减小遗率又与当时的K值成正比,比例系数为 环境系 故b·设某肿瘤参数a=1,b=0.1,K的初始值为2·V的初始值为1. ( 1)请分析此肿瘤生长不会超过多大?( 2)画图分析肿瘤大小V和 K随时间变化趋势进行分析:( 3)多长时间肿瘤大小翻一倍?(4) 肿瘤生长速率由递增转为递减的时间? 结题思路:首先建立肿瘤生长数学模型·然后对微分方程进行求解· \begin{cases} \frac {dv}{dt}=kv^{a} \\ \frac {dk}{dt}=-bk \end{cases}
这是一个关于肿瘤生长的数学模型,我们可以通过解微分方程来回答这些问题。
首先,根据题目中的条件,可以得到微分方程:
```
dv/dt = k * v^a
dk/dt = -b * k
```
其中,`v` 表示肿瘤大小,`k` 表示比例系数。这是一个耗散系统,因为比例系数 `k` 随时间逐渐减小,最终趋于零。
(1) 当 `a=1` 时,该微分方程的解析解为:
```
v(t) = sqrt(v0^2 + 2 * k0 * t / b) - k0 / b
```
其中,`v0` 和 `k0` 分别为初始值,即 `v(0) = 1`,`k(0) = 2`。因为 `k` 随时间逐渐减小,所以 `v(t)` 也会随时间逐渐减小,最终趋于一个有限值。当 `t` 趋于无穷大时,`v(t)` 趋于:
```
v_inf = -k0 / b
```
所以肿瘤生长不会超过 `-k0 / b`。
(2) 我们可以通过数值计算来画出 `v` 和 `k` 随时间变化的图像。具体地,可以使用 Matlab 等数学软件来求解微分方程,并绘制出 `v` 和 `k` 随时间变化的曲线。下面是 Matlab 的代码示例:
```
% 定义微分方程
a = 1;
b = 0.1;
k0 = 2;
v0 = 1;
f = @(t, y) [k0 * y(1)^a; -b * y(2)];
% 求解微分方程
[t, y] = ode45(f, [0 10], [v0 k0]);
% 绘制图像
subplot(2, 1, 1);
plot(t, y(:, 1));
xlabel('时间');
ylabel('肿瘤大小');
subplot(2, 1, 2);
plot(t, y(:, 2));
xlabel('时间');
ylabel('比例系数');
```
这段代码使用了 Matlab 中的 `ode45` 函数来求解微分方程,并绘制出 `v` 和 `k` 随时间变化的曲线。
(3) 肿瘤大小翻一倍相当于 `v(t) = 2 * v0`,将这个式子代入微分方程可得:
```
dt = (v^a / k) * dv
```
将上式从 `v0` 积分到 `2 * v0`,可得:
```
t_double = k0 / (2^(1/a) - 1)^(1/a+1) / b / (1-a)
```
其中,`t_double` 表示肿瘤大小翻一倍所需要的时间。
(4) 肿瘤生长速率由递增转为递减,即 `dv/dt` 的值从正数变为负数。因为 `dv/dt = k * v^a`,所以当 `v` 达到最大值时,`dv/dt` 的值将为零。因此,我们只需要找到 `v` 的最大值即可。将微分方程两边取对数可得:
```
ln(v^a) = ln(k) + t * ln(v)
d(ln(v^a)) / dt = a * dv / v = d(ln(k)) / dt + d(t * ln(v)) / dt
a * dv / v = -b * k dt + a v / k dt
a * ln(v) = -b * k t + a ln(k) + C
```
其中,`C` 为常数。因为 `k` 随时间逐渐减小,所以 `a ln(k)` 的值也会随时间逐渐减小。因此,当 `t` 趋于无穷大时,`a ln(k)` 的值将趋于负无穷,从而使得 `a ln(v)` 的值随时间逐渐减小。因此,肿瘤生长速率由递增转为递减的时间无法确定。
使用download.file( )函数从教务处网站下载“关于公布大学生创新创业训练项目结题验收结论的通知”里的附件“大学生创新创业训练项目结题验收结论一览表.xlsx”,下载地址为http://jwc.bjfu.edu.cn/docs/2021-09/20210907150302496809.xlsx。在该文件中结题验收项目共计259项,其中结题评价“优秀”62项、“良好”158项、“合格”38项、“不合格”1项。 (1)下载该文件并保存到当前目录下,命名为“IETP.xlsx”; (2)将IETP.xlsx读进R,建立相应的数据框IETP,注意该表是中文的,先不指定encoding=参数,试着读取该表并赋给一个名为ietp1的数据框,用head()函数查看读进来的记录是否有乱码?然后利用encoding=“UTF-8”参数重新读入数据,并查看读入的数据是否正确;
好的,我明白了您的问题。以下是解决方案:
(1)使用download.file()函数下载文件:
```
download.file("http://jwc.bjfu.edu.cn/docs/2021-09/20210907150302496809.xlsx", "IETP.xlsx", mode = "wb")
```
(2)读取文件并建立数据框:
```
ietp1 <- read.table("IETP.xlsx", header = TRUE, sep = "\t", stringsAsFactors = FALSE)
head(ietp1)
```
您会发现读取出来的数据框存在乱码,这是因为中文编码不同导致的。因此,我们需要重新读取文件并指定encoding参数为"UTF-8":
```
ietp <- read.table("IETP.xlsx", header = TRUE, sep = "\t", stringsAsFactors = FALSE, fileEncoding = "UTF-8")
head(ietp)
```
这样就可以正确地读取数据了。
阅读全文