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

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

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

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

☆题目21下列程序prog1.c的功能是:利用以下所示的简单迭代方法求方程: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的一个实根,作为函数值返回。
 请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果输出到文件OUT17.DAT中。
 部分源程序已给出。
 请勿改动主函数main()和输出数据函数writeDat()的内容。
#include
#include
#include

float countValue()
{ float x0,x1;
 x1=0.0;
 do{ x0=x1;
 x1=cos(x0);
 }while(fabs(x0-x1)>=0.000001);
 return x1;
}

main()
{
 clrscr();
 printf("实根=%f\n",countValue());
 printf("%f\n",cos(countValue())-countValue());
 writeDat();
}

writeDat()
{
 FILE *wf;

 wf=fopen("OUT17.DAT","w");
 fprintf(wf,"%f\n",countValue());
 fclose(wf);
}


****************************************************************************
★题目22
请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。
 例如若n为1000时,函数值应为:s=153.909064。
 部分源程序存在文件prog1.c中。
 请勿改动主函数main()和输入输出数据函数progReadWrite()的内容。
#include
#include
#include

double countValue(int n)
{ int i;
 double s=0.0;
 for(i=1;i if(i%21==0) s+=i;
 return sqrt(s);
}

main()
{
 clrscr();
 printf("自然数之和的平方根=%f\n",countValue(1000));
 progReadWrite();
}

progReadWrite()
{
 FILE *fp,*wf;
 int i,n;
 float s;

 fp=fopen("in.dat","r");
 if(fp==NULL){
 printf("数据文件in.dat不存在!");
 return;
 }
 wf=fopen("out.dat","w");
 for(i=0;i<10;i++){
 fscanf(fp,"%d\n",&n);
 s=countValue(n);
 fprintf(wf,"%f\n",s);
 }
fclose(fp);
fclose(wf);
}



*********************************************************************
题目23
已知在文件in.dat中存有N个(个数<200)实数,函数readdat()读取这N个实数并存入数组xx中。请编制函数calvalue(),其功能要求:
1、求出这N个实数的平均值aver;
2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。
 注意:部分源程序已给出。
 请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
#include
#include
#define MAXNUM 200

float xx[MAXNUM] ;
int N= 0 ; /* 文件IN.DAT中共有多少个实数 */
double aver=0.0;/*平均值*/
double sumint=0.0;/*整数部分之和*/
double sumdec=0.0;/*小数部分之和*/

int ReadDat(void) ;
void WriteDat(void) ;

void CalValue(void)
{int i;
 for (i=0;i {sumint+=(long)xx[i];
 sumdec+=xx[i]-(long)xx[i];
 aver+=xx[i];
 }
 aver/=N;
}

void main()
{ int i ;
 clrscr() ;
 for(i = 0 ; i < MAXNUM ; i++) xx[i] = 0 ;
 if(ReadDat()) {
 printf("数据文件IN.DAT不能打开!\007\n") ;
 return ;
 }
 Calvalue() ;
 printf("文件IN.DAT中共有实数=%d个\n", N) ;
 printf("平均值=%.2lf\n", aver) ;
 printf("整数部分之和=%.2lf\n", sumint) ;
 printf("小数部分之和=%.2lf\n", sumdec) ;
 WriteDat() ;
system("pause");
}

int ReadDat(void)
{
 FILE *fp ;
 int i = 0 ;

 if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
 while(!feof(fp)) {
 fscanf(fp, "%d,", &xx[i++]) ;
 }
 fclose(fp) ;
 return 0 ;
}

void WriteDat(void)
{
 FILE *fp ;

 fp = fopen("OUT.DAT", "w") ;
 fprintf(fp, "%.2lf\n%.2lf\n%.2lf\n", aver,sumint,sumdec) ;
 fclose(fp) ;
}

****************************************************************************
题目24
下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。
 最后调用函数writeDat()把结果输出到文件out.dat中。
 请勿改动主函数main()和写函数writeDat()的内容。
#include

int jsValue(int bb[])
{int i,j,k=0;
 int hun,ten,data;
 for(i=10;i<32;i++)
 {j=I*I;
hum=j/100;
ten=j%100/10;
data=j%10;
if(hum==ten||hum==data||ten==data)
bb[k++]=j;}
return k;
}


main()
{
 int b[20],num;
 num=jsValue(b);
 writeDat(num,b);
}

writeDat(int num,int b[])
{
 FILE *out;
 int i;

 out=fopen("out.dat","w");
printf("%d\n",num);
 fprintf(out,"%d\n",num);
 for(i=0;i fclose(out);
}

*****************************************************************
★题目25
下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int svalue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。
 注意:部分源程序已给出。
 请勿改动主函数main()的内容。

#include
int jsValue(long n)
{int i,strl,half;
 char xy[20];
 ltoa(n,xy,10);
 strl=strlen(xy);
 half=strl/2;
 for(i=0;i if(xy[i]!=xy[--strl]) break;
 if(i>=half) return 1;
 else return 0;
}

main()
{long m;
 FILE *out;
 out=fopen("out.dat","w");
 for(m=11;m<1000;m++)
 { if(jsValue(m)&&jsValue(m*m)&&jsValue(m*m*m))
 { printf("m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m);
 fprintf(out,"m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m);
 }
 }
 fclose(out);
 system("pause");
}


*************************************************************************
★☆题目26
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:1、求出这文件中共有多少个正整数totNum;2、求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到文件OUT.DAT中。
 部分源程序存在文件prog1.c中。
 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include
#include
#define MAXNUM 200

int xx[MAXNUM];
int totNum=0; /*文件IN.DAT中共有多少个正整数*/
int totCnt=0; /*符合条件的正整数的个数*/
double totPjz=0.0; /*平均值*/

int ReadDat(void);
void writeDat(void);

void CalValue(void)
{int i,data;
for(i=0;i if(xx[i]>0)
{ totNum++;
 data=xx[i]>>1;
 if(data%2==0){totCnt++;totPjz+=xx[i];}
 }
 if(totCnt==0) totPjz=0;
 else totPjz/=totCnt;
}

void main()
{
 int i;
 clrscr();
 for(i=0;i if(ReadDat()){
 printf("数据文件IN.DAT不能打开!\007\n");
 return;
 }
 CalValue();
 printf("文件IN.DAT中共有正整数=%d个\n",totNum);
 printf("符合条件的正整数的个数=%d个\n",totCnt);
 printf("平均值=%.2f\n",totPjz);
 writeDat();
}

int ReadDat(void)
{
 FILE *fp;
 int i=0;

 if((fp=fopen("IN.DAT","r"))==NULL) return 1;
 while(!feof(fp)){
 fscanf(fp,"%d,",&xx[i++]);
 }
 fclose(fp);
 return 0;
}

void writeDat(void)
{
 FILE *fp;
 fp=fopen("OUT.DAT","w");
 fprintf(fp,"%d\n%d\n%6.2f\n",totNum,totCnt,totPjz);
fclose(fp);
}

********************************************************************
题目27
已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。
 例如:9123,9-1-2-3>0,则该数满足条件存入数组b中,且个数cnt=cnt+1。
 9812,9-8-1-2>0,则该数不满足条件忽略。
 部分源程序存在文件prog1.c中。
 程序中已定义数组:a[300],b[300],已定义变量:cnt
 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include
int a[300],b[300],cnt=0;

jsValue()
{ int i,j,qw,bw,sw,gw;
 for(i=0;i<300;i++)
 { qw=a[i]/1000; bw=a[i]/100%10;
 sw=a[i]%100/10; gw=a[i]%10;
 if(qw-bw-sw-gw>0) b[cnt++]=a[i];
 }
 for(i=0;i for(j=i+1;j if( b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw;}
}

main()
{
 int i;

 readDat();
 jsValue();
 writeDat();
 printf("cnt=%d\n",cnt);
 for(i=0;i}

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",cnt);
 for(i=0;i fclose(fp);
}


************************************************************************
★☆题目28
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数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,thou,hun,ten,data,ab,cd;
 for(i=0;i<200;i++)
 {thou=a[i]/1000; hun=a[i]%1000/100;
 ten=a[i]%100/10; data=a[i]%10;
 ab=10*thou+ten; cd=10*data+hun;
 if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab>=10&&cd>=10)
 b[cnt++]=a[i];
 }
 for(i=0;i for(j=i+1;j if(b[i]}

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) ;
}

*************************************************************************
☆题目29
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。
最后main()函数调用写函数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,qw,bw,sw,gw,ab,cd;
 for(i=0;i { qw=a[i]/1000; bw=a[i]/100%10;
 sw=a[i]%100/10; gw=a[i]%10;
 ab=qw*10+sw; cd=gw*10+bw;
 if(ab-cd>=10&&ab-cd<=20&&ab%2==0&&cd%2==0&&qw!=0&&gw!=0)
 b[cnt++]=a[i];
 }
 for(i=0;i for(j=i+1;j if(b[i]}
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) ;
}


***********************************************************************
☆题目30
已知数据文件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 {for(j=i+1;j<=i+5;j++)
 if(a[i] else { flag=0; break;}
 if(flag==1) b[cnt++]=a[i];
 }
 for(i=0;i for(j=i+1;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) ;
}


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

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

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

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

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

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

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

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

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

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