三级上机考试试题分类解答.docx
《三级上机考试试题分类解答.docx》由会员分享,可在线阅读,更多相关《三级上机考试试题分类解答.docx(42页珍藏版)》请在冰豆网上搜索。
三级上机考试试题分类解答
目录
替换字符题---------------------------------------------------------------------第1页
字符串左右排序和比较-------------------------------------------------------------第2页
正整数排序求平均值----------------------------------------------------------------第5页
产品五个因素的比较排列----------------------------------------------------------第8页
素数-------------------------------------------------------------------------------第9页
数字排序--------------------------------------------------------------------------第10页
数学计算--------------------------------------------------------------------------第10页
数字或字符移位------------------------------------------------------------第14页
字符串(单词)的倒置和删除---------------------------------------------------第15页
选票问题--------------------------------------------------------------------------第16页
出圈问题--------------------------------------------------------------------------第17页
进制转换--------------------------------------------------------------------------第18页
泰山学院信息科学技术学院
雪夜寒鹰整理制作
(版权所有,转载请注明出处)
替换字符题
1.函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。
替代关系:
f(p)=p*11mod256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。
部分源程序已给出,原始数据文件存放的格式是:
每行的宽度均小于80个字符。
voidencryptChar()
{
inti,j,t;
for(i=0;i{
for(j=0;j{
t=xx[i][j]*11%256;
if(t<=32||xx[i][j]%2==0)continue;
xx[i][j]=t;
}
}
}
黑体部分可变条件
判断条件语句
如果原字符是小写字母或计算后f(p)值小于等于32
if(t<=32||xx[i][j]>='a'&&xx[i][j]<='z')
如果原字符是大写字母或计算后f(p)值小于等于32
if(t<=32||xx[i][j]>='A'&&xx[i][j]<='Z')
如果计算后f(p)值小于等于32或f(p)对应的字符是数字0至9
if(t<=32||t>='0'&&t<='9')
如果原字符是数字字符0至9或计算后f(p)值小于等于32
if(t<=32||xx[i][j]>='0'&&xx[i][j]<='9')
如果计算后f(p)值小于等于32或f(p)对应的字符是大写字母
if(t<=32||t>='A'&&t<='Z')
如果计算后f(p)值小于等于32或f(p)对应的字符是小写字母
if(t<=32||t>='a'&&t<='z')
如果计算后f(p)值小于等于32或其ASCII值是偶数
if(t<=32||t%2==0)
如果计算后f(p)值小于等于32或其ASCII值是奇数
if(t<=32||t%2==1)
如果计算后f(p)值小于等于32或大于130,则该字符不变
if(t<=32||t>130)
2.函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数ConverCharD(),其函数的功能是:
以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。
大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。
最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT4.DAT中。
例:
原文:
Adb.Bcdza
abck.LLhj
结果:
Aca.Bbcyz
zabj.LLgi
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格。
***
voidconvertchard(void)
{
char*p;
inti;
for(i=0;i{p=xx[i];
while(*p++)
if(islower(*(p-1)))*(p-1)=(*(p-1)-'a'+26-1)%26+'a';
}
}
3.函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请
编制函数CONVERTCHARA(),其函数功能是:
以行为单位把字符串中的所有小写字母改写成
该字母的下一个字母,如果是字母Z,则改写成字母A.大写字母仍为大写字母,小写字母仍
为小写字母,其他字符不变.把已处理的字符串仍按行重新存入字符串数组XX中,最后调用
函数WRITEDAT()把结果XX输出到文件OUT.DAT中.
例:
原文:
Adb.Bcdza
abck.LLhj
结果:
Aec.Bdeab
bcdl.LLik
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格.
***
voidconvertcharA(void)
{
char*p;
inti;
for(i=0;i{p=xx[i];
while(*p)
{if(*p=='z')*p='a';
elseif(*p>='a'&&*p<'z')*p=*p+1;
p++;
}
}
}
4.下列程序的功能是:
把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。
要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。
请编写函数chg(char*s)实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:
s字符串中原有的内容为:
Mn.123Zxy,则调用该函数后,结果为No.123Ayz。
voidchg(char*s)
{
inti,j,k;
k=strlen(s);
for(i=0;i{if(s[i]=='z'//s[i]=='Z')
s[i]-=25;
else
if(isalpha(s[i]))
s[i]+=1;
}
}
5函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请
编制函数CHA(),其函数功能是:
以行为单位把字符串中的第一个字符的ASCII值加第二个
字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,
得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原
第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应
的位置上。
最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数W
RITEDAT()把结果XX输出到文件OUT9.DAT中.
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格.
voidShA(void)
{
inti,j;
chart1;
for(i=0;i{t1=xx[i][0];
for(j=0;xx[i][j+1]!
='\0';j++)
xx[i][j]=xx[i][j]+xx[i][j+1];
xx[i][j+1]=xx[i][j+1]+t1;
}
}
答案二:
voidShA(void)
{
inti,j;
charch;
for(i=0;i{
ch=xx[i][0];
for(j=0;jxx[i][j]+=xx[i][j+1];
xx[i][strlen(xx[i])-1]+=ch;
}
}
字符串左右排序和比较
6.函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。
请编制函数jsSort(),其函数的功能是:
以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
条件:
从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。
如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。
例如:
位置 0 1 2 3 4 5 6 7 8
源字符串 dcbahgfe
432198765
则处理后字符串hgfeabcd
876591234
voidjsSort()
{
inti,strl,half,j,k;
charch;
for(i=0;i<20;i++)
{strl=strlen(xx[i]);
half=strl/2;
for(j=0;jfor(k=j+1;kif(xx[i][j]>xx[i][k])
{ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
for(j=half-1,k=strl-1;j>=0;j--,k--)
{ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
}
}
7.函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。
请编制函数jsSort(),其函数的功能是:
以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
条件:
从字符串中间一分为二,右边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。
如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。
例如:
位置 0 1 2 3 4 5 6 7 8
源字符串 hgfeabcd
876591234
则处理后字符串dcbahgfe
432198765
voidjsSort()
{
inti,j,k,strl;
charch;
for(i=0;i<20;i++)
{
strl=strlen(xx[i]);
for(j=(strl+1)/2;jfor(k=j+1;kif(xx[i][j]{
ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
for(j=0;j{
ch=xx[i][j];
xx[i][j]=xx[i][(strl+1)/2+j];
xx[i][(strl+1)/2+j]=ch;
}
}
8.函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。
请编制函数jsSort(),其函数的功能是:
以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
条件:
从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。
如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。
例如:
位置 0 1 2 3 4 5 6 7 8
源字符串 abcdhgfe
123498765
则处理后字符串dcbaefgh
432195678
voidjsSort()
{
inti,strl,half,j,k,p;
charch;
for(i=0;i<20;i++)
{strl=strlen(xx[i]);
half=strl/2;
for(j=0;jfor(k=j+1;kif(xx[i][j]{ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
if(strl%2)half++;
for(j=half;j{p=j;
for(k=j;kif(xx[i][k]p=k;
ch=xx[i][j];xx[i][j]=xx[i][p];xx[i][p]=ch;
}
}
--------------------------------------------------------------------------
9.函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。
请编制函数jsSort(),其函数的功能是:
以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
例如:
位置 0 1 2 3 4 5 6 7
源字符串 hgfedcba
则处理后字符串hafcdebg
该题亦是采用冒泡法
voidjsSort()
{
inti,j,k,strl;
chartemp;
for(i=0;i<20;i++)
{
strl=strlen(xx[i]);
for(k=1;kfor(j=k+2;jif(xx[i][k]>xx[i][j])
{
temp=xx[i][k];
xx[i][k]=xx[i][j];
xx[i][j]=temp;
}
}
}
10.求出ss字符串中指定字符c的个数,并返回此值。
请编写函数intnum(*charss,charc)实现程序要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
(注:
大小写字母有区别)
例如,若输入字符串ss=\123412132\,c='1',则输出3。
intnum(char*ss,charc)
{
inti,k=0;
for(i=0;i if(ss[i]==c)
k++;
returnk;
}
11.函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharD(),其函数的功能是:
以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT2.DAT中。
例:
原文:
dAe,BfC.
CCbbAA
结果:
fedCBA.
bbCCAA
原始数据文件存放的格式是:
每行的宽度均小于80个字符,含标点符号和空格。
voidsortchard(void)
{
inti,j,k,strl;
charch;
for(i=0;i{strl=strlen(xx[i]);
for(j=0;jfor(k=0;kif(xx[i][k]{ch=xx[i][k];
xx[i][k]=xx[i][k+1];
xx[i][k+1]=ch;
}
}
}
12.下列程序的功能是:
把S字符串中的所有字符左移一个位置,串中的第一个字符移到最
后.请编写函数CHG(CHAR*S)实现程序要求,最后调用函数READWRITEDAT()把结果输出到
OUT.DAT文件中.
例如:
S字符串中原有内容为:
MN.123XYZ,则调用函数后,结果为:
N.123XYZM.
***
voidchg(char*s)
{
inti=strlen(s);
charc=*s;
strcpy(s,s+1);
*(s+i-1)=c;
*(s+i)='\0';
}
13.下列程序的功能是:
统计在TT字符串中'A'到'Z'26个字母各自现的次数,并存入
PP数组.请编写函数CNT(CHAR*TT,INTPP[])实现程序的要求,最后调用函数READWRITED
AT()把结果输出到文件OUT.DAT中.(仅统计小写字母.)
***
voidcnt(char*tt,intpp[])
{
inti;
for(i=0;i<26;i++)
pp[i]=0;
while(*tt)
{if(*tt>='a'&&*tt<='z')
pp[*tt-'a']++;
tt++;
}
}
14.函数loop(s,m,n,str)对长为n的字符串str,从第s个字符开始的间隔为m的部分字符进行循环左移,即str[s]←str[s+m]←...←str[s+km]←...←str[s](k为正整数)且当字符位置s+k*m大于等于n时,要求用s+k*m-n作新的字符位置。
要求编写此函数实现其功能,最后调用函数WriteDat()把结果输出到文件out.dat中。
例:
loop(1,2,8,str)
位置01234567
调用前str=ABCDEFGH
调用后str=ADCFEHGB
ViodLoop(ints,intm,intn,charstr[])
{intcuur,last,i=0;
charch;
last=s;
ch=str[s];
while(++i)
{cuur=last;
last=(s+i*m)%n;
if(last>=s&&s+i*m>n)break;
str[cuur]=str[last];
}
str[cuur]=ch;
}
loop(ints,intm,intn,charstr[])
{
intkk=s;
charch=str[s];
while((kk+m)%n!
=s)
{
str[kk]=str[(kk+m)%n];
kk=(kk+m)%n;
}
str[kk]=ch;
}
正整数排序求平均值
(包括将数拆散、求最大最小值)
15.在文件中有200个正整数,且每个数均在1000至9999之间。
函数ReadDat()读取这200个数存放到数组aa中。
请编制函数jsSort(),其函数的功能是:
要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行降序排列。
最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:
处理前60125099901270258088
处理后90126012702580885099
voidjsSort()
{
inti,j;
intt;
for(i=0;i<200;i++)
for(j=i+1;j<200;j++)
if(aa[i]%1000>aa[j]%1000)
{
t=aa[i];
aa[i]=aa[j];
aa[j]=t;
}
else
if(aa[i]%1000==aa[j]%1000)
if(aa[i]{
t=aa[i];
aa[i]=aa[j];
aa[j]=t;
}
for(i=0;i<10;i++)
{
bb[i]=aa[i];
}
}
16.已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:
求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数把结果输出到OUT.DAT文件。
该题的关键在于会不会取出一个数的个、十、百、千位上的数。
a[i]%10对10求余结果为个位数,a[i]%100/10先对100求余得出后两位数然后再除10,由于为整数因此得出上一个后两位数的第一位。
依此类推。
jsvalue()
{
inti,g,s,b,q,k=0;
for(i=0;i<300;i++)
{g=a[i]%10;
s=a[i]%100/10;
b=a[i]/100%10;
q=a[i]/1000;
if((q+g)==(s+b)){cnt++;pjz1+=a[i];}
else{k++;pjz2+=a[i];}
}
pjz1/=cnt;
pjz2/=k;
}
17.已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:
求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到OUT.DAT文件。
例如:
5591是素数,则该数满足条件存入数组b中