第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-data0)cout\n数据:p-data序号:i;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;in;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;in;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;i100;i++)if(i%3==0&&i%10==6){a[count++]=i;couti;}第8题(10.0分)题号:647题目:下面程序中的函数voidins(inta[],intlen,intn);将n插入到一个包含len个从小到大排好序的整数数组a中,插入后保证数组的有序性。完成该函数的编写。例如:a)调用ins(a,0,3)后,数组a中为3b)调用ins(a,1,2)后,数组a中为2,3c)调用ins(a,2,6)后,数组a中为2,3,6答案:inti;for(i=len;i0;i--){if(i0&&a[i-1]n)a[i]=a[i-1];elsebreak;}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中,且AB。答案:for(intn=1;n400;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;i10;i++)for(j=0;j10;j++)for(k=1;k10;k++){if(i!=j&&j!=k&&i!=k){outputkji;count++;if(count==60){count=0;outputendl;}elseoutput;}}第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;n10000;n++){a=n/100;b=n%100;if((a+b)*(a+b)==n){coutn'';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(inf1m&&inf2n)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;i6;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;in;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){coutm''f''c''endl;output(m);output(f);output(c);num++;}}第17题(10.0分)题号:263题目:已知n,计算n以内的所有素数之和sum。提醒:在写程序时,可自己输入n。但是最终提交时,请从给定的文件读入n,即不要修改不允许修改的代码。答案:for(outerindex=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(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;i10;i++){if(a[i]max)max=a[i];if(a[i]min)min=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题目:从文件infile161.txt中读入20个整数,将其中为奇数的整数输出到显示器和文件out161.txt中,每个奇数占一行。答案:if(num%2){coutnumendl;第23题(10.0分)题号:594题目:利用冒泡法将200个数按降序排列答案:for(i=0;i200;i++){for(j=0;j200;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*