7.请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6,980。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include<conio.h>
#include <stdio.h>
int fun(int *s,int t,int *k)
{ int i , max ;
max=s[0];
for ( i=0; i<t; i )
if(s[i]>max)
{ max=s[i];
*k=i; }
}
main()
{int a[10]={876,675,896,101,301,401,980,431,451,777},k;
clrscr() ;
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
8.编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
s=1 1/(1 2) 1/(1 2 3) ....... 1/(1 2 3 4 ...... n) 例如:若n的值为11时,函数的值为1.833333。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <stdio.h>
float fun(int n)
{ int i,s;
s=0;
for(i=0,i<=n,i ){
s=s 1/chsdc(i);
}
return(s);
}
long chsdc(int n)
{ int i,s;
s=0;
for(i=0,i<n,i ){
s=s i;
}
return(s);
}
main()
{ int n; float s;
printf("\nPlease enter N:"); scanf("%d", &n);
s = fun(n);
printf("the result is: %f\n", s);
NONO();
}
NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, n ;
float s;
fp = fopen("K:\\k1\\24000322\\in.dat","r") ;
wf = fopen("K:\\k1\\24000322\\out.dat","w") ;
for(i = 0 ; i < 10 ; i ) {
fscanf(fp, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%f\n", s) ;
}
fclose(fp) ;
fclose(wf) ;
}
9.编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。p=m!/n!(m-n)!。例如:m=12,n=8时,运行结果为495.000000。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <conio.h>
#include <stdio.h>
float fun( int m, int n)
{ int i,j,k;
long int t=1,s=1,p=1;
float q;
for(i=1; i<=m; i ) t*=i;
for(j=1; j<=n; j ) s*=j;
for(k=1; k<=m-n; k ) p*=k;
q=(float)t/s/p;
return q;
}
main()
{ printf("\np=%lf\n", fun(12,8));
}
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");
}
15.请编写一个函数 unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。
例如:w值为5923,则函数返回923;若w值为923,则函数返回23。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <conio.h>
#include <stdio.h>
/* 注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if()语句。 */
unsigned fun( unsigned w )
{ if(w>=10000) return w%10000;
if(w>=1000) return w%1000;
if(w>=100) return w%100;
return w%10;
}
main()
{ unsigned x;
printf( "enter a unsigned integer number :" );
scanf( "%u",&x);
if(x<10) printf("data error!");
else printf ("the result :%u\n", fun(x));