admin 管理员组

文章数量: 1184232


2023年12月19日发(作者:curve的意思中文翻译)

C语言编程(函数)100道题

C100

27 1、编写函数fun, 函数的功能是:根据以下公式计算 s,计算结果作为函数值返回;n 通过

形参传入。 S = 1 + 1/ (1+2) + 1/ (1+2+3) + …… + 1/ (1+2+3+……+n)

float fun ( int n )

{ int i ;

float s = 0.0 , t = 0.0 ;

for ( i = 1 ; i <= n ; i++ ) { t += i ; s += 1 / t ; }

return s ;

}

2、编写函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。

m 与 n 为两个正整数且要求 m > n。

m!

P = ?????

n!(m-n)!

float fun ( int m , int n )

{ int i ;

float p , t ;

for ( t = 1.0 , i = 1 ; i <= m ; i++ ) t *= i ;

p = t ;

for ( t = 1.0 , i = 1 ; i <= n ; i++ ) t *= i ;

p = p / t ;

for ( t = 1.0 , i = 1 ; i <= m – n ; i++ ) t *= i ;

p = p / t ;

return p ;

}

3、请编写一个函数fun, 它的功能是:根据以下公式求 л 的值,(要求满足精度 0.0005,

即某项小于 0.0005 时停止迭代):

π 1 1×2 1×2×3 1×2×3×4 1×2×…×n

? = 1 + ? + ?? + ???? + ????? + …… + ????????

2 3 3×5 3×5×7 3×5×7×9 3×5×…×(2n+1) double fun ( double

eps )

{ int n = 0 ;

double t = 1.0 , pi = 0.0 ;

while ( t >= eps )

{ pi += t ; n++ ; t *= ( double ) n / (2 * n + 1) ; }

return pi * 2 ;

}

4、请编写函数fun, 其功能是:计算并输出下列多项式值:

1 1 1 1

s = 1 + ?? + ?? + ?? + …… + ??

1! 2! 3! n!

1

double fun ( int n )

{ int i ;

double t = 1.0 , sn = 1.0 ;

for ( i = 1 ; i <= n ; i++ )

{ t *= i ; sn += 1 / t ; }

return sn ;

}

5、请编写函数fun,它的功能是:计算并输出下列级数和:

1 1 1

s = ??? + ??? + …… + ?????

1×2 2×3 n×(n+1) double fun ( int n )

{ int i ;

double s = 0.0 ;

for ( i = 1 ; i <= n ; i++ ) s += 1.0 / i / ( i + 1 ) ;

return s ;

}

6、请编写函数fun, 其功能是:计算并输出当 x < 0.97 时下列多项式的值,

直到?Sn-(Sn-1)?< 0.000001 为止。

0.5(0.5-1) 0.5(0.5-1)(0.5-2) 0.5(0.5-1)(0.5-2)…(0.5-n+1)

S=1+0.5x+?????x^2+?????????x^3… +??????????????x^n

2! 3! n!

double fun ( double x )

{ double s0 , s1 = 1 , p = 1 ;

long n = 0 ;

do {

s0 = s1 ;

n++ ;

p *= ( 0.5 - n + 1 ) * x / n ;

s1 = s0 + p ;

} while ( fabs ( s1 - s0 ) >= 1e-6 ) ;

return s1;

}

7、请编写函数fun, 其功能是:计算并输出下列多项式值:

1 1 1 1 1

S=(1 - ?) + (? - ?) +…+ (?? - ??)

2 3 4 2n-1 2n

double fun ( int n )

{ int i ;

double sn = 0.0 ;

for ( i = 1 ; i <= n ; i++ ) sn += 1.0 / ( 2 * i – 1 ) - 1.0 / ( 2

* i ) ;

return sn ;

}

8、请编写函数fun, 它的功能是计算下列级数和,和值由函数值返回。

2

x^2 x^3 x^n

s = 1 + x + ?? + ?? + …… + ??

2! 3! n! double fun ( double x , int n )

{ int i ;

double s = 1.0 , p = 1.0 , t = 1.0 ;

for ( i =1 ; i <= n ; i++ )

{ t *= i ; p *= x ; s += p / t ; }

return s ;

}

9、请编写函数fun, 其功能是:计算并输出下列多项式值:

1 1 1

S = 1 + ?? + ??? + … + ?????

1+2 1+2+3 1+2+3+…50 double fun ( int n )

{ int i , t = 0 ;

double sum = 0.0 ;

for ( i = 1 ; i <= n ; i++ ) { t += i ; sum += 1.0 / t ; }

return sum ;

}

10、请编写函数fun, 其功能是:计算并输出

S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+……+(1+2^0.5+3^0.5+……+n^0.5)

double fun ( int n )

{ int i ;

double s = 1.0 , p = 1.0 ;

for ( i = 2 ; i <= n ; i++ ) { p += sqrt ( i ) ; s += p ; }

return s ;

}

11、请编写函数fun, 它的功能是计算:

S = (In(1) + In(2) + In(3) + …… + In(m))0.5

S 作为函数值返回。在C语言中可调用log(n)函数求In(n)。

log函数的引用说明是:double log ( double x )。 #include < math.h >

double fun ( int m )

{ int i ;

double s = 0.0 ;

for ( i = 1 ; i <= m ; i++ ) s += log ( i ) ;

return sqrt ( s ) ;

}

12、请编写一个函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c

中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的千位和十位上,

b 数的十位和个位数依次放在 c 数的百位和个位上。

void fun ( int a , int b , long *c )

