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
版权声明:本文标题:C语言编程(函数)100道题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1702920588a436011.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论