c++题库简版.docx
- 文档编号:8694588
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:81
- 大小:47.21KB
c++题库简版.docx
《c++题库简版.docx》由会员分享,可在线阅读,更多相关《c++题库简版.docx(81页珍藏版)》请在冰豆网上搜索。
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数据:
"<
"<
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->data 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< } 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 题库