打印本文 打印本文  关闭窗口 关闭窗口  
三级C语言程序设计上机考试习题集(7180)
作者:佚名  文章来源:不详  点击数  更新时间:2007/12/21 18:07:13  文章录入:杜斌  责任编辑:杜斌

*****************************************************************************************
☆题目71(无忧id 6 字符串左右排序题)

函数readdat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jssort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writedat()把结果xx输出到文件out.dat中。
  条件:从字符串中间一分为二,左边部分按字符的ascii值降序排序,右边部分按字符的ascii值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。
  例如:位置   0 1 2 3 4 5 6 7 8
     源字符串 a  b  c  d  h  g  f  e
                   1  2  3  4  9  8  7  6  5
    则处理后字符串  d  c  b  a  e  f  g  h
                   4  3  2  1  9  5  6  7  8
  部分源程序存在文件prog1.c中。
  请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
char xx[20][80];
void jssort()
{int i,j,k,strl,half;
 char ch;
 for(i=0;i<20;i++)
  { strl=strlen(xx[i]);
    half=strl/2;
    for(j=0;j<half-1;j++)
     for(k=j+1;k<half;k++)
       if(xx[i][j]<xx[i][k]) { ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}
    if(strl%2) half++;
    for(j=half;j<strl-1;j++)
      for(k=j+1;k<strl;k++)
        if(xx[i][j]>xx[i][k]) {ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}
   }
}

void main()
{
 readdat();
 jssort();
 writedat();
}
readdat()
 {
  file *in;
  int i=0;
  char *p;
  in=fopen('in.dat','r');
  while(i<20&&fgets(xx[i],80,in)!=null){
    p=strchr(xx[i],'/n');
    if(p)*p=0;
    i++;
  }
  fclose(in);
 }
writedat()
{
 file *out;
 int i;
 clrscr();
 out=fopen('out.dat','w');
 for(i=0;i<20;i++){
   printf('%s/n',xx[i]);
   fprintf(out,'%s/n',xx[i]);
 }
 fclose(out);
}
*****************************************************************************************
★☆题目72(无忧id 136 整数各位打散组合运算题)

已知数据文件in.dat中存有200个四位数,并已调用读函数readdat()把这些数存入数组a中,请考生编制一函数jsval(),其功能是:把个位数字和千位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字,新十位数的个位数字是原四位数的十位数字),如果新组成的两个十位数均是偶数并且两个十位数中至少有一个数能被9整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writedat( )把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。
     注意:部分源程序存在文件prog1.c中。
     程序中已定义数组:a[200],b[200],已定义变量:cnt
     请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readdat()和写函数writedat()的内容。
#include <stdio.h>
#define max  200
int a[max], b[max], cnt = 0 ;
void jsval()
{int i,j,thou,hun,ten,data,ab,cd;
 for(i=0;i<200;i++)
  {thou=a[i]/1000;    hun=a[i]/100%10;
   ten=a[i]%100/10;  data=a[i]%10;
   ab=10*data+thou;  cd=10*hun+ten;
   if((ab%9==0||cd%9==0)&&ab%2==0&&cd%2==0&&hun!=0&&data!=0)
      {b[cnt]=a[i];cnt++;}
  }
  for(i=0;i<cnt-1;i++)
    for(j=i+1;j<cnt;j++)
      if(b[i]<b[j]) {data=b[i];b[i]=b[j];b[j]=data;}
}

void readdat()
{
  int i ;
  file *fp ;
  fp = fopen('in.dat', 'r') ;
  for(i = 0 ; i < max ; i++) fscanf(fp, '%d', &a[i]) ;
  fclose(fp) ;
}

