C++-题库186道题(简缩) 下载本文

内容发布更新时间 : 2024/12/23 1:56:34星期一 下面是文章的全部内容请认真阅读。

if(!(year%4)&&(year0) || !(year@0)) return 29; else return 28; default: return 0; }

第60题:函数mySum(int m, int n)返回m! + (m+1)! + (m+2)!

+ … + n!的值,n大于m。填写适当的代码,使得

mySum()完成正确的功能。 答案: int i, p=1, s; for (i=1; i<=m; i++) p=p*i; s=p; for (i=m+1; i<=n; i++) { p = p*i; s = s + p; } return s;

第61题:函数mySum(int a[], int c)返回整数数组a中所有

元素的和,c为数组元素的个数。填写适当的代码,

使得mySum()完成正确的功能。 答案: int s=0, i; for (i=0; i

第62题:下面的函数concatenate实现两个字符单向链表的连 接。函数以对两个链表头的引用作为参数,把第二

个链表连接到第一个链表后面。答案: if(list1==NULL) { list1=list2; return; } CharNode *tdp1=list1; while((tdp1->next)!=NULL) tdp1=tdp1->next; tdp1->next=list2;

第63题: 查找水仙花数及个数 n (水仙花数是三位数,每

位数字的立方和等于这个数本身,示例见图1)。

答案:for (m=100;m<=999;m++) {

a=m/100; b=m0/10; c=m0; if(m==a*a*a+b*b*b+c*c*c) {

cout<

第64题:设计函数,将小写英文字符变为对应的大写字符。

答案:if(ch>='a'&&ch<='z') return ch-'a'+'A';

else return ch;

第65题:编写函数countWeek,根据给定的当天星期数week

(week=0表示星期日,week=1表示

星期一,..., 以此类推),请计算n天后是星期几,并将结果返回。

答案: return (week+n)%7;

第66题: 假设文件 \和 \以文本方式分别

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

double prod(char* s1, char* s2)

求二向量的内积。

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

(向量的内积公式如图)

答案:ifstream inf1(s1,ios::in); ifstream inf2(s2,ios::in); double m, n; double s=0;

while(inf1>>m && inf2>>n) s+=m*n; inf1.close(); inf2.close(); return s;

第67题:写一个函数char myfun(int score),实现百分制

成绩与等级之间的转换关系:90分以上为'A',

80-89为'B',70-79为'C',60-69为'D',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'; } }

第68题:下面程序中的函数函数int mylist(int n);计算

数列中的第n个数并返回,数列的定义如下:0, 1, 2, 5, 12…即,第0个数为0,第1个数为1,第n(n>1)个数

为第n-2个数加上2倍的第n-1个数。完成该函数。

答案: if (n<2) return n; int a=0,b=1,c,i; for (i=0;i

第69题: 编写一个函数,统计出一维数组中

大于等于所有元素平均值的元素个数并返回它。

答案:---------------------- double m=0;

精品文档,知识共享!

int i;

for(i=0;i=m) c++; return c;

----------------------

第70题:文件infile163.txt中含有两个用空格分隔的长度

不超过10的英语单词,请将这两个英语单词依次读

入两个一维字符数组str1和str2中,并比较两个单

词长度,若str1 单词字母个数多于str2,结果为1;

若str1单词字母个数等于str2,结果为0;若str1

单词字母个数少于str2,结果为-1。将比较结果

result输出到文件out163.txt中。 答案: ifile.open

(\

myfile.open(\ ifile>>str1; ifile>>str2; if( strlen(str1) > strlen(str2) ) result = 1; else if( strlen(str1) == strlen(str2) ) result = 0; else result = -1;

第71题:求400之内的一对亲密对数。 所谓亲密对数A和B,即A不等于B,且A的所有因子(如,6的因子是1、2、3) 之和等于B,B的所有因子之和等于A。

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

答案: for(int n=1;n<400;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(sum_b==a && a!=b) {

A=a; B=b; break; } } }

第72题: 一个数列,它的第一项是0,第二项是1,以后每

项都是前两项之和,求前20项之和 s

答案:---------------------- for(k=2;k<=10;k++) {a1=a1+a2; a2=a1+a2; s=s+a1+a2;}

---------------------- 第73题:函数char *conv(unsigned int n, char *s);将十

进制整数n转换成8进制的字符串存入字符数组s中

并返回,例如n为12时,s中的字符串是”014”

(必须以0开始),完成该函数的编写。

答案: int i=0; char array[20]; while(n>0) {

array[i]=n%8+'0'; i=i+1; n=n/8; }

array[i]='0'; i++;

for(int j=i-1;j>=0;j--) *(s+j)=array[i-1-j]; *(s+i)='\\0';

第74题: 编写函数sum_fac,求1!+2!+3!+…+n!。 答案: int jch=1; double result=1; for(int i=2;i<=n;i++) { jch*=i; result+=jch; }

第75题:用while循环编程,求自然数1至100之间各奇数平方 和 sum 。

答案:---------------------- while(i<=100) {sum+=i*i;i+=2;} cout<<\----------------------

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

并按从小到大的顺序存入数组a中。 答案:

---------------------- int i,count=0; for(i=0;i<100;i++) if(i%3==0 && i==6) { a[count++]=i; cout<

---------------------- 第77题:编写函数,把一个数字字符组成的字符串转换为相应的整数(如\转换为1234)。

答案:int a2i(char ds[]) { int v = 0; for(int i=0; ds[i] != '\\0'; i++) { v = v*10 + ds[i]-'0'; } return v; }

第78题:歌德巴赫猜想指出:任何一个充

分大的偶数都可以表示为两个素数之和。例如,4=2+2

6=3+3 8=3+5 … … 50=3+47, 将4 50之间的所有偶数用两个素数之和表示。

编写判断一个整数是否为素数用函数prime(m)。

答案: bool prime(int m) { for(int i=2;i<=m/2;i++) if(m%i==0) return false;

return true; }

第79题:从文件中读出15个数按由大到小的顺序存放在一个数组中, 输入一个数,要求用折半查找法找出该数是数组中第 几个元素,如果该数不在数组中,打印出无此数。

答案:while(left<=right) {

mid=(left+right)/2; if(array[mid]==key) {

element=mid; break; }

if(array[mid]>key) left=mid+1; if(array[mid]

第80题:写一个函数,其返回值类型为如下定义的MyTime,

该函数将以秒为单位输入的一个时间值,转化成

时、分、秒(即转换为\几小时几分几秒\的形式),

其结果以结构体形式返回。结构体MyTime定义如下,

struct MyTime {

int hh; int mm; int ss; }

成员变量hh,mm,ss分别表示时、分、秒。

答案:struct MyTime { int hh; int mm; int ss; };

MyTime myfun( long second) { struct MyTime mytime ; mytime.hh= second/3600; mytime.mm=( second-mytime.hh*3600)/60; mytime.ss=

second-mytime.hh*3600-mytime.mm*60; return mytime; }

第81题:用递归函数P(n,x)实现勒让德多项式(参考图1).

答案:double P(int n,double x) { if(n==0) return 1; if(n==1) return x;

精品文档,知识共享!

return

((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n; }

第82题:请完成函数bool valid(int n),该函数判断整数n

的各位数字中是否包含数字3或4,是则返回true,

否则返回false。

例如调用valid(132)时返回true。 答案: if (n<0) n=-n; while (n>0) {

if (n == 3 || n == 4)

return true; n = n/10; }

return false;

第83题:完成函数ave的编写,该函数计算数组a中所有数

的平均值并返回,参数len是数组a中元素的个数。 答案: float m=0; for (int i=0;i

第84题: 编写一个函数,统计出一维数组中

大于等于所有元素平均值的元素个数并返回它。

答案:---------------------- double m=0; int i; for(i=0;i=m) c++; return c;

----------------------

第85题:写一个函数,将以秒为单位输入的一个时间值,

转化成时、分、秒.保存在结构体变量中并作为函数返回值返回,

其成员变量hh,mm,ss分别表时、分、秒。 答案:struct tt { int hh; int mm; int ss; };

tt myfun( long second) { struct tt mytime ; mytime.hh= second/3600;

mytime.mm=( second-mytime.hh*3600)/60;

mytime.ss=

second-mytime.hh*3600-mytime.mm*60; return mytime; }

第86题:两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,

经过抽签决定比赛配对名单。规定A不和J比赛,M不和D及E比赛。列出所有可能的比

赛名单,并统计所有可能的比赛名单总数存入变量count。

答案: char

st1[5]={'A','B','C','D','E'},st2[5]={'J','K','L','M','N'}; int j,k,l,m,n; for(j=0;j<5;j++){//0号位 if(j==0) continue;//A选手不与选手J比赛,即st1[0]不与st2[0]比赛 for(k=0;k<5;k++){//1号位 if(k==j) continue;//剔除乙队占据0号位的选手 for(l=0;l<5;l++){//2号位 if(l==j||l==k) continue;//剔除乙队占据0、1号位的选手 for(m=0;m<5;m++){//3号位 if(m==j||m==k||m==l) continue;//剔除乙队占据0、1、2号位的选手 if(m==3) continue;//st1[3]不与st2[3]比赛,即D不与M比赛 for(n=0;n<5;n++){//4号位 if(n==j||n==k||n==l||n==m) continue;

//剔除乙队占据0、1、2、3号位的选手 if(n==3) continue;//st1[4]不与st2[3]比赛,即E不与M比赛 cout<

第87题:编写一段程序,从文件f1.txt中读入单词(每个单

词长度不超过40个字母,单词之间以空格相间隔),

在碰到单词\时结束,并将读入的单词个数

(不包括\)存放在count变量中。

答案:while (input >> word && strcmp(\ ++count; 第88题:分别输入一个整数、一个浮点数、一个字符、一个 字符串,将它们写入一个新建的文件中(用换行符

分隔),并将它们从该文件中读出并显示。

答案:ofstream

outfile(filename,ios::out); if(outfile.is_open()) {

cout<<\Error!\ return; }

outfile<

outfile.close();

ifstream infile(filename,ios::in);

if(infile.is_open()) { cout<<\Error!\ return; } infile>>i>>f>>ch>>string; cout<='a' && s[i]<='z') s[i]=s[i]-'a'+'A'; ---------------------- 第90题:编写函数int calLineNumber(char * filename), 功能是求文本文件内文本的行数(等于在记事本程序内看到的行数), 文本文件的名字由参数filename传入,假定一行的字符数不会超过100。 以下给出可能用到的函数的说明: 1. int ifstream::eof() 判别文件位置指针是否到达文件结尾 2. ifstream::getline(char *buffer, int count) 从文件最多读取count个字符存入buffer指向的内存区域, 如果遇到换行符,则读操作会提前结束。读入的内容尾部自动补上空字符。 答案:int calLineNumber(char * filename) { ifstream inFile(filename, ios::in | ios::nocreate); if(!inFile) { cerr<<\无法打开数据文件\。需要核查!\ return 0; } int lineCnt = 0; while(!inFile.eof()) { char str[100]; inFile.getline(str, 100); //cout<

for(j=i+1;j>ch; if(ch=='y'||ch=='Y'){ ifile.open(\ i=0; while(ifile.get(b[i])){//不可用>>,它不能读白字符, if(b[i]=='\\n') break; i++; } b[i]='\\0'; cout<>i;//由文件读入 cout<0)

{ n++; aver+=a[j]; } } aver/=n;

----------------------

第94题: 已知10个四位数输出所有对称数及个数 n

例如1221,2332都是对称数 答案:---------------------- int a,b,c,d; a=m[i]/1000; b=m[i]00/100; c=m[i]0/10; d=m[i]; if(a==d&&c==b) {cout<

----------------------

第95题:函数myStrLen(char *a)返回字符串a的长度。填写

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

答案: int i=0; while(str[i]) i++; return i;

第96题:编写函数IfDigitChar(ch),判断字符ch是否为数字字

符,是则返回1,否则返回0。

答案:int IfDigitChar(char ch) { if(ch>='0'&&ch<='9') return 1; else return 0; }

第97题:写一个函数char myfun(int score),

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

90分以上为\,80-89为\,70-79为\,

60-69为\,60分以下为\,并将等级返回。

答案: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'; } }

第98题: 有一个定义在自然数上的函数 f(x) 定义如下:

若 x <5 , 则 f(x) = x; 若 5<=x<15, 则 f(x) = x+6; 若 x>=15, 则 f(x) = x-6。

试编写该函数,输入x值,返回相应的f(x)值。 答案: if(x<5) return x;

if(5<=x && x <15) return x+6; return x-6;

第99题:某服装店经营套服,也单件出售。若买的不少于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<=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; return pay; }

第100题:请编写一加密函数,函数原型是 void encrypt(char * info) 该函数针对输入字符串的加密规律是:对字符串的

每个字母以该字母后面第4个字母加以替换。

例如,字母'A'后面第4个字母是'E',用'E'代替'A'。

因此,\应译为\, 注意:'V'后面的第4个字母是'A','X'后面的第4个字母是'B'。

'Y'后面的第4个字母是'C','Z'后面的第4个字母是'D'。

(小写字母与大写字母处理相类似)

答案:void encrypt(char *info) {

do{

if(*info<=86||(*info>=97&&*info<=118)) *info+=4; else *info-=22; info++; }while(*info); }

第101题:下面的函数countchar统计字符串s中非英文字母的

个数并返回。完成该函数的编写。 答案: int i = 0, cou=0; while(s[i]!='\\0') { if( !(s[i]>='A' && s[i]<='Z' || s[i]>='a' && s[i]<='z') ) cou++; i++; } 第102题:将数组S中所有小写字母改写成

精品文档,知识共享!

大写字母。

答案:----------------------

for (int i=0; i='a' && s[i]<='z')

s[i]=s[i]-'a'+'A'; ---------------------- 第103题:一个首项大于0的递增等差数列前四项和为26,前四项

积为880,请编写一个函数int 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 && a<5;++a) for(d=1;flag && d<5;++d) { b=a+(a+d)+(a+2*d)+(a+3*d); c=a*(a+d) *(a+2*d)*(a+3*d); if(b==26&&c==880) { return a+19*d; } } return -1; }

第104题:编写一个函数compose(),求解1、2、3、4四个数字

能组成多少个互不相同且无重复数字的三位数?

答案: int i,j,k,n=0; for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++) if (i!=k&&i!=j&&j!=k) n++; cout<<\能组成\个互不相同且无重复数字的三位数\ return n;

第105题:求数组中离平均数最近的那个数。函数int mid(int a[], int len); 计算数组a中所有数的平均值,并返回数组中离该平均值最近的那个数, 编写该函数。

答案: float m=0; int i; for (i=0;im?a[0]-m:m-a[0]; int num = a[0]; for (i=1;im?a[i]-m:m-a[i]; if (s

return num; 第106题: 利用顺序排序法将10个数按降序排列

答案:---------------------- for(i=0;i<9;i++) for(j= i+1;j<10;j++) if(n[i]

{k=n[j];n[j]=n[i];n[i]=k;} ---------------------- 第107题:从文件infile162.txt中连续读入10个以磅为单位 的重量值,将其转换为以千克为单位的值并求和,

将计算所的和sum输出到文件out162.txt中。

说明:一磅等于0.454千克。 答案:for(int i=0; i<10; i++) { ifile>>num; num = num * 0.454; sum = sum + num; }

第108题:抓交通肇事犯。 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都 没有记住车号,只记下车号中后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*c

----------------------

第109题:求3000以内的全部亲密数。 说明:如果正整数A的全部因子(包括1,不包括A本身)之和

等于B;且正整数B的全部因子(包括1,不包括B本身)

之和等于A,则将正整数A和B称为亲密数。

1不和其他数形成亲密数。 答案: int i,b; b=0; for(i=1;i<=a/2;i++) if(!(a%i)) b+=i; return b; 第110题:下图给出了至第5行杨辉三角形,请找出其规律,打印杨辉三角形至第30行。要求使用二维数组来保存,并利用给定的输出函数将其打印出来。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 答案:

----------------------

int i,j; //初始化时写好第1行,其余各行全0 for(i=1;i<30;i++) for(j=1;j< i + 1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];

---------------------- 第111题:下面的函数ave求三个数的平均值并返回,完成该 函数的编写。 答案://注意结果需要是浮点数,防止整除效果的发生: float m = (a+b+c)/3.0; return m;

第112题:从键盘输入任意20个小于10的正整数(包括0),存入2×10的 二维整型数组中,其中各行的元素构成一个整数。例如,

下图中第一行元素构成整数1234507,第二行元素构成整数

204689(最后的0不作为整数的一部分)。编写函数compare(a,b)

比较两行元素构成的整数大小: 若a>b,返回1;若a=b,返回0; 若a

则位数多者为大;如位数相同,再从最高位起逐个比较对应数 字,若每位均相等,则两数相等;若遇到第一个不相等的数字, 则数字大者为大。)

---------------------

| 1 | 2 | 3 | 4 | 5 | 0 | 7 | 0 | 0 | 0 |

| 2 | 0 | 4 | 6 | 8 | 9 | 0 | 0 | 0 | 0 |

--------------------- 答案:

int compare(int a[],int b[]) { int result=0; int i=0; if((a[0]>0&&a[9]>0)||(b[0]>0&&b[9]>0)) { for(i=0;i<10;i++) { if(a[i]>b[i]) { result=1;break; }else if(a[i]

精品文档,知识共享!

counter=counter*10; } counter=1;b_counter=0; for(i=0;i<10;i++) {

sum_b=sum_b+counter*b[9-i]; if(b[9-i]!=0) b_counter=1; if(b_counter)

counter=counter*10; } if(sum_a>sum_b) result=1; if(sum_a

return result;

}

----------------------

第113题:完成函数MulMatrices的编写,该函数实现矩阵乘法,

将矩阵a和b相乘,结果存入矩阵c中。

答案: for ( int i = 0; i < 3; i++ ) { for ( int j = 0; j < 3; j++ ) { for ( int k = 0; k < 3; k++ ) { c[i][j] += a[i][k] * b[k][j]; } } } 第114题:某服装店经营套服,也单件出售。若买的不少于50套,

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

件60元;单条裤子,每条45元。 现已知要买的上衣和裤子数,编写函数计算应付款。

函数原型是 int Payfor(int yifu,int kuzi),其

中:参数yifu表示衣服的数量,参数kuzi表示裤子的数 量。

答案:int Payfor(int yifu,int kuzi) { int tao=0; int pay=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; return pay; }

第115题:编写函数copy(sfile,dfile),以文本方式把一个文本文件(考生目录中的s.txt)的