999kao.com
计算机考试C语言题库整理浩神

以下函数按每行 8 个输出数组中的数据

void fun(int *w,int n)

{ int i;

for(i=0;i<n;i++)

{ ____________

printf("%d ",w[i]);

}

printf("\n");

}

下划线出应填入的语句是

A)if(i/8==0) printf("\n");

B)if(i/8==0) continue;

C)if(i%8==0) printf("\n");

D)if(i%8==0) continue;


正确答案:C


编写函数jsValue,它的功能是:求Hofstadter数列中的第m项H(m)(m<1000),结果由函数返回。其中数列H(n)的定义为:

H(1)=H(2)=1

H(n)=H(n-H(n-1))+H(n-H(n-2))(n>2)

最后调用函数writeDat()读取50个数据m,分别得出结果且把结果输出到文件out.dat中。

例如:当t=997时,函数值为605。

部分源程序已给出。

请勿改动主函数main()和写函数writeDat()的内容。

include<stdio. h>

int jsValue(int m)

{

main ( )

{

int m;

m=300;

printf ("m=%d, k-%d\n", m, jsValue (m));

writeDat ( );

writeDat ( )

{

FILE *in, *out;

int i,m,s;

in= fopen ( "in. dar" , "r" );

ut=f open ( "out. dar" , "w" );

for (i=0; i<50; i++) {

fscanf (in, "%d", &m);

s=jsValue (m);

printf( "%d\n", s );

fprintf (out, "%d\n" , s );

}

fclose (in);

fclose (out);


正确答案:int jsVelue(int m) { if (m0) return -1; /*参数错误正常运行不会出现*/ if(m==1 || m==2) return 1; /*初值H[1]:H[2]=1*/ else return jsValue (m-jsValue (m-1)) +jsValue (m-jsValue (m-2)); /*调用jsValue递归计算H[k]*/ } /*解法二递推*/ int jsValue(int m) { int H[1000] i; H[1]=1;H[2]=1; /*初值H[1]=H[2]=1*/ for (i=3;i=m;i++) { H[i] = H[i-H[i-1)] +H[i-H[i-2]]; /*H(k)(ki)的值都己计算完成直接使用*/ } return H[m]; /*返回所求的值*/ }
int jsVelue(int m) { if (m0) return -1; /*参数错误,正常运行不会出现*/ if(m==1 || m==2) return 1; /*初值H[1]:H[2]=1*/ else return jsValue (m-jsValue (m-1)) +jsValue (m-jsValue (m-2)); /*调用jsValue递归计算H[k]*/ } /*解法二,递推*/ int jsValue(int m) { int H[1000], i; H[1]=1;H[2]=1; /*初值H[1]=H[2]=1*/ for (i=3;i=m;i++) { H[i] = H[i-H[i-1)] +H[i-H[i-2]]; /*H(k)(ki)的值都己计算完成,直接使用*/ } return H[m]; /*返回所求的值*/ } 解析:类型:序列计算。
关键点:分析序列定义,选择合适的方法生成和存储序列或序列中的特定值。
此题有两种解法:
1.按照定义编写递归函数;(计算量大,容易超时,慎用)。
2.保存所有值,从小到大递推求解。


请补充完整程序,使得程序能实现以下功能:

从文件IN.dat中读取200个整数至数组number中,求出最大数max及最大数的个数cnt和数组number中能被3整除或能被7整除的算术平均值ave(保留2位小数)。把结果max、 cnt、ave输出到OUT. dat文件中。

注意:部分程序、读数据函数read_ dat (int number[200])及输出格式已给出。

include <conio. h>

include <stdio. h>

define N 200

void read_ dat(int number[N])

{ int i, j;

FILE *fp;

fp = fopen("IN. dat", "r");

for (i=0; i<20; i++)

{ for (j=0; j<10; j++)

{ fscanf(fp, "%d,", &number[i*10+j]);

printf("%d ", number[i*10+j]);

}

printf ("\n");

}

fclose (fp);

}

void main ()

{ int cnt, number[N], max;

float ave;

FILE *fw;

int i, k; '

long j = 0;

fw = fopen("OUT.dat", "w");

read_ dat (number);

/ ************************************************ /

/ ************************************************ /

printf("\n\nmax=%d, cnt=%d, ave=%6.2f\n", max, cnt, ave);

fprintf(fw, "%d\n%d\n%6.2f\n", max, cnt, ave);

fclose (fw);

}


正确答案:max = number[0]; for (i=1 k=0; iN; i++) { if (number[i] > max) max = number[i]; if (number[i]%3==0 || number[i]%7==0) { j += number[i]; k++; } } for (i=0 cnt=0; iN; i++) if (number[i] == max) cnt++; ave = (float) (j*100/k)/100; [解题思路] 用整型变量max保存数组number中元素的最大值首先把数组number的第一个元素number[0]存入max中;然后在for循环语句中当循环变量i从1递增到N-1时 对数组number中的每一个元素number[i]与max进行比较如果表达式number[i]>max成立则把数组元素number[i]的值存入变量max中;再用表达式number[i]%3==0|| number[i]%7==0判断number[i]能否被3或7整除如果表达式结果值为真则把数组元素 number[i]的值与变量j的值相加同时计数变量k加1。退出循环后变量max中的值就是数组number中元素的最大值再用for循环语句对数组number中的每一个元素与max的值进行相等的判断如果number[i]的值等于max则计数变量cnt加1。最后用表达式 (float)(j*100/k)/100求得数组number中能被3整除或能被7整除的算术平均值。
max = number[0]; for (i=1, k=0; iN; i++) { if (number[i] > max) max = number[i]; if (number[i]%3==0 || number[i]%7==0) { j += number[i]; k++; } } for (i=0, cnt=0; iN; i++) if (number[i] == max) cnt++; ave = (float) (j*100/k)/100; [解题思路] 用整型变量max保存数组number中元素的最大值,首先把数组number的第一个元素number[0]存入max中;然后在for循环语句中当循环变量i从1递增到N-1时, 对数组number中的每一个元素number[i]与max进行比较,如果表达式number[i]>max成立,则把数组元素number[i]的值存入变量max中;再用表达式number[i]%3==0|| number[i]%7==0判断number[i]能否被3或7整除,如果表达式结果值为真,则把数组元素 number[i]的值与变量j的值相加,同时计数变量k加1。退出循环后,变量max中的值就是数组number中元素的最大值,再用for循环语句对数组number中的每一个元素与max的值进行相等的判断,如果number[i]的值等于max,则计数变量cnt加1。最后用表达式 (float)(j*100/k)/100求得数组number中能被3整除或能被7整除的算术平均值。


请编制程序,要求:将文件IN92.DAT中的200个整数读入数组xx中,求出数组xx中最大数max及最大数的个数cnt和数组xx中值能被3整除或能被7整除的数的算术平均值pj(保留两位小数),结果max,cnt,pj输出到out92.dar中。

部分程序、读函数read_dat(int xx[200])及输出格式已给出。

试题程序:

include<conio.h>

include<stdio.h>

define N 200

void read_dat(int xx[N])

{

int i,j;

FILE *fp;

fp=fopen("IN92.DAT","r");

for(i=0;i<20;i++)

{

for(j=0;j<10;j++)

{

fscanf(fp,"%d,",&xx[i*10+j]);

printf("%d",xx[i*10+j]);

}

printf("\n");

}

fclose(fp);

}

void main()

{

int i,k,cnt,xx[N],max;

float pj;

FILE *fw;

long j=0;

clrscr();

fw=fopen("out92.dat","w");

read_dat(xx);

printf("\n\nmax=%d,cnt=%d,pj=%6.2f/n",max,cnt,pj);

fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj);

fclose(fw);

}


正确答案:void main ( ) { int ikcntxx[N]max; float pj; FILE *fw; long j=0; clrscr(); fw=fopen("out92.dar""w"); read_dar(xx); max=xx[0]; for(i=1k=0;iN;i++) { if(xx[i]>max) max=xx[i]; /*求出数组xx中最大数max*/ if(xx[i]%3==0 ||xx[i]%7==0) { j+=xx[i]; /*求出数组xx中值能被3整除或能被7整除的数的总和*/ k++; } } for(i=0cnt=0;iN;i++) if(xx[i]==max) cnt++; /*求出数组xx中最大数max的个数*/ pj=(float)(j*100/k)/100; /*求出数组xx中值能被3整除或被7整除的数的平均值*/ printf("\n\nmax=%dcnt=%dpj=%6.2f\n"maxcntpj); fprintf(fw"%d\n%d\n%6.2f\n"maxcntpj); fclose(fw); }
void main ( ) { int i,k,cnt,xx[N],max; float pj; FILE *fw; long j=0; clrscr(); fw=fopen("out92.dar","w"); read_dar(xx); max=xx[0]; for(i=1,k=0;iN;i++) { if(xx[i]>max) max=xx[i]; /*求出数组xx中最大数max*/ if(xx[i]%3==0 ||xx[i]%7==0) { j+=xx[i]; /*求出数组xx中值能被3整除或能被7整除的数的总和*/ k++; } } for(i=0,cnt=0;iN;i++) if(xx[i]==max) cnt++; /*求出数组xx中最大数max的个数*/ pj=(float)(j*100/k)/100; /*求出数组xx中值能被3整除或被7整除的数的平均值*/ printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n",max,cnt,pj); fprintf(fw,"%d\n%d\n%6.2f\n",max,cnt,pj); fclose(fw); } 解析:本题考查的知识点如下:
(1)运算符“%”的使用。
(2)判断结构中多个条件的布尔运算。
首先,要找出数组中最大的元素。先定义第1个元素为最大的元素,然后依次和后面的元素比较,若后面的数中有大于第1个元素的,则将这个数定义为最大的元素。再和后面的数进行比较。一个数a除以b取余所得的数为0,则a能被b整除。根据题意可知,被3整除和被7整除两个条件满足一个即可,所以两个条件之间用“或”运算。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有效,我们定义了一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果转换为浮点类型,这样就可以实现保留两位小数。


已知在文件IN42.DAT中存有N个实数(N<200),函数ReadDat()读取这N个实数并存入数组xx中。请编制程序CalValue(),其功能要求:

(1)求出这N个实数的平均值aver。

(2)分别求出这N个实数的整数部分值之和sumint及其小数部分之和sumdec,最后调用函数WriteDat()把所求的结果输出到文件OUT42.DAT中。

注意;部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

试题程序:

include<stdio.h>

include<conio.h>

define MAXNUM 200

float xx[MAXNUM];

int N=0;

double aver=0.0;

double sumint=0.0;

double sumdec=0.0;

int ReadDat( );

void WriteDat( );

void CalValue

{

}

void main( )

{

clrscr( );

if(ReadDat( ))

{

printf ("数据文件IN42.DAT不能打开! \007\n");

return;

}

CalValue ( );

printf ("文件IN42.DAT中共有实数%d个\n", N);

printf ("平均值=%.21f\n", aver);

printf ("整数部分=%.21f\n", sumint);

printf ("小数部分之和=%.21f\n", sumdec);

WriteDat( );

}

int ReadDat()

{

FILE *fp;

int j;

if((fp=fopen("in42.dat","r"))==NULL)

return 1;

while(!feof(fp))

{

fscanf (fp, "%f", &xx [N] );

if (xx[N] >0.001) N++;

}

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

fp=fopen("OUT42.DAT","w");

fprintf(fP,"%d\n%.21f\n%.21f\n%.21f\n",N,aver,sumint,sumdec);

fclose(fp);

}


正确答案:void CalValue( ) { int i; double xsum=0; for(i=0;iN;i++) { sumint=sumint+(int)xx[i]; /*求整数部分之和*/ x=xx[i]-(int)xx[i]; /*求每个数的小数部分*/ sumdec=sumdec+x; /*求小数部分之和*/ sum=sum+xx[i]; /*求N个数之和*/ } aver=sum/N; /*求N个数的平均数*/ }
void CalValue( ) { int i; double x,sum=0; for(i=0;iN;i++) { sumint=sumint+(int)xx[i]; /*求整数部分之和*/ x=xx[i]-(int)xx[i]; /*求每个数的小数部分*/ sumdec=sumdec+x; /*求小数部分之和*/ sum=sum+xx[i]; /*求N个数之和*/ } aver=sum/N; /*求N个数的平均数*/ } 解析:本题考查的知识点如下:
(1)循环结构的使用。
(2)强制类型转换。
将一个实数的整数部分和小数部分分开,这里使用的方法是强制类型转换法。强制类型转换是按照要求将表达式的值转换成指定的类型。将一个实数强制转换成整型数之后,其小数部分被去掉(不是四舍五入,而是直接删除)。对数组中的200个实数求和及平均值,可以使用循环结构。


/*-【程序设计】-题目:用函数求一个N阶方阵右下三角元素的和(包括副 对角线上的元素)。 -*/#include #include #define N 3void wwjt(); int sum(int aN) /*Program*/ /* End */main() int aNN,i,j; for(i=0;iN;i+) for(j=0;jN;j+) aij=rand()%(10)+10; printf(%3d,aij); printf(n); printf(=n); printf(sum=%5dn,sum(a); wwjt();void wwjt() FILE *IN,*OUT; int m,n; int i33; int o; IN=fopen(in.dat,r); if(IN=NULL) printf(Read FILE Error); OUT=fopen(out.dat,w); if(OUT=NULL) printf(Write FILE Error); for(m=0;m3;m+) for(n=0;n3;n+) fscanf(IN,%d,&imn); o=sum(i); fprintf(OUT,%dn,o); fclose(IN); fclose(OUT);【参考代码】 int i,j,k=0; for(i=0;iN;i+) for(j=N-1-i;jN;j+) k=k+aij; return(k);/*-【程序设计】-功能:删除所有值为y的元素。数组元素中的值和y的值由 主函数通过键盘输入。-*/#include #include#include#define M 20void wwjt(); void fun(int bb,int *n,int y) /*Program*/ /* End */main() int aaM,n,y,k; printf(nPlease enter n:);scanf(%d,&n); printf(nEnter %d positive number:n,n); for(k=0;kn;k+) scanf(%d,&aak); printf(The original data is:n); for(k=0;kn;k+) printf(%5d,aak); printf(nEnter a number to deletede:);scanf(%d,&y); fun(aa,&n,y); printf(The data after deleted %d:n,y); for(k=0;kn;k+) printf(%4d,aak); printf(n); wwjt();void wwjt() FILE *IN,*OUT; int n; int i10; int o; IN=fopen(in.dat,r); if(IN=NULL) printf(Read FILE Error); OUT=fopen(out.dat,w); if(OUT=NULL) printf(Write FILE Error); for(n=0;n10;n+) fscanf(IN,%d,&in); fun(i,&n,3); for(o=0;on;o+) fprintf(OUT,%dn,io); fclose(IN); fclose(OUT);答案: int i,j; for(i=0;i*n;) if(bbi=y) for(j=i;j*n;j+) bbj=bbj+1; *n=*n-1; else i+; /*-【程序填空】-功能:删除字符串中的指定字符,字符串和要删除的字符均由键盘 输入。-*/#include main() char str80,ch; int i,k=0; /*SPACE*/ gets(【?】); ch=getchar(); /*SPACE*/ for(i=0;【?】;i+) if(stri!=ch) /*SPACE*/ 【?】; k+; /*SPACE*/ 【?】; puts(str); 答案(1)str (2)stri!=0 (3) strk=stri (4)strk=0/*-【程序填空】-功能:对数组 A 中的N( 0 N100)个整数从小到大进行连续编 号,输出各个元素的编号。要求不能改变数组中元素的 顺序,且相同的整数要具有相同的编号。例如:数组是: A=(5,3,4,7,3,5,6) 则输出为:(3,1,2,5,1,3,4)-*/#include main() int i,j,k,n,m=1,r=1,a2100=0 ; printf(Please enter n:) ; scanf(%d,&n) ; for(i=0 ; in ; i+) printf(a%d= ,i) ; scanf(%d,&a0i) ; /*SPACE*/ while(【?】) for(i=0 ; in ; i+) if(a1i=0) /*SPACE*/ 【?】 ; k=i ; for(j=i ; jn ; j+) /*SPACE*/ if(a1j=0 & a0ja0k) 【?】 ; a1k=r+ ; m+ ; for(j=0 ; jn ; j+) if(a1j=0 & a0j=a0k) a1j=a1k ; m+ ; for(i=0 ; in ; i+) printf(a%d=%d, %dn,i,a0i,a1i) ;答案: 1). mm 2). break 3). k=j/*- 【程序改错】-功能:编写函数求2!+4!+6!+8!+10+12!+14!。-*/#include long sum(int n) /*FOUND*/ int i,j long t,s=0; /*FOUND*/ for(i=2;i=n;i+) t=1; for(j=1;j=i;j+) t=t*j; s=s+t; /*FOUND*/ return(t);main() printf(this sum=%ldn,sum(14);答案: 1). int i , j ; 2). printf(score %d., j + 1 ); 3). for(i=0;iN;i+)/*-【程序设计】-功能:求出菲波那契数列的前一项与后一项之比的极限的 近似值。例如:当误差为0.0001时,函数值为0.618056。-*/#include #include math.hvoid wwjt(); float fun() /*Program*/ /* End */、 main() printf(y=%fn,fun(); wwjt();void wwjt() FILE *IN,*OUT; float fOUT; IN=fopen(19.IN,r); if(IN=NULL) printf(Please Verify The Currernt Dir.it May Be Changed); OUT=fopen(19.out,w); if(OUT=NULL) printf(Please Verify The Current Dir. it May Be Changed); fOUT=fun(); fprintf(OUT,%fn,fOUT); fclose(IN)、; fclose(OUT);答案floatf1=1,f2=1,f3;floatr1=2,r2;dor2=r1;r1=f1/f2;f3=f1+f2;f1=f2;f2=f3;while(fabs(r1-r2)1e-4);returnr1;/*-【程序设计】-功能:编写函数fun计算下列分段函数的值: x2+x+6 x0且x-3 f(x)= x2-5x+6 0 x10且x2及x3 x2-x-1 其它-*/ /* End */main() float x,f; printf(input x=); scanf(%f,&x); f=fun(x); printf(x=%f,f(x)=%fn,x,f); ww

请补充main 函数,该函数的功能是:把文本文件B中的内容追加到文本文件A的内容之后。

例如,文佃的内容为“I’m ten.”,文件A的内容为“I’ m a student!”,追加之后文件A的内容为“I’m a student !I’m ten.”

注意:部分源程序给出如下。

请勿改动主函数main 和其他函数中的任何内容,仅在函数main 的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio, h>

include<conio. h>

define N 80

main()

{

FILE *fp, * fp1, *fp2;

int i;

char c[N] ,t, ch;

clrscr ();

if ((fp=fopen ("A. dat ", "r") ) == NULL)

{

printf ("file A cannot be opened\n");

exit (0);

}

printf("\n A contents are : \n\n");

for (i=0; (ch=fgetc (fp)) !=EOF; i++)

{

C [i]=ch;

putchar (c [i]);

fclose (fp);

if((fp=fopen ("B. dat", "r") )==NULL)

{

printf ("file B cannot be opened\n");

exit (0);

}

printf("\n\n\nB contents are : \n\n");

for (i=0; (ch=fgetc (fp)) !=EOF; i++)

{

c [i] =ch;

putchar (c [i]);

}

fclose (fp);

if ( (fp1=fopen ("A.dat" ,"a"))【 】(fp2

=fopen ("B. dat", "r") ) )

{

while ( (ch=fgetc (fp2)) !=EOF)

【 】;

}

else

{

printf("Can not open A B !\n");

}

fclose (fp2);

fclose (fp1);

printf ("\n***new A contents***\n\n");

if ( ( fp=fopen ("A. dar", "r") )==NULL)

{

printf ("file A cannot be opened\n");

exit (0);

}

for (i=0; (ch=fgetc (fp)) !=EOF;i++)

{

c [i] =ch;

putchar (c [i] );

}

【 】;

}


正确答案:&& fputc (chfp1) fclose (fp)
&& fputc (ch,fp1) fclose (fp) 解析:第一空:当两个文件都被成功打开时,才能将文件B中的内容追加到文件A中,所以应该用“与”运算符——“&&”。第三空:fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:fputc (要输出的字符,文件指针);。第三空:对一个文件进行操作后,应该关闭它,以防它再被误用。调用形式为:fclose(文件指针);。


下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

例如:若输入17,5,则应输出:19,31,37,43,61。

部分源程序已给出。

请勿改动主函数main()和输出数据函数readwriteDat()的内容。

include <conio.h>

include <stdio.h>

void readwriteDat();

void num(int m, int k, int xx[])

{

}

main ( )

{

int m,n,xx[1000];

clrscr();

printf("\nPlease enter two integers:");

scanf(" %d%d" ,&m,&n);

num(m,n,xx);

for(m=0;m<n;m++)

printf(" %d" ,xx[m]);

printf("\n" );

readwriteDat();

}

viod readwriteDat()

{

int m,n, xx[1000], i;

FILE *rf,*wf;

rf=fopen("in.dat" ," r" );

wf=fopen(" out.dat" ," w" );

for(i=0;i<10;i++){

fscanf(rf," %d%d" ,&m,&n);

num(m,n,xx);

for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]

fprintf(wf,"\n" );

}

fclose(rf);

fclose(wf);

}


正确答案:int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m int k int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } }
int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m, int k, int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } } 解析:类型:素数判断与运算。
关键点:素数判定。
求素数的题,可以先定义一个求素数的函数,然后在程序中直接调用,这样简单而且不容易出错。
原程序如果给了求素数的函数,可以直接调用。


