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 ---------------------- 第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 ---------------------- 第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 { 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 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;i 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)的