国家计算机等级考试二级c语言南开100套题C语言Word格式文档下载.doc
《国家计算机等级考试二级c语言南开100套题C语言Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《国家计算机等级考试二级c语言南开100套题C语言Word格式文档下载.doc(93页珍藏版)》请在冰点文库上搜索。
;
函数实参调用,函数作为另一个函数调用的实际参数出现。
【解题思路】
填空1:
计算圆的面积,公式为:
*r。
填空2:
scanf()函数一般形式为scanf(格式控制,地址表列),因此填入&
x。
填空3:
函数的实际参数是圆的半径x。
下列给定程序中,函数fun的功能是:
计算S=f(-n)+f(-n+1)+…+f(0)+f
(1)+f
(2)+…f(n)的值。
例如,当n为5时,函数值应为10.407143。
f(x)函数定义如下:
f(x)=
请改正程序中的错误,使它能得出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<
stdlib.h>
conio.h>
math.h>
/*************found**************/
f(doublex)
if(x==0.0||x==2.0)
return0.0;
elseif(x<
0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
doublefun(intn)
{
inti;
doubles=0.0,y;
for(i=-n;
i<
=n;
i++)
{y=f(1.0*i);
s+=y;
returns
{system("
CLS"
printf("
%f\n"
fun(5));
【参考答案】
(1)错误:
f(doublex)正确:
doublef(doublex)
(2)错误:
returns正确:
returns;
函数的定义,其一般形式为"
类型标识符函数名(形式参数表列)"
其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
该程序的流程是,fun()程序对f(n)项循环累加,并且采用条件选择语句计算函数f(x)的值。
本题的错误在于未定义函数f(doublex)的返回值类型。
C语言规定,在未显式声明的情况下,函数返回值默认为int型。
编写函数fun,函数的功能是:
根据以下公式计算s,计算结果作为函数值返回;
n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)
例如,若n的值为11时,函数的值为1.833333。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
string.h>
floatfun(intn)
FILE*wf;
intn;
floats;
system("
\nPleaseenterN:
scanf("
%d"
&
n);
s=fun(n);
Theresultis:
%f\n"
s);
/******************************/
wf=fopen("
out.dat"
"
w"
fprintf(wf,"
%f"
fun(11));
fclose(wf);
/*****************************/
floatfun(intn)
inti,s1=0;
/*定义整型变量s1,表示分母*/
floats=0.0;
/*定义单精度变量s,表示每一项*/
for(i=1;
i<
i++){
s1=s1+i;
/*求每一项的分母*/
s=s+1.0/s1;
/*求多项式的值*/
}
returns;
}
【考点分析】
本题考查:
计算给定表达式的值,根据题意判断表达式为1到n累加倒数之和。
变量数据类型及强制转换操作。
for循环语句,一般情况需要确定循环变量的取值范围。
使用return语句完成函数值的返回。
本题可以通过for循环语句来实现第1项到第n项的变化,然后计算各项的累加和。
方法是先根据题目要求定义变量(注意该变量的数据类型),然后对其进行初始化操作,因为该变量用作累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。
本题中s1用来表示式中每一项的分母,它可以由前一项的分母加项数得到。
由于s1定义成一个整型,所以在s=s+1.0/s1中不能把1.0写成1。
【解题宝典】
此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。
第二套
请补充main函数,该函数的功能是:
计算两个自然数n和m(m<
10000)之间所有数的和(n和m从键盘输入)。
例如,当n=1,m=100时,sum=5050;
当n=100,m=1000时,sum=495550。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
intn,m;
longsum;
【1】;
system("
printf("
\nInputn,m\n"
scanf("
%d,%d"
n,&
m);
while(n<
=m)
{
【2】;
n++;
}
sum=%【3】\n"
sum);
【参考答案】
(1)sum=0
(2)sum+=n(3)ld
变量初始化,需要注意该变量是累加器还是累乘器:
printf()函数,其一般形式为"
格式控制符"
输出表列)"
。
其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如"
%ld"
表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。
变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。
通过while循环将自然数n和m之间的数进行累加,结果存于sum中。
由于sum为长整型,所以标准输出函数printf()中的格式控制符为"
下列给定程序中,fun函数的功能是:
根据形参m,计算下列公式的值:
t=1+1/2+1/3+1/4+…+1/m
例如,若输入5,则应输出2.283333。
请改正程序中的错误,使它能计算出正确的结果。
doublefun(intm)
doublet=1.0;
intI;
for(I=2;
I<
=m;
I++)
t+=1.0/k;
returnI;
{intm;
system("
printf("
\nPleaseenter1integernumber:
scanf("
\nTheresultis%1f\n"
fun(m));
(1)错误:
t+=1.0/k;
正确:
t+=1.0/I;
(2)错误:
returnI;
正确:
returnt;
for循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;
函数返回值,其一般形式为"
return表达式;
该语句的功能是计算表达式的值,并返回给主调函数。
(1)该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件for(I=2;
I++),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=1.0/k;
(2)returnI;
考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。
请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中"
a"
到"
z"
26个字母各自出现的次数,并依次放在pp所指数组中。
例如,当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:
333221110000000000000000000
voidfun(char*tt,intpp[])
voidmain()
{
charaa[1000];
intbb[26],k;
\nPleaseenteracharstring:
);
%s"
aa);
fun(aa,bb);
for(k=0;
k<
26;
k++)
printf("
%d"
bb[k]);
\n"
fun("
abcdefgabcdeabc"
bb);
fprintf(wf,"
voidfun(char*tt,intpp[])
inti;
for(i=0;
26;
i++)
pp[i]=0;
/*初始化pp数组各元素为0*/
for(;
*tt!
='
\0'
tt++)
if(*tt>
a'
*tt<
z'
)
pp[*tt-'
]++;
/*将tt字符串中'
到'
26个字母各自出现的次数,依次放在pp数组中,任一个小写字母减去'
后所得结果正好是它对应的下标*/
统计小写字母在指定字符串中出现次数。
for循环语句,需要注意循环变量的取值范围。
if条件语句要注意条件表达式的判定。
第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。
由于它要将'
26个字母的个数依次放到数组pp中,即'
的个数存于pp[0]中,'
b'
的个数存于pp[1]中,'
c'
的个数存于pp[2]中,…,依此类推,而'
-'
的值正好为0,'
的值为1,'
-'
的值为2,…,依此类推。
任一个小写字母减去'
后所得结果正好是它对应的下标,所以就有了pp[*tt-'
]++,但*tt必须是小写字母,即if()不应省略。
。
第三套
判断字符ch是否与串str中的某个字符相同,若相同什么也不做,若不同则插在串的最后。
请勿改动函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
voidfun(char*str,charch)
while(*str&
*str!
=ch)str++;
if(*str【1】ch)
{str[0]=ch;
【2】=0;
}
{chars[81],c;
\nPleaseenterastring:
gets(s);
\nPleaseenterthecharactertosearch:
c=getchar();
fun(【3】);
\nTheresultis%s\n"
s);
【参考答案】
(1)!
=
(2)str[1]或*(str+1)(3)s,c
if语句,一般掌握条件表达式的判定。
函数的调用,其一般形式为"
函数名(实际参数表)"
根据题意"
若相同什么也不做"
则应填入!
=。
若不同则插在串的最后,那么0就在字符串的倒数第二了。
函数传递的参数为输入的两个字符串,则填入s,c。
分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:
AaaaBBb123CCccccd,则应输出结果:
upper=5,lower=9。
#include<
/*********found***********/
voidfun(char*s,inta,intb)
while(*s)
{
/*********found***********/
if(*s>
A'
&
*s<
Z'
)
a++;
b++;
s++;
}
main()
chars[100];
intupper=0,lower=0;
\npleaseastring:
gets(s);
fun(s,&
upper,&
lower);
\nupper=%dlower=%d\n"
upper,lower);
(1)错误:
voidfun(char*s,inta,intb)
正确:
voidfun(char*s,int*a,int*b)
a++;
正确:
(*a)++;
(3)错误:
b++;
(*b)++;
函数的参数传递和指针变量,理解指针变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。
(1)根据题中程序可以看出,函数fun传递的是地址,那么,在函数中就应该出现指针,所以改为voidfun(char*s,int*a,int*b)。
(2)和(3)很明显,这里是要累加数值,因为a、b是指针变量,所以是错误的。
请编写函数fun,它的功能是:
求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3。
#defineM81
intfun(char*ss,charc)
chara[M],ch;
\nPleaseenterastring:
gets(a);
\nPleaseenterachar:
ch=getchar();
\nThenumberofthecharis:
%d\n"
fun(a,ch));
fprintf(wf,"
fun("
123412132"
'
1'
));
intfun(char*ss,charc)
inti=0;
*ss!
\0'
ss++)
if(*ss==c)
i++;
/*求出ss所指字符串中指定字符的个数*/
returni;
字符串结束标识'
for循环语句,如何遍历字符串;
通过if条件语句,判断是否相同。
从字符串ss中找出子字符串的方法是:
从第1个字符开始,对字符串进行遍历;
若ss串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;
若比较至字符串的结尾,则跳出循环;
若ss串的字符和c串的字符不对应相同,则继续对ss串的下一个字符进行处理。
本程序是采用逐一比较的方式找出出现的次数。
循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同,则表示又出现一次。
第四套
请补充函数fun,该函数的功能是:
把ASCII码为偶数的字符从字符串str中删除,结果仍然保存在字符串str中,字符串str从键盘输入,其长度作为参数传入函数fun。
例如,输入"
abcdef"
输出"
ace"
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
#defineN80
【1】
inti,j;
【2】;
for(i=0;
n;
if(s[i]%2!
=0)
s[j++]=s[i];
【3】;
inti=0,strlen=0;
charstr[N];
\nInputastring:
\n"
gets(str);
while(str[i]!
strlen++;
i++;
fun(str,strlen);
\n***displaystring***\n"
puts(str);
(1)voidfun(chars[],intn)
(2)j=0
(3)s[j]='
函数定义,需要确定类型标识符、函数名和形式参数。
变量初始化,变量声明后,要进行初始化赋值,我们对变量进行初始化时,必须确定好变量的作用。
,用来结束字符串,是经常考查的知识点。
由main函数调用函数fun的格式可以知道,函数fun没有返回值,第一个参数是字符数组,第二个参数是整型变量。
变量j声明时,没有初始化,所以在使用j之前要将它初始化为0。
当把所有ASCII码为偶数的字符都存入字符串s中后,要在最后加上'
,表示字符串的结束。
下列给定程序中函数fun的功能是:
计算正整数num各位上的数字之积。
例如,若输入252,则输出应该是20。
若输入202,则输出应该是0。
longfun(longnum)
/*************found********