共享天下三级C语言上机100题背诵版roud原创.docx
《共享天下三级C语言上机100题背诵版roud原创.docx》由会员分享,可在线阅读,更多相关《共享天下三级C语言上机100题背诵版roud原创.docx(23页珍藏版)》请在冰豆网上搜索。
共享天下三级C语言上机100题背诵版roud原创
全国计算机等级考试
三级C语言上机100题背诵版
原创roud(2008年4月)
为方便共享天下会员们在计算机等级考试三级C语言上机考试冲刺阶段背诵,根据2008年三级上机习题集(南开100题)书和光盘以及实际上机考试模拟的情况,特对100题进行重新编排修订,根据题型分类以便于会员们记忆。
光盘下载地址:
(
几点说明:
1、因为是背诵版固对部分题目的原题作了适当的精简,一般来说只包含与解题答案相关部分,而且不包含所有题目,若自己需要可自己补充完整(为方便修改,本文档没有设密码,转载请说明作者)。
2、每种题目,只提供一种模块化的解法,解法经典,希望多多揣摩,尽可能不涉及指针,这样的话容易理解,不易出错,适合初学者。
3、采用分类的方法方便记忆,题目标题号前用①、②显示题目的大类型,其后用数字标注,表明其在南开百题中的实际题号。
4、特别说明:
所有解法,本人均上机验证通过。
实际上机过程说明:
上机环境为VC6.0英文版,启动上机软件,输入准考证,确认信息,点击开始考试考试(倒记时),启动VC++软件,用Open打开prog.c文件(注意:
打开文件名prog.C时一定要注意看一下是不是在自己的考试目录下),补充完程序后,在工具栏上找到
,分别点击1,2,4按键,生成结果,即可交卷。
roud
共享天下考研论坛
一大类,数字题:
(抽中概率73%)
(1)数位分解
①数位统计排序(抽中概率13%,分别:
2、15、27、48、53、54、55、68、69、77、78、85、89)
南开2:
函数jsVal(),其功能是:
如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。
voidjsVal()
{inti,j,qw,bw,sw,gw,tmp;
for(i=0;i{qw=a[i]/1000;bw=a[i]%1000/10;sw=a[i]%100/10;gw=a[i]%10;
if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0)b[cnt++]=a[i];
}
for(i=0;ifor(j=i+1;jif(b[i]
}
南开15:
函数jsVal(),其功能是:
若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数字上的值小于等于个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中。
voidjsVal()
{inti,j,qw,bw,sw,gw,tmp;
for(i=0;i{qw=a[i]/1000;bw=a[i]%1000/100;sw=a[i]%100/10;gw=a[i]%10;
if((qw<=bw)&&(bw<=sw)&&(sw<=gw)&&(a[i]%2==0))b[cnt++]=a[i];
}
for(i=0;ifor(j=i+1;jif(b[i]>b[j]){tmp=b[i];b[i]=b[j];b[j]=tmp;}
}
②数位重组排序(抽中概率8%,分别:
28、29、51、52、59、72、76、86)
南开28:
函数jsVal(),其功能是:
把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。
voidjsVal()
{inti,j,qw,bw,sw,gw,ab,cd,tmp;
for(i=0;i{qw=a[i]/1000;bw=a[i]%1000/100;sw=a[i]%100/10;gw=a[i]%10;
ab=10*bw+sw;cd=10*gw+bw;
if((ab-cd)>=0&&(ab-cd)<=10&&ab%2&&cd%2&&bw!
=0&&gw!
=0)b[cnt++]=a[i];
}
for(i=0;ifor(j=i+1;jif(b[i]
}
(2)求和,平均值
①数位求和,平均值(抽中概率13%,分别:
67、40、49、65、80、81、82、87)
南开67:
函数countValue(),其功能是:
选出5000以下符合条件的自然数。
条件是:
千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。
计算并输出这些四位自然数的个数cnt以及这些数的和sum。
voidcountValue()
{inti,qw,bw,sw,gw;
for(i=1000;i<5000;i++)
{qw=i/1000;bw=i%1000/100;sw=i%100/10;gw=i%10;
if(qw+bw==sw+gw&&qw+bw==(gw-qw)*10){cnt++;sum+=i;}
}
}
南开40:
函数CalValue(),其功能要求:
1、求出这文件中共有多少个正整数totNum;2、求这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz。
voidCalValue(void)
{inti,qw,bw,sw,gw;
for(i=0;iif(xx[i]>0)
{totNum++;
qw=xx[i]/1000;bw=xx[i]%1000/100;sw=xx[i]%100/10;gw=xx[i]%10;
if((qw+bw+sw+gw)%2==0){totCnt++;totPjz+=xx[i];}
}
totPjz/=totCnt;
}
②数位求平均值(抽中概率5%,分别91、92、94、26、70)
南开91:
编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数)。
for(i=0,j=0,cnt1=0,cnt2=0;i{if(xx[i]%2)cnt1++;
elsecnt2++;
if(i%2==0)j+=xx[i];
}
pj=(float)j/(N/2);
南开92:
编制程序,从文件IN.DAT中读取200个整数至数组xx中,求出最大数max及最大数的个数cnt和数组xx中能被3整除或能被7整除的算术平均值pj(保留2位小数)。
max=xx[0];
for(i=1,k=0;i{if(xx[i]>max)max=xx[i];
if(xx[i]%3==0||xx[i]%7==0){j+=xx[i];k++;}
}
for(i=0,cnt=0;iif(xx[i]==max)cnt++;
pj=(float)(j*100/k)/100;
南开94:
编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx中值为偶数的算术平均值pj(保留2位小数)。
i=j=k=cnt1=cnt2=0;
pj=0.0;
for(i=0;i{if(xx[i]%2)cnt1++;
elsecnt2++;
if(i%2){k+=xx[i];j++;}
}
pj=(float)k/j;
南开26:
函数CalValue(),其功能要求:
1、求出这文件中共有多少个正整数totNum;2、求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz。
voidCalValue(void)
{inti,tmp;
for(i=0;iif(xx[i]>0)
{totNum++;
tmp=xx[i]>>1;
if(tmp%2==0){totCnt++;totPjz+=xx[i];}
}
totPjz/=totCnt;
}
(3)后三位排序(抽中概率2%,分别:
5、6)
南开5:
函数jsSort(),其函数的功能是:
要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。
voidjsSort()
{inti,j,tmp;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)
if(aa[i]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]for(i=0;i<10;i++)bb[i]=aa[i];
}
(4)结构体
①产品销售(抽中概率10%,分别:
7、12、13、31、32、38、42、47、61、99)
南开7:
函数SortDat(),其功能要求:
按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中。
voidSortDat()
{inti,j;
PROtmp;
for(i=0;i<99;i++)
for(j=i+1;j<100;j++)
if(strcmp(sell[i].dm,sell[j].dm)<0||strcmp(sell[i].dm,sell[j].dm)==0&&sell[i].je{tmp=sell[i];sell[i]=sell[j];sell[j]=tmp;}
}
②结构数组(抽中概率2%,分别:
60、75)
南开60:
函数jsSort(),其函数的功能是:
要求在200组数据中找出条件为每组中的第二个数大于第一个数加第三个数的之和,其中满足条件的组数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第二个数加第三个之和的大小进行降序排列(第二个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中。
intjsSort()
{inti,j,cnt=0;
datatmp;
for(i=0;i<200;i++)
if(aa[i].x2>aa[i].x1+aa[i].x3)bb[cnt++]=aa[i];
for(i=0;ifor(j=i+1;jif(bb[i].x2+bb[i].x3returncnt;
}
(5)相邻后5、前5(抽中概率4%,分别:
14、30、45、46)
南开14:
函数jsVal(),其功能是:
依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中。
voidjsVal()
{inti,j,tmp;
for(i=0;i{for(j=i+1;j<=i+5;j++)
if(a[i]>a[j]&&a[i]%2)tmp=1;
else{tmp=0;break;}
if(tmp==1){b[cnt]=a[i];cnt++;}
}
for(i=0;ifor(j=i+1;jif(b[i]>b[j]){tmp=b[i];b[i]=b[j];b[j]=tmp;}
}
(6)素数(抽中概率4%,分别:
1、34、64、66)
南开1:
函数jsValue(intm,intk,intxx[]),该函数的功能是:
将大于整数m且紧靠m的k个素数存入数组xx传回。
intisP(intm)
{inti;
for(i=2;iif(m%i==0)return0;
return1;
}
voidnum(intm,intk,intxx[])
{ints=0;
for(m=m+1;k>0;m++)
if(isP(m)){xx[s++]=m;k--;}
}
南开34:
程序的功能是:
选出100以上1000之内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。
计算并输出上述这些素数的个数cnt以及这些素数值的和sum。
intisP(intm)
{inti;
for(i=2;iif(m%i==0)return0;
return1;
}
voidcountValue()
{inti,j,bw,sw,gw;
for(i=100;i<1000;i++)
{bw=i/100;sw=i%100/10;gw=i%10;
if(isP(i)&&(gw+sw)%10==bw){cnt++;sum+=i;}
}
}
南开64:
函数countValue()的功能是:
找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt以及这些I之和sum。
intisP(intm)
{inti;
for(i=2;iif(m%i==0)return0;
return1;
}
voidcountValue()
{inti;
for(i=2;i<=90;i++)
if(isP(i)&&isP(i+4)&&isP(i+10)){cnt++;sum+=i;}
}
南开66:
函数countValue()的功能是:
计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数...的值sum。
intisP(intm)
{inti;
for(i=2;iif(m%i==0)return0;
return1;
}
voidcountValue()
{inti,j,k=1;
for(i=800;i>500;i--)
if(isP(i))
{cnt++;
sum=sum+k*i;
k=k*(-1);}
}
}
(7)方差(抽中概率3%,分别:
33、83、93、)
南开33:
函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
计算方差的公式如下:
,设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。
intReadDat(void)
{FILE*fp;
inti,j;
if((fp=fopen("IN.DAT","r"))==NULL)
return1;
/**************************************/
for(i=0;i<100;i++)
{for(j=0;j<10;j++)
fscanf(fp,"%d,",&xx[i*10+j]);
fscanf(fp,"\n");
if(feof(fp))
break;
}
/**************************************/
fclose(fp);
return0;
}
voidCompute(void)
{inti,yy[MAX];
for(i=0;ifor(i=0;iif(xx[i]%2==0){yy[even++]=xx[i];ave2+=xx[i];}
else{odd++;ave1+=xx[i];}
if(odd==0)ave1=0;
elseave1/=odd;
if(even==0)ave2=0;
elseave2/=even;
for(i=0;itotfc+=(yy[i]-ave2)*(yy[i]-ave2)/even;
}
(8)选票(抽中概率3%,分别:
39、58、84)
南开39:
函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。
现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推:
内容均为字符0和1,1表示此人被选中,0表示此人未被选中,全选或不选均为无效的选票。
voidCountRs(void)
{inti,j,count;
for(i=0;i<100;i++)
{count=0;
for(j=0;j<10;j++)
if(xx[i][j]=='1')count++;
if(count==0||count==10)continue;
for(j=0;j<10;j++)
if(xx[i][j]=='1')yy[j]++;
}
}
(9)特例
①递推(抽中概率2%,分别:
20、35)
南开20:
函数jsValue,它的功能是:
求Fibonacci数列中大于t的最小的一个数,结果由函数返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F
(1)=1;F(n)=F(n-1)+F(n-2)。
intjsValue(intt)
{intf0=0,f1=1,fn;
fn=f0+f1;
while(fn<=t)
{f0=f1;
f1=fn;
fn=f0+f1;
}
returnfn;
}
南开35:
某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1(注:
n-2与n-1为下标)
jsValue()函数的功能是:
要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:
Sn=M,这里Sn=A1+A2+...+An,并依次把n值存入数组单元b[0],b[1]和b[2]中。
voidjsValue()
{intA1=1,A2=1,n=1,An;
intsum0,sum;
sum0=A1+A2;
while
(1)
{An=A1+A2*2;
sum=sum0+An;
A1=A2;
A2=An;
n++;
if(sum0<100&&sum>=100)b[0]=n;
if(sum0<1000&&sum>=1000)b[1]=n;
if(sum0<10000&&sum>=10000){b[2]=n;break;}
sum0=sum;
}
}
②迭代(抽中概率1%,分别:
21)
南开21:
函数countValue()的功能是:
利用以下所示的简单迭代方法求方程:
cos(x)-x=0的一个实根。
Xn+1=cos(Xn)迭代步骤如下:
(1)取X1初值为0.0;
(2)X0=X1,把X1的值赋给X0;(3)X1=cos(X0),求出一个新的X1;(4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤
(2);(5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。
floatcountValue()
{floatX0,X1=0.0;
while
(1)
{X0=X1;
X1=(float)cos(X0);
if(fabs(X0-X1)<1e-6)break;
}
returnX1;
}
③整数小数(抽中概率1%,分别:
23)
南开23:
函数calvalue(),其功能要求:
1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec。
voidCalValue(void)
{inti;
doublex,sum=0;
for(i=0;i{sumint=sumint+(int)xx[i];/*用强制类型转换对当前数截尾取整并累加*/
x=xx[i]-(int)xx[i];/*取当前数的小数部分*/
sumdec=sumdec+x;/*累加小数部分*/
sum=sum+xx[i];/*累加原数*/
}
aver=sum/MAXNUM;/*计算原数的平均值*/
}
④回文数(抽中概率1%,分别:
25)
南开25:
函数intsvalue(longm)实现功能:
寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。
所谓回文数是指其各位数字左右对称的整数,如果是回文数,则函数返回1,反之则返回0。
intjsValue(longn)
{inti,strl,half;
charxy[20];
ltoa(n,xy,10);/*将长整型n转换为字符串存入数组xy中*/
strl=strlen(xy);
half=strl/2;
for(i=0;iif(xy[i]!
=xy[--strl])break;/*如果碰到某一对不相同就跳出循环*/
if(i>=half)return1;
elsereturn0;
}
⑤平方根(抽中概率1%,分别:
22)
南开22:
函数countValue(),它的功能是:
求n以内(不包括n)同时能被3与7整除的所