{

3

*c = ( a / 10 ) * 1000 + ( b / 10 ) * 100 + ( a % 10 ) * 10 + b %

10 ;

}

13、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的百位和个位上,

b 数的十位和个位数依次放在 c 数的十位和千位上。 void fun ( int a ,

int b , long *c )

{

*c = ( b % 10 ) * 1000 + ( a / 10 ) * 100 + ( b / 10 ) * 10 + a %

10 ;

}

14、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,

b 数的十位和个位数依次放在 c 数的百位和个位上。 void fun ( int a ,

int b , long *c )

{

*c = ( a % 10 ) * 1000 + ( b / 10 ) * 100 + ( a / 10 ) * 10 + b %

10 ;

}

15、请编写函数fun,其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的个位和百位上,

b 数的十位和个位数依次放在 c 数的十位和千位上。 void fun ( int a ,

int b , long *c )

{

*c = ( b % 10 ) * 1000 + ( a % 10 ) * 100 + ( b / 10 ) * 10 + a /

10 ;

}

16、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 和并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的百位和个位上,

b 数的十位和个位数依次放在 c 数的千位和十位上。 void fun ( int a ,

int b , long *c )

{

*c = ( b / 10 ) * 1000 + ( a / 10 ) * 100 + ( b % 10 ) * 10 + a %

10 ;

}

17、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的个位和百位上,

b 数的十位和个位数依次放在 c 数的千位和十位上。 void fun ( int a ,

int b , long *c )

{

*c = ( b / 10 ) * 1000 + ( a % 10 ) * 100 + ( b % 10 ) * 10 + a /

10 ;

}

18、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的千位和十位上,

b 数的十位和个位数依次放在 c 数的个位和百位上。 void fun ( int a ,

int b , long *c )

{

*c = ( a / 10 ) * 1000 + ( a % 10 ) * 10 + ( b % 10 ) * 100 + b /

10 ;

}

4

19、请编写函数fun, 其功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。

合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,

b 数的十位和个位数依次放在 c 数的个位和百位上。

void fun ( int a , int b , long *c )

{

*c = ( a % 10 ) * 1000 + ( b % 10 ) * 100 + ( a / 10 ) * 10 + ( b /

10 ) ;

}

20、 编写一个函数fun,它的功能是:求 n 以内(不包括 n)同时能被 3 与

7 整除的所有

自然数之和的平方根 s,并作为函数值返回。 #include < math.h >

double fun ( int n )

{ int i ;

double s = 0.0 ;

for ( i = 1 ; i < n ; i++ )

if ( i % 3 == 0 && i % 7 == 0 ) s += i ;

return sqrt ( s ) ;

}

21、请编写一个函数fun, 它的功能是:计算并输出给定整数 n 的所有因子(不包括 1 与

自身)之和。规定 n 的值不大于 1000。 int fun ( int n )

{ int s = 0 , i ;

for ( i = 2 ; i <= n – 1 ; i++ )

if ( n % i == 0 ) s += i ;

return s ;

}

22、请编写函数fun,它的功能是:计算并输出 n(包括n)以内能被 5 或 9

整除的所有自

然数的倒数之和。

double fun ( int n )

{ int i ;

double sum = 0.0 ;

for ( i = 1 ; i <= n ; i++ )

if ( i % 5 == 0 || i % 9 == 0 ) sum += 1.0 / i ;

return sum ;

}

23、请编写函数fun,其功能是:计算并输出 3 到 n 之间所有素数的平方根之和。

#include < math.h >

double fun ( int n )

{ int m , k , i ;

double s = 0.0 ;

for ( m = 3 ; m <= n ; m++ )

{ k = sqrt (m) ;

for ( i = 2 ; i <= k ; i++ )

if ( m % i == 0 ) break ;

if ( i > k ) s += sqrt ( m ) ;

5

}

return s ;

}

24、请编写一个函数 unsigned fun ( unsigned w ) , w 是一个大于 10 的无符号整数,

若 w 是 n (n ? 2) 位的整数,则函数求出 w 的后 n-1 位的数作为函数值返回。

unsigned fun ( unsigned w )

{ unsigned n = w , pow = 1 ;

while ( n >= 10 ) { pow *= 10 ; n /= 10 ; }

return w % pow ;

}

25、请编一个函数 float fun ( double h ),函数的功能是对变量 h 中的值保留 2 位小数,

并对第三位进行四舍五入(规定 h 中的值为正数)。 float fun ( double

h )

{

return ( long ) ( h * 100 + 0.5 ) / 100.0 ;

}

26、请编写函数fun, 它的功能是:求 Fibonacci 数列中大于 t 的最小的一个数,结果由函

数返回。其中 Fibonacci 数列 F(n) 的定义为:F(0) = 0 , F(1) = 1 F(n)

= F(n-1) + F(n-2) int fun ( int t )

{ int a = 0 , b = 1 , c ;

while ( 1 )

{ c = a + b ;

if ( c > t ) break ;

a = b ;

b = c ;

}

return c ;

}

27、编写函数fun, 它的功能是:利用以下所示的简单迭代方法求方程 cos(x)

- x = 0 的一个

实根。 Xn+1 = cos(Xn)

迭代步骤如下:

