2012全国计算机二级C语言(C++)上机编程题技巧总结和答案 下载本文

(3) 在fun函数中输入测试数据,编译,执行,该题函数返回void则无需return语句,出

现下图结果。执行时必须输入两个整型数:格式必须为17,5两个数终将要加一个逗号。执行结果中必须出现“Press any key to continue”字样才会生成out.dat文件,都则将不生成该文件。

(4) 打开in.dat。

fscanf(rf, \表示从in.dat中输入两个数给变量m和n,以第一行为例将101给了m,将7给了n,即找出101后面的7个素数放在out.dat中。

(5) 打开out.dat。

for( m = 0 ; m < n ; m++ ) fprintf(wf, \将m个素数以%d 的形式输出,注意%d后面有一个空格,输出的时候要原样输出。根据in.dat中的第一行数据我们可以知道101后面的7个素数为:103 107 109 113 127 131 137,计算的时候多带几个数字进去就行,一般个位出现1,3,5,7,9都很难被其它的数字整除。

第十一种类型:数学问题三,公式类型

1. 考题中对应题目编号:6、11、14、34、48、49、67、73、76、89、91,该类型题目如果使用特

殊方法做题,将不变的复杂,因此该类型题目只能使用编程的方法来执行。 2. 考题6和73题一样,题目要求:根据公式求pi的值,要求精度满足0.0005,即某项小于0.0005

时停止迭代

观察表达式,左边求出的是pi的值的一半,所以右边的表达式的值的计算好后应该乘以2才能得到pi的值,观察表达式的右边 ,右边表达式中有分子、分母以及各表达式的值的和,分子是阶乘、分母是奇数项的积,分子除以分母得到一项的值。由此定义三个变量:s1代表分子,s2代表分母、s3代表各项的和,定义一个整型变量i,让变量i从1开始。知道循环的结束。

(1) 将下面的代码写入fun函数体中

(2) 编译,执行函数

(3) 执行过程时输入测试数据0.0005,最后输出PI的值为3.14?..为正确的结果,交卷

即可

注意:此题目中要特别注意,循环语句的表达式2的判断条件是s1/s2>=eps,而不是i<=n,循环语句的语句的顺寻不能颠倒,即先加之后再计算。

3. 考题11,题目要求:求出能整除形参x且不是偶数的各个整数,并从小到大的顺序放在pp所

指的数组中,这些除数的个数通过形参n返回。

此题中要求能整除x,那么x应该为分子,而不是分母,把满足条件的数组放到pp所指的数组中,即pp数组应用一个整型的变量来做pp下标,数组下标从0开始,所以定义一个整形变量k并且赋初值为0;满足条件的个数通过形参传回。

(1) 在fun函数中输入代码:

(2) 编译运行程序,输入测试数据35,输出1,5,7,35就说明正确,交卷即可

备注:此题目中不能把i初值定义为0,否则程序运行时得不到结果。

4. 考题14:求小于形参n能同时被3和7同时整除的所有自然数之和的平方根。67题和14题类

似。

首先看清题意,题目中要求是小于形参n,不包括n,能被3与7整除,两者用逻辑与连接,平方根用平方根的函数sqrt;此题中要求的是自然数的和的平方根,而不是平方根的和,所以要先把满足条件的数加起来后再开方。定义一个整型变量i,让该变量由1直到n-1,用循环实现,一个整形变量s,让该变量存放的是满足条件的数的和,由于s为全局变量,故应该赋初值为0;

int i,s=0;

for(i=1;i

if(i%3==0&&i%7==0) s+=i;

return sqrt(s);

5. 34、观察表达式,表达式的分子为x的n次冥,分母为数字的阶乘,s为表达式的累加和,定义

三个变量s1为分子 ,s2为分母,s为分子除以分母的和。

float s1=1.0,s2=1.0,s=1.0; int i;

for(i=1;i<=n;i++) {

s1*=x; s2*=i; s+=s1/s2;

}

return s;

备注:此时s的值不能赋初值为0;如果s得初值为0,此时表达式的值中没有第一项的值。并且必须用return返回。

6. 48、该表达式的分子均为1,分母为该项和下一项的积,s为最后表达式的累加和,定义一个整

形变量I,用于代表某一项的序号,则i+1到表达的是下一项的序号。

float s=0.0; int i;

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

s+=1.0/(i*(i+1)); return s;

备注:

分子为1.0,而不能是1;因为c语言中规定,整型除以整型,得到的值仍然为整型,。

i+1必须用括号括起来,如果没有用括号括起来,根据乘法运算规则,则先运算i*i,再运算i*i+1的值。

7. 49、在该表达式中,分子分母都是阶乘,可以看做是三个数之间的运算,其中的每一个数都是

另外一个数的阶乘,定义三个变量,其中s1代表的是m的阶乘,s2代表的n的阶乘,s3代表的是m-n的阶乘,表达式的值可以计算为:s1/(s2*s3);

三个变量都是代表的是阶乘,所以在赋初值时应该赋初值为1或者是1.0;

float s1=1.0,s2=1.0,s3=1.0; int i;

for(i=1;i<=m;i++) s1*=i; for(i=1;i<=n;i++) s2*=i; for(i=1;i<=m-n;i++) s3*=i; return s1/(s2*s3);

8. 67、题目要求:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有的整数。

分析题目可以知道求出1到1000之间的数字必须使用循环,起始值为1,终止值为1000,否则太复杂,不能同时被7和11整除即时不能被7和11的乘积77整除,最后通过n返回满足条件的个数。

程序如下,经过编译执行后得到的结果如下:

9. 76、

分析题目知道F(0)和F(1)是两个初始值为0和1,假设F(0)为变量a,F(1)为变量1,假设F(n)为c,则: a=0,b=1;

F(3)=F(2)+F(1)即:F(3)=b+a=1 即:c=b+a

F(4)=F(3)+F(2)即:F(4)=(b+a)+b=2 即:c=(b+a)+b 换种形式:c=b+a,即b的值应该为

上一步中c的值,a应该为上一步中b的值,依次类推即可使用循环来实现结果。

使用C语言编程时,必须给变量C赋值,题目中要求找出大于t的最小的数,话句话说就是当c的值小于等于t时就循环,一直找到大于t的最小数为止。程序如下,当执行编译、运行后程序输出f的值为1597就为正确的,否则需要再仔细检查代码。

10. 89、求出1到m之间各个数字ln(i)值的和的平方根。

分析:

(1) 题目中要求计算1到m的ln(i),则必须使用循环,i从0开始到m结束,ln(i)在

C语言中必须改为log(i);

(2) sum=sum+log(i)表示求出1到m的ln(i)的和 (3) return sqrt(sum)表示函数返回sum的平方根 (4) 程序输出6.506583时为正确结果

11. 91、

分析:

(1) 观察计算公式可以知道,题目要求做的事情就是将1/1+1/(1+2)+?的和进行返回,

因此确定循环变量i的值必须从1开始,一直到n结束。

(2) 观察计算公式,分子不变都是1,分母是1到第i项的累加和,用t表示 (3) t=t+i;计算出分母

(4) s=s+1.0/t;计算出累加和,其中1.0/t必须要注意,不能写为1/t,这样就出错 (5) return s;返回累加和