c++题库简版.docx
《c++题库简版.docx》由会员分享,可在线阅读,更多相关《c++题库简版.docx(79页珍藏版)》请在冰豆网上搜索。
![c++题库简版.docx](https://file1.bdocx.com/fileroot1/2022-10/28/ee3a171e-7a80-48d1-96e8-dd4f96f6d1bf/ee3a171e-7a80-48d1-96e8-dd4f96f6d1bf1.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)三条语句将这组解写入结果
答案:
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=