没有合适的资源?快使用搜索试试~ 我知道了~
首页国家计算机二级C语言108套操作题真题及答案解析.doc
国家计算机二级C语言108套操作题真题及答案解析.doc
需积分: 34 690 浏览量
更新于2023-03-16
评论 2
收藏 2.42MB DOC 举报
下列给定程序中,函数fun的功能是:计算如下公式 直到 ,并且把计算结果作为函数值返回。 例如,若形参e的值为1e-3,则函数返回值为0.551690。请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include <stdio.h> double fun(double e) { int i, k; double s, t, x; s=0; k=1; i=2; /**********found**********/ x=__1__/4; /**********found**********/ while(x __2__ e) { s=s+k*x; k=k* (-1); t=2*i; /**********found**********/ x=__3__/(t*t); i++; } return s; } main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); }
资源详情
资源评论
资源推荐

所属年份:2010.9;2011.3;2012.3;2012.9
下列给定程序中,函数fun的功能是:计算如下公式
直到,并且把
计算结果作为
函数值返回。
例如,若形参e的值
为1e-3,则函数返回值为0.551690。请在下画线处填入正确的内容并
将下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double fun(double e)
{ int i, k; double s, t, x;
s=0; k=1; i=2;
/**********found**********/
x=__1__/4;
/**********found**********/
while(x __2__ e)
{ s=s+k*x;
k=k* (-1);
t=2*i;
/**********found**********/
x=__3__/(t*t);
i++;
}
return s;
}
main()
{ double e=1e-3;
printf("The result is: %f",fun(e));
}
【参考答案】
(1)3.0或(double)3 (2)> (3) (t+1)
【考点分析】
本题考查:基本算术运算时的类型转换,其转换规则为:
如果双目运算符两边运算数的类型一致,则所得结果的类型与运算
数的类型一致;
如果双目运算符两边运算的类型不一致,系统将自动进行类型转换,
使运算符两边的类型达到一致后,再进行运算规律见下表。
运算数1 运算数2 转换结果类型
短整型 大整型 短整型→长整型
整型 大整型 整型→长整型
字符型 整型 字符型→整型
有符号整型 无符号整型 有符号整型→无符号整型
整型 浮点型 整型→浮点型
while循环语句,一般考查如何根据题意确定循环条件,以及如何通
过循环变量变化实现循环操作。
【解题思路】
填空1:变量x定义为double类型,而运算符"/"后面是整型数,所以给
x赋值时,需要注意数据类型,此处不能将3.0写成3。
填空2:while循环语句的循环条件,根据题意确定循环变量应大于1e
-3,因此此处应填">"。
填空3:表达式的通项是(2*i+1)/(2*i)
2
,由于程序中已定义t=2*i,所
以此处应该填写(t+1)。
【解题宝典】
本题填空1还可以运用强制类型转换来实现。强制类型转换是通过类
型转换运算来实现的。其一般形式为:"(类型说明符) (表达式)"。其
功能是:把表达式的运算结果强制转换成类型说明符所表示的类型。
例如:
(float) a 把a转换为实型
(int)(x+y) 把x+y的结果转换为整型
1
2
2 2 2
2 1
3 5 7
2 4 6
2
n
n
s
n
… - 1
3
2
2 1
10
2
n
n

所属年份:2010.9;2011.3;2012.3;2012.9
下列给定程序中函数fun的功能是:求出如下分数序列的前n项之
和。和值通过函数值返回。
例如,若n=5,则应输
出8.391667。
请改正程序中的错误,使其得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改
的程序的结构!
#include <stdio.h>
/************found************/
void fun ( int n )
{ int a, b, c, k; double s;
s = 0.0; a = 2; b = 1;
for ( k = 1; k <= n; k++ ) {
/************found************/
s = s + (Double)a / b;
c = a; a = a + b; b = c;
}
return s;
}
main( )
{ int n = 5;
printf( "\nThe value of function is: %lf\n", fun ( n ) );
}
【参考答案】
(1)double fun(int n)
(2)s=s+(double)a/b;
【考点分析】
本题考查:函数定义,函数定义的一般形式为:"类型标识符 函数
名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的
类型实际上是函数返回值的类型。
【解题思路】
(1)由语句"return(s)"和变量s定义为double数据类型可知,该函数定义
时其类型标识符为double类型。
(2)注意数据类型double的书写格式。
【解题宝典】
确定函数类型标识符在填空和改错题中经常考到,如果函数没有返
回值,则函数定义为void型;如果函数有返回值,则函数类型应与返
回值类型一致;如果不定义函数类型标识符,则系统默认为int型。
所属年份:2010.9;2011.3;2012.3;2012.9
请编写函数fun,其功能是:找出2×M整型二维数组中最大元素
的值,并将此值返回调用函数。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的
花括号中填入你编写的若干语句。
#include <stdio.h>
#define M 4
int fun (int a[][M])
{
}
main( )
2 3 5 8 13 21
, , , , , ,
1 2 3 5 8 13
…

