c++题库(简版)_第1页
c++题库(简版)_第2页
c++题库(简版)_第3页
c++题库(简版)_第4页
c++题库(简版)_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1题 (10.0分) 题号:664题目:已知有结构体类型定义: struct node int data; struct node *nextPtr; ; 编写函数void printList(struct node * head),对head指向 的单向链表,找出data成员值为正数的所有结点,输出这些结 点在链表中的序号(第1个结点序号为1)和data成员值。答案:void printList(struct node * head)struct node *p;int i=1;p=head;while(p!=NULL)if(p-data 0) coutn数据:data 序号:nextPt

2、r;第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=0)&(strcmp(stri,B)0) strcpy(str1j,str

3、i); j+; 第5题 (10.0分) 题号:639题目:从键盘输入一个正整数n,该正整数可以分解成两个正整数k1 和k2之和(允许k1和k2相等)。请编写一个函数求使两个正 整数的乘积最大的分解方案,并返回乘积max。答案: int i,max; max = 1*(n-1); for(i=2;imax) max = i*(n-i);第6题 (10.0分) 题号:686题目:写一个函数统计字符串中,大写字母和小写字母 的个数,并分别保存在全局变量Supper和Low中。答案: int i=0; while (inputi!=0) if(inputi=A) Supper+; if (inputi

4、=a) Low+; i+; 第7题 (10.0分) 题号:628题目:求100以内(不含100)能被3整除且个位数为6的所有整数,答案: int i,count=0;for(i=0;i100;i+)if(i%3=0 & i%10=6)acount+=i;couti0;i-)if (i0 & ai-1n)ai = ai-1;elsebreak;ai = n;第9题 (10.0分) 题号:704题目:编写函数,把一个数字字符组成的字符串转换为相应的整数(如1234转换为1234)。答案:int a2i(char ds)int v = 0;for(int i=0; dsi != 0; i+)v =

5、v*10 + dsi-0; return v;第10题 (10.0分) 题号:728题目:求400之内的一对亲密对数。 所谓亲密对数A和B,即A不等于B,且A的所有因子(如,6的因子是1、2、3) 之和等于B,B的所有因子之和等于A。 求出的亲密对数存放在A和B中,且AB。 答案: for(int n=1;n400;n+) int sum_a=0,sum_b=0; int a=n,b; for(int i=1;i=a/2;i+) if(a%i=0)sum_a+=i; b=sum_a; if(b=400) for(int j=1;j=b/2;j+) if(b%j=0) sum_b+=j; if(

6、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 k j i;count+;if(count = 60)count = 0;output endl;elseoutput ;第12题 (10.0分) 题号:635题目:3025这个

7、数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)*(30+25),恰好等于3025本身。请求出具有abcd=(ab+cd)*(ab+cd)这样性质的全部四位数并使用变量num记录满足条件的数的总个数。要求:调用output()函数将求出的数写入文件f2.txt中,例如output(3025)。答案:int n,a,b;for(n=1000;n10000;n+) a=n/100; b=n%100; if(a+b)*(a+b)=n) coutnm & inf2n) s+=m*n;inf1.close();inf2.close();return s;第14题 (

8、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; i6; i+)if (ai!=(ai-1+1)*(ai-1+1)*(ai-1+1)%10) result =

