计算机等级C语言上机考试题分总结
(一)、数学题目:5、6、11、14、34、48、49
编程的题目中,如果是数学题目,编程时用到阶乘或者是奇数项的积,则首先给变量赋初值为1,不能赋初值为0,同时把变量的类型定义为实型而不是整型。数学题目中结果都需要返回,如果说函数的类型是void 则是通过指针返回,如果不是void,则必须用return 返回。
如果表达式中的值为1,则在编写程序时用1.0.而不能用1。C 语言中的除法的运算原则是整数除以整数,结果还是整数。
数组中存储数据时以下标来存储的,在数组中下标从0 开始。
解题详解:
6、观察表达式,左边求出的是p 的值的一半,所以右边的表达式的值的计算好后应该乘以2 才能得到p 的值,观察表达式的右边,右边表达式中有分子、分母以及各表达式的值的和,分子是阶乘、分母是奇数项的积,分子除以分母得到一项的值。由此定义三个变量:s1 代表分子,s2 代表分母、s3 代表各项的和,定义一个整型变量i,让变量i 从1 开始。知道循环的结束。
int i;
double s1=1.0,s2=1.0,s3=0.0;
for(i=1;s1/s2>=eps;i++)
{
s3+=s1/s2;
s1*=i;
s2*=(2*i+1);
}
return 2*s3;
注意:此题目中要特别注意,循环语句的表达式2 的判断条件是s1/s2>=eps,而不是i<=n,循环语句的语句的顺寻不能颠倒,即先加之后再计算。
11、此题中要求能整除x,那么x 应该为分子,而不是分母,把满足条件的数组放到pp 所指的数组中,即pp 数组应用一个整型的变量来做pp 下标,数组下标从0 开始,所以定义一个整形变量k 并且赋初值为0;满足条件的个数通过形参传回。
int i,k=0;
for(i=1;i<=x;i++)
if(x%i==0&&i%2==1) pp[k++]=i;
*n=k;
备注:此题目中不能把i 初值定义为0,否则程序运行时得不到结果。
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);
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 返回。
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 的值。
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);
(二)、把满足条件的数放到数组中4、12、25、35、37
在做该类题目时,看清题目的要求,根基题目的要求解题,若只是把满足条件的删除或者是保留,则该类题目首先要定义一个整型变量并且赋初值0,根据题目意思把满足条件的存放到数组中,数组的下标同时加一往后走一个位置,如果是字符串类型的题目,在最后还要加上字符