编写函数jsValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中Fibonacci数列F(n)的定义为:

F(0)=0, F(1)=1

F(n)=F(n-1)+F(n-2)

最后调用函数writeDat(),把结果输出到文件OUT10.DAT中。

例如:当t=1000时,函数值为1597。

注意:部分源程序已给出。

请勿改动主函数main()和写函数WriteDat()的内容。

试题程序:

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 n,s;

ut = fopen("OUT10.DAT", "w");

s = jsValue(1000); printf("%d",s);

fprintf(out, "%d\n", s);

fclose(out);

}


正确答案:int jsValue(int t) { int f1=0f2=1fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t则计算下一个 Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ }
int jsValue(int t) { int f1=0,f2=1,fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t,则计算下一个 Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ } 解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量f2来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。


请编制程序,要求:将文件IN94.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为奇数的元素值的算术平均值pj(保留两位小数),结果cnt1,cnt2,pj输出到OUT94.DAT中。

部分程序、读函数read_dat(int xx[200))及输出格式已给出。

试题程序:

include<conio:h>

include<stdio.h>

define N 200

void read_dar (int xx [N] )

{

int i,j;

FILE *fp;

fp=fopen("IN94.DAT","r");

for(i=0;i<20;i++)

{

for(j=0;j<10;j++)

{

fscanf(fp,"%d,,&xx[i*10+j]);

printf("%d",xx[i*10+j]);

}

printf("\n");

}

fclose(fp);

}

void main()

{

int cnt1,cnt2,xx[N];

float pj;

FILE *fw;

clrscr();

fw=fopen("out94.dat","w");

read_dat(xx);

printf("\n\ncnt1=%d, cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);

fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);

fclose(fw);

}


正确答案:void main() { int cnt1cnt2xx[N]; float pj; FILE *fw; int ik=0; long j=0; cnt1=0; cnt2=0; pi=0.0; clrscr(); fw=fopen("out94.dat""w"); read_dat(xx); for(i=0;iN;i++) { if(xx[i]%2) cnt1++; /*求出数组xx中奇数的个数cnt1*/ else cnt2++; /*求出数组xx中奇数的个数cnt2*/ if(i%2==1) { j+=xx[i]; /*求数组xx下标为奇数的元素值的总和*/ k++; } } pj=(float)(j*100/k)/100; /*求数组xx下标为奇数的元素值的算术平均值pj*/ printf("\n\ncnt1=%dcnt2=%dpj=%6.2f\n"cnt1cnt2pj); fprintf(fw"%d\n%d\n%6.2f\n"cnt1cnt2pj); fclose(fw); }
void main() { int cnt1,cnt2,xx[N]; float pj; FILE *fw; int i,k=0; long j=0; cnt1=0; cnt2=0; pi=0.0; clrscr(); fw=fopen("out94.dat","w"); read_dat(xx); for(i=0;iN;i++) { if(xx[i]%2) cnt1++; /*求出数组xx中奇数的个数cnt1*/ else cnt2++; /*求出数组xx中奇数的个数cnt2*/ if(i%2==1) { j+=xx[i]; /*求数组xx下标为奇数的元素值的总和*/ k++; } } pj=(float)(j*100/k)/100; /*求数组xx下标为奇数的元素值的算术平均值pj*/ printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj); fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj); fclose(fw); } 解析:本题考查的知识点如下:
(1)运算符“%”的使用。
(2)强制类型转换和小数位数的保留。
一个数除以2取余所得的数为1,则它是奇数,否则是偶数,取余使用运算符“%”。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有效,我们定义了一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果转换为浮点类型,这样就可以实现保留两位小数。使用循环对所有数据进行访问。


