计算机三级C语言上机题型
添加时间: 2007-5-9 2:28:22 作者: 计算机等级考试认证参考 阅读次数:131 来源: http://www.d9soft.com
一.字符替换
1.函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。
替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。
部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80个字符。
void encryptChar()
{
int i;
char *pf;
for(i=0;i { pf=xx[i];
while(*pf!=0)
{ if(*pf==*pf/2*2*pf*11%6<32)
{pf++;continue;}
*pf=*pf*11%6;
pf++;
}
}
}
void encryptChar()
{
int i,j,t;
for(i=0;i {
for(j=0;j {
t=xx[i][j]*11%6;
if(t<=32 xx[i][j]%2==0) continue;
xx[i][j]=t;
}
}
}
2. 下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char *s)实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
void chg(char *s)
{
int i,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;
}
}
3、函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请
编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个
字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,
得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原
第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应
的位置上。
void ShA(void)
{
int i,j;
char t1;
for(i=0;i{t1=xx[i][0];
for(j=0;xx[i][j+1]!='';j++)
xx[i][j]=xx[i][j]+xx[i][j+1];
xx[i][j+1]=xx[i][j+1]+t1;
}
}
void ShA(void)
{
int i,j;
char ch;
for(i=0;i{
ch=xx[i][0];
for(j=0;j xx[i][j]+=xx[i][j+1];
xx[i][strlen(xx[i])-1]+=ch;
}
}
#p# 二、字符串左右排序和比较。
1. 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
void jsSort()
{
int i,j,k,strl;
char temp;
for(i=0;i<20;i++)
{
strl=strlen(xx[i]);
for(k=1;k for(j=k+2;j if(xx[i][k]>xx[i][j])
{
temp=xx[i][k];
xx[i][k]=xx[i][j];
xx[i][j]=temp;
}
}
}
2、函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请
编制函数SORTCHARA(),其函数功能是:以行为单位对字符按从小到大的顺序进行排序,排
序后的结果仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文
件OUT.DATK .
void sortcharA(void)
{
int i,j,k,strl;
char ch;
for(i=0;i { strl=strlen(xx[i]);
for(j=0;j for(k=j+1;k if(xx[i][j]>xx[i][k])
{ ch=xx[i][k];
xx[i][k]=xx[i][j];
xx[i][j]=ch;
}
}
}
3、下列程序的功能是:把S字符串中的所有字符左移一个位置,串中的第一个字符移到最
后.请编写函数CHG(CHAR *S)实现程序要求,最后调用函数READWRITEDAT()把结果输出到
OUT.DAT文件中.
void chg(char *s)
{
int i=strlen(s);
char c=*s;
strcpy(s,s+1);
*(s+i-1)=c;
*(s+i)='';
}
4.题 函数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)
位置 0 1 2 3 4 5 6 7
调用前str=A B C D E F G H
调用后str=A D C F E H G B
Loop(int s,int m,int n,char str[])
{ int cuur,last,i=0;
char ch;
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(int s,int m,int n,char str[])
{
int kk=s;
char ch=str[s];
while((kk+m)%n!=s)
{
str[kk]=str[(kk+m)%n];
kk=(kk+m)%n;
}
str[kk]=ch;
}
5.请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中. 条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,右边部分按字符的ASCII值降序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。
void jsSort()
{
int i,j,k,strl;
char ch;
for(i=0;i<20;i++)
{
strl=strlen(xx[i]);
for(j=0;j for(k=j+1;k if(xx[i][j]>xx[i][k])
{
ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
for(j=(strl+1)/2;j for(k=j+1;k if(xx[i][j] {
ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
}
}
#p# 三、字符串(单词)的倒置和删除。
1. 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中.
例如:原文:You He Me
I am a student.
结果:Me He You
student a am I
void Str0L(void)
{
int i,k;
char *p1,*p2;
char t[80],t1[80];
for(i=0;i { p2=p1=strchr(xx[i],'')-'';
t[0]=t1[0]='';
k=1;
while(k)
{
while(isalpha(*p1)==0&&p1!=xx[i]) {p1--;p2=p1;}
while(isalpha(*p1)&&p1>=xx[i]) p1--;
memcpy(t1,p1+1,p2-p1);
t1[p2-p1]=0;
strcat(t,t1);
strcat(t," ");
if(p1 }
strcpy(xx[i],t);
}
}
2.以行为单位把字符串中的所有小写字母O左边的字符串
内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串
的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中.
void StrOR(void)
{
int i;
char *p1,*p2,t[80];
for(i=0;i { t[0]='';
p2=xx[i];
while(*p2)
{ if(*p2=='o') p1=p2;
p2++;
}
strcat(t,p1+1);
*p1='';
strcat(t,xx[i]);
p1=xx[i];
p2=t;
while(*p2)
{ if(*p2!='o') *p1++=*p2;
p2++;
}
*p1='';
}
}
#p# 四、正整数排序求平均值(包括将数拆散、求最大最小值)。
1.在文件中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。
例:处理前 6012 5099 9012 7025 8088
处理后 9012 6012 7025 8088 5099
void jsSort()
{
int i,j,data;
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)
{ if(aa[i]00>aa[j]00)
{ data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
else
if(aa[i]00==aa[j]00)
if(aa[i] { data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
}
for(i=0;i<10;i++)
bb[i]=aa[i];
}
void jsSort()
{
int i,j;
int t;
for(i=0;i<200;i++)
for(j=i+1;j<200;j++)
if(aa[i]00>aa[j]00)
{
t=aa[i];
aa[i]=aa[j];
aa[j]=t;
}
else
if(aa[i]00==aa[j]00)
if (aa[i] {
t=aa[i];
aa[i]=aa[j];
aa[j]=t;
}
for(i=0;i<10;i++)
{
bb[i]=aa[i];
}
}
2.已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数把结果输出到OUT.DAT文件。
例如:6712,6+2=7+1,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+9<>1+2,则该数不满足条件计算平均值pjz2.
jsvalue()
{
int i,g,s,b,q,k=0;
for(i=0;i<300;i++)
{ g=a[i];
s=a[i]0/10;
b=a[i]/100;
q=a[i]/1000;
if((q+g)==(s+b)) {cnt++;pjz1+=a[i];}
else {k++;pjz2+=a[i];}
}
pjz1/=cnt;
pjz2/=k;
}
3.已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到OUT.DAT文件。
jsvalue()
{
int i,j,temp;
for(i=0;i<300;i++)
if(isP(a[i])) b[cnt++]=a[i];
for(i=1;i { temp=b[i];
j=i-1;
while(j>=0&&temp b[j+1]=b[j--];
b[j+1]=temp;
}
}
上一篇文章: 谈二级C语言笔试应试技巧 下一篇文章: 三级的四个类别看看你适合哪个
相关文章:

