⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 南开上机100题.txt

📁 C学习课件,非常非常好的一个学习课件
💻 TXT
📖 第 1 页 / 共 5 页
字号:
fclose(wf) ;
}

题目20:编写函数jsvalue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat中。
例如:当t=1000时,函数值为:1597。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
-----------------------
int jsvalue(int t) /*标准答案*/
{ int f1=0,f2=1,fn;
fn=f1+f2;
while(fn<=t)
{f1=f2;
f2=fn;
fn=f1+f2;}
return fn;
} 


PROG1.C
#include <stdio.h>

int jsvalue(int t)
{ 
}

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<10;i++){
fscanf(in,"%d",&n);
s=jsvalue(n);
printf("%d\n",s);
fprintf(out,"%d\n",s);}
fclose(in);
fclose(out);}
 

----------------------------------------------++++++++++++++++++++++++++++++++++++++++=====================================>
21-30:
题目21:下列程序的功能是:利用发下所示的简单迭代方法求方程: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()的内容。
-----------------------------
float countvalue() /*标准答案*/
{float x0,x1=0.0;
while(1)
{x0=x1;
x1=cos(x0);
if(fabs(x0-x1)<1e-6) break;
}
return x1;
}
或者:
float countvalue()
{ double x0,x1;
x1=0.0;
do
{ x0=x1;
x1=cos(x0); }
while(fabs(x0-x1)>=0.000001);
return x1; }

PROG1.C
#include <conio.h>
#include <math.h>
#include <stdio.h>

float countvalue()
{
}

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。
注意:部分源程序已给出。
请勿改动主函数main()和输入输出数据函数progreadwrite()的内容。
----------------------------
double countvalue(int n) /*标准答案*/
{double xy=0.0;
int I;
for(I=1;I<n;I++)
if(I%3==0&&I%7==0) xy+=I;
xy=sqrt((double)xy);
return xy;
}
double countvalue(int n)
{ int i,j=0;
double k;
for(i=0;i<n;i++)
if(i%3==0&&i%7==0)
j+=i;
k=sqrt(j);
return k; }

PROG1.C
#include <conio.h>
#include <math.h>
#include <stdio.h>

double countvalue(int n) /*标准答案*/
{double xy=0.0;
int I;
for(I=1;I<n;I++)
if(I%3==0&&I%7==0) xy+=I;
xy=sqrt((double)xy);
return xy;
}

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);
system("pause");
}

题目23:已知在文件in.dat中存有N个(个数<200)四位数字的正整数,函数readdat()读取这N个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
----------------------------
void Calvalue(void) /*标准答案*/
{int I;
double x,sum=0;
for (I=0;I<MAXNUM;I++)
{sumint=sumint+(int)xx[I];
x=xx[I]-(int)xx[I];
sumdec=sumdec+x;
sum=sum+xx[I];
}
aver=sum/MAXNUM;
}

PROG1.C
#include <stdio.h>
#include <conio.h>
#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) 
{
}

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:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。最后调用函数writeDat()把结果输出到文件out.dat中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
--------------------
jsvalue(int a[10][9]) /*标准答案*/
{int I,j,k=0;
int hun,ten,data;
for(I=100;I<=999;I++)
{j=10;
while(j*j<=I)
{if (I==j*j)
{hun=I/100;data=I-hun*100;
ten=data/10;data=data-ten*10;
if(hun==ten||hun==data||ten==data)
{bb[k]=I;k++;}
}
j++;} }
return k;
}

PROG1.C
#include <stdio.h>

int jsvalue(int bb[])
{
}

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");
fprintf(out,"%d\n",num);
for(i=0;i<num;i++)
fprintf(out,"%d\n",b[i]);
fclose(out);
system("pause");
}

题目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()的内容。
-------------------
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<half;I++)
if(xy[I]!=xy[--strl]) break;
if(I>=half) return 1;
else return 0;
}
或者:
int jsvalue(long n)
{int i,aa[10],j=0,b=1;
while(n)
{ aa[j++]=n%10;
n=n/10; }
for(i=0;i<j/2;i++)
if(aa[i]!=aa[j-i-1])
b=0;
return b; }

PROG1.C
#include <stdio.h>

int jsvalue(long n)
{
}

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中。
注意:部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
----------------------------
void Calvalue(void) /*标准答案*/
{int I,data;
for(I=0;I<MAXNUM;I++)
{if(!xx[I]) break;
if(xx[I]>0) totNum++;
data=xx[I]>>1;
if (data%2==0){totCnt++;totPjz+=xx[I];}
}
totPjz/=totCnt;
}
或者:
void Calvalue(void)
{ int i,k,a,b,c,d;
for(i=0;i<MAXNUM;i++) if(xx[i]) totNum++;
for(i=0;i<totNum;i++)
{ k=xx[i]>>1;
if(k%2==0)
{ totCnt++;
totPjz+=xx[i]; } }
totPjz/=totCnt;
}

PROG1.C
#include <stdio.h>
#include <conio.h>
#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) 
{
}

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", totNum) ;
printf("符合条件的正整数的个数=%d个\n", totCnt) ;
printf("平均值=%.2lf\n", totPjz) ;
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, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;
fclose(fp) ;
}

题目27:已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到OUT.DAT文件。 例如:9123,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
9812,9-8-1-2<0,则该数不满足条件计算平均值pjz2.
注意:部分源程序已给出。
程序中已定义数组:a[300],已定义变量:cnt
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
---------------------
void jsvalue() /*标准答案*/
{int I,thou,hun,ten,data,j;
for(I=0;I<300;I++)
{thou=a[I]/1000; hun=a[I]%1000/100;
ten=a[I]%100/10; data=a[I]%10;
if (thou-hun-ten-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;}
}

PROG1.C
#include <stdio.h>
int a[300],b[300],cnt=0;
double pjz1=0.0,pjz2=0.0;

jsvalue()
{
}

main()
{int i;
readDat();
jsvalue();
writeDat();
for (i=0;i<cnt;i++) printf("b[%d]=%d\n",i,b[i]);
system("pause");
}

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<cnt;i++) fprintf(fp, "%d\n",b[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()的内容。
-------------------------
void jsVal() /*标准答案*/
{int I,thou,hun,ten,data,j;
int 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!=0&&cd!=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;}
}

PROG1.C
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0;

void jsVal()
{
}

void readDat()
{ int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -