<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>大学计算机基础 &amp;mdash; 江（短篇版）</title>
    <link>https://writee.org/jiangshanghan/tag:大学计算机基础</link>
    <description>此页仅存短篇。收看连载请移步WordPress.com处的博客（见“介绍”↓）@江尚寒</description>
    <pubDate>Thu, 04 Jun 2026 01:43:07 +0000</pubDate>
    <item>
      <title>大学计算机基础 作业2 问题求解表达式</title>
      <link>https://writee.org/jiangshanghan/da-xue-ji-suan-ji-ji-chu-zuo-ye-2-qiu-jie-biao-da-shi</link>
      <description>&lt;![CDATA[大学计算机基础 作业2 问题求解表达式&#xA;笔记 &#xA;&#xA;!--more--&#xA;&#xA;本文采用了markdown语法编辑。&#xA;&#xA;飞行炮弹空气阻力计算&#xA;&#xA;转换取整数&#xA;&#xA;任务描述&#xA;炮弹弹道是武器学中的一个重要概念，是指炮弹出炮口后在空中的飞行轨迹。在研究炮弹弹道时，空气阻力往往不可忽略。&#xA;已知炮弹在空中飞行时所受空气阻力（单位为N）的计算公式如下：&#xA;F=(1/2)​CρS(v^2) &#xA;其中，阻力系数C=0.1，空气密度ρ=1.2kg/m^3，S为垂直于速度方向的炮弹横截面积（单位为m^2），v为炮弹的飞行速度（单位为m/s）。&#xA;&#xA;编程要求&#xA;补全Begin-End区间的代码，其功能是根据给定的横截面积S（用变量S表示）与飞行速度v（用变量v表示），计算炮弹所受空气阻力F（用变量F表示），说明如下：&#xA;S和v的值在程序运行时由系统自动设置（初始代码第1-2行），不要再额外设置，编程时假设其已知即可；&#xA;初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量 F 的值即可；&#xA;不要改动Begin-End区间之外的代码；&#xA;公式中，阻力系数C取0.1，空气密度取 1.2kg/m3；&#xA;F只保留整数部分，即算出F后，要用int函数将其转换成整数类型。&#xA;&#xA;S = eval(input()) #获取炮弹的横截面积S&#xA;v = eval(input()) #获取炮弹的飞行速度v&#xA;########## Begin ##########&#xA;&#xA;c=0.1&#xA;p=1.2         #这里偷个懒，干脆写成p字了。赋值只要公式格式不出错，理论上可以写任何字母进去。&#xA;&#xA;f=(1/2)cpS(v*2)   #按题目要求放置公式&#xA;&#xA;F=int(f)              #嵌套赋值&#xA;&#xA;########## End ##########&#xA;print(F)          #打印炮弹受到的空气阻力&#xA;&#xA;关于int的用法参阅了 https://blog.csdn.net/jpch89/article/details/89762939&#xA;&#xA;  不带参数直接用int()，得到的是整数0。&#xA;&#xA;Thanks♪(･ω･)ﾉ&#xA;&#xA;海啸等级计算&#xA;&#xA;任务描述&#xA;&#xA;海啸是一种具有强大破坏力的海浪，常由海底地震、火山爆发、海底滑坡等事件引发，海啸冲上陆地后往往会造成巨大的损失。为更好地对海啸进行研究，科学家定义了海啸等级的计算方法，下面是其中一种：&#xA;&#xA;Mt=log10⁡​H+log10​⁡D+5.8&#xA;&#xA;其中，H 是潮位计观测到的海啸波最大振幅（单位为米）、D 是观测站到海啸中心的直线距离（单位为千米）。&#xA;本关任务是根据上式计算海啸等级 Mt。&#xA;&#xA;相关知识&#xA;&#xA;　　在求解该问题的过程中，需要计算对数，可以使用 math 库中的log函数。例如下面程序计算的是 log2​⁡16。&#xA;&#xA;    import math&#xA;    x = math.log(16, 2)&#xA;    print(x)&#xA;&#xA;编程要求&#xA;&#xA;补全 Begin-End 区间的代码，其功能是根据给定的振幅 H（用变量H表示）与距离 D（用变量D表示），计算海啸等级 Mt（用变量Mt表示），说明如下：&#xA;H和D的值在程序运行时由系统自动设置（初始代码第 2-3 行），不要再额外设置，编程时假设其已知即可；&#xA;初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量Mt的值即可；&#xA;不要改动Begin-End区间之外的代码。&#xA;&#xA;import math&#xA;H = eval(input())                 #获取振幅H&#xA;D = eval(input())                 #获取距离D&#xA;########## Begin ##########&#xA;&#xA;Mt=math.log(H,10)+math.log(D,10)+5.8       #放置公式&#xA;&#xA;########## End ##########&#xA;print(int(Mt))                      #打印海啸等级（保留整数）&#xA;注意log的写法：log a ​x应该写成math.log(x,a)&#xA;&#xA;喜欢的话，可以用x,y的形式做赋值式，也可以不做。&#xA;x=math.log(H,10)&#xA;y=math.log(D,10)&#xA;Mt=x+y+5.8&#xA;&#xA;重温受力分析题&#xA;&#xA;小木块从粗糙斜面顶端静止释放，已知摩擦系数μ=0.1、斜面长度为l、斜面角度为θ、重力加速度g=9.8m/s^2，现要计算小木块从顶端滑到底部的时间t。&#xA;&#xA;a=gsin⁡θ−μgcos⁡θ&#xA;t=(2l/a)^0.5&#xA;&#xA;因而 t=((21)/(gsin⁡θ−μgcos⁡θ))^0.5&#xA;&#xA;可转化为 t=((21)/((9.8sin⁡θ)−(0.19.8cos⁡θ)))^0.5 &#xA;&#xA;但是这样看上去会显得很长条，建议是前期多放置赋值式，最后用简单式组合。&#xA;&#xA;import math&#xA;l = eval(input())     #获取斜面长度l&#xA;theta = eval(input())     #获取斜面角度θ（输入的是角度）&#xA;########## Begin ##########&#xA;mu=0.1&#xA;g=9.8&#xA;&#xA;theta=math.radians(theta)   #调用函数&#xA;&#xA;a=(gmath.sin(theta))-(mugmath.cos(theta))    #关门放公式！&#xA;&#xA;t=(2l/a)0.5       #或者写成t=math.sqrt(2l/a)&#xA;&#xA;########## End ##########&#xA;&#xA;print(int(t))         #打印木块滑行时间（保留整数）&#xA;&#xA;这题的cos和sin中应该传入弧度，所以需要用radians函数把角度转化成弧度。&#xA;&#xA;关于星期的冷知识&#xA;&#xA;星期以七天为周期，日期也存在周期，你是不是隐隐感觉两者之间存在一些关系？其实它们之间存在转换公式，利用公式可以方便地计算某年某月某日是星期几。&#xA;&#xA;任务&#xA;具体来说，计算公元y年m月d日，对应星期几的公式如下：&#xA;&#xA;y0​=y−(14−m)//12&#xA;x=y0​+y0​//4−y0​//100+y0​//400&#xA;m0​=m+12×((14−m)//12)−2&#xA;w=(d+x+(31×m0​)//12)%7&#xA;&#xA;w即为计算结果，如w=0则表示星期日。&#xA;在以上公式中，//表示求整数商（简称整除）、%表示求余数（简称求余），例如， 7//3的结果为2、7%3的结果为1（即7除以3的整数商为2、余数为1）。&#xA;本关任务是实现上面的公式，计算某一天是星期几。&#xA;&#xA;相关知识&#xA;&#xA;整除和求余&#xA;&#xA;　　上面的公式包含整除和求余运算，若在正整数范围内讨论，则 Python 中与之相对应的运算符是//和%，例如：&#xA;    a = 7//3&#xA;    b = 7%3&#xA;    print(&#39;7除3的整数商为&#39;, a)&#xA;    print(&#39;7除3的余数为&#39;, b)&#xA;用%格式化字符串&#xA;&#xA;初始程序最后一行的功能是打印结果，括号中的内容是：&#xA;&#xA;&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w)&#xA;&#xA;这其实是一个对字符串进行处理的表达式，其格式包含以下三部分：&#xA;左边是一个包含n个占位符的字符串（占位符以%开头，%d就是一种占位符）；&#xA;2.中间是一个%；&#xA;最后是n个用括号括起来、以逗号分割的值，这n个值与n个占位符一一对应。&#xA;&#xA;其处理过程是用n个值替换 n 个占位符，如y、m、d、w的值分别为321、3、7、1，则本例的结果为：&#39;321年3月7日是星期1&#39;。尝试以下程序：&#xA;    y, m, d, w = 321, 3, 7, 1&#xA;    print(&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w))&#xA;用之前的方法也可以实现相同的功能，但这种方式更加便于程序的编写、阅读和修改。&#xA;    y, m, d, w = 321, 3, 7, 1&#xA;    print(y, &#39;年&#39;, m, &#39;月&#39;, d, &#39;日是星期&#39;, w)&#xA;占位符的类型&#xA;&#xA;占位符分为不同的类型，如%d代表整数型、%f代表浮点型、%s代表字符串类型。在将值代入占位符时，会将值转换成占位符对应的类型，尝试如下程序：&#xA;    print(&#39;%d&#39; % (3.14))&#xA;    print(&#39;%f&#39; % (3))&#xA;第 1 行在将浮点数 3.14 代入占位符时，会将其转换成%d对应的类型，即整数型，所以打印的结果是3。第 2 行在将整数 3 代入%f时，会将其转换成浮点型，所以打印结果是3.000000。&#xA;&#xA;不同类型的占位符还支持不同的格式设置，尝试如下程序：&#xA;    print(&#39;%.2f&#39; % (3.1415926))&#xA;    print(&#39;%30s&#39; % (&#39;Hello World!&#39;))&#xA;    print(&#39;%30s&#39; % (&#39;Hello Python!&#39;))&#xA;第1条语句中的.2表示保留两位小数，第2、3条语句中的30表示将字符串的宽度设置为30个字符（从而达到右对齐的效果）。&#xA;&#xA;编程要求&#xA;&#xA;补全 Begin-End 区间的代码，其功能是计算y年m月d日（分别用变量y、m、d表示）是星期几（用变量w表示），说明如下：&#xA;y、m、d的值在程序运行时由系统自动设置（初始代码第 1-3 行），不要再额外设置，编程时假设其已知即可；&#xA;初始代码最后一行是打印计算结果，不要再额外添加打印语句，只要算出变量w的值即可；&#xA;不要改动Begin-End区间之外的代码。&#xA;&#xA;y = eval(input()) #获取年：y&#xA;m = eval(input()) #获取月：m&#xA;d = eval(input()) #获取日：d&#xA;########## Begin ##########&#xA;&#xA;y0 = y - (14 - m) // 12&#xA;&#xA;x= y0 + (y0//4) - (y0//100) + (y0//400)&#xA;&#xA;m0= m + 12  ((14-m) // 12) - 2&#xA;&#xA;w= (d + x + (31m0) //12) % 7&#xA;&#xA;########## End ##########&#xA;print(&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w))&#xA;&#xA;照抄公式即可。&#xA;&#xA;时间单位换算&#xA;&#xA;提示：使用整除运算//和求余运算%，详见上关。&#xA;&#xA;补全Begin-End区间的代码，其功能是将秒（用变量sec表示）转化为时、分、秒（分别用变量h、m、s表示），说明如下：&#xA;sec的值在程序运行时由系统自动设置（初始代码第1行），不要再额外设置，编程时假设其已知即可；&#xA;初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量h、m、s的值即可；&#xA;不要改动Begin-End区间之外的代码。&#xA;&#xA;sec = eval(input())               #获取以秒表示的时间&#xA;########## Begin ##########&#xA;h=sec//3600&#xA;&#xA;m=(sec%3600)//60&#xA;&#xA;s=sec%60&#xA;########## End ##########&#xA;print(&#39;%d小时%d分%d秒&#39; % (h,m,s)) #打印以时分秒表示的时间&#xA;&#xA;我的做题思路：首先考虑时/分/秒的换算。&#xA;1时=60分，1分=60秒，1时=6060=3600秒&#xA;&#xA;有故事的求根公式&#xA;&#xA;设一元三次方程的一般形式为：&#xA;a(x^3)+b(x^2)+cx+d=0&#xA;a0​=0&#xA;令：&#xA;p=((3ac)-(b^2))/(3(a^2))&#xA;q=((2(b^3))-(9abc)+(27(a^2)d))/(27(a^3))&#xA;&#xA;补全Begin-End区间的代码，其功能是根据一元三次方程的系数a、b、c、d（分别用变量a、b、c、d表示），利用卡尔丹公式计算实数根x1​（用变量x1表示）。&#xA;&#xA;算平方根的方式如下&#xA;&#xA;    import numpy as np #导入numpy库&#xA;    x = np.sqrt(2)     #利用sqrt函数计算算术平方根&#xA;    print(&#39;2的算术平方根是&#39;,x)&#xA;&#xA;算立方根的方式如下&#xA;&#xA;    import numpy as np #导入numpy库&#xA;    x = np.cbrt(a)     #利用cbrt函数计算立方根&#xA;    print(&#39;a的立方根是&#39;,x)&#xA;&#xA;难点是多层嵌套的开根号。&#xA;&#xA;import numpy as np&#xA;a = eval(input()) #获取a的值&#xA;b = eval(input()) #获取b的值&#xA;c = eval(input()) #获取c的值&#xA;d = eval(input()) #获取d的值&#xA;########## Begin ##########&#xA;p=(3ac-b*2)/(3(a*2))&#xA;&#xA;q=((2(b*3))-(9abc)+(27(a2)d))/(27(a3))&#xA;&#xA;delta=((q2)/4)+((p3)/27)&#xA;&#xA;x1= ((-b)/(3a)) + np.cbrt((-q/2) + np.sqrt(delta)) + np.cbrt((-q/2) - np.sqrt(delta))&#xA;########## End ##########&#xA;print(&#39;%.1fx^3+%.1fx^2+%.1fx+%.1f=0的实数根为：%.4f&#39; % (a,b,c,d,x1))&#xA;&#xA;要特别注意利用括号保证四则运算的有效性。这也算老生常谈了。&#xA;&#xA;公式续&#xA;&#xA;同上一题&#xA;&#xA;import numpy as np&#xA;a = eval(input()) #获取a的值&#xA;b = eval(input()) #获取b的值&#xA;c = eval(input()) #获取c的值&#xA;d = eval(input()) #获取d的值&#xA;########## Begin ##########&#xA;A = b  b - 3  a  c&#xA;B = b  c - 9  a  d&#xA;C = c  c - 3  b  d&#xA;delt = B  B - 4  A  C&#xA;&#xA;y1 = A  b + 3  a  (-B + np.sqrt(delt)) / 2&#xA;y2 = A  b + 3  a  (-B - np.sqrt(delt)) / 2&#xA;&#xA;x1 = (-b - (np.cbrt(y1) + np.cbrt(y2))) / (3  a)&#xA;&#xA;########## End ##########&#xA;print(&#39;%.1fx^3+%.1fx^2+%.1fx+%.1f=0的实数根为：%.4f&#39; % (a,b,c,d,x1))&#xA;&#xA;高斯&#xA;&#xA;import math&#xA;&#xA;########## Begin ##########&#xA;&#xA;left = math.cos(2  math.pi / 17)&#xA;&#xA;m1 = 17&#xA;m2 = math.sqrt(m1)&#xA;m3 = math.sqrt(2  (m1 - m2))&#xA;&#xA;right = (-1 + m2 + m3 + 2  math.sqrt(m1 + 3  m2 - m3 - 2  math.sqrt(2 * (m1 + m2)))) / (m1 - 1)&#xA;&#xA;########## End ##########&#xA;print(&#39;等式左边：%.8f&#39; % (left))&#xA;print(&#39;等式右边：%.8f&#39; % (right))&#xA;print(&#39;左右之差：%.8f&#39; % (left-right))&#xA;&#xA;----&#xD;&#xA;前往mastodon @jiangshanghan@slashine.onl 与我互动。&#xD;&#xA;连载放置于 https://jiangshanghan.art.blog&#xD;&#xA;&#xD;&#xA;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;img alt=&#34;知识共享许可协议&#34; style=&#34;border-width:0&#34; src=&#34;https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png&#34; //abr /本作品由 江尚寒 采用a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议/a进行许可。]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="/jiangshanghan/tag:%E5%A4%A7%E5%AD%A6%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">大学计算机基础</span></a> 作业2 问题求解表达式
<a href="/jiangshanghan/tag:%E7%AC%94%E8%AE%B0" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">笔记</span></a></p>



<p>本文采用了markdown语法编辑。</p>

<h1 id="飞行炮弹空气阻力计算">飞行炮弹空气阻力计算</h1>

<p>转换取整数</p>

<h2 id="任务描述">任务描述</h2>

<p>炮弹弹道是武器学中的一个重要概念，是指炮弹出炮口后在空中的飞行轨迹。在研究炮弹弹道时，空气阻力往往不可忽略。
已知炮弹在空中飞行时所受空气阻力（单位为N）的计算公式如下：
F=(½)<em>​C</em>ρ<em>S</em>(v^2)
其中，阻力系数C=0.1，空气密度ρ=1.2kg/m^3，S为垂直于速度方向的炮弹横截面积（单位为m^2），v为炮弹的飞行速度（单位为m/s）。</p>

<h2 id="编程要求">编程要求</h2>

<p>补全Begin-End区间的代码，其功能是根据给定的横截面积S（用变量S表示）与飞行速度v（用变量v表示），计算炮弹所受空气阻力F（用变量F表示），说明如下：
1. S和v的值在程序运行时由系统自动设置（初始代码第1-2行），不要再额外设置，编程时假设其已知即可；
2. 初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量 F 的值即可；
3. 不要改动Begin-End区间之外的代码；
4. 公式中，阻力系数C取0.1，空气密度取 1.2kg/m3；
5. F只保留整数部分，即算出F后，要用int函数将其转换成整数类型。</p>

<pre><code>S = eval(input()) #获取炮弹的横截面积S
v = eval(input()) #获取炮弹的飞行速度v
########## Begin ##########

c=0.1
p=1.2         #这里偷个懒，干脆写成p字了。赋值只要公式格式不出错，理论上可以写任何字母进去。

f=(1/2)*c*p*S*(v**2)   #按题目要求放置公式

F=int(f)              #嵌套赋值

########## End ##########
print(F)          #打印炮弹受到的空气阻力
</code></pre>

<p>关于int的用法参阅了 <a href="https://blog.csdn.net/jpch89/article/details/89762939" rel="nofollow">https://blog.csdn.net/jpch89/article/details/89762939</a></p>

<blockquote><p>不带参数直接用int()，得到的是整数0。</p></blockquote>

<p>Thanks♪(･ω･)ﾉ</p>

<h1 id="海啸等级计算">海啸等级计算</h1>

<h2 id="任务描述-1">任务描述</h2>

<p>海啸是一种具有强大破坏力的海浪，常由海底地震、火山爆发、海底滑坡等事件引发，海啸冲上陆地后往往会造成巨大的损失。为更好地对海啸进行研究，科学家定义了海啸等级的计算方法，下面是其中一种：</p>

<p>Mt=log10⁡​H+log10​⁡D+5.8</p>

<p>其中，H 是潮位计观测到的海啸波最大振幅（单位为米）、D 是观测站到海啸中心的直线距离（单位为千米）。
本关任务是根据上式计算海啸等级 Mt。</p>

<h2 id="相关知识">相关知识</h2>

<p>　　在求解该问题的过程中，需要计算对数，可以使用 math 库中的log函数。例如下面程序计算的是 log2​⁡16。</p>

<pre><code>    import math
    x = math.log(16, 2)
    print(x)
</code></pre>

<h2 id="编程要求-1">编程要求</h2>

<p>补全 Begin-End 区间的代码，其功能是根据给定的振幅 H（用变量H表示）与距离 D（用变量D表示），计算海啸等级 Mt（用变量Mt表示），说明如下：
1. H和D的值在程序运行时由系统自动设置（初始代码第 2-3 行），不要再额外设置，编程时假设其已知即可；
2. 初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量Mt的值即可；
3. 不要改动Begin-End区间之外的代码。</p>

<pre><code>import math
H = eval(input())                 #获取振幅H
D = eval(input())                 #获取距离D
########## Begin ##########

Mt=math.log(H,10)+math.log(D,10)+5.8       #放置公式

########## End ##########
print(int(Mt))                      #打印海啸等级（保留整数）
</code></pre>

<p>注意log的写法：log a ​x应该写成math.log(x,a)</p>

<p>喜欢的话，可以用x,y的形式做赋值式，也可以不做。</p>

<pre><code>x=math.log(H,10)
y=math.log(D,10)
Mt=x+y+5.8
</code></pre>

<h1 id="重温受力分析题">重温受力分析题</h1>

<p>小木块从粗糙斜面顶端静止释放，已知摩擦系数μ=0.1、斜面长度为l、斜面角度为θ、重力加速度g=9.8m/s^2，现要计算小木块从顶端滑到底部的时间t。</p>

<p>a=gsin⁡θ−μgcos⁡θ
t=(2*l/a)^0.5</p>

<p>因而 t=((2*1)/(gsin⁡θ−μgcos⁡θ))^0.5</p>

<p>可转化为 t=((2<em>1)/((9.8</em>sin⁡θ)−(0.1<em>9.8</em>cos⁡θ)))^0.5</p>

<p>但是这样看上去会显得很长条，建议是前期多放置赋值式，最后用简单式组合。</p>

<pre><code>import math
l = eval(input())     #获取斜面长度l
theta = eval(input())     #获取斜面角度θ（输入的是角度）
########## Begin ##########
mu=0.1
g=9.8

theta=math.radians(theta)   #调用函数

a=(g*math.sin(theta))-(mu*g*math.cos(theta))    #关门放公式！

t=(2*l/a)**0.5       #或者写成t=math.sqrt(2*l/a)

########## End ##########

print(int(t))         #打印木块滑行时间（保留整数）

</code></pre>

<p>这题的cos和sin中应该传入弧度，所以需要用radians函数把角度转化成弧度。</p>

<h1 id="关于星期的冷知识">关于星期的冷知识</h1>

<p>星期以七天为周期，日期也存在周期，你是不是隐隐感觉两者之间存在一些关系？其实它们之间存在转换公式，利用公式可以方便地计算某年某月某日是星期几。</p>

<h2 id="任务">任务</h2>

<p>具体来说，计算公元y年m月d日，对应星期几的公式如下：</p>

<p>y0​=y−(14−m)//12
x=y0​+y0​//4−y0​//100+y0​//400
m0​=m+12×((14−m)//12)−2
w=(d+x+(31×m0​)//12)%7</p>

<p>w即为计算结果，如w=0则表示星期日。
在以上公式中，//表示求整数商（简称整除）、%表示求余数（简称求余），例如， 7//3的结果为2、7%3的结果为1（即7除以3的整数商为2、余数为1）。
本关任务是实现上面的公式，计算某一天是星期几。</p>

<h2 id="相关知识-1">相关知识</h2>

<h3 id="整除和求余">整除和求余</h3>

<p>　　上面的公式包含整除和求余运算，若在正整数范围内讨论，则 Python 中与之相对应的运算符是//和%，例如：</p>

<pre><code>    a = 7//3
    b = 7%3
    print(&#39;7除3的整数商为&#39;, a)
    print(&#39;7除3的余数为&#39;, b)
</code></pre>

<h3 id="用-格式化字符串">用%格式化字符串</h3>

<p>初始程序最后一行的功能是打印结果，括号中的内容是：</p>

<p>&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w)</p>

<p>这其实是一个对字符串进行处理的表达式，其格式包含以下三部分：
1. 左边是一个包含n个占位符的字符串（占位符以%开头，%d就是一种占位符）；
2.中间是一个%；
3. 最后是n个用括号括起来、以逗号分割的值，这n个值与n个占位符一一对应。</p>

<p>其处理过程是用n个值替换 n 个占位符，如y、m、d、w的值分别为321、3、7、1，则本例的结果为：&#39;321年3月7日是星期1&#39;。尝试以下程序：</p>

<pre><code>    y, m, d, w = 321, 3, 7, 1
    print(&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w))
</code></pre>

<p>用之前的方法也可以实现相同的功能，但这种方式更加便于程序的编写、阅读和修改。</p>

<pre><code>    y, m, d, w = 321, 3, 7, 1
    print(y, &#39;年&#39;, m, &#39;月&#39;, d, &#39;日是星期&#39;, w)
</code></pre>

<h3 id="占位符的类型">占位符的类型</h3>

<p>占位符分为不同的类型，如%d代表整数型、%f代表浮点型、%s代表字符串类型。在将值代入占位符时，会将值转换成占位符对应的类型，尝试如下程序：</p>

<pre><code>    print(&#39;%d&#39; % (3.14))
    print(&#39;%f&#39; % (3))
</code></pre>

<p>第 1 行在将浮点数 3.14 代入占位符时，会将其转换成%d对应的类型，即整数型，所以打印的结果是3。第 2 行在将整数 3 代入%f时，会将其转换成浮点型，所以打印结果是3.000000。</p>

<p>不同类型的占位符还支持不同的格式设置，尝试如下程序：</p>

<pre><code>    print(&#39;%.2f&#39; % (3.1415926))
    print(&#39;%30s&#39; % (&#39;Hello World!&#39;))
    print(&#39;%30s&#39; % (&#39;Hello Python!&#39;))
</code></pre>

<p>第1条语句中的.2表示保留两位小数，第2、3条语句中的30表示将字符串的宽度设置为30个字符（从而达到右对齐的效果）。</p>

<h2 id="编程要求-2">编程要求</h2>

<p>补全 Begin-End 区间的代码，其功能是计算y年m月d日（分别用变量y、m、d表示）是星期几（用变量w表示），说明如下：
1. y、m、d的值在程序运行时由系统自动设置（初始代码第 1-3 行），不要再额外设置，编程时假设其已知即可；
2. 初始代码最后一行是打印计算结果，不要再额外添加打印语句，只要算出变量w的值即可；
3. 不要改动Begin-End区间之外的代码。</p>

<pre><code>y = eval(input()) #获取年：y
m = eval(input()) #获取月：m
d = eval(input()) #获取日：d
########## Begin ##########

y0 = y - (14 - m) // 12

x= y0 + (y0//4) - (y0//100) + (y0//400)

m0= m + 12 * ((14-m) // 12) - 2

w= (d + x + (31*m0) //12) % 7

########## End ##########
print(&#39;%d年%d月%d日是星期%d&#39; % (y, m, d, w))

</code></pre>

<p>照抄公式即可。</p>

<h1 id="时间单位换算">时间单位换算</h1>

<p>提示：使用整除运算//和求余运算%，详见上关。</p>

<p>补全Begin-End区间的代码，其功能是将秒（用变量sec表示）转化为时、分、秒（分别用变量h、m、s表示），说明如下：
1. sec的值在程序运行时由系统自动设置（初始代码第1行），不要再额外设置，编程时假设其已知即可；
2. 初始代码最后一行是打印计算结果，不要再额外添加打印语句，按要求算出变量h、m、s的值即可；
3. 不要改动Begin-End区间之外的代码。</p>

<pre><code>sec = eval(input())               #获取以秒表示的时间
########## Begin ##########
h=sec//3600

m=(sec%3600)//60

s=sec%60
########## End ##########
print(&#39;%d小时%d分%d秒&#39; % (h,m,s)) #打印以时分秒表示的时间
</code></pre>

<p>我的做题思路：首先考虑时/分/秒的换算。
1时=60分，1分=60秒，1时=60*60=3600秒</p>

<h1 id="有故事的求根公式">有故事的求根公式</h1>

<p>设一元三次方程的一般形式为：
a<em>(x^3)+b</em>(x^2)+c<em>x+d=0
a0​=0
令：
p=((3</em>a<em>c)–(b^2))/(3</em>(a^2))
q=((2<em>(b^3))–(9</em>a<em>b</em>c)+(27<em>(a^2)</em>d))/(27*(a^3))</p>

<p>补全Begin-End区间的代码，其功能是根据一元三次方程的系数a、b、c、d（分别用变量a、b、c、d表示），利用卡尔丹公式计算实数根x1​（用变量x1表示）。</p>

<p>算平方根的方式如下</p>

<pre><code>    import numpy as np #导入numpy库
    x = np.sqrt(2)     #利用sqrt函数计算算术平方根
    print(&#39;2的算术平方根是&#39;,x)
</code></pre>

<p>算立方根的方式如下</p>

<pre><code>    import numpy as np #导入numpy库
    x = np.cbrt(a)     #利用cbrt函数计算立方根
    print(&#39;a的立方根是&#39;,x)
</code></pre>

<p>难点是多层嵌套的开根号。</p>

<pre><code>import numpy as np
a = eval(input()) #获取a的值
b = eval(input()) #获取b的值
c = eval(input()) #获取c的值
d = eval(input()) #获取d的值
########## Begin ##########
p=(3*a*c-b**2)/(3*(a**2))

q=((2*(b**3))-(9*a*b*c)+(27*(a**2)*d))/(27*(a**3))

delta=((q**2)/4)+((p**3)/27)

x1= ((-b)/(3*a)) + np.cbrt((-q/2) + np.sqrt(delta)) + np.cbrt((-q/2) - np.sqrt(delta))
########## End ##########
print(&#39;%.1fx^3+%.1fx^2+%.1fx+%.1f=0的实数根为：%.4f&#39; % (a,b,c,d,x1))

</code></pre>

<p>要特别注意利用括号保证四则运算的有效性。这也算老生常谈了。</p>

<h1 id="公式续">公式续</h1>

<p>同上一题</p>

<pre><code>import numpy as np
a = eval(input()) #获取a的值
b = eval(input()) #获取b的值
c = eval(input()) #获取c的值
d = eval(input()) #获取d的值
########## Begin ##########
A = b * b - 3 * a * c
B = b * c - 9 * a * d
C = c * c - 3 * b * d
delt = B * B - 4 * A * C

y1 = A * b + 3 * a * (-B + np.sqrt(delt)) / 2
y2 = A * b + 3 * a * (-B - np.sqrt(delt)) / 2

x1 = (-b - (np.cbrt(y1) + np.cbrt(y2))) / (3 * a)

########## End ##########
print(&#39;%.1fx^3+%.1fx^2+%.1fx+%.1f=0的实数根为：%.4f&#39; % (a,b,c,d,x1))
</code></pre>

<h1 id="高斯">高斯</h1>

<pre><code>import math

########## Begin ##########

left = math.cos(2 * math.pi / 17)

m1 = 17
m2 = math.sqrt(m1)
m3 = math.sqrt(2 * (m1 - m2))

right = (-1 + m2 + m3 + 2 * math.sqrt(m1 + 3 * m2 - m3 - 2 * math.sqrt(2 * (m1 + m2)))) / (m1 - 1)

########## End ##########
print(&#39;等式左边：%.8f&#39; % (left))
print(&#39;等式右边：%.8f&#39; % (right))
print(&#39;左右之差：%.8f&#39; % (left-right))
</code></pre>

<hr>

<p>前往mastodon <a href="https://writee.org/@/jiangshanghan@slashine.onl" class="u-url mention" rel="nofollow">@<span>jiangshanghan@slashine.onl</span></a> 与我互动。
连载放置于 <a href="https://jiangshanghan.art.blog" rel="nofollow">https://jiangshanghan.art.blog</a></p>

<p><a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="nofollow"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png"/></a><br/>本作品由 江尚寒 采用<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="nofollow">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p>
]]></content:encoded>
      <guid>https://writee.org/jiangshanghan/da-xue-ji-suan-ji-ji-chu-zuo-ye-2-qiu-jie-biao-da-shi</guid>
      <pubDate>Fri, 24 Feb 2023 02:26:41 +0000</pubDate>
    </item>
    <item>
      <title>#笔记 #大学计算机基础 作业1 绘制炸弹轨迹1</title>
      <link>https://writee.org/jiangshanghan/ji-suan-ji-1</link>
      <description>&lt;![CDATA[#笔记 #大学计算机基础 作业1 绘制炸弹轨迹1&#xA;&#xA;!--more--&#xA;&#xA;（本篇笔记采用了markdown语法）&#xA;&#xA;1 在编程界面中编写Hello World程序。&#xA;&#xA;print(&#39;Hello World!&#39;)&#xA;&#xA;2 用给定的公式，做输出数值。&#xA;&#xA;先赋值，比如：X=1&#xA;&#xA;t=3.5&#xA;h=3000&#xA;v0=200&#xA;g=9.8&#xA;&#xA;再按照预定公式做输出规则&#xA;&#xA;print(v0t)&#xA;print(h-(1/2)g(t2))&#xA;&#xA;3 利用变量和赋值的方法重新计算&#xA;&#xA;依旧是先赋值，再放公式。&#xA;最后把输出规则改为代数形式。&#xA;&#xA;t=3.5&#xA;v0=200&#xA;h=3000&#xA;g=9.8&#xA;&#xA;xt=v0t #算横坐标&#xA;yt=h-((1/2)g(t*2)) #算纵坐标&#xA;&#xA;print(xt) #输出横坐标&#xA;print(yt) #输出纵坐标&#xA;&#xA;程序运行结果共有2行（分别是横坐标x和纵坐标y）&#xA;&#xA;4 计算某个时刻的坐标&#xA;&#xA;  有些时候，一些变量的值在写程序的时候并不能确定，比如要让程序计算某一个时刻的坐标，这时t的值在写程序的时候是不确定的，要在程序运行的时候由用户告诉程序t到底等于多少。&#xA;&#xA;h, v0, g = 3000, 200, 9.8 #参数赋值&#xA;t=eval(input()) #类型转换&#xA;xt=v0t #算横坐标&#xA;yt=h-1/2gt*2 #算纵坐标&#xA;print(t,&#39;秒时坐标为：&#39;, xt, yt) #输出坐标&#xA;&#xA;5 用库画点&#xA;&#xA;先做导入库（因为是在系统做题，并不需要在本地设备另外安装任何程序）&#xA;&#xA;import matplotlib.pyplot as plt #导入库&#xA;我好几次把matplotlib写成mathplotlib，笑死。&#xA;&#xA;设置参数、公式&#xA;h, v0, g = 3000, 200, 9.8 #设参数&#xA;t=eval(input()) #读取t数值&#xA;&#xA;xt=v0t #算横坐标&#xA;yt=h-1/2gt**2 #算纵坐标&#xA;最后放入图表规则&#xA;plt.plot(xt,yt,&#39;ro&#39;) #画红点&#xA;plt.grid(&#39;on&#39;) #开网格&#xA;plt.axis([0,5000,0,3000]) #轴数范围&#xA;plt.show()&#xA;&#xA;轴数范围按照X轴和Y轴的顺序分别贴上即可，如x[0,100],y[0,100]应写作plt.axis([0,100,0,100])。&#xA;&#xA;----&#xD;&#xA;前往mastodon @jiangshanghan@slashine.onl 与我互动。&#xD;&#xA;连载放置于 https://jiangshanghan.art.blog&#xD;&#xA;&#xD;&#xA;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;img alt=&#34;知识共享许可协议&#34; style=&#34;border-width:0&#34; src=&#34;https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png&#34; //abr /本作品由 江尚寒 采用a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议/a进行许可。]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="/jiangshanghan/tag:%E7%AC%94%E8%AE%B0" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">笔记</span></a> <a href="/jiangshanghan/tag:%E5%A4%A7%E5%AD%A6%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">大学计算机基础</span></a> 作业1 绘制炸弹轨迹1</p>



<p>（本篇笔记采用了markdown语法）</p>

<p>1 在编程界面中编写Hello World程序。</p>

<pre><code>print(&#39;Hello World!&#39;)
</code></pre>

<p>2 用给定的公式，做输出数值。</p>

<p>先赋值，比如：X=1</p>

<pre><code>t=3.5
h=3000
v0=200
g=9.8
</code></pre>

<p>再按照预定公式做输出规则</p>

<pre><code>print(v0*t)
print(h-(1/2)*g*(t**2))
</code></pre>

<p>3 利用变量和赋值的方法重新计算</p>

<p>依旧是先赋值，再放公式。
最后把输出规则改为代数形式。</p>

<pre><code>t=3.5
v0=200
h=3000
g=9.8

xt=v0*t #算横坐标
yt=h-((1/2)*g*(t**2)) #算纵坐标

print(xt) #输出横坐标
print(yt) #输出纵坐标
</code></pre>

<p>程序运行结果共有2行（分别是横坐标x和纵坐标y）</p>

<p>4 计算某个时刻的坐标</p>

<blockquote><p>有些时候，一些变量的值在写程序的时候并不能确定，比如要让程序计算某一个时刻的坐标，这时t的值在写程序的时候是不确定的，要在程序运行的时候由用户告诉程序t到底等于多少。</p></blockquote>

<pre><code>h, v0, g = 3000, 200, 9.8 #参数赋值
t=eval(input()) #类型转换
xt=v0*t #算横坐标
yt=h-1/2*g*t**2 #算纵坐标
print(t,&#39;秒时坐标为：&#39;, xt, yt) #输出坐标
</code></pre>

<p>5 用库画点</p>

<p>先做导入库（因为是在系统做题，并不需要在本地设备另外安装任何程序）</p>

<pre><code>import matplotlib.pyplot as plt #导入库
</code></pre>

<p>我好几次把matplotlib写成mathplotlib，笑死。</p>

<p>设置参数、公式</p>

<pre><code>h, v0, g = 3000, 200, 9.8 #设参数
t=eval(input()) #读取t数值

xt=v0*t #算横坐标
yt=h-1/2*g*t**2 #算纵坐标
</code></pre>

<p>最后放入图表规则</p>

<pre><code>plt.plot(xt,yt,&#39;ro&#39;) #画红点
plt.grid(&#39;on&#39;) #开网格
plt.axis([0,5000,0,3000]) #轴数范围
plt.show()
</code></pre>

<p>轴数范围按照X轴和Y轴的顺序分别贴上即可，如x[0,100],y[0,100]应写作plt.axis([0,100,0,100])。</p>

<hr>

<p>前往mastodon <a href="https://writee.org/@/jiangshanghan@slashine.onl" class="u-url mention" rel="nofollow">@<span>jiangshanghan@slashine.onl</span></a> 与我互动。
连载放置于 <a href="https://jiangshanghan.art.blog" rel="nofollow">https://jiangshanghan.art.blog</a></p>

<p><a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="nofollow"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png"/></a><br/>本作品由 江尚寒 采用<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="nofollow">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。</p>
]]></content:encoded>
      <guid>https://writee.org/jiangshanghan/ji-suan-ji-1</guid>
      <pubDate>Thu, 23 Feb 2023 08:59:19 +0000</pubDate>
    </item>
  </channel>
</rss>