下列程序的功能是:求出ss字符串中指定字符c的个数,并返回此值。请编写函数int num(*char ss,char c)以实现程序要求,最后调用函数readwriteDat(),把结果输出到文件out.dat中(注:大小写字母有区别)。例如:若输入字符串“ss="123412132" , c=’1’”,则输出“3”。部分源程序已给出。请勿改动主函数main()和输出数据函数writeDat()的内容。#include <conio.h>#include <stdio.h>#define M 81void readwriteDAT(); int num(char *ss,char c){ } main(){ char a[M],ch; clrscr(); printf("\nPlease enter a string:" );gets(a); printf("\nPlease enter a char;" );ch=getchar(); printf("\nThe number of the char is:%d\n" ,num(a,ch)); readwriteDAT();}viod readwriteDAT(){ int i; FILE *rf,*wf; char a[M],b[M],ch; rf=fopen("in.dat" ,"r" ); wf=fopen(" out.dat" ,"w" ); for(i=0;i<10;i++){ fscanf(rf," %s",a); fscanf(rf," %s" ,b); ch=*b; fprintf(wf," %c=%d\n:" ,ch,num(a,ch));} fclose(rf); fclose(wf);}


正确答案:请参考解析
【解析及答案】
本题的任务是把单词统计函数num(char *ss,char c) 补充完整,其中,ss是需统计的字符串,c是待统计的字符。
本题属于单个字符串统计问题,处理过程相对简单一些。首先,把计数器清零。然后,一边扫描字符串ss,一边统计字符c出现的次数,如果字符c出现1次,那么计数器的值自动增加1。最后,计数器的值就是字符c在字符串ss中出现的总次数。求解核心是字符c的匹配和计数器的计数。综上所述,完整的统计函数num(char *ss,char c) 如下。
 int num(char *ss,char c)
{
  int i=0;
  while(*ss!=0)
  if(*ss++==c) i++;
  return i;
}

