admin 管理员组文章数量: 887053
2024年1月6日发(作者:嵌入式开发分为哪些)
C语言程序设计练习题及参考答案
1、定义一个函数int fun(int a,int b,int c),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。
#include
int fun(int a,int b,int c)
{
if(a+b>c && b+c>a && a+c>b)
{
if(a==b && b==c )
return 3;
else if(a==b||b==c||a==c)
return 2;
else return 1;
}
else return 0;
}
void main()
{
int a,b,c,shape;
printf("nInput a,b,c: ");
scanf("%d%d%d",&a,&b,&c);
printf("na=%d, b=%d, c=%dn",a,b,c);
shape =fun(a,b,c);
printf("nnThe shape : %dn",shape);
}
1 / 53
2、编写一个程序,将两个变量的值交换, 例如变量a中的值原为 3,b中的值原为8,程序运行后 a 中的值为8,b中的值为3。
#include
void fun(int *x,int *y)
{
int t;
t=*x;*x=*y;*y=t
}
void main()
{
int a=3,b=8;
printf("%d %dn",a,b);
fun(&a,b);
printf("%d %dn",a,b);
}
2 / 53
3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。
例如,输入的数为:55 12 34,
输出结果应当是:a=55.0,b=34.0,c=12.0。
#include
void fun(float *p,float *q,float *s)
{
float k;
if (*p<*q)
{ k=*p;*p=*q;*q=k;}
if (*q<*s)
{ k=*s;*s=*p;*p=k;}
if (*p<*q)
{ k=*p;*p=*q;*q=k;}
}
void main()
{ float a,b,c;
printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1fnn",a,b,c);
fun(&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1fnn",a,b,c);
}
3 / 53
4、编写函数fun(int n),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。
#include
#include
int fun(int n)
{
int i,s=0;
for (i=2;i if (n%i==0) s=s+i; return s; } void main() /*主函数*/ { void NONO(); printf("%dn",fun(120)); NONO(); } void NONO( ) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ FILE *wf; wf = fopen("", "w") ; fprintf(wf,"%dn",fun(120)); fclose(wf) ; } 4 / 53 5、计算s,并输出 1 1 1 S = 1 + ── + ─── + …… + ────── 1+2 1+2+3 1+2+3+…+n n通过键盘输入,例如:若n的值为11时,则函数值为:1.833333 #include #include float fun(int n) { int i; float s=1.0,h=1; for (i=2;i<=n;i++) { h=h+i; s=s+1.0/h; } return s; } void main() { int n;float s; printf("nPlease enter N:");scanf("%d",&n); s=fun(n); printf("the result is:%f",s); } 5 / 53 6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。 #include void fun(long s,long *t) { int d; long s1=1; *t=0; while (s>0) { d=s%10; if(d%2!=0) { *t=d*s1+*t; s1=s1*10; } s/=10; } } main() { long s,t; printf("nPlease enter s:"); scanf("%ld",&s); fun(s,&t); printf("The result is:%ldn",t); } 6 / 53 7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。 #include int fun(int k) { int m=0,mc=0,j; while((k>=1)&&(mc<10)) { if ((k%13 == 0)||(k%17 == 0)) { m=m+k;mc++; } k--; } return m; } void main() { printf("%dn",fun(500)); } 7 / 53 8、已知一个数列的前三项分别为0,0,1, 以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum。例如,当n=10时,程序的输出结果应为:23.197745。 #include #include double fun(n) { double sum,s0,s1,s2,s; int k; sum = 1.0; if(n <= 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; } return sum; } void main ( ) { int n; printf("Input N="); scanf("%d", &n); printf("%fn", fun(n) ); } 8 / 53 9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。 #include int fun(int m) { int i,k; for (i=m+1;;i++) { for (k=2;k if(i%k==0) break; if (k>=i) return(i); } } void main() { int n; printf("nPlease enter n:"); scanf("%d",&n); printf("%dn",fun(n)); } 9 / 53 10、判断两个整数m和n是否互质(即是否有公共的因子)(m≠1,n≠1)。方法是: 用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。 例如,若输入187和85,则应输出No(表示它们不互质,它们有公因子17)。若输入89和187,则应输出Yes(表示它们互质)。 #include int IsThat( int m, int n ) { int k, t, mk=1; t=m; if (m>n) t=n; for(k=2;k<=t;k++) if( m%k==0 && n%k==0 ) { mk=0; break; } return mk; } void main( ) { int m, n; printf( "nPlease enter 2 numbers:n" ); scanf("%d %d", &m, &n); if( IsThat( m, n ) ) printf( "Yesn" ); else printf( "Non" ); } 10 / 53 11、将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入)。 例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。 #include void Trans( int m, int k ) { int aa[20], i,j; for( i = 0; m; i++ ) { aa[i] = m%k; m /= k; } for( j=i-1; j>=0; j-- ) printf("%d", aa[j]); } void main() { int b, n; printf( "nPlease enter a number and a base:n" ); scanf("%d %d", &n, &b ); Trans( n, b ); } 11 / 53 12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零 #include void fun(int *zs,int *fs,int *l,float aa[]) { } void main() { } float num[50]; int i,czs,cfs,cl; czs=cfs=cl=0; printf( "nPlease enter 50 float numbers :n" ); for(i=0;i<50;i++) scanf(“%f”,&num[i]); fun(&czs,&cfs,&cl,num); printf("n正数:%d ,负数:%d ,零:%d n",czs,cfs,cl); int i; for(i=0;i<50;i++) { if(aa[i]>0) (*zs)++; (*fs)++; (*l)++; if(aa[i]<0) if(aa[i]==0) } 12 / 53 13、计算并输出方程X2+Y2=1989的所有整数解 #include void fun() { } void main() { } printf(“方程x^2+y^2=1989的整数解为:n”); fun(); int x,y; for(x=1;x<=44;x++) for(y=1;y<=44;y++) if(x*x+y*y==1989) printf(“x=%d ,y=%d n”,x,y); 13 / 53 14、从键盘输入10个整数,求出其中的最大值。 #include int fun(int aa[]) { } void main() { } int num[10],i; printf(“请从键盘输入10个整数:n”); for(i=0;i<10;i++) scanf(“%d”,&num[i]); printf(“n最大的数是:%dn”,fun(num)); int m,i; m=aa[0]; for(i=1;i<10;i++) return m; if(aa[i]>m) m=aa[i]; 14 / 53 15、从键盘输入n值,输出如右图形。(例如n=5时) #include void fun(int n) { int i,j; for(i=1;i<=n;i++) { } } void main() { }int n; printf(“n请输入图形的行数:”); scanf(“%d”,&n); fun(n); for(j=1;j<=i;j++) printf(“%3d”,1); printf(“%3d”,j); for(j=2;j<=n+1-i;j++) printf(“n”); 1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 15 / 53 16、使用函数的方式,计算如下公式的值。 1 1 1 A1=1,A2=──,A3=──,……An=──── 1+A1 1+A2 1+A(n-1) 例如:若n=10,则应输出: 0.617977。 #include float fun ( int n ) { float A=1; int i; for (i=1; i<=n; i++) A = 1.0/(1+A); return A ; } void main( ) { int n ; printf("nPlease enter n: ") ; scanf("%d", &n ) ; printf("A%d=%fn", n, fun(n) ) ; } 16 / 53 * 17、使用函数的方式,,按下面的公式计算并输出数列的第m项。 ┌ 2, m = 1; │ 3, m = 2; FFF( m ) = ┤ 5, m = 3; └ FFF(m - 3) + FFF(m - 1), m > 3; 例如,若输入整数 9,则应输出:47。 (不用做) 17 / 53 * 18、使用函数的方式,按以下递归公式求函数值 ┌10 (n=1) fun(n)=│ └fun(n-1)+2 (n>1) 例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 (不用做) 18 / 53 19、计算并输出当0 例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。 #include #include double fun(double x) { int n=1; /* 循环计数*/ /* 累计数*/ double sn=1; double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/ while(fabs(xn-xn1)>=0.000001)/*绝对值是否合格*/ { return sn; } void main() { double x,s; printf("Input x: "); scanf("%lf",&x); s=fun(x); printf("s=%fn",s); } xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1; sn+=xn; } /*sn累加上xn*/ 19 / 53 20、计算并输出s。 x^2 x^3 x^n s = 1 + x + ── + ── + …… + ── 2! 3! n! n,x从键盘输入,例如,当n=10,x=0.3时,函数值为1.349859。 #include double fun(double x,int n) { int i; double f=1.0,h=x; double s=1; s=s+h/f; for (i=2;i<=n;i++) { f=f*i;h=h*x; s=s+h/f; } return s; } void main() { printf("%fn",fun(0.3,10)); } 20 / 53 21、从键盘输入high,计算并输出high以内最大的10个素数之和。例如,输入high的值为100,则输出732。 #include int fun( int high ) { int sum = 0, n=0, j, yes; while ((high >= 2) && (n < 10)) { yes = 1; for (j=2; j<=high/2; j++ ) if (high % j ==0 ) { yes=0; break; } if (yes==1) { sum +=high; n++; } high--; } return sum ; } void main ( ) { printf("%dn", fun (100)); } 21 / 53 22、请编写函数float fun(int n),它的功能是:返回n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,n=20,返回0.583333。注意:要求n的值不大于100。 #include double fun(int n) { int i; double sum=0.0; if(n>0&&n<=100) { for (i=1;i<=n;i++) if(i%5==0||i%9==0) sum+=1.0/i; } return sum; } void main() { int n; double s; printf("nInput n: "); scanf("%d",&n); s=fun(n); printf("nns=%fn",s); } 22 / 53 23、请编一个函数fun(int *a, int n, int *odd, int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给出数组a中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。 例如:数组中的值依次为: 1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even 返回偶数之和8。 #include #define N 20 fun ( int *a, int n, int *odd, int *even ) { int i,sum_odd=0,sum_even=0; for(i=0;i if(a[i]%2==0) sum_even+=a[i]; else sum_odd+=a[i]; *odd=sum_odd; *even=sum_even; } void main( ) { int a[N]={1,9,2,3,11,6}, i, n=6, odd, even; printf ( "The original data is : n" ); for ( i = 0; i < n; i ++ ) printf ( "%5d", *(a+i) ); printf("nn"); fun ( a, n, &odd, &even ); printf ( "The sum of odd numbers: %dn", odd ); printf ( "The sum of even numbers: %dn", even ); } 23 / 53 24、编写计算三角形面积的程序,注意:将计算面积定义成函数float fun(int a,int b,int c)(a,b,c为三角形的三条边,返回三角形的面积),在主函数中调用fun #include #include float fun(int a,int b,int c) { } void main() { }int a,b,c; printf(“请输入三角形三条边:n”); scanf(“%d%d%d”,&a,&b,&d); if(a+b>c && b+c>a && a+c>b) printf(“三角形面积为:%.2f”,fun(a,b,c)); printf(“无法构成三角形”); else float p; p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c)); 24 / 53 25、编写程序,求E=1+1/1!+1/2!+……+1/n!,要求最后一项的值小于10-4 #include double fun(int n) { double m=1.0; int i=1; double p=1.0; do{ m=m+1.0/p; i++; p=p*i; } while(1.0/p>=1E-4); return m; } void main() { int n; double s; printf("Input n: "); scanf("%d",&n); s=fun(n); printf("s=%fn",s); } 25 / 53 26、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。 例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。 #include #include double fun(double x[9]) { int i ; double avg=0.0,sum=0.0; for (i=0;i<8;i++) { avg=(x[i]+x[i+1])/2; sum+=sqrt(avg); } return sum; } void main() { double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0}; int i; printf("nThe original data is :n"); for(i=0;i<9;i++)printf("%6.1f",a[i]); printf("nn"); s=fun(a); printf("s=%fnn",s); } 26 / 53 27、将1到m之内(含m)能被7或11整除的所有整数放在数组a中。 例如,若输入m的值为50,则在数组a中的值为: 7 11 14 21 22 28 33 35 42 44 49 #include #define M 100 void fun ( int m, int *a , int *n ) { int i,count=0; for(i=1;i<=m;i++){ if(i%7==0 || i%11==0) { a[count++]=i; } } *n=count; } void main( ) { int aa[M], n, k; fun ( 50, aa, &n ); for ( k = 0; k < n; k++ ) if((k+1)%20==0) printf("n"); else printf( "%4d", aa[k] ); printf("n") ; } 27 / 53 28、请编写函数int fun(int m,int score[],int below[]),它的功能是:将低于平均分的人数作为函数值返回,并将低于平均分的成绩放在below数组中(m表示score的长度,score表示成绩)。例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回4,below中的数据应为:10、20、30、40。 #include #include int fun(int score[], int m, int below[]) { int total=0; int average=0; int *p_below=below; int i=0; int j=0; for(i=0;i total=total+score[i]; } average=total/m; for(i=0;i if(score[i] *p_below=score[i]; p_below++; j++; } } *p_below=NULL; return(j); } main( ) { int i, n, below[9] ; int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ; 28 / 53 n = fun(score, 9, below) ; printf( "nBelow the average score are: " ) ; for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ; } 29 / 53 29、用插入排序法将n个字符进行排序(降序)。(提示:插入法排序的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。 #define N 80 #include "stdio.h" #include "string.h" void insert(char *aa) { int i,j,n; char ch; n=strlen(aa); for(i=1;i { ch=aa[i]; j=i-1; while ((j>=0)&&(ch aa[j+1]=aa[j]; j--; } aa[j+1]=ch; } } void main() { char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; int i; printf("The original string : %sn",a); insert(a); printf("The string after sorting:%snn",a); } { 30 / 53 30、假定整数数组a中元素的值不重复。删除a中值为x的元素(x从键盘输入)。 #include #define N 20 fun(int *a,int n,int x) { int p=0,i; a[n]=x; while(x!=a[p]) p=p+1; if(p==n) return -1; else { for(i=p;i a[i]=a[i+1]; return n-1; } } void main() { int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10; printf("The original data :n"); for(i=0;i printf("nInput x (to delete):");scanf("%d",&x); printf("Delete : %dn",x); n=fun(w,n,x); if (n==-1) printf("***Not be found!***nn"); else { printf("The data after deleted:n"); for(i=0;i } } 31 / 53 31、一个已按从小到大的顺序排好的数组a,编写程序,从键盘输入一个数x按原来排序的规律将它插入数组a中。 #include #define M 20 void InSort( int *n, int vv[], int k ) { int i=0 , j; while ( k > vv[i] && i < *n ) i++; if ( i<*n ) for ( j=*n; j>i; j-- ) vv[j] = vv[j-1]; vv[i] = k; ++*n; } void main() { int aa[M], i, k, m; system("cls"); printf( "nPlease enter a number:n" ); scanf( "%d", &m ); printf( "nPlease enter %d numbers:n", m ); for( i = 0; i < m; i++ ) scanf( "%d", &aa[i] ); printf( "nPlease enter another number:n" ); scanf( "%d", &k ); InSort( &m, aa, k ); for(k=0; k < m;k++) printf( " %d", aa[k] ); } 32 / 53 32、使用数组的方法筛选出1-100中的素数 #include void fun ( int *pt ) { int i,j,flag; *pt=2;*pt++; for(i=3;i<100;i++) { flag = 1; for(j=2;j if(i % j == 0) flag = 0; if( flag ) { *pt = i;*pt++; } } *pt=0; } void main( ) { int *pointer,a[30]; pointer=a; fun(pointer); printf("The result is :n"); while(*pointer) printf ( "%d ",*pointer++ ); } 33 / 53 33、已知一个数组a中包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。 #include void fun(int a[],int b[]) { int i; for(i=1;i<10;i++) b[i-1]=a[i]-a[i-1]; for(i=0;i<9;i++) { printf(“%3d”,b[i]); if((i+1)%3==0) } } void main() { }int a[10]={1,2,3,4,5,6,7,8,9,10}; int b[9]; fun(a,b); printf(“n”); 34 / 53 34、请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。 例如,二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是:WSHWSHWSH。 #include void fun(int (*s)[10], int *b, int *n, int mm, int nn) { int x,y; for(x=0;x for(y=0;y {b[x*mm+y]=*(s[y]+x); (*n)++; } } void main() { int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j; int a[100]={0}, n=0; printf("The matrix:n"); for(i=0; i<3; i++) { for(j=0;j<4; j++)printf("%3d",w[i][j]); printf("n"); } fun(w,a,&n,3,4); printf("The A array:n"); for(i=0;i } 35 / 53 35、求出N×N的二维数组周边元素的平均值 |0 1 2 7 9| |1 9 7 4 5| a = |2 3 8 3 1| |4 5 6 8 2| |5 9 1 4 1| 则返回主程序后s的值应为: 3.375。 #include #define M 4 #define N 5 int fun ( int a[M][N] ) { int i, j, sum = 0; for (i = 0; i < M; i++) for (j = 0; j < N; j++) if ((i == 0)||(i == M - 1)||(j == 0)||(j == N - 1) ) sum += a[i][j]; return sum; } void 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; system("cls"); printf ( "The original data is : n" ); for ( i=0; i { for ( j =0; j printf ("n"); } y = fun ( aa ); printf( "nThe sum: %dn" , y ); printf("n"); } 36 / 53 36、求出M 行 N 列的二维数组tt里每列中的最小元素,并依次放入 pp 数组中。 #include #define M 3 #define N 4 void fun ( int tt[M][N], int pp[N] ) { int i, j, min; for(i = 0; i < N; i++) { min = tt[0][i]; for(j = 0; j < M; j++) if (min > tt[j][i]) min = tt[j][i]; pp[i] = min; } } void main( ) { int t [ M ][ N ]={{22,45, 56,30}, {19,33, 45,38}, {20,22, 66,40}}; int p [ N ], i, j, k; system("cls"); printf ( "The original data is : n" ); for( i=0; i for( j=0; 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"); } 37 / 53 37、请编写程序,实现B=A+A',即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。 例如,输入下面的矩阵: 其转置矩阵为: |1 2 3| |1 4 7| |4 5 6| |2 5 8| |7 8 9| |3 6 9| 程序输出: |2 6 10| |6 10 14| |10 14 18| #include 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]; } void main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; int i,j; fun(a,t); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%7d",t[i][j]); printf("n"); } } 38 / 53 38、编写程序删除字符串s中从下标k开始的n个字符(n和k从键盘输入)。 例如,字符串内容为:Hellollo World!,k中的值为:5,n中的值为:3,结果为:Hello World!。 #include #define N 80 void fun(char *a,int k,int n) { int i;i=k; while (a[i-1]!='0') { a[i]=a[i+n]; i=i+1; } } void main() { char s[N]="Hellollo World!"; int k,n; printf("nThe original string:%sn",s); printf("Enter index ———————— k: "),scanf("%d",&k); printf("Enter number to delete —— n: ");scanf("%d",&n); fun(s,k,n); printf("nThe string after deleted: %sn",s); NONO(); } 39 / 53 39、编写程序,从键盘输入字符串tt,将其中每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应的小写字母。 例如,若输入字符串:"ab cD bOYxy!",则输出字符串为:"Ab Cd Boyxy!"。 #include #include char* EXUL( char tt[] ) { int isfirst = 1; int i, length; length = strlen( tt ); for(i = 0; i < length; i++) { if (tt[i] >= 'a' && tt[i] <= 'z') {tt[i] = isfirst?(tt[i] + 'A' - 'a'):tt[i];isfirst=0;} else if (tt[i] >= 'A' && tt[i] <= 'Z') {tt[i] = isfirst?tt[i]:(tt[i] - 'A' + 'a');isfirst=0;} else isfirst = 1; } return tt; } main() { int i; char tt[81]; printf("nPlease enter a string: "); gets( tt ); printf( "nThe result string is:%sn", EXUL( tt ) ); } 40 / 53 40、编写程序,从键盘输入字符串tt,字符串中'a'到'z'26个字母各自出现的次数,并依次放在pp所指数组中。 例如,当输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #include void fun(char *tt, int pp[]) { char *p_tt=tt; int i=0; while(i<26){ for(;*p_tt!=NULL;p_tt++){ switch(*p_tt){ case 'a':pp[0]++;break; case 'b':pp[1]++;break; case 'c':pp[2]++;break; case 'd':pp[3]++;break; case 'e':pp[4]++;break; case 'f':pp[5]++;break; case 'g':pp[6]++;break; case 'h':pp[7]++;break; case 'i':pp[8]++;break; case 'j':pp[9]++;break; case 'k':pp[10]++;break; case 'l':pp[11]++;break; case 'm':pp[12]++;break; case 'n':pp[13]++;break; case 'o':pp[14]++;break; case 'p':pp[15]++;break; case 'q':pp[16]++;break; case 'r':pp[17]++;break; case 's':pp[18]++;break; case 't':pp[19]++;break; 41 / 53 pp[i]=0; i++;} } } } case 'u':pp[20]++;break; case 'v':pp[21]++;break; case 'w':pp[22]++;break; case 'x':pp[23]++;break; case 'y':pp[24]++;break; case 'z':pp[25]++;break; main( ) { char aa[1000] ; int bb[26], k, n ; printf( "nPlease enter a char string:" ) ; scanf("%s", aa) ; fun(aa, bb ) ; for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ; printf( "n" ) ; } 42 / 53 41、请编写程序,把字符串s中所有的字符前移一个位置,串中的第一个字符移到最后。 例如:原有的字符串为:Mn.123xyZ,则调用该函数后,串中的内容为:n.123xyZM。 #include #include #define N 81 fun ( char *s ) { char b[N] ; sprintf(b, "%s%c", s + 1, *s) ; strcpy(s, b) ; } void main( ) { char a[ N ] ; printf ( "Enter a string : " ); gets ( a ); printf ( "The original string is : " ); puts( a ); fun ( a ); printf ( "The string after modified : "); puts ( a ); } 43 / 53 42、编写程序,把字符串中的内容逆置。 例如:字符串中原有的内容为:abcdefg,输出:gfedcba。 #include #include #define N 81 void fun ( char *s ) { } void main( ) { char a[N]; printf ( "Enter a string : " ); gets ( a ); printf ( "The original string is : " ); puts( a ); fun ( a ); printf("n"); printf ( "The string after modified : "); puts ( a ); } length = strlen( s ); for (i = 0;i < length / 2; i++) { tmp = s[i]; s[i] = s[length - i - 1]; s[length - i - 1] = tmp; } int i ,length; char tmp; 44 / 53 43、编写程序,依次取出字符串s1中所有数字字符,形成新的字符串s2。 #include void fun(char *s) { int i,j; for(i=0,j=0; s[i]!='0'; i++) if(s[i]>='0' && s[i]<='9') s[j++]=s[i]; s[j]='0'; } void main() { char item[80]; printf("nEnter a string : ");gets(item); printf("nnThe string is : "%s"n",item); fun(item); printf("nnThe string of changing is : "%s"n",item ); } 45 / 53 44、分别将a、b所指字符串中字符倒序,然后按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。 例如,当a所指字符串中的内容为:"abcdefg",b所指字符串中的内容为:"1234"时,则c所指数组中的内容应该为:"g4f3e2d1cba"; #include #include void myswap( char *s ) { char *sp, *st, ch; sp = s; st = s + strlen(s) - 1; while ( sp <= st ) { ch = *sp; *sp = *st; *st = ch; sp++; st--; } } void fun( char *a, char *b, char *c ) { char s1[100], s2[100] , *sa, *sb; strcpy(s1,a); strcpy( s2, b ); myswap (s1); myswap(s2); sa = s1 ; sb = s2 ; while ( *sa || *sb ) { if ( *sa ){ *c = *sa; c++; sa++; } if ( *sb ){ *c = *sb; c++; sb++; } } *c = 0; } void main() { char s1[100], s2[100], t[200]; printf("nEnter s1 string : ");scanf("%s",s1); printf("nEnter s2 string : ");scanf("%s",s2); 46 / 53 fun( s1, s2, t ); printf("nThe result is : %sn", t ); } 47 / 53 45、已知字符串a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个字符串a3中,合并后仍保持字母顺序(如a1中存放:"accel",a2中存放"ilrz",则a3中为"acceillrz")。 #include #define M 3 #define N 20 void fun(char a[M][N], char *b) { int i,j,d=0; for(i=0;i<100;i++)b[i]=0; for(i=0,d=0;i<3;i++) for(j=0;*(a[i]+j);j++) { *(b+d)=*(a[i]+j); d++; } } void main() { char w[M][N]={"AAAA","BBBBBBB","CC"}, a[100]; int i ; printf("The string:n"); for(i=0; i printf("n"); fun(w,a); printf("The A string:n"); printf("%s",a);printf("nn"); } 48 / 53 46、定义一个函数char * fun(char * s),判断一个字符串s是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!。所谓回文即正向与反向的拼写都一样,例如:adgda。 #include #define N 80 int fun(char *str) { int b=1,n,i; n=strlen(str); for(i=0;i {if(str[i]!=str[n-1-i]) {b=0; break;} } if(i==n/2) b=1; return b; } void main() { char s[N] ; printf("Enter a string: ") ; gets(s) ; printf("nn") ; puts(s) ; if(fun(s)) printf(" YESn") ; else printf(" NOn") ; } 49 / 53
版权声明:本文标题:C语言程序设计函数练习题及参考答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704476477h461458.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论