(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 < math.h >

float fun ( void )

{ float x1 = 0.0 , x0 ;

do {

x0 = x1 ;

x1 = cos ( x0 ) ;

6

} while ( fabs ( x0 - x1 ) >= 1e-6 ) ;

return x1 ;

}

16 1、m 个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在 below 所指的数组中。 int fun ( int score [ ] , int m , int below [ ] )

{ int i , j = 0 , aver = 0 ;

for ( i = 0 ; i < m ; i++ ) aver += score [ i ] ;

aver /= m;

for ( i = 0 ; i < m ; i++ )

if ( score [ i ] < aver ) below [ j++ ] = score [ i ] ;

return j ;

}

2、请编写函数fun,它的功能是:求出 1 到 1000 之内能被 7 或 11 整除、但不能同时被

7 和 11 整除的所有整数并将它们放在 a 所指的数组中,通过 n 返回这些数的个数。

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 ;

}

3、请编写函数 void fun ( int x , int pp [ ] , int *n),它的功能是:求出能整除 x 且

不是偶数的各整数, 并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。

void fun ( int x , int pp [ ] , int *n )

{ int i , j = 0 ;

for ( i = 1 ; i <= x ; i += 2 )

if ( x % i == 0 ) pp [ j++ ] = i ;

*n = j ;

}

4、请编写函数 void fun ( char *tt , int pp[ ] ),统计在 tt 字符串中

„a? 到 „z? 26个字

母各自出现的次数,并依次放在 pp 所指数组中。

void fun ( char *tt , int pp[ ] )

{ int i ;

for ( i = 0 ; i < 26 ; i++ ) pp [ i ] = 0 ;

for ( ; *tt ; tt++ )

if ( 'a' <= *tt && *tt <= 'z' ) pp [ *tt - 'a' ]++ ;

}

5、请编写一个函数 void fun ( int m , int k , int xx [ ] ),该函数的功能是:

将大于整数 m 且紧靠 m 的 k 个素数存入 xx 所指的数组中。 void fun

( int m , int k , int xx [ ])

7

{ int i , j = 0 , p = m + 1 ;

do {

for ( i = 2 ; i < p ; i++ )

if ( p % i == 0 ) break;

if ( i >= p ) xx [ j++ ] = p ;

p++ ;

} while ( j < k ) ;

}

6、请编写一个函数 int fun ( int *s , int t , int *k ),用来求出数组的最大元素在数

组中的下标并存放在 k 所指的存储单元中。 int fun ( int *s , int t ,

int *k )

{ int i , maxInd = 0 ;

for ( i = 1 ; i < t ; i++ )

if ( s [ i ] > s [ maxInd ] ) maxInd = i ;

*k = maxInd ;

}

7、编写函数 int fun ( int lim , aa [ MAX ] ),该函数的功能是求出小于或等于 lim 的

所有素数并放在 aa 数组中,该函数返回所求出的素数的个数。

#define MAX 100

int fun ( int lim , aa [ MAX ] )

{ int k = 0 , i , j ;

for ( i = lim ; i > 1 ; i-- )

{ for ( j = 2 ; j < i ; j++ )

if ( i % j == 0 ) break ;

if ( j >= i ) aa [ k++ ] = i ;

}

return k ;

}

8、请编写一个函数fun, 它的功能是:求出 1 到 m 之内(含m)能被 7 或

11 整除的

所有整数放在数组 a 中,通过 n 返回这些数的个数。

void fun ( int m , int *a , int *n )

{ int i , j = 0 ;

for ( i = 1 ; i <= m ; i++ )

if ( i % 7 == 0 || i % 11 == 0 ) a [ j++ ] = i ;

*n = j ;

}

9、请编写一个函数fun, 它的功能是:找出一维整型数组元素中最大的值和它所在的下标,

最大的值和它所在的下标通过形参传回。 void fun ( int a [ ] , int n ,

int *max , int *d )

{ int i ;

*max = a [ 0 ] ; *d = 0 ;

for ( i = 1 ; i < n ; i++ )

if ( a [ i ] > *max ) { *max = a [ i ] ; *d = i ; }

}

8

10、请编写一个函数fun, 该函数的功能是:移动一维数组中的内容;若数组中有 n 个整数,

要求把下标从 0 到 p(p 小于等于 n-1)的数组元素平移到数组的最后。

void fun ( int *w , int p , int n)

{ int i , j , tmp;

for ( i = 0 ; i <= p ; i++ )

{ tmp = w [ 0 ] ;

for ( j = 1 ; j < n ; j++) w [ j – 1 ] = w [ j ] ;

w [ n – 1 ] = tmp ;

}

}

11、请编写一个函数fun, 其功能是:将所有大于 1 小于整数 m 的非素数存入 xx 所指数

组中,非素数的个数通过 k 传回。

void fun ( int m , int *k , int xx [ ] )

{ int i , j , count = 0 ;

for ( i = 2 ; i < m ; i++ )

for ( j = 2 ; j < i ; j++ )

if ( i % j == 0 ) { xx [ count++ ] = i ; break ; }

*k = count ;

}

12、请编写一个函数fun, 该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。

数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

#define N 80

int fun ( int a [ ] , int n )

{ int i , k , j = 1 ;

for ( i = 1 ; i < n ; i++ )

{ for ( k = j – 1 ; k >= 0 ; k-- )

if ( a [ i ] == a [ k ] ) break ;

if ( k < 0 ) a [ j++ ] = a [ i ] ;

}

return j ;

}

13、请编写一个函数fun, 该函数的功能是:统计各年龄段的人数。

N 个年龄通过调用随机函数获得,并放在主函数的 age 数组中;

要求函数把 0 至 9 岁年龄段的人数放在 d[0] 中,

把 10 至 19 岁年龄段的人数放在 d[1] 中,

把 20 至 29 岁年龄段的人数放在 d[2] 中,

