c++题库简版.docx

上传人:b****7 文档编号:8694588 上传时间:2023-02-01 格式:DOCX 页数:81 大小:47.21KB
下载 相关 举报
c++题库简版.docx_第1页
第1页 / 共81页
c++题库简版.docx_第2页
第2页 / 共81页
c++题库简版.docx_第3页
第3页 / 共81页
c++题库简版.docx_第4页
第4页 / 共81页
c++题库简版.docx_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

c++题库简版.docx

《c++题库简版.docx》由会员分享,可在线阅读,更多相关《c++题库简版.docx(81页珍藏版)》请在冰豆网上搜索。

c++题库简版.docx

c++题库简版

第1题(10.0分)题号:

664

题目:

已知有结构体类型定义:

structnode

{intdata;

structnode*nextPtr;

};

编写函数voidprintList(structnode*head),对head指向

的单向链表,找出data成员值为正数的所有结点,输出这些结

点在链表中的序号(第1个结点序号为1)和data成员值。

答案:

voidprintList(structnode*head)

{

structnode*p;

inti=1;

p=head;

while(p!

=NULL)

{

if(p->data>0)cout<<"\n数据:

"<data<<"序号:

"<

i++;

p=p->nextPtr;

}

}

第2题(10.0分)题号:

693

题目:

编写一段程序,计算输入流input中第一个$之前的

字符数目,存入count变量。

答案:

while(input.get(ch)&&ch!

='$')

count++;

第3题(10.0分)题号:

592

题目:

用“辗转相除方法”计算两个数x,y的最大公约

答案:

n=x%y;

while(n!

=0)

{x=y;y=n;n=x%y;}

第4题(10.0分)题号:

708

题目:

从文件中读入n个字符串,将其中以字母A开头的字符串复制

到二维字符数组str1中。

答案:

for(i=0;i

{

if((strcmp(str[i],"A")>=0)&&(strcmp(str[i],"B")<0))

{strcpy(str1[j],str[i]);

j++;

}

}

第5题(10.0分)题号:

639

题目:

从键盘输入一个正整数n,该正整数可以分解成两个正整数k1

和k2之和(允许k1和k2相等)。

请编写一个函数求使两个正

整数的乘积最大的分解方案,并返回乘积max。

答案:

inti,max;

max=1*(n-1);

for(i=2;i

if(i*(n-i)>max)

{

max=i*(n-i);

}

第6题(10.0分)题号:

686

题目:

写一个函数统计字符串中,大写字母和小写字母

的个数,并分别保存在全局变量Supper和Low中。

答案:

inti=0;

while(input[i]!

='\0')

{

if(input[i]<='Z'&&input[i]>='A')

Supper++;

if(input[i]<='z'&&input[i]>='a')

Low++;

i++;

}

第7题(10.0分)题号:

628

题目:

求100以内(不含100)能被3整除且个位数为6的所有整数,

答案:

inti,count=0;

for(i=0;i<100;i++)

if(i%3==0&&i%10==6)

{

a[count++]=i;

cout<

}

第8题(10.0分)题号:

647

题目:

下面程序中的函数voidins(inta[],intlen,intn);

将n插入到一个包含len个从小到大排好序的整数数组a中,插入

后保证数组的有序性。

完成该函数的编写。

例如:

a)调用ins(a,0,3)后,数组a中为3

b)调用ins(a,1,2)后,数组a中为2,3

c)调用ins(a,2,6)后,数组a中为2,3,6

答案:

inti;

for(i=len;i>0;i--)

{

if(i>0&&a[i-1]>n)

a[i]=a[i-1];

else

break;

}

a[i]=n;

第9题(10.0分)题号:

704

题目:

编写函数,把一个数字字符组成的字符串转换为相应的整数(如"1234"转换为1234)。

答案:

inta2i(chards[])

{

intv=0;

for(inti=0;ds[i]!

='\0';i++)

{

v=v*10+ds[i]-'0';

}

returnv;

}

第10题(10.0分)题号:

728

题目:

求400之内的一对亲密对数。

所谓亲密对数A和B,即A不等于B,且A的所有因子(如,6的因子是1、2、3)

之和等于B,B的所有因子之和等于A。

求出的亲密对数存放在A和B中,且A

答案:

for(intn=1;n<400;n++)