{ int arr[2][M]={5,8,3,45,76,-4,12,82} ;void NONO ();
printf("max =%d\n", fun(arr)) ;
NONO( ) ;
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文
件。 */
FILE *wf ;
int arr[][M]={5,8,3,90,76,-4,12,82} ;
wf = fopen("out.dat","w") ;
fprintf(wf, "max=%d\n", fun(arr)) ;
fclose(wf) ;
}
【参考答案】
int fun (int a[][M])
{
int i,j,max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(max<a[i][j])
max=a[i][j];
return max;
}
【考点分析】
本题考查:求数组的最大值,需要运用循环语句,因为数组是二维
数值,所以应使用二层加for循环嵌套。使用for循环语句时需要注意
循环变量的取值范围。
【解题思路】
此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要
求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。
首先定义变量max存放数组中的第一个元素的值,然后利用for循环
逐个找出数组中的元素,并与max比较,如果元素值大于max,则将
该值赋于max,循环结后max的值即为数组最大值,最后将该值返回。
【解题宝典】
该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,
如采用逐行查找方法,代码实现为:
for(i=0;i<m;i++)
for(j=0;j<n;j++)
……
所属年份:2010.9;2012.3;2012.9
下列给定程序中,函数fun的功能是:计算如下公式前n项的和并
作为函数值返回。
例如,
当形参n
的值为10时,函数返回值为9.612558。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的
结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double fun(int n)
{ int i; double s, t;
/**********found**********/
s=__1__;
/**********found**********/
for(i=1; i<=__2__; i++)
{ t=2.0*i;
/**********found**********/
s=s+(2.0*i-1)*(2.0*i+1)/__3__;
}
return s;
2
2 2 2
2 1 (2 1)
1 3 3 5 5 7
2 4 6
2
n n
s
n
…

}
main()
{ int n=-1;
while(n<0)
{ printf("Please input(n>0): "); scanf("%d",&n); }
printf("\nThe result is: %f\n",fun(n));
}
【参考答案】
(1) 0 (2) n (3) (t*t)
【考点分析】
本题考查:变量初始化操作,需要注意该变量是用作累加器还是累
乘器;for循环语句。
【解题思路】
填空1:程序开始定义了变量s,但没有对其进行初始化,根据公式
及后面的程序可知变量s用来存储公式的前n项和,因此该变量应初
始化为0。
填空2:通过for循环语句将表达式各项进行累加,结果存于变量s中,
循环变量i的取值范围为1~n。
填空3:根据题目要求确定表达式通项,前面已定义 t=2.0*i,因此
此空应填(t*t)。
【解题宝典】
程序要求计算表达式值时,一般我们都设定一个变量s,并赋初值,
如果s用来存放表达式的和,则赋初值为0;如果s用来存放表达式的
积,则赋初值为1。
所属年份:2010.9;2012.3;2012.9
下列给定程序中函数fun的功能是:统计substr所指的子符串在str
所指的字符串中出现的次数。
例如,若字符串为aaas 1kaaas,子字符串为as,则应输出2。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得
更改的程序的结构!
#include <stdio.h>
int fun (char *str,char *substr)
{ int i,j,k,num=0;
/************found************/
for(i = 0, str[i], i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)
/************found************/
If(substr[k+1]=='\0')
{ num++;
break;
}
return num;
}
main()
{
char str[80],substr[80];
printf("Input a string:") ;
gets(str);
printf("Input a substring:") ;
gets(substr);
printf("%d\n",fun(str,substr));
}
【参考答案】
(1)for(i=0;str[i];i++)
(2)if(substr[k+1]== '\0')
【考点分析】
本题考查:for循环语句的格式,for循环语句使用最为灵活,其一般
形式为:for(表达式1;表达式2;表达式3) ,注意表达式之间使
用";"相隔;if条件语句的格式,其中if关键字需要区别大小写,这

里不能混淆使用。关键字是由C语言规定的具有特定意义的字符串,
也称为保留字。用户定义的标识符不应与关键字相同,并且关键字
应小写。
【解题思路】
我们先看循环条件for(i = 0, str[i], i++),不难发现此处for循环语句
的格式有误,其中表达式之间应以";"相隔;同时很容易发现if条件
语句处的关键字书写错误。
所属年份:2010.9;2012.3;2012.9
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.000
5,即某项小于0.0005时停止迭代)。
程序运行后,若输入精度0.0005,则程序应输出为3.14…。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的
花括号中填入你编写的若干语句。
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文
件。 */
FILE *fp, *wf ;
int i ;
double x ;
fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%lf", &x) ;
fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}
【参考答案】
double fun ( double eps)
{
double s=1.0,s1=1.0;
int n=1;
while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/
{s1=s1*n/(2*n+1); /*求多项式的每一项*/
s=s+s1; /*求和*/
n++;
}
return 2*s;
}
【考点分析】
本题考查:迭代法求给定多项式的值,迭代算法:让计算机对一组
1 1 2 1 2 3 1 2 3 4 1 2
1
2 3 3 5 3 5 7 3 5 7 9 3 5 2 1
n
n
…
……
…
剩余63页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0