| 网站首页 | 考研信息中心 | 考研资料下载 | 考研论坛 | 考研专业试题 | 2008考研招生简章 | 考研图书 | 留言板 | 考研图片中心 | 

设为首页
加入收藏
联系我们

您现在的位置: 考研信息网 >> 考研信息中心 >> 计算机类考试首页 >> Linux认证考试 >> 最新资讯 >> 正文 用户登录 新用户注册
全国计算机等级考试三级C语言上机题(11-20)          【字体:
全国计算机等级考试三级C语言上机题(11-20)
作者:佚名    文章来源:本站原创    点击数:    更新时间:2006-4-6

本站推荐Firefox浏览器,有效阻止病毒和垃圾弹出[正版免费下载]

题目11 程序prog1.c的功能是:把 s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。

请考生编写函数chg(char *s)实现程序要求,最后调用函数readwriteDAT( )把结果输出到文件bc1.out中。

例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz

注意:部分源程序存在文件prog1.c文件中。

请勿改动主函数main( )和输出数据函数readwriteDAT()的内容。
#include
#include
#include
#include
#define N 81
void readwriteDAT();

void chg(char *s)
{int I;
for(I=0;I<STRLEN(S);I++)
 if(s[i]=='z'||s[i]=='Z') s[i]-=25;
 else if(s[i]>='a'&&s[i]<='y'||s[i] >='A'&&s[i]<='Y') s[i]+=1;
 }

main( )
{
 char a[N];
 clrscr();
 printf("Enter a string : "); gets(a);
 printf("The original string is : "); puts(a);
 chg(a);
 printf("The string after modified : ");
 puts (a);
 readwriteDAT() ;
}

void readwriteDAT()
{
 int i ;
 char a[N] ;
 FILE *rf, *wf ;

 rf = fopen("bc1.in", "r") ;
 wf = fopen("bc1.out", "w") ;
 for(i = 0 ; i < 50 ; i++) {
 fscanf(rf, "%s", a) ;
 chg(a) ;
 fprintf(wf, "%s\n", a) ;
 }
 fclose(rf) ;
 fclose(wf) ;
}

*****************************************************************************
★☆
题目12

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4),产品名称mc(字符型10),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:

按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5.DAT中。

部分源程序存在文件prog1.c中。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include
#include
#include
#include
#include

