第一套
给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为:2,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:19.527,输出为:s=598.949991。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
double fun( double r)
{
return 3.14159*【1】/2.0;
}
void main()
{
double x;
printf("Enter x: ");
scanf("%lf",【2】);
printf("s=%lf\n",fun(【3】));
}
c编程必背100题【参考答案】 (1)r*r (2)&x (3)x
【考点分析】 本题考查:圆面积计算公式*r*r;scanf( )函数的形式,其一般形式为"scanf("格式控制字符串",地址表列);",注意地址是由地址运算符"&"后跟变量名组成的;printf( )函数的形式,其一般形式为"printf("格式控制字符串",输出表列);";函数实参调用,函数作为另一个函数调用的实际参数出现。
【解题思路】
填空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>
#include <conio.h>
#include <stdio.h>
#include <math.h>
/*************found**************/
f(double x)
{
if(x==0.0||x==2.0)
return 0.0;
else if(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
double fun(int n)
{
int i; double s=0.0,y;
for(i=-n; i<=n;i++)
{ y=f(1.0*i); s+=y;}
/*************found**************/
return s
}
void main()
{ system("CLS");
printf("%f\n", fun(5));
}
【参考答案】
(1) 错误:f(double x) 正确:double f(double x)
(2) 错误:return s 正确:return s;
【考点分析】 本题考查:函数的定义,其一般形式为"类型标识符 函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
该程序的流程是,fun( )程序对f(n)项循环累加,并且采用条件选择语句计算函数f(x)的值。本题的错误在于未定义函数f(double x)的返回值类型。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的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float fun(int n)
{
}
void main()
{
FILE *wf;
int n;
float s;
system("CLS");
printf("\nPlease enter N: ");
scanf("%d",&n);
s=fun(n);
printf("The result is:%f\n " , s);
/******************************/
wf=fopen("out.dat","w");
fprintf (wf,"%f",fun(11));
fclose(wf);
/*****************************/
}
【参考答案】
float fun(int n)
{
int i,s1=0; /*定义整型变量s1,表示分母*/
float s=0.0; /*定义单精度变量s,表示每一项*/
for(i=1;i<=n;i++) {
s1=s1+i; /*求每一项的分母*/
s=s+1.0/s1; /*求多项式的值*/
}
return s;
}
【考点分析】
本题考查:计算给定表达式的值,根据题意判断表达式为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函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int n,m;
long sum;
【1】;
system("CLS");
printf("\nInput n,m\n");
scanf("%d,%d",&n,&m);
while(n<=m)
{
【2】;
n++;
}
printf("sum=%【3】\n",sum);
}
【参考答案】 (1) sum=0 (2) sum+=n (3) ld
【考点分析】 本题考查:变量初始化,需要注意该变量是累加器还是累乘器:printf( )函数,其一般形式为"printf("格式控制符",输出表列)"。其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以
说明输出数据的类型、形式、长度、小数位数等,如"%ld"表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。
【解题思路】
填空1:变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。
填空2:通过while循环将自然数n和m之间的数进行累加,结果存于sum中。
填空3:由于sum为长整型,所以标准输出函数printf( )中的格式控制符为"%ld"。
下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值:
t=1+1/2+1/3+1/4+…+1/m
例如,若输入5,则应输出2.283333。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
double fun(int m)
{
double t=1.0;
int I;
for(I=2;I<=m;I++)
/*************found**************/
t+=1.0/k;
/*************found**************/
return I;
}
void main()
{int m;
system("CLS");
printf("\nPlease enter 1integer number: ");
scanf("%d",&m);
printf("\nThe result is %1f\n", fun(m));
}
【参考答案】
(1)错误:t+=1.0/k; 正确:t+=1.0/I;
(2)错误:return I; 正确:return t;
【考点分析】
本题考查:for循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为"return 表达式;",该语句的功能是计算表达式的值,并返回给主调函数。
【解题思路】
(1)该题目考查分母成等差数列递增的一个数学公式,我们先看循环条件for(I=2;I<=m;I++),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=1.0/k;。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论