1.编写函数fun,它的功能是计算:
s作为函数值返回。C语言中可调用log( n )函数求ln (n)。log函数的引用说明是: double log(double x)。例如,若m的值为: 20,fun函数值为: 6.506583。
#include
#include
#include
double fun( int m )
{
double s=0;
int i;
for(i=1;i<=20;i++)
s+=log(i);
return sqrt(s);
}
main()
{
printf("%f\n", fun(20));
}
2.请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入 (规定h中的值为正数)。
例如:
h 值为 1234.567, 则函数返回 1234.570000;
h 值为 1234.564, 则函数返回 1234.560000。
#include
float fun ( float h )
{
long t=(h*1000+5)/10;
return(float)t/100;
}
int main( )
{
float h;
while(1){
printf("请输入一个小数:");
scanf("%f",&h);
printf("结果为:%7.2f\n",fun(h));
}
return 0;
}
3.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。
迭代步骤如下:
(1)取 x1 初值为0.0;
(2)x0 = x1,把x1的值赋给 x0;
(3)x1 = cos(x0),求出一个新的x1;
(4)若x0 - x1的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。
程序将输出结果Root=0.739085。
#include
#include
#include
float fun()
{
float x1,x0;
x0=1;
x1=cos(x0);
while(fabs(x0-x1)>=0.00001) {
x0=x1;
x1=cos(x0);
}
return x1;
}
main()
{
printf("Root =%f\n", fun());
}
4.请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如:
一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
#include
#define N 80
int fun(int a[], int n)
{
int i,c=1;
for(i=1;i<n;i++){
if(a[i]!=a[i-1])
a[c++]=a[i];
}
return c;
}
main()
{
int a[N]={
2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The original data :\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n");
}
5.函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12。调用该函数后,c=4152。
#include
#include
void fun(int a, int b, long *c)
{
*c=10*(a%10)+1000*(a/10)+100*(b/10)+b%10;
}
main()
{
int a,b; long c;
printf("Input a, b:"); scanf("%d%d", &a, &b);
fun(a, b, &c);
printf("The result is: %d\n", c);
}
6.请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。
注意:要求n的值不大于100。
#include
double fun(int n)
{
double s;
double z;
for( int i=1;i<=n;i++){
if(i%5==0||i%9==0){
z=(double)i;
s+=1/z;
}
}
return s;
}
main()
{
int n; double s;
printf("\nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
}
7.请编写函数fun,它的功能是: 求出 1 到 1000 之内能被 7 或11整除、但不能同时被 7 和 11 整除的所有整数并将它们放在 a所指的数组中,通过 n 返回这些数的个数。
#include
#include
void wwjt();
void fun (int *a, int *n)
{
int i,j=0;
for (i=1; i<=1000; i++)
if (!(i%7==0&&i%11==0)&&(i%7==0||i%11==0))
a[j++]=i;
*n=j;
}
main( )
{
int aa[1000], n, k ;
fun ( aa, &n ) ;
for ( k = 0 ; k < n ; k++ )
if((k + 1) % 10 == 0) printf("\n") ;
else printf("%5d", aa[k]) ;
wwjt( );
}
void wwjt ( ){
FILE *out ;
int aa[1000], n, k ;
out = fopen("out.dat","w") ;
fun ( aa, &n ) ;
for ( k = 0 ; k < n ; k++ )
if((k + 1) % 10 == 0)
fprintf(out, "\n") ;
else
fprintf(out, "%5d", aa[k]) ;
fclose(out) ;
}
8.请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1],把20至29岁年龄段的人数放在d[2],其余以此类推,把100岁(含100)以上年龄的人数放在d[10]中。结果在主函数中输出。
#include
#define N 50
#define M 11
void fun(int *a, int *b)
{
int i = 0;
for (i = 0;i < N;i++)
if (a[i] / 10 >= 10)
b[10] += 1;
else
b[a[i]/ 10] += 1;
}
double rnd()
{
static int t = 29, c = 217, m = 1024, r = 0;
r = (r*t + c) % m;
return((double)r / m);
}
int main()
{
int age[N], i, d[M] = {
0};
for (i = 0;i < N;i++)
age[i] = (int)(115 * rnd());
printf("The orignal data:\n");
for (i = 0;i < N;i++)
printf((i + 1) % 10 == 0 ? "%4d\n" : "%4d", age[i]);
printf("\n\n");
fun(age, d);
for (i = 0;i < 10;i++)
printf("%4d--%4d:%4d\n", i * 10, i * 10 + 9, d[i]);
printf("Over 100: %4d\n", d[10]);
}
9.程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。
例如:a 数组中的值为
a =
则返回主程序后s的值应为: 3.375。
#include
#include
#include
#define N 5
double fun ( int w[][N] )
{
int i,j;
double S=0.0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==0 || j==0 || i==N-1 || j==N-1)
S=S+w[i][j];
return S/(4*N-4);
}
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 ;
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 );
}
10.请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。
例如, 二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应是: WSHWSHWSH。
#include
#define M 3
#define N 4
void fun(char (*s)[N], char *b)
{
int i,j,k=0;
for(j=0;j<N;j++)
for(i=0;i<M;i++)
{
b[k]=*(*(s+i)+j);
k++;
}
b[k]= '\0';
}
main()
{
char w[M][N]={
{
'W','W','W','W'},{
'S','S','S','S'},{
'H','H','H','H'}};
char a[100];
int i,j;
printf("The matrix:\n");
for(i=0; i<M; i++)
{
for(j=0;j<N; j++)
printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:\n");puts(a);
printf("\n\n");
}
11.程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N], int n),函数的功能是:使数组左下三角元素中的值乘以n 。
例如:若n的值为3,a 数组中的值为
a =则返回主程序后a数组中的值应为
#include
#include
#include
#define N 5
int fun ( int a[][N], int n )
{
int i,j;
if(a == NULL)
return a[i][j];
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
main ( )
{
int a[N][N], n, i, j;
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");
}
do n = rand()%10 ; while ( n >=3 );
printf("n = %4d\n",n);
fun ( a, n );
printf ("***** THE RESULT *****\n");
for ( i =0; i<N; i++ )
{
for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] );
printf("\n");
}
}
12.假定输入的字符串中只含有字母和号。请编写函数fun,它的功能是:将字符串尾部的号全部删除,前面和中间的号不删除。
例如。字符串的内容为ABCDEFG*******,删除后,字符串中的内容应当是:*ABCDEFG。编写程序时不得使用C语言提供的字符串函数。
#include
#include
void fun( char *a){
char *pch = NULL;
pch = a;
while(*pch == '*' && *pch != '\0')
pch++;
while(*pch != '\0' && pch != a){
*a = *pch;
a++;
pch++;
}
*a = '\0';
}
main(){
char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
}
13.请编写函数fun, 函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入, 规定所有单词由小写字母组成, 单词之间由若干个空格隔开, 一行的开始没有空格。
#include
#include
#define N 80
int fun(char *s){
int n=1;
int len=strlen(s);
for(int i=0;i<len-1;i++){
if(s[i]==' '&&s[i+1]!=' '){
n++;
}
}
return n;
}
main()
{
char line[N];
int num=0;
printf("Enter a string :\n");
gets(line);
num=fun( line );
printf("The number of word is : %d\n\n",num);
}
14.请编写一个函数fun,它的功能时:将ss所指字符串中所有下标为奇数位置上的字母转换为大些(该位置上不是字母,则不转换)。
例如,若输入"abc4EFg",则应输出"aBc4EFg"。
#include
#include
void fun(char *ss){
int len=strlen(ss);
int z;
for(int i=1;ss[i]!='\0';i+=2){
z=ss[i];
if(z>97&&z<122){
z-=32;
ss[i]=z;
}
}
}
int main() {
char tt[81] ;
printf( "\nPlease enter an string within 80 characters:\n" );
gets( tt );
printf( "\n\nAfter changing, the string\n \"%s\"", tt );
fun( tt );
printf( "\nbecomes\n \"%s\"\n", tt );
}