高级程序设计期末考试题

发布 2021-04-18 22:12:28 阅读 6043

一、算法分析题(本大题共3小题,选做2题,每小题40分,共80分)

1. 逃学威龙。

john无心向学,总是打逃课的主意,他确信他的期末考试绝对能够考过,但是老师可不相信他,因此老师定下了一条规矩,最后的期末成绩将由平时成绩和考试成绩组成,各占50%的分数,也就是满分100分,其中平时成绩50分,考试成绩50分。而老师为了不让同学们逃课,平时成绩将仅由出勤情况确定,每点名到一次逃课就要扣掉10分的平时成绩。

john很不满于老师这套想法,决心要将翘课进行到底,他有足够的信心和实力在期末考中得到满分,剩下的就只看平时成绩了,只要他在平时成绩中保留的分数》=10分,他这个学期就可以合格。他甚至为此充分调查了老师的点名习惯,发现如下规律:

每个学期这门课程共有k个课时(k<=20),而对于某节课老师点不点名是一个独立的事件,并且老师在某一节课点名的概率是p(0.0<=p<=1.0),现在fish_ball想尽可能多的逃课,但是要保证他有90%以上的概率不挂掉这门课,问fish_ball这个学期最多能翘掉多少课?

输入规格:第一行是一个整数c,c<=20,紧接着c组数据,每组数据包含一行,依次给出整数k (1<=k<=20)和p(0.0<=p<=1.0),如题目中所描述。

输出规格:对于每组数据,输出一个整数,表示john这学期最多能够翘掉几堂课。

算法分析:设john逃课次数为skipnum,课程总数为classnum,当skipnum<=classnum时,在skipnum次逃课中,john被点名的次数 <=4 的概率(realpossibility) >0.9 ( 即90% )则john可以通过该课程。

realpossibility等于在skipnum次中分别被点次的概率之和,即 :

realpossibility =

当满足 realpossibility >=0.9 时求的的skipnum最大值即为john最大可逃的课程数。

程序:#include <>

#include ""

struct ke;

int classnumclassnum 为课程总数。

float pp为每节课老师点名的次数。

int skipnum = 5skipnum为john逃课次数。

double getpossibility(int a,int b,double p );用于求a(skipnum)次逃课中被点b次的概率。

double getrealpossble(int a2,int b2,double p2);/求skipnum次中分别被点0-4次的概率和。

void main()

int c;

cout<<"input:">c;

ke *ke=new ke[c];

for(int i=0;i

cout<<"output:"

double getrealpossble(int a2,int b2,double p2)

double sump=0;

int tempct=b2;

while (tempct>=0)

sump=sump+getpossibility(a2,tempct,p2);

tempct--;

return sump;

***get possibility

double getpossibility(int a,int b,double p1)

int countup=1;

int sumup=1;

double sumall;

int sumdown=1;

int temp = a;

while (countup<=b)

sumup=sumup*a;

a--;countup++;

for(int i=1;i<=b;i++)

sumdown=sumdown*i;

sumall=sumup/sumdown;

return sumall*pow(p1,b)*pow(1-p1,temp-b);

input

output

2. 赶公交。

alfred在大学新区上学,他每个星期都要到市区学琴,因此要在每个星期六的10点钟之前赶到琴行上课,从郑大坐68路车到琴行要花整整一个小时,而68路车是每半小时一趟,整点和30分的时候会发一趟车。

这一次,alfred起床晚了,一看表已经8点多了,匆忙收拾了一下之后,alfred马上冲向公交站,但是,由于路况不佳,在前面的一段路上满是泥泞。路况如下:

如左图,a(xa,ya)是alfred现在所处的位置,b(xb,yb)是公交站(bus-stop)的位置,其中y>0的区域是泥泞的地面,alfred在泥泞的地面上的移动速度是v1(米/秒),而y<0的区域是水泥地,alfred在水泥地上的移动速度只有v2(米/秒),其中v1<=v2,a在第二象限,b在第四象限。

alfred是一个物工院的学生,他稍微估算了一下,剩下的时间已经不多了,他看看表,现在离9点整只剩下t秒了 (t由题目给出),alfred想知道,他如果用最优的策略赶往公交站,今天的课是否会迟到。

输入规格:第一行是一个整数c,c<=10,紧接着c组数据,每组数据依次给出xa,ya,xb,yb,v1,v2 和t,他们的意义如上文所述,x,y坐标的单位是米,所有坐标的绝对值<109,t是一个整数。

输出规格:对于每组数据,输出yes或no,表示alfred会不会迟到。

算法:在x轴上取p(p,0),对每组数据,给出xa,ya,xb,yb,v1,v2.,xa==0,yes;t-t<0,no.

第二题。。。不粉我你什么心态。

#include

#include

#include

#include

using namespace std;

class zuobiao//基坐标。

protected :double x,y;

public:virtual void run()=0;

virtual void print()=0;

double getx();

double gety();

class a:public zuobiao//a坐标。

public:a()

void run();

void print();

class b:public zuobiao//b坐标。

public:b()void run();void print();

class alfred//人物。

public:alfred()

void setspeed();void calc();void print();

private:a a;b b;double v1,v2;double t;

double zuobiao::getx()

double zuobiao::gety()

void a::run()

void b::run()

void a::print()}

void alfred::print()

cout<<"v1="

6小时(十进制),并规定:若有多辆车同时到达,装车的优先次序是:大车≥中车≥小车。

不记装车时间。问:(1)最后一趟车是那种车?

(2)大、中、小车各运多少趟?

算法:设时间为t,然后起始t=0,剩余货物为m=1000-5-2-3,对t进行循环,在循环里,分开三种判断,1,t整除20等于0,就令m-5;2,t整除18等于0;就令m-3;3,t整除16=0,就令m-2;

每循环一次t自加一次;当m<=0时,循环结束。此时再进行判断:若t整除20等于0,最后为大车;若t整除18等于0,最后为中车;若t整除16=0,最后为小车。

大车趟数:t/20+1;中车趟数:(t-1)/18+1,小车趟数:(t-1)/16+1

#include <>

void main ()

int i=0,left=1000-5-3-2;

while (1)

if (i%20==0)

printf("最后一趟是大车");

elseprintf("大车运输了%d次中车运输了%d次小车运输了%d次",i/20+1,(i-1)/18+1,(i-1)/16+1);

#include

using namespace std;

int main()

C语言程序设计期末考试试题

一 单项选择题 30分 1.下列不属于算法应该具有的特性是 a.确定性 b.有穷性 c.可行性 d.有零个或者多个输入。2.以下不正确c语言标识符是 b.abc c.bc 3.计算机能直接执行的程序是 a.源程序 b.目标程序 c.汇编程序 d.可执行程序。4.以下运算符优先级最高的是 a.b.c....

《C语言程序设计》期末考试试题

考生必须将答案做在前面的答题纸上!试题一 28分,每小题4分 解答下列各小题,把解答写在答卷的对应栏内。1 试写出下列数学表达式的c语言表达式。2 满足关系式 a ch z 的c语言表达式是。a 65 ch ch 90b ch a z ch c a ch zd ch a z ch 3 设a 1 b ...

C语言程序设计期末考试说明

c语言程序设计 期末考试说明。1.所有c语言程序设计内容全部列为考试内容,但类似于栈 链表等数据结构方面的内容及排序 查找等算法本身不列入考试内容,同时问题求解本身也不列为考试内容,但考试中可能会涉及问题求解 排序 查找等算法,此时会以流程图或伪 的形式给出问题求解过程或算法的描述,请同学们一定要熟...