9、0;第15题 (10.0分) 题号:616题目: 请编写函数 int num_of_facs(int n); 计算一个正整数 n 的因子个数(包括1和自身)。答案: int m =0;for(int i=1;in;i+) if(!(n%i) m+;m+;return m;第16题 (10.0分) 题号:634题目:马克思手稿中的数学题 马克思手稿中有一道趣味数学问题:有30个人,其中可能有男 人、女人和小孩,准备在一家饭馆花50先令吃饭;规定每个男 人可花3先令,每个女人可花2先令,每个小孩可花1先令; 问:男人、女人和小孩可各有几人? 要求将求出的每一组解以及解的总个数都通过调用output

10、()函 数写入文件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) coutm f c endl;output(m);output(f);output(c);num+;第17题 (10.0分) 题号:263题目: 已知n,计算n以内的所有素数之和sum。提醒:在写程序时,可自己输入n。但是最终提交时,请从给定的文件读入n,即不要修改不允许修改的代码。答案: for(outer

11、index=2; outerindexn; 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

12、 (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=a0;for(i=0;imax)max=ai;if(aimin)min=ai;ca=max-min;第20题 (10.0分) 题号:680题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 。 写一个函数实现这个算法,

13、函数原型是 int changeinfo(int info)答案:int changeinfo(int info) int a4; a0=info%10; a1=info%100/10; a2=info%1000/100;a3=info/1000; for(int i=0;i=3;i+) ai+=5;ai%=10; for( i=0;i=3/2;i+) int t=ai; ai=a3-i; a3-i=t;return a0+a1*10+a2*100+a3*1000; 第21题 (10.0分) 题号:588题目: 定义函数mymult(int m),已知一个正整数m,求m的各位数字之积f。答案:

14、 void mymult(int m)while( m!=0)n=m%10;f*=n;m=m/10;第22题 (10.0分) 题号:717/自建题库第161题 题号:717题目:从文件infile161.txt中读入20个整数,将其中为 奇数的整数输出到显示器和文件out161.txt中, 每个奇数占一行。答案:if (num%2)coutnumendl;第23题 (10.0分) 题号:594题目: 利用冒泡法将200个数按降序排列答案: for(i=0;i200;i+)for(j=0;jarrj)k=arrj+1;arrj+1=arrj;arrj=k;第24题 (10.0分) 题号:622题

15、目: 已知某文本文件 in.txt 中存放有若干整数,请将其按照 从小到大的顺序排列后存入另一文件 out.dat。 你需要完成三个函数 1. void read_in (node* & p_head, char* s_file) 负责从某个文件 s_file 中读入,并存在以 p_head 为头部指针的链表中; 2. void sort(node* p_head) 将链表内的元素按照从小到大的顺序排序; 3. void write_out(node* p_head, char* s_file) 将链表中的元素依次写入到 s_file 中 (注意,写入的元素以回车分割)。 其中,链表节点结构

16、node 已经定义。答案:void read_in(node* & p_head, char* s_file)node * p_tail = p_head;ifstream inf(s_file,ios:in);int m;while(infm)node * p_new = new node;p_new-data =m;p_new-next = NULL;if(!p_head | !p_tail)p_tail = p_head = p_new; elsep_tail-next = p_new;p_tail=p_new;inf.close();void sort(node* p_head)for

17、(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 data)p_k=p_j;int x = p_i-data;p_i-data = p_k-data;p_k-data = x;void write_out(node* p_head, char* s_file)ofstream ouf(s_file,ios:out);for(node * p_cur = p_head; p_cur; p_cur=p_cur-next)oufdataendl;ouf

18、.close();第25题 (10.0分) 题号:632题目:打鱼还是晒网中国有句俗语叫三天打鱼两天晒网。某人从1990年1月1日起开始三天打鱼两天晒网,问这个人在以后的某一天中是打鱼还是晒网。答案: for(year=1990;yeartoday.year; year+)term.year=year;yearday+=days(term); yearday+=days(today); 第26题 (10.0分) 题号:582题目:在包含10个数的一维整数数组a中查找给定的数据num。 如果找到则返回1,未找到返回 0 .答案:for (int i=0; i10; i+)if (ai=num)r

19、eturn 1;return 0;第27题 (10.0分) 题号:679题目:写一个函数char myfun(int score),实现百分制成绩与等级之间的转换关系: 90分以上为A,80-89为B,依次类推, 60分以下为E,并将等级返回答案:char myfun(int score) switch(score/10)case 10:case 9:return A;case 8:return B;case 7:return C;case 6:return D;default:return E;第28题 (10.0分) 题号:598题目: 从文件中读入6个数到数组中,计算其中正数的平均值av

20、er.答案: aver=0;for(j=0;j0)n+;aver+=aj;aver/=n;第29题 (10.0分) 题号:702题目:编写一个函数void changeString(char str);, 功能是把其中的大写字母变成小写字母,小写字母变成大写字母, 非字母的字符不作变换。变换结果依旧保存在str数组内。 大写字母的ASCII码值比对应的小写字母的ASCII码值小32, 如A的ASCII码值比a的ASCII码值小32。答案:void changeString(char str)for(int i=0; stri != 0; i+)if(stri=a & stri=A & stri

21、0) x1=x1*x; n-; return x1;第31题 (10.0分) 题号:645题目:下面程序中的函数void conv(char *s);将字符串s中的所有字符逆序存放,例如s中为”abc”时,调用该函数后s中的字符串变为”cba”,完成该函数。答案:int len = strlen(s), j;for (j=0;jlen/2;j+)char c = sj;sj = slen-1-j;slen-1-j = c;第32题 (10.0分) 题号:590题目: 计算1-1,000,000之间所有对称数的个数。 例如1221,2332都是对称数。答案: int a,b,c,d;a=i/10

22、00;b=i%1000/100;c=i%100/10;d=i%10;if(a=d&c=b)couti ;n+;第33题 (10.0分) 题号:670题目:函数myStrLen(char *a)返回字符串a的长度。填写 适当的代码,使得myStrLen()完成正确的功能。答案:int i=0;while(stri)i+;return i;第34题 (10.0分) 题号:644题目:下面的程序计算一个4*5的浮点数组s中每列的平均值,并将结果存入到数组ave中,如第0列的平均值存入到ave0中。完成该程序。答案:for (j=0;j5;j+)float m=0;for (i=0;i4;i+)m+=

23、sij;m = m/4;avej = m;第35题 (10.0分) 题号:177题目:某服装店经营套服,也单件出售。若买的不少于50套,每套80元;若不足50套,则每套90元;单件上衣,每件60元;单条裤子,每条45元。已知要买的上衣和裤子数,编写函数计算应付款。函数原型是 int Payfor(int yifu,int kuzi);第一个参数表示衣服的数量,第二个参数表示裤子的数量答案:int Payfor(int yifu,int kuzi)int tao=0;int pay=0;if (yifu=50)pay+=tao*80;elsepay+=tao*90;return pay;第36题

24、 (10.0分) 题号:659题目:一个首项大于0的递增等差数列前四项和为26,前四项积为880,写一个函数myfun()返回该数列的第20项的值。提示:如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列就叫做等差数列,这个常数叫做等差数列的公差。如等差数列:1,3,5,7,9,11。公差是2,该数列的第5项值是9答案:int myfun()int a,b,c,d,flag;for(flag=1,a=0; flag & a5;+a)for(d=1;flag & d=1)。答案:double result = 0.0;if (k=1) result = 1;else resu

25、lt = 1.0/k + m(k-1);return result;第38题 (10.0分) 题号:637题目:约瑟夫问题这是17世纪的法国数学家加斯帕在数目的游戏问题中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。答案: int i,j,k;j=30; /*j:指向已经处理完毕的数组元素,从linki指向的人开始计数*/for(i=0;i15;i+) /*i:已扔下海的人

26、数计数器*/for(k=0;) /*k:决定哪个人被扔下海的计数器*/if(k0;k*=10);kk=k*10;mul=0; ll=10; while(k0)mul=(mul+(number%(k*10)*(number%ll-number%(ll/10)%kk;k/=10;ll*=10;if(number=mul) return 1;else return 0;第40题 (10.0分) 题号:8题目:编程计算个人所得税。 个人所得税率表如下:月收入1200元起征,超过起征点500元以内部分税率5%,超过500 元到2,000元部分税率10%,超过2,000元到5,000元部分税率15%,超过

27、5,000元到20,000 元部分税率20%,超过20,000元到40,000元部分税率25%,超过40,000元到60,000元部分 税率30%,超过60,000元到80,000元部分税率35%,超过80,000元到100,000元部分税率40%, 超过100,000元部分税率45%。说明:1.应该从最高税率段开始计算,分段叠加。先算两万元以上各段,每两万为一档,采用 switch语句,注意没有使用break语句。后面各低收入段,用if语句,也没有使用else, 这两种方法是对应的。 2.要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都是完整的段, 计算十分简单。 3.变量定义为

28、双精度。答案:double income,tax=0;int k;cout请输入个人月收入:income;if(income=1200)cout免征个人所得税20000)k=income/20000;switch(k)default: tax+=(income-100000)*0.45;income=100000;case 4: tax+=(income-80000)*0.40;income=80000;case 3: tax+=(income-60000)*0.35;income=60000;case 2: tax+=(income-40000)*0.30;income=40000;case

29、 1: tax+=(income-20000)*0.25;income=20000;if(income5000)tax+=(income-5000)*0.20;income=5000;if(income2000)tax+=(income-2000)*0.15;income=2000;if(income500)tax+=(income-500)*0.10;income=500;tax+=income*0.05;cout应征所得税:taxendl;return 0;第41题 (10.0分) 题号:712题目:分别输入一个整数、一个浮点数、一个字符、一个 字符串,将它们写入一个新建的文件中(用换行符

30、 分隔),并将它们从该文件中读出并显示。答案:ofstream outfile(filename,ios:out); if(outfile.is_open() coutOpen File Error!endl; return; outfilei f ch string ; outfile.close();ifstream infile(filename,ios:in); if(infile.is_open() coutOpen File Error!ifchstring; couti f ch stringendl; infile.close();第42题 (10.0分) 题号:641题目:求

31、三个数的平均值。函数float ave(int a, int b, int c);计算3个数的平均值,完成该函数的编写。答案:float m = (a+b+c)/3.0;return m;第43题 (10.0分) 题号:703题目:编写函数int calLineNumber(char * filename), 功能是求文本文件内文本的行数(等于在记事本程序内看到的行数), 文本文件的名字由参数filename传入,假定一行的字符数不会超过100。 以下给出可能用到的函数的说明: 1. int ifstream:eof() 判别文件位置指针是否到达文件结尾 2. ifstream:getline

32、(char *buffer, int count) 从文件最多读取count个字符存入buffer指向的内存区域, 如果遇到换行符,则读操作会提前结束。读入的内容尾部自动补上空字符。答案:int calLineNumber(char * filename)ifstream inFile(filename, ios:in | ios:nocreate);if(!inFile)cerr无法打开数据文件filename。需要核查!endl;return 0;int lineCnt = 0;while(!inFile.eof()char str100;inFile.getline(str, 100);

33、/coutstrendl;lineCnt+;inFile.close();return lineCnt;第44题 (10.0分) 题号:214题目: 判断一个数23437是否是素数(要求程序中设置一 个参数flag,flag为1代表是素数,为0代表不是)答案: for(n=2;n=m/2&flag;n+)if(m%n=0)flag=0;coutflag=100;i-)if(n%i=0)break;第46题 (10.0分) 题号:726题目: 求一个正整数的所有因子。例如,24的因子是1、2、3、4、6、8和12。 给定正整数s,将因子按升序存入数组factor中答案: for(int j=1;

34、j=s/2;j+)if(s%j=0)factorcount=j;count+; 第47题 (10.0分) 题号:625题目: 编写一个函数 int day_of_month(int year, int month) 输入年(year)、月(month),打印出该年份该月的天数。 (若输入数据不合法,要求返回值为0) 公历闰年的计算方法为: i) 能被4整除且不能被100整除的为闰年; 或者 ii) 能被400整除的是闰年。答案:switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:cas

35、e 6:case 9:case 11:return 30;case 2:if(!(year%4)&(year%100) | !(year%400)return 29;elsereturn 28;default:return 0;第48题 (10.0分) 题号:163题目:编写两个函数max_val()和min_val(),分别在包含 10个整数的一维整数数组a中查找最大元素max和最小 元素min并返回之。答案: int max_val(int a,int len)int i,max=a0;for(i=0;ilen;i+)if (maxai) max = ai; return max;int

36、min_val(int a,int len)int i,min=a0;for(i=0;iai) min = ai; return min;第49题 (10.0分) 题号:510题目: 定义函数mymult(int m),找出1 m之中满足除以3余2,除以5余3,除以7余2的最大整数。(m50)答案:int mymult(int m)int i,max=1;for(i=1;i0)n = n / 10;c+;return c;第51题 (10.0分) 题号:646题目:请完成函数bool valid(int n),该函数判断整数n 的各位数字中是否包含数字3或4,是则返回true, 否则返回fal

37、se。 例如调用valid(132)时返回true。答案: if (n0) if (n%10 = 3 | n%10 = 4) return true; n = n/10; return false;第52题 (10.0分) 题号:633题目:抓交通肇事犯。一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号中后4位数字的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。满足上述要求的车牌号只有一个。请根据以上线索求出该车号后4位数字。答案: int i,j,c,carnum=0;for(i=1;i=9;i+) for(j=0;j=9;j+) if(i!=j) carnum=i*1000+i*100+j*10+j; for(c=31;c*ccarnum;c+);if(c*c=carnum)return carnum;第53题 (10.0分) 题号:599题目: 编写函数 reverse, 对给定的10个数置逆序排列.答案: for(i=0;iN/2;i+) t = ai; ai=aN-1-i; aN-1-i=t;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论