其余依此类推,把100岁(含100)以上年龄的人数都放在 d[10] 中。结果在

主函数中输出。

#define N 50

#define M 11

void fun ( int *a , int *b )

{ int i ;

for ( i = 0 ; i < M ; i++ ) b [ i ] = 0 ;

for ( i = 0 ; i < N ; i++ )

9

if ( a [ i ] >= 100 ) b [ 10 ]++ ;

else b [ a [ i ] / 10 ]++ ;

}

14、请编写一个函数fun, 它的功能是:计算 n 门课程的平均分,计算结果作为函数值返回。

float fun ( float *a , int n )

{ int i ;

float ave = 0.0 ;

for ( i = 0 ; i < n ; i++ ) ave += a [ i ] ;

return ave / n ;

}

15、请编写函数fun, 其功能是:计算并输出定 10 个数的方差:

? 1 10 ?0.5

S=? ? ? (Xk-X')^2?

? 10 k=1 ? 1 10

其中X'=? ? Xk

10 k=1

double fun ( double x [ 10 ] )

{ int k ;

double s = 0.0 , s1 = 0.0 ;

for ( k = 0 ; k < 10 ; k++ ) s1 += x [ k ] ;

s1 /= 10 ;

for ( k = 0 ; k < 10 ; k++ ) s += ( x [ k ] - s1) * ( x [ k ] -

s1 ) ;

return sqrt ( s / 10 ) ;

}

16、请编写函数fun, 其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素之平

均值的平方根之和。

double fun ( double x [ 9 ] )

{ int i ;

double sum = 0.0 ;

for ( i = 0 ; i < 8 ; i++ ) sum += sqrt ( ( x [ i ] + x [ i + 1 ] )

/ 2 ) ;

return sum ;

}

11

1、下列程序定义了 N×N 的二维数组,并在主函数中自动赋值。请编写函数

fun ( int a [ ][ N ] ),该函数的功能是:使数组左下半三角元素中的值全部置成 0。

#define N 5

void fun ( int a [ ][ N ] )

{ int i , j ;

for ( i = 0 ; i < N ; i++ )

for ( j = 0 ; j <= i ; j++ ) a [ i ][ j ] = 0 ;

}

10

2、下列程序定义了 N×N 的二维数组,并在主函数中自动赋值。请编写函数fun,

函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的

s。

#define N 5

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 ; }

return s / t ;

}

3、请编一个函数 void fun ( int tt [ M ][ N ] , int pp [ N] ), tt 指向一个 M 行 N 列的

二维数组,求出二维数组每列中最小元素,并依次放入 pp 所指一维数组中。二维数组

中的数已在主函数中赋予。

#define M 3

#define N 4

void fun ( int tt [ M ][ N ] , int pp [ N] )

{ int i , j ;

for ( j = 0 ; j < N ; j++ )

{ pp [ j ] = tt [ 0 ][ j ] ;

for ( i = 1 ; i < M ; i++ )

if ( tt [ i ][ j ] < pp [ j ] ) pp [ j ] = tt [ i ][ j ] ;

}

}

4、请编写函数fun, 函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组

中的值在主函数中赋予。

#define M 4

#define N 5

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 ;

}

5、编写程序,实现矩阵(3 行 3 列)的转置(即行列互换)。 int fun

( int array [ 3 ][ 3 ] )

{ int i , j , t ;

for ( i = 0 ; i < 3 ; i++ )

for ( j = i + 1 ; j < 3 ; j++ )

{ t = array [ i ][ j ] ; array [ i ][ j ] = array [ j ][ i ] ; array

[ j ][ i ] = t ; }

}

6、请编写一个函数fun, 它的功能是:求出一个 2×M 整型二维数组中最大元素的值,并将此值返回调用函数。

#define M 4

fun ( int a [ ][ M ] )

11

{ int i , j , max = a [ 0 ][ 0 ] ;

for ( i = 0 ; i < 2 ; i++ )

for ( j = 0 ; j < M ; j++ )

if ( a [ i ][ j ] > max ) max = a [ i ][ j ] ;

return max ;

}

7、下列程序定义了 N×N 的二维数组,并在主函数中自动赋值。请编写一个函数

fun ( int a [ ][ N ] , int n ),该函数的功能是:使数组右上半三角元素中的值乘以 n。

#define N 5

int fun ( int a [ ][ N ] , int n )

{ int i , j ;

for ( i = 0 ; i < N ; i++ )

for ( j = i ; j < N ; j++ ) a [ i ][ j ] *= n ;

}

8、请编写一个函数fun, 该函数的功能是:实现 B = A + A',即把矩阵 A 加上 A 的转置,

存放在矩阵 B 中。计算结果在 main函数中输出。 void fun ( int a

[ 3 ][ 3 ] , int b [ 3 ][ 3 ] )

{ int i , j ;

for ( i = 0 ; i < 3 ; i++ )

for ( j = 0 ; j < 3 ; j++ ) b [ i ][ j ] = a [ i ][ j ] + a

[ j ][ i ] ;

}

9、请编写一个函数fun, 该函数的功能是:将 M 行 N 列的二维数组中的数据,按行的顺

序依次放到一维数组中,一维数组中数据的个数存放在形参 n 所指的存储单元中。

void fun ( int (*s)[ 10 ] , int *b , int *n , int mm , int nn )

{ int i , j , k = 0 ;

for ( i = 0 ; i < mm ; i++ )

for ( j = 0 ; j < nn ; j++ ) b [ k++ ] = s [ i ][ j ] ;

*n = k ;

}

