目录
计算机二级是大学计算机专业必过的一科,老师的资料大礼包也不会缺席。你有没有这样的经历:当自信满满的打开复习资料准备做时,看到的却是这样的场景:
怎么做?傻眼了吧。
别急,上有政策下有对策,既然老师大发慈悲地给我们试卷,我们就为它量身定做一套答题系统。
准备工作:
首先,我们把四种题型分别存一个txt文件,因为是19年B场,所以我给他记成19b加上标识字:
19bx.txt 选择题:x
19bt.txt 填空题:t
19bc.txt 调试题:c
19bb.txt 编程题:b
为了方便编程,可以提前调整一下格式,比如我个人喜欢一个题后加上一个空行,把答案放在每道题开头(后面可以加上解析)。
像这样子:
然后因为有些题编程结果以图片展示,为了储存图片,我又加了个目录,截好图按序号标好:
再次,因为pygame标准字库打不出中文,我又加了几个字库,马不实在在网上下普惠体免得扯上版权问题,随便改了个名字:
好了,准备工作做好了,万事俱备只欠东风,准备工作做得再好,也得有不错的程序内容撑腰。下面,就有请大家欣赏我写的程序(英语没学好,很多名字乱取的,请大家多多包涵哈)。
程序部分:
话不多说,上手导入库、全局变量和函数。
import pygame import random import time import threading #窗口大小: DA=(550,700) #窗口颜色: tse=(random.randint(220,255),random.randint(220,255),random.randint(220,255)) #字体: ZD=20 #打印字上限: KI=25 KIA=KI+1 YV=1.3 #时间/分: TM=120 #分数: f=0 #反馈记录: ch=open("ylu.txt",'a+',encoding="utf-8") def tsa():# 随机生成一种字体颜色 a=[0,50,100] random.shuffle(a) return (random.randint(a[0],50+a[0]),random.randint(a[1],50+a[1]),random.randint(a[2],50+a[2])) def xi(l1,l2):#洗:用于将2列表对应打乱 xi= random.randint(0, 1001) random.seed(xi) random.shuffle(l1) random.seed(xi) random.shuffle(l2) def Ja(l):#加一个序号列表 l0=[] for i in range(len(l)): l0.append(i) return l0 def p(u,a) :# 选择题判断 if u in [ord(a)-65,ord(a)-97,ord(a)-49]: return True else : return False
由于这些东西都是编程过程中一个个加的,不太好细讲,就先留个印象吧。
其次是一个pygame必备的一段代码(当然每个人用的函数可能有差异):
def Q(): pygame.init() global scr scr=pygame.display.set_mode(DA) scr.fill(tse) pygame.display.flip() clk=pygame.time.Clock() while True : clk.tick(5) for event in pygame.event.get() : if event.type==pygame.QUIT : pygame.quit() exit()
看完基础部分,就让我带你们看看程序中的第一个重点部分:选择题。
选择题:
选择题类:
首先,我们要定义一个选择题的类。大家可以思考一下一道选择题有哪些组成部分呢?
答案很简单,一道选择题无非就题干、选项、答案三类。
作为一个人,我们可以一眼看出选择题的题干、选项、答案。但计算机不一样,计算机很笨,它看不出题干、选项、答案,需要我们告诉它。下图可见,前面几行是题干,中间几行是选项,后面又标明了答案和“解析”。
那么题干、选项、答案各多少行呢?
题干:任意行 选项:4行 答案:1行(仅开头)
那问题又来了,既然题干任意行,你怎么知道选项哪几行,答案哪行呢?
你可能会忽略一点:选项答案行数是固定的,那我们可以倒过来,[:-5]题干,[-5:-1]选项,[-1]答案解析。
但是为了为之后随机做铺垫,我们可以把题干、选项的序号去掉。
至于找出答案,我们可以用split函数给答案解析行分开,第一项为答案。
在类中,我又定义了一个方法,是为判断选项用的。
代码如下:
class Xua(): def __init__(self,s): s[0]=s[0][2:] self.t=s[:-5]#'\n'.join() self.x=s[-5:-1] for i in range(len(self.x)): self.x[i]=self.x[i][2:] self.db=s[-1].split() self.d=self.db[0] def y(self,u): a=input("答案:") b=ord(self.d)-65 return u.index(b),a
选择题主代码:
首先,我们需要询问输入的试卷名。你可能会问,这段代码写在最前面不是更好吗?
其实从编程语法的角度来说,确实可以写在最前面。但由于我用的了threading库的多线程,Q1()和Q()代码的运行顺序是随机的,如果先问了,有可能Q()窗体还没建好,Q1()直接用了,那样就只好挨Error红码一顿训了。
但好在人的手速和机速肯定没法比,只要Q1()当头一问,就乖乖跑到Q()后面运行了,那就啥事也没有了。
试卷问完把对应的x.txt一读,就该把选择题列表l录入s(每题一组)。由于我一开始预设每题的分段依据为空行,那我们可以把s每行strip()一下,把l空行与空行之间的元素打包放进s里面。再把批量把s的每个元素都“哐当”一下封印成一个选择题类。为了防止背答案,直接题序搅成一锅粥。
然后就可以开始打印题干了。
需要注意的是,有些题干某行字数太多了,直接飚到窗口外看不见了。就像这样:
那怎么办呢?其实很简单,我们可以设一个打印字的上限KIA,打完自动换行,即每次打印从上一个位点(j(循环次序)*KIA)到下一个位点。
那下一个位点是什么呢?你可能会说:下一个位点肯定是(j+1)*KIA噻。那可不一定咯,万一这一段刚好中途到头,计算机一看,卧靠,(j+1)*KIA项啥都没有,那只能又找你闹去了。
所以你得判断段长>j*KIA安全了才用(j+1)*KIA,不然段长只得自当结尾了。
题干打出来,接下来又是一个有意思的问题:选项乱序。
你可能会问,刚才题目乱序不就避免背答案了,你选项再乱一次有何意义?那当然得有意义。试想一下,当你练过几遍题后一看,“以下各项... 选D!”你这个题练得有啥意义?你选项再乱一下虽然还是可以不自觉背答案,但你把题干答案一起背了还是总能学到点东西的。所以选项乱序还是有必要地!
那你选项是乱了,答案不会乱啊!我做了一个Ja()函数记选项原本的序号,把它贴在选项上洗一洗,之后选完在沿着Ja过的列表找答案顺序就好了:
打印选项和打印题干大同小异没啥好说的。至于问答案和判断正误其实本来也没啥好说的,但我为了追求输入多元化倒是给它加了点花:abcd,ABCD,1234有啥不可以的,反正就着方便来嘛。那问题来了,鬼知道a=A=1怎么算呢?ascii知道:
用ord可以将字符转数字,剩下功夫就是算了。在打印的时候,统一起见,全部转为大写字母:
将选择题的基本流程讲完,接下来就是发放福利的时候了。二话不说,代码走起:
Q1(): # 选择题 global f global klt klt=input('请输入试卷(如19b):') l=open('%sx.txt'%klt,'r+',encoding="utf-8").readlines() ig=0# 一题起始位置 fn=0# 分数 s=[] '''把选择题录进列表s:''' for i in range(len(l)): l[i]=l[i].strip() if l[i]=='': s.append(l[ig:i]) ig=i+1 for i in range(len(s)): s[i]=Xua(s[i]) random.shuffle(s)# 题 乱序 '''做题循环:''' for i in range(len(s)): scr.fill(tse) i0=0#列位 """打出题干""" for k in range(len(s[i].t)): for j in range(int(len(s[i].t[k])/KIA)+1): if len(s[i].t[k])>j*KIA : ju=(j+1)*KIA else : ju=len(s[i].t[k]) if j==0 and k==0: ik=str(i+1)+'.' else: ik=' ' scr.blit(pygame.font.Font("B.ttf",ZD).render("%s%s"%(ik,s[i].t[k][j*KIA:ju]),True,tsa()),(10,ZD*i0)) i0+=1 """选项乱序""" u=Ja(s[i].x) xi(s[i].x,u) i0+=2 """打出选项""" for k in range(len(s[i].x)): asa=tsa() for j in range(int(len(s[i].x[k])/KI)+1) : if len(s[i].x[k])>j*KI : ju=(j+1)*KI else : ju=len(s[i].x[k]) if j==0: ik=chr(65+k)+'.' else : ik=' ' scr.blit(pygame.font.Font("B.ttf",ZD).render("%s%s"%(ik,s[i].x[k][j*KI :ju]),True,asa),(20,ZD*i0)) i0+=1 i0+=1 print(i+1,end=".") """问答案""" try: pygame.display.flip() u0,a0=s[i].y(u) chr(u0) ord(a0) except: u0,a0=u.index(ord(s[i].d)-65),'0' """判断正误""" if p(u0,a0): fn+=1.5 scr.blit(pygame.font.Font("g.ttf",ZD*2).render("正确(^v^)¥",True,(0,200,0)),(100,ZD*i0)) pygame.display.flip() time.sleep(1) else: scr.blit(pygame.font.Font("g.ttf",ZD*2).render("错误/(UnU)\\",True,(200,0,0)),(100,ZD*i0)) i0+=2 a0=ord(a0) if a0<65: a0+=16 elif a0>96: a0-=32 scr.blit(pygame.font.Font("g.ttf",ZD).render("答案:%s,你选成%s"%(chr(u0+65),chr(a0)),True,asa),(20,ZD*i0)) i0+=2 for k in range(len(s[i].db)-1) : asa=tsa() scr.blit(pygame.font.Font("B.ttf",ZD).render("%s"%(s[i].db[k+1]),True,asa),(20,ZD*i0)) i0+=1 pygame.display.flip() input("ok?") '''统计分数:''' if fn%1==0: print("选择题得分:%d (满分:15)"%(fn)) else: print("选择题得分:%d.%d (满分:15)"%(fn,fn*10%10)) f+=fn
实现效果:
其他题:
其实选择题讲完,其他题也就讲了一大半了。无非修修补补走特色题型主义依法治题。
值得一提的是填空题的答案部分。填空题的答案有两个特点。一个是一道题多个空,甚至一个空有多个正确答案,有时候答案还有空格。
咋办呢?我们可以研究一下答案特征:
首先,我们得剥离出答案。每个空有n):分开,那我们就以“)”来split,前后各少取两位(注意把第0项删了),至于多答的,再split 个(“【”),删个】。因为用了split,后面判断用in来替“==”就行。
答中有空,我们可以注意到答案和解析之间两空,那答案解析split两空分割出答案就好。
就像这样:
后面两种题型没有标答怎么评判呢?
那换言之你知道调试编程怎么判?反正我不知道。那就用最弱智的办法:问呗。弄出来填满分,弄不出填0分,中间的自己判断。反正就一个自测没必要作假:
而图片就用pygame的标准操作加个行数就ok:
接下来,又是代码大大大礼包,你可能消化不了,但鉴于我精力有限,一时半会解释不完,那也就让你消化不良好了。
其他代码:
填空题类:
class Tan(): def __init__(self,s): s[0]=s[0][2 :] yx=s.index("运行示例:") self.t=s[:yx] self.x=s[yx+1:-1] self.db=s[-1].split(" ") self.d=self.db[0].split(")") self.d=self.d[1:] for i in range(len(self.d)): for j in range(len(self.d[i])): if self.d[i][j]=='【': self.d[i]=self.d[i][j+1:-1] break self.d[i]=self.d[i].split("【") for j in range(len(self.d[i])): self.d[i][j]=self.d[i][j].strip("】") def y(self,u): a,b=[],[] for i in range(len(u)): a.append(input("%d.答案:"%(i+1))) if a[i] in u[i]: b.append(True) else: b.append(False) return b,a
填空题代码:
def Q2():# 填空题 global f #klt=input('请输入试卷(如19b):') l=open('%st.txt'%klt,'r+',encoding="utf-8").readlines() ig=0 fn=0 s=[] for i in range(len(l)) : l[i]=l[i].strip() if l[i]=='' : s.append(l[ig :i]) ig=i+1 for i in range(len(s)) : s[i]=Tan(s[i]) un=Ja(s) xi(s,un) for i in range(len(s)) : scr.fill(tse) i0=0 for k in range(len(s[i].t)) : for j in range(int(len(s[i].t[k])/int(KIA*YV))+1) : if len(s[i].t[k])>int(j*KIA*YV) : ju=int((j+1)*KIA*YV) else : ju=len(s[i].t[k]) if j==0 and k==0 : ik=str(i+1)+'.' else : ik=' ' scr.blit(pygame.font.Font("B.ttf",int(ZD*0.8)).render("%s%s"%(ik,s[i].t[k][j*int(KIA*YV) :ju]),True,tsa()),(10,ZD*i0)) i0+=0.8 tu=pygame.image.load("./%s/t%d.png"%(klt,un[i]+1)) tu=pygame.transform.scale(tu,(200,100)) scr.blit(tu,(10,ZD*i0,200,50)) i0+=4.5 for k in range(len(s[i].x)) : asa=tsa() ik=str(k+1)+"_"*(3-len(str(k)))+'|' scr.blit(pygame.font.Font("M.ttf",int(ZD/5*3)).render("%s %s"%(ik,s[i].x[k]),True,asa),(20,ZD*i0)) i0+=0.65 pygame.display.flip() b0,a0=s[i].y(s[i].d) for k in range(len(b0)): scr.blit(pygame.font.Font("M.ttf",int(ZD*0.7)).render(str(k+1)+':'+a0[k],True,tsa()),(10,ZD*i0)) if b0[k] : fn+=2.5 scr.blit(pygame.font.Font("g.ttf",int(ZD*0.7)).render("正确(^v^)¥",True,(0,200,0)),(100,ZD*i0)) else : scr.blit(pygame.font.Font("g.ttf",int(ZD*0.7)).render("错误(UnU)",True,(200,0,0)),(100,ZD*i0)) scr.blit(pygame.font.Font("M.ttf",int(ZD*0.7)).render("答案:%s"%'/'.join(s[i].d[k]),True,tsa()),(200,ZD*i0)) i0+=0.7 for k in range(len(s[i].db)-1) : asa=tsa() scr.blit(pygame.font.Font("B.ttf",int(ZD*0.7)).render("%s"%(s[i].db[k+1]),True,asa),(20,ZD*i0)) i0+=0.7 pygame.display.flip() input("ok?") if fn%1==0 : print("填空题得分:%d (满分:20)"%(fn)) else : print("填空题得分:%d.%d (满分:20)"%(fn,fn*10%10)) f+=fn global qn qn=f
实现效果:
调试题类:
class Tiao(): def __init__(self,s): s[0]=s[0][2 :] yx=s.index("运行示例:") self.t=s[:yx] self.x=s[yx+1:-1]
调试题代码:
def Q3():# 填空题 global f #klt=input('请输入试卷(如19b):') l=open('%sc.txt'%klt,'r+',encoding="utf-8").readlines() ig=0 fn=0 s=[] for i in range(len(l)) : l[i]=l[i].strip() if l[i]=='' : s.append(l[ig :i]) ig=i+1 for i in range(len(s)) : s[i]=Tiao(s[i]) un=Ja(s) xi(s,un) for i in range(len(s)) : scr.fill(tse) i0=0 for k in range(len(s[i].t)) : for j in range(int(len(s[i].t[k])/int(KIA*YV))+1) : if len(s[i].t[k])>int(j*KIA*YV) : ju=int((j+1)*KIA*YV) else : ju=len(s[i].t[k]) if j==0 and k==0 : ik=str(i+1)+'.' else : ik=' ' scr.blit(pygame.font.Font("B.ttf",int(ZD*0.8)).render("%s%s"%(ik,s[i].t[k][j*int(KIA*YV) :ju]),True,tsa()),(10,ZD*i0)) i0+=0.8 tu=pygame.image.load("./%s/c%d.png"%(klt,un[i]+1)) tu=pygame.transform.scale(tu,(200,100)) scr.blit(tu,(10,ZD*i0,200,50)) i0+=4.5 for k in range(len(s[i].x)) : asa=tsa() ik=str(k+1)+"_"*(3-len(str(k)))+'|' scr.blit(pygame.font.Font("M.ttf",int(ZD/5*3)).render("%s %s"%(ik,s[i].x[k]),True,asa),(20,ZD*i0)) i0+=0.65 pygame.display.flip() ur=(int(un[i]/2)+3)*3 cv=input("ok?本题估分(/%d分{' ':满)(3分/):"%(ur)) try : fn+=float(cv) except : if cv==" " : fn+=ur print("调试题得分:%d (满分:30)"%(fn)) f+=fn
实现效果:
编程题类:
class Bia(): def __init__(self,s): s[0]=s[0][2 :] self.t=s
编程题代码:
def Q4():# 填空题 global f #klt=input('请输入试卷(如19b):') l=open('%sb.txt'%klt,'r+',encoding="utf-8").readlines() ig=0 fn=0 s=[] for i in range(len(l)) : l[i]=l[i].strip() if l[i]=='' : s.append(l[ig :i]) ig=i+1 for i in range(len(s)) : s[i]=Bia(s[i]) un=Ja(s) xi(s,un) for i in range(len(s)) : scr.fill(tse) i0=0 for k in range(len(s[i].t)) : for j in range(int(len(s[i].t[k])/int(KIA*YV))+1) : if len(s[i].t[k])>int(j*KIA*YV) : ju=int((j+1)*KIA*YV) else : ju=len(s[i].t[k]) if j==0 and k==0 : ik=str(i+1)+'.' else : ik=' ' scr.blit(pygame.font.Font("B.ttf",int(ZD*0.8)).render("%s%s"%(ik,s[i].t[k][j*int(KIA*YV) :ju]),True,tsa()),(10,ZD*i0)) i0+=0.8 tu=pygame.image.load("./%s/b%d.png"%(klt,un[i]+1)) scr.blit(tu,(10,ZD*i0,200,50)) pygame.display.flip() ur=(int(un[i]/1)+3)*5 cv=input("ok?本题估分(/%d分{' ':满):"%(ur)) try: fn+=float(cv) except: if cv==" ": fn+=ur print("编程题得分:%d (满分:35)"%(fn)) f+=fn
实现效果:
接下来参观一下副程序:
(其实这倒是应该讲讲的,如果评论区没看到讲解的话,这句话当我没说)
倒计时:
def t(): global tm tm=TM*60 for i in range(tm): time.sleep(1) pygame.draw.rect(scr,tse,(DA[0]-90,DA[1]-30,90,30)) scr.blit(pygame.font.Font("B.ttf",20).render("%d:%d:%d"%(tm/3600,tm%3600/60,tm%60),True,tsa()),(DA[0]-90,DA[1]-30)) pygame.display.flip() tm-=1
线程结束统录分:
def j(): global n while True: time.sleep(1) if threading.active_count()<n+1: try: scr.fill(tse) scr.blit(pygame.font.Font("B.ttf",int(ZD*0.8)).render('%s 用时:%d 分数:%d\n'%(time.strftime('%y.%m.%d'),TM*60-tm,f),True,tsa()),(10,200)) ch.writelines('%s %d %d %d\n'%(time.strftime('%y.%m.%d'),TM*60-tm,f,qn)) print('考试结束,分数:%d,\n前分:%d'%(f,qn)) except: ch.writelines('%s %d %d %d\n'%(time.strftime('%y.%m.%d'),TM*60-tm,f,f)) print('考试结束,分数:%d'%(f)) break ch.close()
多线程×主程序:
def Q0(): Q1() Q2() Q3() Q4() ky=[Q,Q0,t,j] def main(): global n n=0 for a in range(len(ky)): t=threading.Thread(target=ky[a]) t.start() n+=1 if __name__ == '__main__': main()
几个文件:
接下来,为了方便各位实践,我把几个文件也贴过来,方便大家弄出来玩玩。
(图片我就不贴了,你们需要的话自己搞几张网图按格式补上ok(一定要放在19b文件里)):
19bx.txt
1.执行下列语句序列后,x,y,z结果正确的是:(_____)。 int x=7,y=9,z; z=1+x++; y=++z+3; A.7,10,8 B.8,12,9 C.7,10,9 D.8,12,8 B 知识点:【24030101】 知识考核要求:【2】 能力考核要求:【1】 难度系数:【B】 2.下列描述中,正确的是:(_____)。 A.函数可以直接调用其他函数内部定义的变量。 B.函数内部定义变量时必须进行初始化。 C.函数不可以直接调用其他函数内部定义的变量。 D.函数内部定义变量时若没有进行初始化,则其值是固定的。 C 知识点:【24070201】 知识考核要求:【2】 能力考核要求:【2】 难度系数:【B】 3.以下各个选项中,与语句“if (a>b) k=0; else k=1;”功能等价的是:(_____)。 A.k=(a>b)?1:0; B.k=a>b; C.k=(a<=b)?0:1; D.k=(a<=b)?1:0; D 知识点:【24040201】 知识考核要求:【3】 能力考核要求:【1】 难度系数:【B】 4.以下各个选项中,与for(表达式1; ;表达式3)等价的是:(_____)。 A.for(表达式1; 表达式1; 表达式3) B.for(表达式1; 表达式3; 表达式3) C.for(表达式1; 0; 表达式3) D.for(表达式1; 1; 表达式3) D 知识点:【24040301】 知识考核要求:【3】 能力考核要求:【1】 难度系数:【B】 5.有关C语言数组的下列定义中,错误的是:(_____)。 A.int a[5]={2,3,4,1,4}; B.int a[6]={0}; C.int a[2][]={1,2,3,4}; D.int a[][3]={1,2,3,2,3}; C 知识点:【24050201】 知识考核要求:【3】 能力考核要求:【1】 难度系数:【B】 6.在C语言中,关于函数定义和函数调用,以下各个选项中,正确的是:(_____)。 A.函数定义中不可以定义另一个函数,被调用函数可以调用另一个函数 B.函数定义中可以定义另一个函数,被调用函数不可以调用另一个函数 C.函数定义中可以定义另一个函数,被调用函数也可以调用另一个函数 D.函数定义中不可以定义另一个函数,被调用函数也不可以调用另一个函数 A 知识点:【24060101】 知识考核要求:【3】 能力考核要求:【2】 难度系数:【B】 7. 设有如下的结构体类型定义,则以下选项中,正确的是:(_____)。 ① struct stu1{int x;struct stu1 *p;}; ② struct stu2{int y;struct stu2 q;}; A.①和②都正确 B.①和②都错误 C.①错误,②正确 D.①正确,②错误 D 知识点:【24090101】 知识考核要求:【2】 能力考核要求:【1】 难度系数:【C】 8.在C语言中,语句fp=fopen("score.txt", "r+")执行后,正确的是:(_____)。 A.可以从文件score.txt中读取数据,但不能向文件写入数据 B.可以向文件score.txt写入数据,但不能从文件中读取数据 C.既不能从文件score.txt中读取数据,也不能向文件写入数据 D.既可以从文件score.txt中读取数据,也可以向文件写入数据 D 知识点:【24100301】 知识考核要求:【2】 能力考核要求:【1】 难度系数:【A】 9.设有以下宏定义,如果a=2,b=3,执行语句printf("%d\n",HM(2+a+b))的输出结果是:(_____)。 #define HM(x) ((x)*((x)+1)) A.28 B.56 C.出错 D.48 B 知识点:【24070401】 知识考核要求:【1】 能力考核要求:【1】 难度系数:【C】 0. 设有如下结点定义及链表图示,交换学号为1011和学号为1012两个结点的语句是:(_____)。 struct node { int num; /*学号*/ struct node *next; } *head, *p,*q; A.p=head->next;q=head;q->next=p->next;p->next=q;head=p; B.p=head->next;q= p->next;p->next=q->next; q->next =p; C.p=head->next;q= p->next; q->next =p; p->next=q->next; head=q; D.p=head->next;q= p->next; q->next =p; p->next=q->next; A 知识点:【24110201】 知识考核要求:【1】 能力考核要求:【8】 难度系数:【C】
19bt.txt
1. 程序功能:从键盘输入一个正整数n(n<100),输出所有小于或等于n的与7有关的数,并计算输出这些数的平方和。所谓与7有关的数是指个位数为7、十位数为7或者能被7整除的正整数。 运行示例: #include <stdio.h> int fun1(int n) { int sum,i,d,m; ____(1)____; for (i=1; i<=n; i++) { m=i%10; d=____(2)____; if((m==7)||(d==7)||( ____(3)____)) { printf("%5d",i); sum +=i*i; } } return sum; } int main(void) { int s,n; scanf("%d",&n); s=fun1(____(4)____); printf("\n和: %d",s); return 0; } 1):【sum=0】2):【i/10】3):【i%7==0】【!(i%7)】4):【n】 知识点:【24020302】【24030101】【24030702】【24060301】 知识考核要求:【3】【2】【2】【3】 能力考核要求:【1】【1】【1】【3】 难度系数:【A】【A】【B】【B】 2. 程序功能:已有某部门五个职工的姓名、应发工资、奖金、个调税。 (1)计算每个职工的实发工资(实发工资=应发工资+奖金-个调税)和所有职工的平均实发工资并输出。 (2)按照职工姓名的字母顺序输出所有职工的姓名和实发工资。 运行示例: #include<stdio.h> #include<string.h> struct person { char name[20]; //姓名 float y_wages; //应发工资 float bonus; //奖金 float tax; //个调税 float s_wages; //实发工资 } stu[5]= {{"Li Liang",6865,3067,293.2},{"Liu Nian",5810,2500,131}, {"Wang Bin",8688,2900,458.8},{"Qin jing",5888,3100,198.8}, {"Sun Jun",6950,2800,275}}; int main(void) { ____(1)____ st; int i,j; float sum=0,ave; for(i=0; i<5; i++) { stu[i].s_wages=stu[i].y_wages+stu[i].bonus-stu[i].tax; sum =sum+ ____(2)____; } ave=sum/5; printf("平均实发工资%10.2f\n",ave); for(i=0; i<4; i++) for(j=0; ____(3)____; j++) { if(____(4)____ (stu[j].name,stu[j+1].name)>0) { st=stu[j]; stu[j]=stu[j+1]; stu[j+1]=st; } } printf("\n姓名 实发工资 \n"); for(i=0; i<5; i++) printf("%s %10.2f\n",stu[i].name,stu[i].s_wages); return 0; } 1):【struct person】2):【stu[i].s_wages】3):【j<4-i】4):【strcmp】 知识点:【24090201】【24020301】【24040301】【24050302】 知识考核要求:【2】【3】【3】【2】 能力考核要求:【1】【1】【1】【3】 难度系数:【A】【B】【B】【A】
19bc.txt
1. 程序调试题 调试要求:下列程序包含3个错误,请按题中的功能要求,打开C:\KS\B_2_1.c,调试并修改该程序(在所修改语句后加"/*_*/"或"//_"字样的注释),使其运行能得到正确的结果。修改后的程序仍保存为C:\KS\B_2_1.c。 功能说明:每个合数都可以写成几个素数(也可以称为质数)相乘的形式,这几个素数也称之为这个合数的质因数。例如,24可以被分解为2*2*2*3,而777可以被分解为3*7*37。以下程序是从键盘输入一个大于1的正整数n,输出它的质因数分解式,当n值为素数时分解式就是它本身。 运行示例: 带错误的源程序: #include <stdio.h> int main(void) { int n,i; printf("\nInput n="); scanf("%d",n); printf("%d=",n); for(i=1; i<=n; i++) { while(n%i==0) { printf("%d",i); n/=i; if(n!=1)printf("*"); } } if(n==1) printf("%d",n); printf("\n"); return 0; } 2. 程序调试题 调试要求:下列程序包含3个错误,请按题中的功能要求,打开C:\KS\B_2_2.c,调试并修改该程序(在所修改语句后加"/*_*/"或"//_"字样的注释),使其运行能得到正确的结果。修改后的程序仍保存为C:\KS\B_2_2.c。 功能说明: 从文件C:\KS\data1.txt读入50个点坐标,统计多少个点在圆x*x+y*y=100内,多少个点在圆上,多少个点在圆外。 运行示例: 带错误源程序: #include <stdio.h> #include <math.h> #include <stdlib.h> int fun(int n,int m); int main(void) { FILE *fp; int a,b,n=0,m=0,k=0,i; if((fp=fopen("data1.txt","r"))==NULL) { printf("文件不能打开!"); exit(1); } for(i=0;i<=50;i++) { scanf(fp,"%d%d",&a,&b); if(fun(a,b)==1) n++; else if(fun(a,b)==2) m++; else k++; } printf("点在圆x*x+y*y=100内有%5d个。 \n",n); printf("点在圆x*x+y*y=100外有%5d个。 \n",m); printf("点在圆x*x+y*y=100上有%5d个。 \n",k); fclose(fp); return 0; } int fun(int n,m) { if(n*n+m*m<100) return 1; else if(n*n+m*m>100) return 2; else return 3; } 3. 程序调试题 调试要求:下列程序包含4个错误,请按题中的功能要求,打开C:\KS\B_2_3.c,调试并修改该程序(在所修改语句后加"/*_*/"或"//_"字样的注释),使其运行能得到正确的结果。修改后的程序仍保存为C:\KS\B_2_3.c。 功能说明:本程序定义一个数组,存放10个整数,要求在指定位置(序号)上,插入一个整数。 插入过程是将数组最后一个数和指定位置上所有数,顺序向后移动,然后将数据插入到指定位置上。 运行示例: 带错误源程序: #include <stdio.h> int n=10; int InsList(int a[],int i,int x) { int j; if (i<1||i>n ) { printf("位置出错!\n"); break; } for(j=n-1;j>=i-1;j--) a[j+1]=a[j]; a[i]=x; n++; return 1; } int main(void) { int a[11]={12,45,78,54,22,89,28,64,10,58}; int k, m; printf("数组顺序为:\n"); for(k=0;k<n;k++) printf("%5d",a[k]); printf("\n"); printf("输入插入位置和值:"); scanf("%d%d",&k,&m); if(InsList(a,k,m)) for(k=0;k<n;k++) printf("%5d",a); printf("\n"); return 0; }
19bb.txt
1.编程题1 编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括B_4_1.c文件和B_4_1.EXE文件)保存到目录C:\KS\中。 程序功能:计算利率。 (1)从键盘输入客户类型(大写字母表示)、存款金额(单位:元,浮点数表示)、存期类型(数字1-5表示)。 (2)计算并输出对应的存款利率(保留2位小数),如果存期类型不是数字1-5,则输出没有这种存期。 说明: 客户类型有2种:'N'表示普通客户,'V'表示VIP客户。 存期类型有5种:1表示3个月,2表示半年,3表示1年,4表示2年,5表示3年。 普通利率的计算规则为:存期3个月的年利率为1.5%,存期半年的年利率为2%,存期1年的年利率为3%,存期2年的年利率为3.2%,存期3年的年利率为3.5%。 在普通利率的基础上,如果是VIP客户,利率上浮10%。 如果存款金额超过100000(10万),利率在之前基础上再上浮20%。 2.编程题2 编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括B_4_2.c文件和B_4_2.EXE文件)保存到目录C:\KS\中。 程序功能:整数矩阵找最大奇数。 (1)从键盘输入一个M行N列的整型二维数组,M和N值也由键盘输入(行列数不超过10)。 (2)如果有奇数,则输出数组中最大的奇数及其所在位置。如果有多个最大奇数,则全部输出。 (3)如果没有奇数,则输出:该数组没有奇数。
好了,本期内容就到这里。
接下来,我把几个文件
这是我的第一个内容,如有不妥,多多指教包涵。
喜欢的可以点赞收藏,希望更新的可以关注(虽然不知道下一期多久产)。
有什么想说的,什么建议啊,什么评价啊啊,都可以在评论区讲讲。
下期不见不散!
2022.10.17