更多 “计算机考试C语言题库整理浩神” 相关考题
考题 请编写函数void countValue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。注意:部分源程序已给出。请勿改动主函数main()和写函数writeDAT()的内容。试题程序:include<conio.h>include<stdio.h>void countValue(int *a, int *n){}main ( ){int aa[1000],n, k;clrscr();countValue (aa, &n);for(k=0;k<n; k++)if((k+1) %10 ==0){printf("%5d",aa[k]);printf("\n");}else printf("%5d",aa[k]);writeDAT();}writeDAT ( ){int aa[1000],n, k;FILE *fp;fp=fopen("out79.dat","w");countValue(aa,&n);for(k=0; k<n; k++)if((k+1)%10==0){fprintf(fp,"%5d",aa[k]);fprintf(fp,"\n");}else fprintf (fp,"%5d",aa[k]);fclose(fp);}正确答案:void countValue(int *a int *n){int i;*n=0;for(i=1;i=1000;i++)if(i%7==0 && i%11) /*将能被7整除但不能被11整除的数存入数组a中*/{*a=i;*n-*n+1; /*统计个数*/a++;}else if (i%7 && i%11==0) /*将能被11整除但不能被7整除的数存入数组a中*/{*a=i;*n=*n+1; /*统计个数*/a++;}}void countValue(int *a, int *n){int i;*n=0;for(i=1;i=1000;i++)if(i%7==0 && i%11) /*将能被7整除但不能被11整除的数存入数组a中*/{*a=i;*n-*n+1; /*统计个数*/a++;}else if (i%7 && i%11==0) /*将能被11整除但不能被7整除的数存入数组a中*/{*a=i;*n=*n+1; /*统计个数*/a++;}} 解析:本题考查的知识点如下:(1)指针的使用。(2)“%”运算符。(3)判断结构中多个条件的布尔运算。本题中,函数countValue()以指针为参数,这里就要涉及到指针的使用。a是指向数组的指针,初始时,指向数组的第一个元素。地址每加1时,依次指向后面的元素。一个数a若能被b整除,则a除以b取余得数为0。能被7或11整除,但不能被7和11同时整除,则有两种情况,能被7整除但不能被11整除,能被11整除但不能被7整除。这里就要用到多个条件的布尔运算。

