国家二级C语言机试(操作题)模拟试卷253 (题后含答案及解析)
全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题
程序填空题
1. 给定程序中,甬数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请存程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序:1 #include<stdio.h>2 #include<stdlib.h>3 void fun(char * s,int a,double f)4 {5 /********* found*********/6 【1】fp;7 chat sir[100],str1[100],sir2[100];8 int a1;double f1;9 fp=fopen(‘‘file1.txt’’,’’w’’);10 fprintf(fp,’’%s%d%f\n’’,s,a,f);11 /*********found*********/12 【2】;13 fp=fopen(‘‘file1.txt’’,’’r’’);14 /********* found*********/15 fscanf(【3】,’’%s%s%s’’,str,str1,str2);16 fclose(fp);17 a1=atoi(str1);18 f1=atof(str2);19 printf(‘‘\nThe result:\n\ n%s%d%f\n’’,str,a1,f1);20 }21 main( )22 {char a[10]=‘‘Hello!’’;23 int b=12345;24 double c=98.76;25 fun(a,b,c);26 }
正确答案:(1)FILE* (2)fclose(fp) (3)fp
解析:填空1:从使用fp=fopen(‘‘filel.txt’’,’’w’’)可知fp应该是文件类型指针,因此本空应该填写FILE*。 填空2:当对fp作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对fp进行关闭,本空填fclose(fp)。 填空3:fscanf( )是把文本文件输出,因此本空只能填写fp。
程序修改题
2. 已知一个数列从0项开始的前3项:0、0、1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。 例如,当n=10时,程序的输出结果应为23.197745。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:1 #include<stdlib.h>2 #include<conio.h>3 #include<stdio.h>4 #include<math.h>5 /*********found*********/6 fun(int n)7 {double sum,s0,s1,s2,s;8 int k;9 sum=1.0;10 if(n<=2)sum=0.0;11 s0=0.0;s1=0.0;s2=1.0;12 for(k=4;k<=nj k++)13 {s=s0+s1+s2;14 sum+=sqrt(s);15 s0=s1;s1=s2;s2=s;16 }17 /*********found*********/18 return sum19 }20 void main( )21 {int n;22 system(‘‘CLS’’);23 printf(‘‘Input
N=‘‘);24 scanf(‘‘%d’’,&n);25 printf(‘‘%f\n’’,fun(n));26 }
正确答案:(1)double fun(int 11)(2)return sum;
解析:(1)根据函数的返回值可知函数fun应定义为double类型。(2)语法错误,缺分号。
程序设计题
3. 编写函数fun,其功能是:求Fi-bonacci数列中大于t的最小的数,结果由函数返回。Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 例如,当t=1000时,函数值为1597。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:1 #include<conio.h>2 #include<math.h>3 #include<stdio.h>4 int fun (int t)5 {67 }8 main( )9 {10 int n ;11 n=1000;12 printf(‘‘n=%d,f=%d\n’’,n,fun(n));13 }
正确答案:1 int fun(int t)2 {3 int f0=0,f1=1,f;4 do{5 /*根据Fiborlacci数列的定义求数值*/6 f=f0+f1;7 f0=f1;f1=f;8 } while(f<t);/*如果求的数值小于t则继续*/9 return f;10 }
解析:根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把f看成是前两项之和,而f0始终代表第n-2项,f1代表第n-1项。退出循环时得到的数f,就是大于指定数的最小的数。
因篇幅问题不能全部显示,请点此查看更多更全内容