{intsum_a=0,sum_b=0;

inta=n,b;

for(inti=1;i<=a/2;i++)

{

if(a%i==0)

sum_a+=i;

}

b=sum_a;

if(b<=400)

{

for(intj=1;j<=b/2;j++)

{

if(b%j==0)

sum_b+=j;

}

if(sum_b==a&&a!

=b)

{

A=a;

B=b;

break;

}

}

}

第11题(10.0分)题号:

696

题目:

请输出个、十、百位数字各不相同的所有三位数,

结果写入f2.txt中,一个数一行。

要求:

输出时按从小到大的顺序输出。

答案:

for(i=0;i<10;i++)

for(j=0;j<10;j++)

for(k=1;k<10;k++)

{

if(i!

=j&&j!

=k&&i!

=k)

{

output<

count++;

if(count==60)

{

count=0;

output<

}

else

output<<"";

}

}

第12题(10.0分)题号:

635

题目:

3025这个数具有一种独特的性质:

将它平分为二段,即30和25,

使之相加后求平方,即(30+25)*(30+25),恰好等于3025本身。

请求出具有abcd=(ab+cd)*(ab+cd)这样性质的全部四位数并使用变

量num记录满足条件的数的总个数。

要求:

调用output()函数将求出的数写入文件f2.txt中,例如output(3025)。

答案:

intn,a,b;

for(n=1000;n<10000;n++)

{

a=n/100;

b=n%100;

if((a+b)*(a+b)==n)

{

cout<

output(n);

num++;

}

}

第13题(10.0分)题号:

621

题目:

假设文件"f1.txt"和"f2.txt"以文本方式分别

存放着两个长度相同的实数向量,但是具体长度未知。

请编写函数

doubleprod(char*s1,char*s2)

求二向量的内积。

其中,s1和s2分别是存放两个向量的文件名。

(向量的内积公式如图)

答案:

ifstreaminf1(s1,ios:

:

in);

ifstreaminf2(s2,ios:

:

in);

doublem,n;

doubles=0;

while(inf1>>m&&inf2>>n)

s+=m*n;

inf1.close();

inf2.close();

returns;

第14题(10.0分)题号:

623

题目:

试编写一个判断6位密码是否正确的函数codec,

若密码正确返回1,密码不正确返回0,出现错误返回-1。

密码规则是:

第i位数字是第i-1位数字加1后的3次方的个位数(2<=i<=6)。

比如:

密码272727中第2位的'7'是第1位的'2'加1后的3次方的个位数

((2+1)的3次方为27,其个位数为7),第3位的'2'是第2位的'7'加1后的3次方

的个位数((7+1)的3次方为512,其个位数为2),以此类推。

答案:

if(result!

=-1)

for(i=1;i<6;i++)

if(a[i]!

=((a[i-1]+1)*(a[i-1]+1)*(a[i-1]+1))%10)result=0;

第15题(10.0分)题号:

616

题目:

请编写函数

intnum_of_facs(intn);

计算一个正整数n的因子个数(包括1和自身)。

答案:

intm=0;

