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    if (n==0)  return ;    else{    print(n/10);    printf(\   return ;  } }  A.5  3  7  8      B.8  7  3  5 C.3  5  7  8      D.8  7  5  3  *6.根据下面函数f,选出f(f(3))的值是(  )。  int f(int x)  {           static  int k=0;      x=x+k;  k--;  return x; }  A.5   B.3   C.2  解:(1)B      (2)D      (3)B      (4)A      (5)A 二、写出下列程序的输出结果 *1.  #include  int f1(int,int),f11(int); void f2(int); void main() {       int i,j;       for(i=0;i<5;i++)     {    f2((5-i)*3);            for(j=0;j<=i;j++)                 printf(\         putchar('\\n');     } }  int f1(int m,int n) {        return f11(m)/f11(n)/f11(m-n); }  int f11(int k) {          if(k<=1)  return 1;        return k*f11(k-1); }  void f2(int n) {          for(int i=1;i<=n;i++)           putchar(' ');   }  解:       1           1 1         1 2 1  28  D.4  (6)C             1 3 3 1     1 4 6 4 1 *2.  #include       if(m%n==0) return n;          else return f(n,m%n); }  void main() {           printf(\ }  解:24 3.  #include  void fun(int a,int b,int c,int add,int mult) {         add=a+b+c;     mult=a*b*c;      printf(\}  void main() {        int x,y;     x=y=0;       fun(9,12,-4,x,y);      printf(\  }  解:add=17    mult=-432  add=0    mult=0 4.  #include  void fun(int a,int b,int c,) {         add=a+b+c;     mult=a*b*c;      printf(\}  void main() {        fun(9,12,-4);      printf(\  }  解:add=17    mult=-432  add=17    mult=-432 5.  #include void main() {           int i;       void fun();   29