}
}
printf(“\\n”);
*19.猴子吃桃子。第1天猴子吃掉桃子总数一半多一个,第2天又将剩余的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候只剩下一个桃子。请问第1天开始吃的时候桃子的总数。
//递推公式 x=2*(x+1)
解:#include
void main() {
int n,x;
x=1; //第10天的挑子数 for(n=9; n>=1; n--)
{ x=2*(x+1); //计算第n天的桃子数 }
printf(\第1天吃前挑子总数=%d\\n\ }
*20.用循环体编程序,分别输出如下两个图形,如图4.15所示。*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 左图
解:#include
int i,j;
for(i=1;i<=4;i++) {
for(j=1;j<=8-2*i;j++)
putchar(' ');
for(j=1;j<=2*i-1;j++)
printf(\ putchar('\\n'); } }
右图
解:#include
void main() {
24
*
int i,j;
for(i=1;i<=4;i++) //图上半部分 {
for(j=1;j<=8-2*i;j++)
putchar(' ');
for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); }
for(i=3;i>=0;i--) //图下半部分 {
for(j=1;j<=8-2*i;j++)
putchar(' ');
for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); } }
21.输入正整数a、b,输出a、b之间所有素数之和。
解:#include
int i,j,a,b,sum=0;
printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b);
for(i=a;i<=b;i++) {
for(j=2;j<=i/2;j++)
if(i%j==0)break; // 此时可判定i不是素数 if(j>i/2&&i!=1)
sum+=i;// 满足此条件表示除1和自身外,其它数均不能整除i
}
printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); }
或
解:#include
int i,j,a,b,sum=0,flag; printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b);
for(i=a;i<=b;i++)
{ flag=1; // 要判别当前i是否素数,先将标志变量赋值为1
25
for(j=2;j<=i/2;j++) if(i%j==0){
flag=0;break; }// 此时可判定i不是素数,退出循环 if(flag==1&&i!=1)
sum+=i;//满足此条件表示除1和自身外,其它数均不能整除i }
printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); }
*22.当x为–2,–1.5,–1,?,1.5,2时,求函数f(x)=x2–3.14x–6的解所取的最大值、最小值。
解:#include
double x,y,max,min;
max=min=(-2)*(-2)-3.14*(-2)-6;
//f(-2)作为max、min的初始值
for(x=-1.5;x<=2;x+=0.5) {
y=x*x-3.14159*x-6;
if(y>max) max=y;
else if(y } printf(\ } *23.当n取值在–39~40范围内时,判断表达式n2+n+41的值是否都是素数。 解:#include #include int i,j,y,count=0; for(i=-39;i<=40;i++) { y=i*i+i+41; for(j=2;j<=sqrt(y);j++) if(y%j==0) { printf(\当i为%d时,y=%d,结论不成立!\\n\ count++; break; } } if (count!=0) printf(\共有%d个i值,使结论不成立!\\n\ else printf(\结论成立,都是素数!\\n\ } 26 *24.用区间对分法求x2+xsinx–5=0在区间[0,5]内的一个实根(设ε=10–5)。 【说明】 在[a,b]区间连续的函数f(x),若满足条件f(a)·f(b)<0,则必有a<ξ (2)若|f(c)|<ε或|b-a|<ε,则输出c作为近似解,并终止程序执行。 (3)如果f(a)·f(c)<0,则b=c;否则a=c,再次执行第(1)步。 解:#include #include float a,b,c; a=0; b=5; //初始化区间a、b值 do { c=(a+b)/2; //计算a、b区间的中值 if((a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)<0 ) b=c; //以c代替区间b值 else a=c; //以c代替区间a值 }while(fabs(c*c+c*sin(c)-5)>=1e-5&&fabs(b-a)>=1e-5); printf(\} 习 题 5 一、单项选择题 1.下列叙述中,正确的叙述项是( )。 A.定义函数时,必须要有形参 B.函数中可以没有return语句,也可以有多条return语句 C.函数f可以用f(f(x))形式调用,这种调用形式是递归调用 D.函数必须有返回值 2.下列叙述中,不正确的叙述项是( )。 A.函数调用时,形参变量只有在被调用时才被创建(分配存储单元) 错误!未指定书签。B.函数调用时,实参可以是常量、变量或表达式 C.定义变量时,省略对变量的存储类别定义,则变量是自动型变量 D.语句return(a,b);则函数可以返回两个值 3.传值调用的特点是( )。 A.实参传给形参变量的数据是地址 B.在函数中形参变量值改变后,不改变实参变量的值 C.在函数中形参变量值改变后,实参变量的值随之也改变 D.实参必须是变量 4.如果在函数中定义一个变量,有关该变量作用域正确的是( )。 A.只在该函数中有效 B.在该文件中有效 C.在本程序中有效 D.为非法变量 5.根据下面函数print的定义,选出调用函数print(5378)的值是( )。 void print(long n) { 27