#define MAX 100
typedef struct{
 char dm[5]; /*
产品代码*/
 char mc[11]; /*
产品名称*/
 int dj; /*
单价*/
 int sl; /*
数量*/
 long je; /*
金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();

void SortDat()
{int i,j;
 PRO xy;
 for(i=0;i<99;i++)
 for(j=i+1;j<100;j++)
 if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je)
 {xy=sell[i];sell[i]=sell[j];sell[j]=xy;}
}

void main()
 {
 memset(sell,0,sizeof(sell));
 ReadDat();
 SortDat();
 WriteDat();
 }

void ReadDat()
{
 FILE *fp;
 char str[80],ch[11];
 int i;

 fp=fopen("IN.DAT","r");
 for(i=0;i<100;i++){
 fgets(str,80,fp);
 memcpy(sell[i].dm,str,4);
 memcpy(sell[i].mc,str+4,10);
 memcpy(ch,str+14,4);ch[4]=0;
 sell[i].dj=atoi(ch);
 memcpy(ch,str+18,5);ch[5]=0;
 sell[i].sl=atoi(ch);
 sell[i].je=(long)sell[i].dj*sell[i].sl;
 }
 fclose(fp);
}

void WriteDat()
{
 FILE *fp;
 int i;

 fp=fopen("OUT5.DAT","w");
 for(i=0;i<100;i++){
 printf("%s %s %4d %5d %5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
 fprintf(fp,"%s %s %4d %5d %5d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
 }
 fclose(fp);
}

**************************************************************************

题目13

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4),产品名称mc(字符型10),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能

要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT9.DAT中。

部分源程序存在文件prog1.c中。

  请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include
#include
#include
#include
#include

#define MAX 100
typedef struct{
 char dm[5]; /*
产品代码*/
 char mc[11]; /*
产品名称*/
 int dj; /*
单价*/
 int sl; /*
数量*/
 long je; /*
金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();

void SortDat()
{int i,j;
 PRO xy;
 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<SELL[J].JE)
 {xy=sell[i];sell[i]=sell[j];sell[j]=xy;}
}

void main()
 {
 memset(sell,0,sizeof(sell));
 ReadDat();
 SortDat();
 WriteDat();
 }

void ReadDat()
{
 FILE *fp;
 char str[80],ch[11];
 int i;

 fp=fopen("IN.DAT","r");
 for(i=0;i<100;i++){
 fgets(str,80,fp);
 memcpy(sell[i].dm,str,4);
 memcpy(sell[i].mc,str+4,10);
 memcpy(ch,str+14,4);ch[4]=0;
 sell[i].dj=atoi(ch);
 memcpy(ch,str+18,5);ch[5]=0;
 sell[i].sl=atoi(ch);
 sell[i].je=(long)sell[i].dj*sell[i].sl;
 }
 fclose(fp);
}

void WriteDat()
{
 FILE *fp;
 int i;

 fp=fopen("OUT9.DAT","w");
 for(i=0;i<100;i++){
 printf("%s %s %4d %5d %5d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
 fprintf(fp,"%s %s %4d %5d %5d\n", sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
 }
 fclose(fp);
}

**************************************************************************
★ ☆
题目14

已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。

注意:部分源程序存在文件prog1.c中。

程序中已定义数组:a[200]b[200],已定义变量:cnt

请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#include
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;

void jsVal()
{int i,j,flag;
 for(i=0;i<MAX-5;I++)
 {for(j=i+1;j<=i+5;j++)
 if(a[i]>a[j]&&a[i]%2) flag=1;
 else {flag=0;break;}
 if(flag==1) b[cnt++]=a[i];
 }
 for(i=0;i<CNT-1;I++)
 for(j=i+1;j<CNT;J++)
 if(b[i]>b[j]) {flag=b[i];b[i]=b[j];b[j]=flag;}
}

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) ;
}



*********************************************************************
★
题目15

已知数据文件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
#define MAX 200
int a[MAX], b[MAX], cnt=0;

void jsVal()
{int i,j;
 int qw,bw,sw,gw;
 for (i=0;i<MAX;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;i<CNT-1;I++)
 for(j=i+1;j<CNT;J++)
 if (b[i]>b[j]) {qw=b[i];b[i]=b[j];b[j]=qw;}
}

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) ;
}

***************************************************************************
★☆
题目16

函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrCharJR(),其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8.DAT中。

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

部分源程序存在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
#include
#include
#include

char xx[50][80];
int maxline=0;/*
文章的总行数*/

int ReadDat(void);
void WriteDat(void);

void StrCharJR()
{int i,j;
 for(i=0;i<MAXLINE;I++)
 for(j=0;j<STRLEN(XX[I]);J++)
 xx[i][j]+=(xx[i][j]>>4);
}

void main()
 {
 clrscr();
 if(ReadDat()){
 printf("
数据文件IN.DAT不能打开!\n\007");
 return;
 }
 StrCharJR();
 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("OUT8.DAT","w");
 for(i=0;i<MAXLINE;I++){
 printf("%s\n",xx[i]);
 fprintf(fp,"%s\n",xx[i]);
 }
 fclose(fp);
}

**********************************************************************
☆
题目17

函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组XX,最后调用函数WRITEDAT()把结果XX输出到文件OUT9.DAT.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include
#include
#include

char xx[50][80] ;
int maxline = 0 ; /*
文章的总行数 */

int ReadDat(void) ;
void WriteDat(void) ;

void ChA(void)
{ int i,j;
 char ch;
 for(i=0;i<MAXLINE;I++)
 { ch=xx[i][0];
 for(j=0;j<STRLEN(XX[I])-1;J++)
 xx[i][j]+=xx[i][j+1];
 xx[i][strlen(xx[i])-1]+=ch;
 strrev(xx[i]);
 }
}
void main()
{
 clrscr() ;
 if(ReadDat()) {
 printf("
数据文件IN.DAT不能打开!\n\007") ;
 return ;
 }
 ChA() ;
 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("OUT9.DAT", "w") ;
 for(i = 0 ; i < maxline ; i++) {
 printf("%s\n", xx[i]) ;
 fprintf(fp, "%s\n", xx[i]) ;
 }
 fclose(fp) ;
}

******************************************************************************
☆
题目18

函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。

替代关系:f(p)=p*11 mod 256p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。

部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include
#include
#include
#include

unsigned char xx[50][80];
int maxline=0;/*
文章的总行数*/

int ReadDat(void);
void WriteDat(void);

void encryptChar()
{ int i,j;
 for(i=0;i<MAXLINE;I++)
 for(j=0;j<STRLEN(XX[I]);J++)
 if(xx[i][j]*11%256<=32||xx[i][j]%2==0) continue;
 else xx[i][j]=xx[i][j]*11%256;
}

void main()
 {
 clrscr();
 if(ReadDat()){
 printf("
数据文件ENG.IN不能打开!\n\007");
 return;
 }
 encryptChar();
 WriteDat();
}

int ReadDat(void)
{
 FILE *fp;
 int i=0;
 unsigned char *p;

 if((fp=fopen("eng.in","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;
 fp=fopen("ps10.dat","w");
 for(i=0;i<MAXLINE;I++){
 printf("%s\n",xx[i]);
 fprintf(fp,"%s\n",xx[i]);
 }
 fclose(fp);
}

******************************************************************************
☆
题目19

编写一个函数findStr(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6

函数ReadWrite()实现从文件in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中。

注意:部分源程序存在文件prog1.c中。

请勿改动主函数main()和其它函数中的任何内容,仅在函数findStr()的花括号中填入你编写的若干语句。
#include
#include
#include

int findStr(char *str,char *substr)
{ int i,j,len1,len2,cnt=0,flag;
 len1=strlen(str);
 len2=strlen(substr);
 for(i=0;i<LEN1;I++)
 { for(j=0;j<LEN2;J++)
 if(str[i+j]==substr[j]) flag=1;
 else {flag=0;break;}
 if(flag==1) cnt++;
 }
 return cnt;
}

main()
{
 char str[81], substr[3] ;
 int n ;

 clrscr() ;
 printf("
输入原字符串:") ;
 gets(str) ;
 printf("
输入子字符串:") ;
 gets(substr) ;
 puts(str) ;
 puts(substr) ;
 n=findStr(str, substr) ;
 printf("n=%d\n", n) ;
 ReadWrite() ;
}

ReadWrite()
{
 char str[81], substr[3], ch;
 int n, len, i = 0;
 FILE *rf, *wf ;

 rf = fopen("in.dat", "r") ;
 wf = fopen("out.dat", "w") ;
 while(i < 25) {
 fgets(str, 80, rf) ;
 fgets(substr, 10, rf) ;
 len = strlen(substr) - 1 ;
 ch = substr[len] ;
 if(ch == '\n' || ch == 0x1a) substr[len] = 0 ;
 n=findStr(str, substr);
 fprintf(wf, "%d\n", n) ;
 i++ ;
 }
 fclose(rf) ;
 fclose(wf) ;
}

****************************************************************************
★
题目20

编写函数jsValue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
 F(0)=0,F(1)=1
 F(n)=F(n-1)+F(n-2)

最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。

例如:当t=1000时,函数值为:1597

部分源程序存在文件prog1.c中。

请勿改动主函数main()和写函数writeDat()的内容。
#include

int jsValue(int t)
{ int f0=0,f1=1,fn;
 fn=f0+f1;
 while(fn<=t)
 { f0=f1;
 f1=fn;
 fn=f0+f1;
 }
 return fn;
}

main()
{
 int n;
 n=1000;
 printf("n=%d,f=%d\n",n,jsValue(n));
 writeDat();
}

writeDat()
{
 FILE *in,*out;
 int i,n,s;

 in=fopen("in.dat","r");
 out=fopen("out.dat","w");
 for(i=0;i<50;i++){
 fscanf(in,"%d",&n);
 s=jsValue(n);
 printf("%d\n",s);
 fprintf(out,"%d\n",s);
 }
 fclose(in);
 fclose(out);
}

考研信息网在线版权与免责声明

1、 凡本站注明“稿件来源:考研信息网(sanwww.com)”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、

网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时

必须注明"稿件来源:sanwww.com",违者本站将依法追究责任。

2、本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着

赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

3、考研试题、各种考试试题以及考试信息转载于各大bbs论坛,就其真实性本站无法证实,并不意味着赞同其观点。

如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

文章录入:san1    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
           最新热点        最新推荐        相关文章
    没有相关文章
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)