10、请编写函数fun, 该函数的功能是:将 M 行 N 列的二维数组中的数据,按列的顺序依

次放到一维数组中。

void fun ( int (*s)[ 10 ] , int *b , int *n , int mm , int nn )

{ int i , j , k = 0 ;

for ( j = 0 ; j < nn ; j++ )

for ( i = 0 ; i < mm ; i++) b [ k++ ] = s [ i ][ j ] ;

*n = k ;

}

11、程序定义了 N×N 的二维数组,并在主函数中自动赋值。请编写函数

fun ( int a [ ][ N ] , int n), 该函数的功能是:使数组左下半三角元素中的值乘以 n。

#define N 5

int fun ( int a [ ][ N ] , int n)

{ int i , j ;

for ( i = 0 ; i < N ; i++ )

for ( j = 0 ; j <= i ; j++ ) a [ i ][ j ] *= n ;}

12

34 1、假定输入的字符串中只包含字母和 * 号。请编写一个函数fun, 它的功能是:

使字符串中尾部的 * 号不得多于 n 个;若多于 n 个,则删除多余的 * 号;

若少于或等于 n 个,则什么也不做,字符串中间和前面的 * 号不删除。

void fun ( char *a , int n )

{ int k = 0 ;

char *t = a ;

while ( *t ) t++ ;

t-- ;

while ( *t == '*' ) { k++ ; t-- ; }

if ( k > n ) *( t + n + 1 ) = '0' ;

}

2、请编写一个函数,用来删除字符串中的所有空格。

int fun ( char *str )

{ int i = 0 ;

char *p = str ;

while ( *p )

{ if ( *p != ' ' ) str [ i++ ] = *p ;

p++ ;

}

str [ i ] = '0' ;

}

3、假定输入的字符串中只包含字母和 * 号。请编写一个函数fun,

它的功能是:将字符串中的前导 * 号全部移到字符串的尾部。 void fun

( char *a )

{ int i = 0 ;

char *p = a ;

while ( *p == '*' ) p++ ;

while ( *p ) a [ i++ ] = *p++ ;

while ( a [ i ] ) a [ i++ ] = '*' ;

}

4、假定输入的字符串中只包含字母和 * 号。请编写一个函数fun, 它的功能是:

只删除字符串前导和尾部的 * 号,串中字母之间的 * 号都不删除。

形参 n 给出了字符串的长度,形参 h 给出了字符串中前导 * 号的个数,

形参 e 给出了字符串中最后 * 号的个数。在编写函数时,不得使用C语言提供的字符

串函数。

void fun ( char *a , int n , int h , int e )

{ int i = 0 ;

char *p ;

for ( p = a + h ; p < a + n – e ; p++ ) a [ i++ ] = *p ;

a [ i ] = '0' ;

}

5、假定输入的字符串中只包含字母和 * 号。请编写一个函数fun, 它的功能是:除了尾部

的 * 号之外,将字符串中其他 * 号全部删除。形参 p 已指向字符串中最后的一个字

13

母。在编写函数时,不得使用C语言提供的字符串函数。 void fun ( char

*a , char *p )

{ int i = 0 ;

char *q = a ;

while ( q <= p )

{ if ( *q != '*' ) a [ i++ ] = *q ;

q++ ;

}

while ( *q ) a [ i++ ] = *q++ ;

a [ i ] = '0' ;

}

6、假定输入的字符串中只包含字母和 * 号。请编写函数fun, 它的功能是:删除字符串中

所有的 * 号。 在编写函数时,不得使用C语言提供的字符串函数。 void

fun ( char *a )

{ int i = 0 ;

char *p = a ;

while ( *p )

{ if ( *p != '*' ) a [ i++ ] = *p ;

p++ ;

}

a [ i ] = '0' ;

}

7、假定输入的字符串中只包含字母和 * 号。请编写函数fun, 它的功能是:除了字符串前

导和尾部的 * 号之外,将串中其他 * 号全部删除。形参 h 已指向字符串中第一个字

母,形参 p 已指向字符串中最后一个字母。不得使用C语言提供的字符串函数。

void fun ( char *a , char *h , char *p )

{ char *q = h ;

while ( q <= p )

{ if ( *q != '*' ) *h++ = *q ;

q++ ;

}

while ( *q ) *h++ = *q++ ;

*h = '0' ;

}

8、假定输入的字符串中只包含字母和 * 号。请编写函数fun, 它的功能是:

将字符串尾部的 * 号全部删除,前面和中间的 * 号不删除。 void fun

( char *a )

{ char *p = a ;

while ( *p ) p++;

p-- ;

while ( *p == '*' ) p-- ;

*( p + 1 ) = '0' ;

}

9、假定输入的字符串中只包含字母和 * 号。请编写函数fun, 它的功能是:除了字符串前

14

导的 * 号之外,将串中其他 * 号全部删除。不得使用C语言提供的字符串函数。

void fun ( char *a )

{ int i = 0 ;

char *p = a ;

while ( *p && *p == '*' ) { i++ ; p++ ; }

while ( *p )

{ if ( *p != '*' ) a [ i++ ] = *p ;

p++ ;

}

a [ i ] = '0' ;

}

10、规定输入的字符串中包含字母和 * 号。请编写函数fun, 它的功能是:将字符串中的前

导 * 号全部删除,中间和尾部的 * 号不删除。 void fun ( char *a )

{ int i = 0 ;

char *p = a ;

while ( *p && *p == '*' ) p++ ;

while ( *p ) a [ i++ ] = *p++ ;

a [ i ] = '0' ;

}

