c++题库简版.docx
《c++题库简版.docx》由会员分享,可在线阅读,更多相关《c++题库简版.docx(81页珍藏版)》请在冰豆网上搜索。
![c++题库简版.docx](https://file1.bdocx.com/fileroot1/2023-1/31/8b3f8a49-3b38-41fb-afd3-4b7bdeb7c73e/8b3f8a49-3b38-41fb-afd3-4b7bdeb7c73e1.gif)
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;iif(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;iif(!
(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