考题 编写函数,isValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中 Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2)最后调用函数writeDat(),把结果输出到文件OUTl0.DAT中。例如:当t=1000时,函数值为1597。注意:部分源程序已给出。请勿改动主函数main()和写函数WriteDat()的内容。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 n, s;ut = fopen ("OUT10.DAT", "w");s = jsValue(1O00); printf("% d",s);fprintf(out, "%d\n", s);fclose (out);}正确答案:int jsValue(int t){int f1=0f2=1fn;fn=f1+f2;while(fn=t) {f1=f2;f2=fn;fn=f1+f2;) /*如果当前的Fibonacci数不大于t则计算下一个Fibonacci数*/return fn; /*返回Fibonacci数列中大于t的最小的一个数*/}int jsValue(int t){int f1=0,f2=1,fn;fn=f1+f2;while(fn=t) {f1=f2;f2=fn;fn=f1+f2;) /*如果当前的Fibonacci数不大于t,则计算下一个Fibonacci数*/return fn; /*返回Fibonacci数列中大于t的最小的一个数*/} 解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量侵来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。

考题 已知在文件in.dat中存有若干个(个数<200)四位非零整数,函数readdat()读取这若干个整数并存入数组xx中。请编制函数calvflue(),其功能要求:①求出该文件中共有多少个正整数totnum;②求这些数右移1~6位,产生的一系列新数中含至少一个完全平方数(某个整数的平方)的个数totcnt,以及满足此条件的这些数(右移前的值)的算术平均值totpjz,最后调用函数writedat()把所求的结果输出到文件out.dat中。部分源程序已给出。请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。include<stdio.h>include<conio.h>define MAXNUM 200int xx[MAXNUM];iht totnum=0;iht totcnt=0;double totpjz=0.0;int readdat(void);void writedat(void);void calvalue(void){}void main (){int i;clrscr ();for (i=0; i if (readdat ()){printf("Can't open the data file in.dat!\007\n");return;}calvalue ();printf ( "totnum=%d\n", totnum);printf ( "totcnt=%d\n" , totcnt );printf ( "totpj z=%. 21f\n", totpj z);writedat ();}int readdat (void){FILE *fp;int i=0;if( (fp=fopen ("in.dar", "r") )==NULL) return 1;while ( ! feof (fp))fscanf (fp, "%d, ", &xx [i++] ;fclose (fp);return 0;}void writedat (void){FILE *fp;fp=fopen ( "out. dar", "w" )fprint f ( fp, "%d\n%d\n%. 21 f\n", totnum, totcnt, totpjz);fclose (fp);}正确答案:#include math.h>void calvalue(void){int i j data sqt;for(i=0;i {if(!xx[i]) break; /*数据结束*/if(xx[i]>0) totnum++; /*计数*/for (j=1; j=6; j++){ data=(xx[i]>>); /*移位*/sqt =(int) (sqrt ( (double) data) +0.5); /*求平方根并四舍五入取整*/if(sqt*sqt == data) /*完全平方数*/{totcnt++;totpjz+=xx[i]; /*计数求和*/break;}}}totpjz/=totcnt;}#include math.h>void calvalue(void){int i, j, data, sqt;for(i=0;i {if(!xx[i]) break; /*数据结束*/if(xx[i]>0) totnum++; /*计数*/for (j=1; j=6; j++){ data=(xx[i]>>); /*移位*/sqt =(int) (sqrt ( (double) data) +0.5); /*求平方根并四舍五入取整*/if(sqt*sqt == data) /*完全平方数*/{totcnt++;totpjz+=xx[i]; /*计数,求和*/break;}}}totpjz/=totcnt;} 解析:类型:整数移位运算。关键点:(1)数据结束判断:分析main()和readdat(),得到xx[i]为有效数据的条件是0=xx[i]MAXNUM且xx[i]!=0。(2)移位运算:>>,注意运算符优先级。(3)完全平方数判断:可以开平方再平方与原数比较,也可以枚举出10000以内所有四位完全平方数再查表,解答中采用第一种,需要加上头文件math.h。

考题 试题1下列程序的功能是:找出所有100以内(含100)满足i,i+4,i+10都是素数的整数i(i+10也在100以内)的个数cnt以及这些i之和sum。请编写函数countvalue()实现程序要求,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。注意:部分源程序已给出。请勿改动主函数main()和函数writeDAT()的内容。试题程序:#include <stdio.h>int cnt, sum;int isPrime(int number){int i, tag = 1;for (i=2; tag && i<=number/2; i++)if (number%i == 0)tag = 0;return tag;}void countValue(){}void writeDat(){FILE *fp;fp = fopen("out.dat", "w");fprintf(fp, "%d\n%d\n", cnt, sum);fclose(fp);}void main(){cnt = sum = 0;countValue();printf("满足条件的整数的个数=%d\n", cnt);printf("满足条件的整数的和值=%d\n", sum);writeDat();正确答案:试题1答案:void countvalue(){int i;for(i=2;i<=90;i++)if(isPrime(i) && isPrime(i+4) && isPrime(i+10)){cnt++;sum+=i;}} }试题1分析:该程序属于按条件查找数字的题目,考核的知识点为:(1)素数的判定;(2)统计个数并求和。本题的解题思路是:题目要求的筛选范围是“所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)”,由于最小的素数是2,且i+10要在100以内(含100),所以筛选的范围是2~90。题目要求的筛选条件是“满足i、i+4、i+10都是素数的整数i”。在答题之前,应先通读题目已给出的源程序,在我们要实现的函数countvalue()之前给出一个在题目中从未提及的函数isPrime()。仔细分析这个函数的代码不难发现,它实现了从2~number/2内寻找能整除number的数,如果找到就使变量tag为0,此时循环条件将不成了,最终返回0,如果找不到,变量tag为1,返回1.这段代码实现的是判断一个数是够是素数。所以在函数中对筛选条件可以简化为if(isPrime(i) && isPrime(i+4) && isPrime(i+10))。程序的流程是:调用countvalue()函数对数据进行处理,最后由writeDAT()函数将结果写入文件out.dat中。在countvalue()函数中,For循环的功能是判断i、i+4、i+10是否都为素数,若在素数则将i累加到sum中,同时个数cnt加1,函数结束。

考题 有以下程序includemain(){FILE *fp;int i=20,j=30,k,n;fp=fopen("d1.dat","w");fprint有以下程序 #include<stdio.h> main() {FILE *fp;int i=20,j=30,k,n; fp=fopen("d1.dat","w"); fprintf(fp,"%d\n",i;fprintf(fp,"%d\n",j); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n); fclose(fp);} 程序运行A.20 30B.20 50C.30 50D.30 20正确答案:A

考题 下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数read write DAT()把结果输出到out31.dat文件中。例如,若输入17,5,则应输出19,23,29,31,37。注意:部分源程序已给出。请勿改动主函数main()和输入输出函数read write DAT()的内容。试题程序:include < conio.h>includeVoid readwriteDAT();Void num(int m,int k,,int XX[]){}main(){int m,n,xx[1000];Clrscr();printf(“\nPlease enter tWO integers:”)‘scanf(“%d,%d”,&m,&n);num(m, n, XX);for(m=0;m<n;m++)printf(“%d”, XX[m]);printf(”\n”);readwriteDAT();)VOid read write DAT(){int m,n,xx[1000],i;FILE *rf.,*Wf;rf=fopen(“in31.Dat”,r”);Wffopen(“ou1t31.Dat”/”w”);。 for(i=0;i<10;i++){fscanf(rf,%d,” %d”,&m,&n);num(m,n,XX);for(m=0;m fprintf(wf,%d”,xx[m]);fprintf (wf, “\n”);}fclose(rf);fclose (wf);}正确答案:void num(int mint kint xxl)){int data=m+l; /*从大于整数m的数开始找*/int halfIn=0;while(1){half=data/2;for(I=2;I<=half;I++) /*如果该数依次除以从2到一半的整数余数都不是0则该数是素数*/if(]if(data%I==O) break; /*如果余数为0则退循环取下一个数判断*/if(I>half){ xx[n]=data;n++; /*判断该数为素数后将该数存入数组xx中并累计素数的个数*/} if(n>=k) break; /*如果累计素数的个数超过了要求的个数则退出循环*/data++; /*如果累计素数的个数小于要求的个数则继续取下一个数*/}}void num(int m,int k,int xxl)){int data=m+l; /*从大于整数m的数开始找*/int half,I,n=0;while(1){half=data/2;for(I=2;I<=half;I++) /*如果该数依次除以从2到一半的整数,余数都不是0,则该数是素数*/if(]if(data%I==O) break; /*如果余数为0,则退循环,取下一个数判断*/if(I>half){ xx[n]=data;n++; /*判断该数为素数后,将该数存入数组xx中,并累计素数的个数*/} if(n>=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/data++; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/}} 解析:本题考查的知识点如下: (1)循环结构与选择结构的嵌套使用。 (2)强行退出循环结构。 (3)特殊运算符"%"的使用。 素数是除了1和它本身之外不能被其他数整除的数(1除外)。在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数据a依次除以从2到a/2的整数,余数都不是 0,则该数是素数。因为所给的数据是连续的数,而且最终所求的数据的个数一定,所以这里可以使用循环结构对数据依次筛选。同时嵌套选择结构对筛选的数据进行不同的处理。在a依次除以从2到a/2的整数的过程中,只要有一次余数为0,则可退出这一层循环,即退出整除取余的循环,进入下一个数的判断中。

考题 下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数 cnt,以及满足此条件的所有SIX与NINE的和sum。请编写函数countValue()实现程序要求,最后调用函数 writeDAT()把结果cnt和sam输出到文件OUT51.DAT中。其中的S,L X,N,I,N,E各代表一个十进制数。注意:部分源程序已给出。请勿改动主函数main()和写函数writeDAT()的内容。试题程序:include<stdio. h>int cnt, sum;void countValue(){}void main (){cnt=sum=O;countValue ();printf ("满足条件的个数=%d\n", cnt);printf ("满足条件所有的SIX与NINE的和=%d\n", sum);writeDAT ();}writeDAT ( ){FILE *fp;fp=fopen("OUT51.DAT", "w");fprintf (fp, "%d\n%d\n", cnt, sum);fclose (fp);}正确答案:void countValue(){int i=100;while (1){if(3*i%2==0 && 3'i/2>=1000 && 3'i/2=9999)/*如果满足条件SIX+SIX+SIX=NINE+NINE*/{ /*即一个3位数乘3再除2余数为0且所得的数为4位数*/cnt++; /*统计满足条件的数的个数*/sum+=i+3*i/2; /*求满足上条件的所有SIX与NINE的和*/i++;}else i++; /*如果果不满足条件则取下一个数*/if(i>999 II 3'i/2>9999)break; /*当SIXP不为3位数或所得的数不为四位数时退出循环*/ }}}void countValue(){int i=100;while (1){if(3*i%2==0 && 3'i/2>=1000 && 3'i/2=9999)/*如果满足条件SIX+SIX+SIX=NINE+NINE*/{ /*即一个3位数乘3再除2余数为0,且所得的数为4位数*/cnt++; /*统计满足条件的数的个数*/sum+=i+3*i/2; /*求满足上条件的所有SIX与NINE的和*/i++;}else i++; /*如果果不满足条件,则取下一个数*/if(i>999 II 3'i/2>9999)break; /*当SIXP不为3位数或所得的数不为四位数时,退出循环*/ }}} 解析:本题二查的知识点如下: (1)循环与判断的嵌套使用。 (2)多条件的布尔运算。 (3)“%”与“/”运算符的使用。 根据题意,求的是满足3位数乘以3等于4位数乘以2的数的个数。我们可以使用循环结构对所有的3位数进行判断,若某个3位数乘以3整除2所得的数是4位整数,则这个3位数是满足条件的数。当判断的数不再是3位数或者进行处理后所得的数大于9999,则要退出循环。在这里,还要注意判断结构中,各条件之间是用“与”运算还是用“或”运算。

考题 试题2本程序中,函数fun的功能是计算整数n的阶乘。程序中存在若干错误,请找出并改正。(注意:不改动程序的结构,不得增行或删行。)#include <stdio.h>double fun(int n){ double result=1.0;while (n>1 && n<170)result*=- -n;return;}main(){ int n;clrscr ();printf(“Enter an integer:”) ;scanf(“%d”,&n);printf(“\n\n%d!=%lg\n\n”,n,fun(n)) ;nono ();{int n,i;FILE *rf, *wf ;rf = fopen (“g03.in”,“r”) ;wf = fopen(“g03.out”,“w”) ;for (i=1; i<=10;i++){ fscanf(rf, “%d”,&n) ;fprintf (wf, “%lg\n”,fun( n ) );}fclose (rf) ;fclose (wf) ;}正确答案:试题2分析**********************本题中函数的功能是计算整数n的阶乘,result存放阶乘的结果,result*=- -n;是先将n的值减1,然后在于result相乘,此举并没有将n本身计算进去。最后返回的时候,返回的应该是result。试题2答案*************************[1] 第5行的result*=--n改为result*=n--;[2] 第6行的return后面加上返回值(result)。

考题 阅读以下C代码,回答问题1至问题3,将解答填入答题纸的对应栏内。【C代码1】 float adjustSalary(int service_year,int age,float salary) { if( service_year 30 ) salary *= 1.2; } else salary *= 2.0; return salary;} 【C代码2】 void foo(int coin) { switch (coin) { case 1: printf("Cent\n"); case 5: printf("Nicke1\n");break; case 10: printf("Dime\n"); case 25: printf("Quarter\n"); }} 【C代码3】 int getSum(int n){ int t, i = 0, sum = 0; while ( i 答案:解析:【参考答案】(1)x1=9000.000000(2)x2=14000.000000(3)x3=6000.000000【参考答案】(1)foo(1):Cent Nickel(2)foo(5):Nickel(3)foo(10):Dime Quarter(4)foo(25):Quarter 【参考答案】(1)函数getSum()是求n个不小于0的整数之和。(2)函数getSum_v2的功能与函数getSum不同,getSum()是求n个不小于0的整数之和,计算和的数目总数是n个,而getSum_v2是总共输入了n个数,这n个数种有大于等于0,也有小于0的数,最终只把大于等于0的数进行求和,因此最终计算的和的个数有可能是小于n的。 【解析】【解析】 对于x1,service_year=1,age=25,salary=9000.0,首先判断service_year5,因此直接进行else中的运算,salary=7000.0*2.0=14000.0,由于salary为float类型数据,因此输出为14000.000000。 对于x3,service_year=5,age=41,salary=5000.0,首先判断service_year30,进行运算salary=5000.0*1.2=6000.0,由于salary为float类型数据,因此输出为6000.000000。【解析】foo(1):coin=1,执行printf(“Cent\n”),输出Cent并回车,继续执行printf(“Nickel\n”),输出Nickel并回车,再执行break,结束foo函数。foo(5):coin=5,执行printf(“Nickel\n”),输出Nickel并回车,再执行break,结束foo函数。foo(10):coin=10,执行printf(“Dime\n”),输出Dime并回车,继续执行printf(“Quarter\n”),输出Quarter并回车,结束foo函数。Foo(25):coin=25,执行printf(“Quarter\n”),输出Quarter并回车,结束foo函数。【解析】(1)函数getSum()是求n个不小于0的整数之和。(2)函数getSum_v2的功能与函数getSum不同,原因:在getSum中,当t

考题 有以下程序:includemain(){FILE*fp;int a[10]={1,2,3},i,n;fp=fopen("d1.dat","w");fo有以下程序: #include<stdio.h> main() {FILE*fp;int a[10]={1,2,3},i,n; fp=fopen("d1.dat","w"); for(i=0;i<3;i++)fprintf(fp,"%d",a[i]); fprintf(fp,"\n"); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp,"%d",&n); fclose(fp); printf("%d\n",n); 程序的运行结果是( )。A.12300B.123C.1D.321正确答案:B