11、假定输入的字符串中只包含字母和 * 号。请编写函数fun, 它的功能是:使字符串的前

导 * 号不得多于n个;若多于 n 个,则删除多余的 * 号;若少于或等于 n

个,则什

么也不做,字符串中间和尾部的 * 号不删除。 void fun ( char *a , int

n )

{ int i = 0 , k = 0 ;

char *t = a ;

while ( *t && *t == '*' ) { k++ ; t++ ; }

if ( k > n )

{ t = a + k – n ;

while ( *t ) a [ i++ ] = *t++ ;

a [ i ] = '0' ;

}

}

12、请编写一个函数 void fun ( char a [ ] , char b [ ] , int n ),其功能是:删除一个

字符串中指定下标的字符。 其中,a 指向原字符串,删除后的字符串存放在

b 所指的数

组中,n 中存放指定的下标。

void fun ( char a [ ] , char b [ ] , int n )

{ int i , j = 0 ;

for ( i = 0 ; a [ i ] ; i++ )

if ( i != n ) b [ j++ ] = a [ i ] ;

b [ j ] = '0' ;

}

13、请编一个函数 fun ( char *s ),该函数的功能是把字符串中的内容逆置。

void fun ( char *s )

15

{ int i , j ; char t ;

for ( i = 0 , j = strlen ( s ) – 1 ; i < j ; i++ , j-- )

{ t = s [ i ] ; s [ i ] = s [ j ] ; s [ j ] = t ; }

}

14、编写函数fun,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按

不同字符处理。

int fun ( char s [ ] , int c )

{ int i = 0 ;

char *p = s ;

while ( *p )

{ if ( *p != c ) s [ i++ ] = *p ;

p++;

}

s [ i ] = '0' ;

}

15、请编写函数fun, 对长度为 7 个字符的字符串,除首、尾字符外,将其余

5 个字符按

ASCII码降序排列。

int fun ( char *s , int num )

{ int i , j ;

char t ;

for ( i = 1 ; i < num – 2 ; i++ )

for ( j = i + 1 ; j < num – 1 ; j++ )

if ( s [ i ] < s [ j ]) { t = s [ i ] ; s [ i ] = s [ j ] ; s [ j ]

= t ; }

}

16、请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回 1,

主函数中输出 YES,否则返回 0,主函数中输出 NO。回文是指顺读和倒读都一样的

字符串。

int fun ( char *str )

{ int i , n = 0 ;

char *p = str ;

while ( *p ) { n++ ; p++ ; }

for ( i = 0 ; i < n / 2 ; i++ )

if ( str [ i ] != str [ n - 1 – i ] ) return 0 ;

return 1 ;

}

17、请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数

(不得调用C语言提供的将字符串转换为整数的函数)。

long fun ( char *p )

{ long s = 0 , sign = 1 ;

if ( *p == '-' ) { sign = -1 ; p++ ; }

while ( *p ) { s = s * 10 + *p - '0' ; p++; }

return sign * s ;

}