void main()
{
  int i ;
  readdat() ;
  jsval() ;
  printf('满足条件的数=%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) printf('%d ', b[i]) ;
  printf('/n') ;
  writedat() ;
}

writedat()
{
  file *fp ;
  int i ;
  fp = fopen('out.dat', 'w') ;
  fprintf(fp, '%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, '%d/n', b[i]) ;
  fclose(fp) ;
}
*****************************************************************************************
★题目73(无忧id  26 字符替换题)

函数readdat()实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数converchard(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其它字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writedat()把结果xx输出到文件out4.dat中。
     例:原文:adb.bcdza
               abck.llhj
          结果:aca.bbcyz
                zabj.llgi
     原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
     部分源程序存在文件prog1.c中。
     请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>

char xx[50][80];
int maxline=0;/*文章的总行数*/
int readdat(void);
void writedat(void);
void convertchard(void)
{ int i,j;
  for(i=0;i<maxline;i++)
    { for(j=0;j<strlen(xx[i]);j++)
 if(xx[i][j]=='a') xx[i][j]='z';
        else if(xx[i][j]>='b'&&xx[i][j]<='z') xx[i][j]-=1;
    }
}

void main()
 {
 clrscr();
 if(readdat()){
  printf('数据文件in.dat不能打开!/n/007');
  return;
 }
 convertchard();
 writedat();
}

int readdat(void)
{
 file *fp;
 int i=0;
 char *p;
 if((fp=fopen('in.dat','r'))==null) return 1;
 while(fgets(xx[i],80,fp)!=null){
   p=strchr(xx[i],'/n');
   if(p)*p=0;
   i++;
}
maxline=i;
fclose(fp);
return 0;
}

void writedat(void)
{
 file *fp;
 int i;
 clrscr();
 fp=fopen('out4.dat','w');
 for(i=0;i<maxline;i++){
 printf('%s/n',xx[i]);
 fprintf(fp,'%s/n',xx[i]);
 }
 fclose(fp);
}

*****************************************************************************************
题目74(无忧id 70  字符ascii值移位替换题)

函数readdat()实现从文件in.dat中读取一篇英文文章存入到字符串数组xx中,请编制函数strcharjl(),其函数的功能是:以行为单位把字符串中的所有字符的ascii值左移4位,如果左移后,其字符的ascii值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ascii值再加上原字符ascii值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writedat()把结果xx输出到文件out7.dat中。
     原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
     部分源程序存在文件prog1.c中。
     请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>

char xx[50][80];
int maxline=0;/*文章的总行数*/
int readdat(void);
void writedat(void);
void strcharjl(void)
{ int i,j;
  char c;
  for(i=0;i<maxline;i++)
    for(j=0;j<strlen(xx[i]);j++)
      { c=xx[i][j]<<4;
        if(!(c<=32||c>100)) xx[i][j]+=c; 
      }
}

void main()
 {
 clrscr();
 if(readdat()){
  printf('数据文件in.dat不能打开!/n/007');
  return;
 }
 strcharjl();
 writedat();
}

int readdat(void)
{
 file *fp;
 int i=0;
 char *p;

 if((fp=fopen('in.dat','r'))==null) return 1;
 while(fgets(xx[i],80,fp)!=null){
   p=strchr(xx[i],'/n');
   if(p)*p=0;
   i++;
 }
maxline=i;
fclose(fp);
return 0;
}

void writedat(void)
{
 file *fp;
 int i;

 clrscr();
 fp=fopen('out7.dat','w');
 for(i=0;i<maxline;i++){
   printf('%s/n',xx[i]);
   fprintf(fp,'%s/n',xx[i]);
 }
 fclose(fp);
}

*****************************************************************************************
★☆题目75 (无忧id 10 整数各位数运算及排序题)

在文件in.dat中有200组数据,每组有3个数,每个数均是三位数。函数readdat()读取这200组数据存放到结构数组aa中,请编制函数jssort(),其函数的功能是:要求在200组数据中找出条件为每组中的第一个数大于第二个数加第三个数的和,其中满足条件的组数作为函数jssort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数据按照每组数据的第一个数加第三个之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中,最后调用函数writedat()把结果bb输出到
文件out.dat中。
     部分源程序存在文件prog1.c中。
  请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>

typedef struct{
 int x1,x2,x3;
}data;
data aa[200],bb[200];
int jssort()
{ int i,j,cnt=0;
  data xy;
  for(i=0;i<200;i++)
    if(aa[i].x1>(aa[i].x2+aa[i].x3)) bb[cnt++]=aa[i];
  for(i=0;i<cnt-1;i++)
    for(j=i+1;j<cnt;j++)
       if(bb[i].x1+bb[i].x3>bb[j].x1+bb[j].x3) { xy=bb[i]; bb[i]=bb[j]; bb[j]=xy;}
  return cnt;
}

void main()
{
 int count;
readdat();
 count=jssort(); /*返回满足条件的个数*/
 writedat(count);
}
readdat()
 {
  file *in;
  int i;
  in=fopen('in.dat','r');
  for(i=0; i<200; i++)
     fscanf(in,'%d %d %d',&aa[i].x1,&aa[i].x2,&aa[i].x3);
  fclose(in);
  }
writedat(int count)
{
 file *out;
 int i;
 clrscr();
 out=fopen('out.dat','w');
 for(i=0; i<count; i++){
   printf('%d,%d,%d 第一个数+第三个数=%d/n',bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3);
   fprintf(out,'%d %d %d/n',bb[i].x1,bb[i].x2,bb[i].x3);
 }
 fclose(out);
}

*****************************************************************************************
★☆题目76(无忧id 137 整数各位打散组合运算题)

已知数据文件in.dat中存有200个四位数,并已调用读函数readdat()把这些数存入数组a中,请考生编制一函数jsval(),其功能是:把个位数字和千位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字,新十位数的个位数字是原四位数的十位数字),如果新组成的两个十位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一个数能被17整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writedat()把结果cnt以及数组b中符合条件的四位数输出到
out.dat文件中。
     注意:部分源程序存在文件prog1.c中。
     程序中已定义数组:a[200],b[200],已定义变量:cnt
     请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readdat()和写函数writedat()的内容。
#include <stdio.h>
#define max  200
int a[max], b[max], cnt = 0 ;
void jsval()
{int i,j,thou,hun,ten,data,ab,cd;
 for(i=0;i<max;i++)
  {thou=a[i]/1000;   hun=a[i]/100%10;
   ten=a[i]%100/10;  data=a[i]%10;
   ab=10*data+thou;  cd=10*hun+ten;
   if((ab%2!=cd%2)&&((ab%17==0||cd%17==0)&&ab>=10&&cd>=10))
     b[cnt++]=a[i];
  }
 for(i=0;i<cnt-1;i++)
   for(j=i+1;j<cnt;j++)
     if(b[i]<b[j])  {data=b[i];b[i]=b[j];b[j]=data;}
}

void readdat()
{
  int i ;
  file *fp ;
  fp = fopen('in.dat', 'r') ;
  for(i = 0 ; i < max ; i++) fscanf(fp, '%d', &a[i]) ;
  fclose(fp) ;
}

void main()
{
  int i ;
  readdat() ;
  jsval() ;
  printf('满足条件的数=%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) printf('%d ', b[i]) ;
  printf('/n') ;
  writedat() ;
}

writedat()
{
  file *fp ;
  int i ;
  fp = fopen('out.dat', 'w') ;
  fprintf(fp, '%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, '%d/n', b[i]) ;
  fclose(fp) ;
}

*****************************************************************************************
题目77(无忧id 148 整数各位运算题)

已知数据文件in.dat中存有200个四位数,并已调用读函数readdat()把这些数存入数组a中,请考生编制一函数jsval(),其功能是:把一个四位数的千位数字上的值加上十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writedat( )把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。
     注意:部分源程序存在文件prog1.c中。
     程序中已定义数组:a[200],b[200],已定义变量:cnt
     请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readdat()和写函数writedat()的内容。
#include <stdio.h>
#define max  200
int a[max], b[max], cnt = 0 ;

void jsval()
{int i,j,thou,hun,ten,data,ab,cd;
 for(i=0;i<max;i++)
  {thou=a[i]/1000;   hun=a[i]/100%10;
   ten=a[i]%100/10;  data=a[i]%10;
   if((thou+ten==hun+data)&&a[i]%2==0) b[cnt++]=a[i];
  }
 for(i=0;i<cnt-1;i++)
   for(j=i+1;j<cnt;j++)
     if(b[i]>b[j])  {thou=b[i];b[i]=b[j];b[j]=thou;}
}

void readdat()
{
  int i ;
  file *fp ;
  fp = fopen('in.dat', 'r') ;
  for(i = 0 ; i < max ; i++) fscanf(fp, '%d', &a[i]) ;
  fclose(fp) ;
}

void main()
{
  int i ;
  readdat() ;
  jsval() ;
  printf('满足条件的数=%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) printf('%d ', b[i]) ;
  printf('/n') ;
  writedat() ;
}
writedat()
{
  file *fp ;
  int i ;
  fp = fopen('out.dat', 'w') ;
  fprintf(fp, '%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, '%d/n', b[i]) ;
  fclose(fp) ;
}
*****************************************************************************************
☆题目78(无忧id 149 整数各位统计排序题)

已知数据文件in.dat中存有200个四位数,并已调用读函数readdat()把这些数存入数组a中,请考生编制一函数jsval(),其功能是:若一个四位数的千位数字上的值大于等于百位数字上的值,百位数字上的值大于等于十位数字上的值,以及十位数字上的值大于等于个位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writedat()把结果cnt以及数组b中符合条件的数输出到out.dat文件中。
     注意:部分源程序存在文件prog1.c中。
     程序中已定义数组:a[200],b[200],已定义变量:cnt
     请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readdat()和写函数writedat()的内容。
#include <stdio.h>
#define max  200
int a[max], b[max], cnt = 0 ;

void jsval()
{int i,j,thou,hun,ten,data,ab,cd;
 for(i=0;i<max;i++)
  {thou=a[i]/1000;   hun=a[i]/100%10;
   ten=a[i]%100/10;  data=a[i]%10;
   if(thou>=hun&&hun>=ten&&ten>=data&&a[i]%2) b[cnt++]=a[i];
  }
 for(i=0;i<cnt-1;i++)
   for(j=i+1;j<cnt;j++)
     if(b[i]>b[j])  {thou=b[i];b[i]=b[j];b[j]=thou;}
}

void readdat()
{
  int i ;
  file *fp ;
  fp = fopen('in.dat', 'r') ;
  for(i = 0 ; i < max ; i++) fscanf(fp, '%d', &a[i]) ;
  fclose(fp) ;
}

void main()
{
  int i ;
  readdat() ;
  jsval() ;
  printf('满足条件的数=%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) printf('%d ', b[i]) ;
  printf('/n') ;
  writedat() ;
}

writedat()
{
  file *fp ;
  int i ;
  fp = fopen('out.dat', 'w') ;
  fprintf(fp, '%d/n', cnt) ;
  for(i = 0 ; i < cnt ; i++) fprintf(fp, '%d/n', b[i]) ;
  fclose(fp) ;
}

*****************************************************************************************
★☆题目79(无忧id 55 数字运算题)

请编写函数void countvalue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。
     部分源程序存在文件prog1.c中。
     请勿改动主函数main()和输出数据函数writedat()的内容。
#include <conio.h>
#include <stdio.h>

void countvalue(int *a,int *n)
{ int i;
  *n=0;
  for(i=1;i<=1000;i++)
    if(i%7==0&&i%11||i%7&&i%11==0)
      a[(*n)++]=i;
}

main()
{
 int aa[1000],n,k;
clrscr();
 countvalue(aa,&n);
 for(k=0;k<n;k++)
   if((k+1)%10==0)printf('/n');
   else printf('%5d',aa[k]);
 writedat();
}
writedat()
{
 int aa[1000],n,k;
 file *fp;
 fp=fopen('out19.dat','w');
 countvalue(aa,&n);
  for(k=0;k<n;k++)
   if((k+1)%10==0) fprintf(fp,'/n');
   else fprintf(fp,'%5d',aa[k]);
fprintf(fp,'/n');
 fclose(fp);
}

*****************************************************************************************
☆题目80(无忧id 62 整数各位数运算题)

已知数据文件in.dat中存有300个四位数,并已调用读函数readdat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writedat()把结果输出到out.dat文件。
     例如:1239,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
           8129,9-8-1-2<0,则该数不满足条件计算平均值pjz2。
     部分源程序存在文件prog1.c中。
     程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2
     请勿改动主函数main()、读函数readdat()和写函数writedat()的内容。
#include <stdio.h>
int a[300],cnt=0;
double pjz1=0.0,pjz2=0.0;
jsvalue()
{int i,j,thou,hun,ten,data,n=0;
 for(i=0;i<300;i++)
  {thou=a[i]/1000;   hun=a[i]/100%10;
   ten=a[i]%100/10;  data=a[i]%10;
   if(data-thou-hun-ten>0) { cnt++; pjz1+=a[i];}
   else { n++; pjz2+=a[i];}
  }
 if(cnt==0) pjz1=0;
 else pjz1/=cnt;
 if(n==0) pjz2=0;
 else pjz2/=n;
}

main()
{
 int i;
 readdat();
 jsvalue();
 writedat();
 printf('cnt=%d/n满足条件的平均值pzj1=%7.2f/n不满足条件的平均值pzj2=%7.2f/n',cnt,pjz1,pjz2);
}
 readdat()
{
 file *fp;
 int i;
 fp=fopen('in.dat','r');
 for(i=0;i<300;i++)fscanf(fp,'%d,',&a[i]);
 fclose(fp);
}
writedat()
{
 file *fp;
 int i;
 fp=fopen('out.dat','w');
 fprintf(fp,'%d/n%7.2f/n%7.2f/n',cnt,pjz1,pjz2);
 fclose(fp);
}
*****************************************************************************************

打印本文 打印本文  关闭窗口 关闭窗口