for(inti=1;i

if(!

(n%i))

m++;

m++;

returnm;

第16题(10.0分)题号:

634

题目:

马克思手稿中的数学题

马克思手稿中有一道趣味数学问题:

有30个人,其中可能有男

人、女人和小孩,准备在一家饭馆花50先令吃饭;规定每个男

人可花3先令,每个女人可花2先令,每个小孩可花1先令;

问:

男人、女人和小孩可各有几人?

要求将求出的每一组解以及解的总个数都通过调用output()函

数写入文件f2.txt中。

例如0、20、10是一组解,则应使用

output(0);output(20);output(10)三条语句将这组解写入结果

文件f2.txt

答案:

for(m=0;m<=10;m++)

{

f=20-2*m;

c=30-m-f;

if(3*m+2*f+c==50)

{

cout<

output(m);

output(f);

output(c);

num++;

}

}

第17题(10.0分)题号:

263

题目:

已知n,计算n以内的所有素数之和sum。

提醒:

在写程序时,可自己输入n。

但是最终提交时,请

从给定的文件读入n,即不要修改不允许修改的代码。

答案:

for(outerindex=2;outerindex

{

prime=true;

temp=(int)sqrt((float)outerindex);

for(innerindex=2;innerindex<=temp;innerindex++)

if(outerindex%innerindex==0)

{

prime=false;

break;

}

if(prime)

{

sum+=outerindex;

}

}

第18题(10.0分)题号:

722

题目:

编写函数countWeek,根据给定的星期数(其中星

期日用0表示、星期一用1表示、......,以此类推

),请计算n天后是星期几,并将结果返回。

答案:

return(week+n)%7;

第19题(10.0分)题号:

266

题目:

已知100个数求最大值及最小值以及它们的差。

例如

8,43,7,18,2,56,37,123,25,26则

max=132,min=2,ca=130。

答案:

max=min=a[0];

for(i=0;i<10;i++)

{if(a[i]>max)max=a[i];

if(a[i]

ca=max-min;

第20题(10.0分)题号:

680

题目:

某个公司采用公用电话传递数据,

数据是四位的整数,在传递过程中是加密的,

加密规则如下:

每位数字都加上5,

然后用和除以10的余数代替该数字,

再将第一位和第四位交换,

第二位和第三位交换。

写一个函数实现这个算法,

函数原型是intchangeinfo(intinfo)

答案:

intchangeinfo(intinfo)

{

inta[4];

a[0]=info%10;

a[1]=info%100/10;

a[2]=info%1000/100;

a[3]=info/1000;

for(inti=0;i<=3;i++)

{a[i]+=5;a[i]%=10;}

for(i=0;i<=3/2;i++)

{

intt=a[i];

a[i]=a[3-i];

a[3-i]=t;

}

returna[0]+a[1]*10+a[2]*100+a[3]*1000;

}

第21题(10.0分)题号:

588

题目:

定义函数mymult(intm),已知一个正整数m,求m的各位数字之积 f 。

答案:

voidmymult(intm)

{

while(m!

=0)

{n=m%10;f*=n;m=m/10;}

}

第22题(10.0分)题号:

717

//自建题库第161题题号:

717

题目:

从文件in中读入20个整数,将其中为

奇数的整数输出到显示器和文件out161.txt中,

每个奇数占一行。

答案:

if(num%2)

{

cout<

第23题(10.0分)题号:

594

题目:

利用冒泡法将200个数按降序排列

答案:

for(i=0;i<200;i++)

{

for(j=0;j<200;j++)

{

if(arr[j+1]>arr[j])

{

k=arr[j+1];

arr[j+1]=arr[j];

arr[j]=k;

}

}

}

第24题(10.0分)题号:

622

题目:

已知某文本文件in.txt中存放有若干整数,请将其按照

从小到大的顺序排列后存入另一文件out.dat。

你需要完成三个函数

1.voidread_in(node*&p_head,char*s_file)

负责从某个文件s_file中读入,并存在以p_head

为头部指针的链表中;

2.voidsort(node*p_head)

将链表内的元素按照从小到大的顺序排序;

3.voidwrite_out(node*p_head,char*s_file)

将链表中的元素依次写入到s_file中

(注意,写入的元素以回车分割)。

其中,链表节点结构node已经定义。

答案:

voidread_in(node*&p_head,char*s_file)

{

node*p_tail=p_head;

ifstreaminf(s_);

intm;

while(inf>>m)

{

node*p_new=newnode;

p_new->data=m;

p_new->next=NULL;

if(!

p_head||!

p_tail)

{

p_tail=p_head=p_new;

}

else

{

p_tail->next=p_new;

p_tail=p_new;

}

}

inf.close();

}

voidsort(node*p_head)

{

for(node*p_i=p_head;

p_i;p_i=p_i->next)

{

node*p_k=p_i;

for(node*p_j=p_i;p_j;p_j=p_j->next)

if(p_j->datadata)

p_k=p_j;

intx=p_i->data;

p_i->data=p_k->data;

p_k->data=x;

}

}

voidwrite_out(node*p_head,char*s_file)

{

ofstreamouf(s_);

for(node*p_cur=p_head;p_cur;p_cur=p_cur->next)

{

ouf<data<

}

ouf.close();

}

第25题(10.0分)题号:

632

题目:

打鱼还是晒网

中国有句俗语叫"三天打鱼两天晒网"。

某人从1990年1月1日起开始"三天打鱼两天晒网",

问这个人在以后的某一天中是"打鱼"还是"晒网"。

答案:

for(year=1990;year

{

term.year=year;

yearday+=days(term);

}

yearday+=days(today);

第26题(10.0分)题号:

582

题目:

在包含10个数的一维整数数组a中查找给定的数据num。

如果找到则返回1,未找到返回0.

答案:

for(inti=0;i<10;i++)

if(a[i]==num)

return1;

return0;

第27题(10.0分)题号:

679

题目:

写一个函数charmyfun(intscore),

实现百分制成绩与等级之间的转换关系:

90分以上为"A",80-89为"B",依次类推,

60分以下为"E",并将等级返回

答案:

charmyfun(intscore)

{

switch(score/10)

{

case10:

case9:

return'A';

case8:

return'B';

case7:

return'C';

case6:

return'D';

default:

return'E';

}

}

第28题(10.0分)题号:

598

题目:

从文件中读入6个数到数组中,计算其中正数的平均值aver.

答案:

aver=0;

for(j=0;j<6;j++)

{

if(a[j]>0)

{

n++;

aver+=a[j];

}

}

aver/=n;

第29题(10.0分)题号:

702

题目:

编写一个函数voidchangeString(charstr[]);,

功能是把其中的大写字母变成小写字母,小写字母变成大写字母,

非字母的字符不作变换。

变换结果依旧保存在str数组内。

大写字母的ASCII码值比对应的小写字母的ASCII码值小32,

如'A'的ASCII码值比'a'的ASCII码值小32。

答案:

voidchangeString(charstr[])

{

for(inti=0;str[i]!

='\0';i++)

{

if(str[i]>='a'&&str[i]<='z')

str[i]-=32;

elseif(str[i]>='A'&&str[i]<='Z')

str[i]+=32;

}

}

第30题(10.0分)题号:

657

题目:

写一个函数,计算x的n次方。

函数原型是doublemyfun(intx,intn)

答案:

intx1=1;

while(n>0)

{

x1=x1*x;

n--;

}

returnx1;

第31题(10.0分)题号:

645

题目:

下面程序中的函数voidconv(char*s);将字符串s中

的所有字符逆序存放,例如s中为”abc”时,调用该函数后

s中的字符串变为”cba”,完成该函数。

答案:

intlen=strlen(s),j;

for(j=0;j

{

charc=s[j];

s[j]=s[len-1-j];

s[len-1-j]=c;

}

第32题(10.0分)题号:

590

题目:

计算1--1,000,000之间所有对称数的个数。

例如1221,2332都是对称数。

答案:

inta,b,c,d;

a=i/1000;

b=i%1000/100;

c=i%100/10;

d=i%10;

if(a==d&&c==b)

{

cout<

n++;

}

第33题(10.0分)题号:

670

题目:

函数myStrLen(char*a)返回字符串a的长度。

填写

适当的代码,使得myStrLen()完成正确的功能。

答案:

inti=0;

while(str[i])

i++;

returni;

第34题(10.0分)题号:

644

题目:

下面的程序计算一个4*5的浮点数组s中每列的平均值,

并将结果存入到数组ave中,如第0列的平均值存入到ave[0]中。

完成该程序。

答案:

for(j=0;j<5;j++)

{

floatm=0;

for(i=0;i<4;i++)

m+=s[i][j];

m=m/4;

ave[j]=m;

}

第35题(10.0分)题号:

177

题目:

某服装店经营套服,也单件出售。

若买的不少于50套,

每套80元;若不足50套,则每套90元;单件上衣

,每件60元;单条裤子,每条45元。

已知要买的上衣和裤子数,编写函数计算应付款。

函数原型是intPayfor(intyifu,intkuzi);

第一个参数表示衣服的数量,第二个参数表示裤子的数量

答案:

intPayfor(intyifu,intkuzi)

{

inttao=0;

intpay=0;

if(yifu<=kuzi)

{

tao=yifu;

kuzi-=yifu;

pay=45*kuzi;

}else

{

tao=kuzi;

yifu-=kuzi;

pay=60*yifu;

}

if(tao>=50)

pay+=tao*80;

else

pay+=tao*90;

returnpay;

}

第36题(10.0分)题号:

659

题目:

一个首项大于0的递增等差数列前四项和为26,前四项积为880,

写一个函数myfun()返回该数列的第20项的值。

提示:

如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,

这个数列就叫做等差数列,这个常数叫做等差数列的公差。

如等差数列:

1,3,5,7,9,11。

公差是2,该数列的第5项值是9

答案:

in

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1