18、请编写一个函数fun, 它的功能是:比较两个字符串的长度,(不得调用C语言提供的求

16

字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个

字符串。

char * fun ( char *s , char *t )

{ char *t1 = t , *s1 = s ;

int n = 0 , m = 0 ;

while ( *s1 ) { n++ ; s1++ ; }

while ( *t1 ) { m++ ; t1++ ; }

if ( n >= m ) return s ;

else return t ;

}

19、请编写一个函数fun, 它的功能是:将 ss 所指字符串中所有下标为奇数位置上

的字母转换为大写(若该位置上不是字母,则不转换)。

void fun ( char *ss )

{ int i , n = strlen ( ss ) ;

for ( i = 1 ; i < n ; i += 2 )

if ( ss [ i ] >= 'a' && ss [ i ] <= 'z' ) ss[i] -= 32 ;

}

20、请编写一个函数fun, 其功能是:将 s 所指字符串中除了下标为偶数、同时ASCII值也

为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在 t

所指的数组中。

void fun ( char *s , char t [ ] )

{ int i , j = 0 ;

for ( i = 0 ; s [ i ] ; i++ )

if ( i % 2 == 0 && s [ i ] % 2 == 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

21、请编写一个函数fun, 其功能是:将 s 所指字符串中除了下标为奇数、同时ASCII值也

为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在 t 所

指的数组中。

void fun ( char *s , char t [ ] )

{ int i , j = 0 ;

for ( i = 0 ; s [ i ] ; i++ )

if ( i % 2 != 0 && s [ i ] % 2 != 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

22、请编写一个函数fun, 它的功能是:求出 ss 所指字符串中指定字符的个数,并返回此

值。

int fun ( char *ss , char c )

{ int n = 0 ;

while ( *ss )

{ if ( *ss == c ) n++ ;

ss++ ;

}

return n ;

}

17

23、请编写一个函数fun, 该函数的功能是:移动字符串中的内容,移动的规则如下:

把第 1 到第 m 个字符,平移到字符串的最后,把第 m+1 到最后的字符移到字符串

的前部。

void fun ( char *w , int m )

{ int i , j , n = strlen ( w ) ;

char tmp ;

for ( i = 0 ; i < m ; i++ )

{ tmp = w [ 0 ] ;

for ( j = 1 ; j < n ; j++) w [ j – 1 ] = w [ j ] ;

w [ n – 1 ] = tmp ;

}

}

24、编写一个函数,从传入的 num 个字符串中找出最长的一个字符串,

并通过形参指针 max 传回该串地址(用 **** 作为结束输入的标志)。

#include < string.h >

void fun ( char (*a)[ 81 ] , int num , char **max )

{ char *p = a [ 0 ] ;

int i ;

for ( i = 1 ; i < num ; i++ )

if ( strlen ( a [ i ] ) > strlen ( p ) ) p = a [ i ] ;

*max = p ;

}

25、编写一个函数,该函数可以统计一个长度为 2 的字符串在另一个字符串中出现的次数。

int fun ( char *str , char *substr )

{ int i , n = 0 , len = strlen ( str ) ;

for ( i = 0 ; i < len – 1 ; i++ )

if ( str [ i ] == substr [ 0 ] && str [ i + 1 ] == substr [ 1 ] )

n++ ;

return n ;

}

26、请编写一个函数 void fun ( char *ss ), 其功能是:将字符串 ss 中所有下标为奇数位

置上的字母转换为大写(若该位置上不是字母,则不转换)。 void fun

( char *ss )

{ int i ;

for ( i = 0 ; ss [ i ] ; i ++ )

if ( i % 2 != 0 && ss [ i ] >= 'a' && ss [ i ] <= 'z' ) ss [ i ] -=

32 ;

}

27、请编写一个函数fun, 其功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的

字符删除,s 中剩余的字符形成的新串放在 t 所指的数组中。 void fun

( char *s , char t [ ] )

{ int i , j = 0 ;

for ( i = 0 ; s [ i ] ; i++ )

if ( i % 2 != 0 || s [ i ] % 2 == 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

18

28、编写一个函数fun, 它的功能是:实现两个字符串的连接(不使用库函数

strcat),

即把 p2 所指的字符串连接到 p1 所指的字符串后。 void fun ( char

p1[ ] , char p2[ ] )

{ int i , j ;

for ( i = 0 ; p1[ i ] ; i++ ) ;

for ( j = 0; p2[ j ] ; j++ ) p1[ i++ ] = p2[ j ] ;

p1[ i ] = '0' ;

}

29、请编写一个函数fun, 该函数的功能是:将放在字符串数组中的 M 个字符串(每串的

长度不超过 N),按顺序合并组成一个新的字符串。 #define M 3

#define N 20

void fun ( char a [ M ][ N ] , char *b )

{ int i , j , k = 0 ;

for ( i = 0 ; i < M ; i++ )

for ( j = 0 ; j < N && a [ i ][ j ] ; j++ ) b [ k++ ] = a

[ i ][ j ] ;

b [ k ] = '0' ;

}

30、请编写一个函数fun, 该函数的功能是:统计一行字符串中单词的个数,作为函数值返

回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空

格隔开,一行的开始没有空格。

#define N 80

int fun ( char *s )

{ int n = 0 ;

while ( *s )

{ n++ ;

while ( *s && *s != ' ' ) s++ ;

while ( *s && *s == ' ' ) s++ ;

}

return n ;

}

31、请编写函数fun, 其功能是:将 s 所指字符串中ASCII值为奇数的字符删除。

串中剩余字符形成一个新串放在 t 所指的数组中。 void fun ( char *s ,

char t [ ] )

{ int i , j =0 ;

for ( i = 0 ; s [ i ] ; i++ )

if ( s [ i ] % 2 == 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

32、请编写函数fun, 其功能是:将 s 所指字符串中下标为偶数的字符删除,

串中剩余字符形成的新串放在 t 所指数组中。 void fun ( char *s , char

t [ ] )

{ int i , j = 0 ;

for ( i = 0 ; s [ i ] ; i++ )

19

if ( i % 2 != 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

33、请编写函数fun, 其功能是:将 s 所指字符串中ASCII值为偶数的字符删除,

串中剩余字符形成一个新串放在 t 所指的数组中。 void fun ( char *s ,

char t [ ] )

{ int i , j = 0 ;

for ( i = 0 ; s [ i ] ; i++ )

if ( s [ i ] % 2 != 0 ) t [ j++ ] = s [ i ] ;

t [ j ] = '0' ;

}

34、请编写一个函数fun, 该函数的功能是:将 M 行 N 列的二维数组中的字符数据,

按列的顺序依次放到一个字符串中。

#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 ] ;

b [ k ] = '0' ;

}

12 1、N 名学生的成绩已在主函数中放入一个带头结点的链表结构中,h 指向链表的头结点。

请编写函数fun, 它的功能是:找出学生的最高分,由函数值返回。 #include

< stdio.h >

typedef struct slist { double s ; struct slist *next ; } STREC ;

double fun ( STREC *h )

{ STREC *p = h ;

double max = p->s ;

do {

if ( p->s > max ) max = p->s ;

p = p->next ;

} while ( p != NULL ) ;

return max ;

}

2、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写一个函数fun, 它的功能是:把分数最高的学生数据放在 h 所指的数组中,

注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。

#define N 16

typedef struct { char num [ 10 ] ; int s ; } STREC ;

int fun ( STREC *a , STREC *b )

{ int i , j = 0 , max = a [ 0 ] . s ;

20

for ( i = 1 ; i < N ; i++ )

if ( a [ i ] . s > max ) max = a [ i ] . s ;

for ( i = 0 ; i < N ; i++ )

if ( a [ i ] . s == max ) b [ j++ ] = a [ i ] ;

return j ;

}

3、某学生的记录由学号、8 门课程成绩和平均分组成,学号和 8 门课程的成绩已在主函数

中给出。请编写一个函数fun, 它的功能是:求出该学生的平均分放在记录的

ave 成员

中。请自己定义正确的形参。

#define N 8

typedef struct { char num [ 10 ] ; double s [ N ] ; double ave ; }

STREC ;

void fun ( STREC *p )

{ int i ; double sum = 0.0 ;

for ( i = 0 ; i < N ; i++ ) sum += p->s [ i ] ;

p->ave = sum / N ;

}

4、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写函数fun, 它的功能是:按分数的高低排列学生的记录,高分在前。

#define N 16

typedef struct { char num [ 10 ] ; int s ; } STREC ;

int fun ( STREC a [ ] )

{ int i , j ; STREC t ;

for ( i = 0 ; i < N – 1 ; i++ )

for ( j = i + 1 ; j < N ; j++ )

if ( a [ i ] . s < a [ j ] . s) { t = a [ i ]; a [ i ] = a [ j ] ; a

[ j ] = t ; }

}

5、已知学生的记录由学号和学习成绩构成,N 名学生的数据已存入 a 结构体数组中。

请编写一个函数fun, 该函数的功能是:找出成绩最高的学生记录,通过形参返回主函

数(规定只有一个最高分)。已给出函数的首部,请完成该函数。 #define N

10

typedef struct ss { char num [ 10 ] ; int s ; } STU ;

void fun ( STU a [ ] , STU *s )

{ int i , maxInd = 0 ;

for ( i = 1 ; i < N ; i++ )

if ( a [ i ] . s > a [ maxInd ] . s ) maxInd = i ;

*s = a [ maxInd ] ;

}

6、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写一个函数fun, 它的功能是:把低于平均分的学生数据放在 b 所指的数组中,

低于平均分的学生人数通过形参 n 传回,平均分通过函数值返回。 #define

N 8

typedef struct { char num [ 10 ] ; double s ; } STREC ;

double fun ( STREC *a , STREC *b , int *n )

21

{ int i , j = 0 ;

double aver = 0.0 ;

for ( i = 0 ; i < N ; i++ ) aver += a [ i ].s ;

aver /= N ;

for ( i = 0 ; i < N ; i++ )

if ( a [ i ].s < aver ) b [ j++ ] = a [ i ] ;

*n = j ;

return aver ;

}

7、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写函数fun,它的功能是:把指定分数范围内的学生数据放在 b 所指的数组中,分

数范围内的学生人数由函数值返回。 #define N 16

typedef struct { char num [ 10 ] ; int s ; } STREC ;

int fun ( STREC *a , STREC *b , int low, int high )

{ int i , j = 0 ;

for ( i = 0 ; i < N ; i++ )

if ( a [ i ].s >= low && a [ i ].s <= high ) b [ j++ ] = a [ i ] ;

return j ;

}

8、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写函数fun, 它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中

输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置 -1,作为函数值

返回(用于字符串比较的函数是 strcmp)。 #define N 10

typedef struct { char num [ 10 ] ; int s ; } STREC ;

STREC fun ( STREC *a , char *b )

{ int i ;

STREC h = { “” , -1 } ;

for ( i = 0 ; i < N ; i++ )

if ( strcmp ( a [ i ].num , b) == 0 ) return a [ i ] ;

return h ;

}

9、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结果体数组 s 中,

请编写函数fun, 它的功能是:把分数最低的学生数据放在 h 所指的数组中,

注意:分数最低的学生可能不只一个,函数返回分数最低的学生的人数。

#define N 16

typedef struct { char num [ 10 ] ; int s ; } STREC ;

int fun ( STREC *a , STREC *b )

{ int i , j = 0 , min = a [ 0 ] . s ;

for ( i = 1; i < N ; i++ )

if ( a [ i ] . s < min ) min = a [ i ] . s ;

for ( i = 0 ; i < N ; i++ )

22

if ( a [ i ] . s == min ) b [ j++ ] = a [ i ] ;

return j ;

}

10、已知学生的记录由学号和学生成绩构成,N 名学生的数据已存入a结构体数组中。

请编写函数fun, 该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数

(规定只有一个最低分)。已给出函数的首部,请完成该函数。 #define N

10

typedef struct ss { char num [ 10 ] ; int s ; } STU ;

void fun ( STU a [ ] , STU *s )

{ int i , minInd = 0 ;

for ( i = 1 ; i < N ; i++)

if ( a [ i ] . s < a [ minInd ] . s ) minInd = i ;

*s = a [ minInd ] ;

}

11、N 名学生的成绩已在主函数中放入一个带头结点的链表结构中,h 指向链表的头结点。

请编写函数fun, 它的功能是:求出平均分,由函数值返回。 #define N 8

typedef struct slist { double s ; struct slist *next ; } STREC ;

double fun ( STREC *h )

{ double aver = 0.0 ;

STREC *p = h->next ;

while ( p != NULL ) { aver += p->s ; p = p->next ; }

return aver / N ;

}

12、学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,

请编写函数fun, 它的功能是:把高于等于平均分的学生数据放在 b 所指的数组中,

高于等于平均分的学生人数通过形参 n 传回,平均分通过函数值返回。

#define N 12

typedef struct { char num [ 10 ] ; double s ; } STREC ;

double fun ( STREC *a , STREC *b , int *n )

{ int i , j = 0 ;

double aver = 0.0 ;

for ( i = 0 ; i < N ; i++ ) aver += a [ i ] . s ;

aver /= N ;

for ( i = 0 ; i < N ; i++)

if ( a [ i ] . s >= aver ) b [ j++ ] = a [ i ] ;

*n = j ;

return aver ;

}

23


本文标签: 函数 字符串 放在