10.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。
Xn 1=cos(Xn)
迭代步骤如下:
⑴取x1初值为0.0;
⑵x0=x1,把x1的值赋给x0;
⑶x1=cos(x0),求出一个新的x1;
⑷若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);
⑸所求x1就是方程cos(x)-x=O的一个实根,作为函数值返回。
程序将输出结果Root=0.739085。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <conio.h>
#include <math.h>
#include <stdio.h>
float fun()
{ float x0,x1=0;
do { x0=x1;
x1=cos(x0);
}while( fabs(x0-x1)>1e-006);
return x1;
}
main()
{ printf("root=%f\n",fun());
}
11.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如:a数组中的值为
,则返回主程序后a数组中的值应为
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define N 5
/* 29题:该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只有左边的
i个元素要置为0(每行总是如此)。用外层for()来控制行而内嵌的for()来控制每行的
左边元素,故而在内嵌for()中j最大只能循环到i(即表示出第i行左边的i个元素)。*
/
int fun(int a[][N])
{int i,j;
for(i=0;i<N;i )
for(j=0;j<=i;j )
a[i][j]=0;
}
main()
{int a[N][N],i,j;
clrscr();
printf("*** The array ****\n");
for(i=0;i<N;i )
{for(j=0;j<N;j )
{a[i][j]=rand()%10;printf("%4d",a[i][j]);}
printf("\n");
}
fun(a);
printf("The result\n");
for(i=0;i<N;i )
{for(j=0;j<N;j )
printf("%4d",a[i][j]);
printf("\n");
}
}
12.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为
则返回主程序后s的值应为3.375。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
/* 注意不能重复计算,第一个for()循环求出第一列与最后一列的和,第二个for()循环求出第一行与最后一行(已除去两头元素),要注意第二个for()中起始为1,最后为N-2。*/
double fun (int w[][N])
{ int i,t=0;
double s=0;
for(i=0;i<N;i )
{s =w[i][0] w[i][N-1]; t =2;}
for(i=1;i<N-1;i )
{s =w[0][i] w[N-1][i]; t =2;}
s=s/t;
return s;
}
main()
{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i,j;
double s;
clrscr();
printf("***** The array *****\n");
for(i=0;i<N;i )
{for(j=0;j<N;j )
printf("%4d",a[i][j]);
printf("\n");
}
s=fun(a);
printf("***** The result *****\n");
printf("The sum is %lf\n",s);
}
13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include "conio.h"
#include "stdio.h"
#define M 3
#define N 4
/*注:该题用for(i=0;i<N;i )来控制一列一列地找,而内嵌循环for(j=0;j<M;
j )用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循
环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在
多数题目中都要用到多重循环(一般为二重)。*/
void fun(int tt[M][N],int pp[N])
{ int i, j;
for(i=0;i<N;i )
{ pp=tt[0][i];
for(j=0;j<M;j )
if(tt[j][i]<pp[i]) pp[i]=tt[j][i];
}
}
main()
{ int t[M][N]={ {22,45,56,30},
{19,33,45,38},
{20,22,66,40}};
int p[N],i,j,k;
clrscr();
printf("the original data is:\n");
for(i=0;i<M;i )
{for(j=0;j<N;j )
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nthe result is:\n");
for(k=0;k<N;k )
printf("%4d",p[k]);
printf("\n");
}
14.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:若二维数组中的值为 1 3 5 7 9 则函数值为61。
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <conio.h>
#include <stdio.h>
#define M 4
#define N 5
/*注:该题的第一个for()循环是计算矩阵的最上一行和最下一行的总和,第二个for()是计算除两头元素以外的最左一列和最右一列的元素的和,最后sun就是周边元素的和。*/
int fun(int a[M][N])
{int sum=0,i;
for(i=0;i<N;i )
sum =a[0][i] a[M-1][i];
for(i=1;i<M-1;i );
sum =a[i][0] a[i][N-1];
return sum ;
}
main()
{ int aa[M][N]={{1,3,5,7,9},
{2,9,9,9,4},
{6,9,9,9,8},
{1,3,5,7,0}};
int i,j,y;
clrscr();
printf("The original data is :\n");
for(i=0;i<M;i )
{for(j=0;j<N;j ) printf("%6d",aa[i][j]);
printf("\n");
}
y=fun(aa);
printf("\nThe sum: %d\n",y);
printf("\n");
}