1. 输入两个整数,要求用两个函数求出其最大公约数和最小公倍数,最大公约数和最小公倍数都在主函数中输出。
#include<stdio.h>int main(){int i,j,t;int max(int,int);int min(int,int);scanf("%d%d",&i,&j);if(i<j){t=i;i=j;j=t;}printf("%d %d\n",max(i,j),min(i*j,max(i,j)));return 0;}int max(int i,int j){int t;while(j){t=i%j;i=j;j=t;}return i;}int min(int p,int q){return p/q;}2. 输入4个整数,找出其中最大的数。
用函数的嵌套调用来处理。
#include<stdio.h>int main(){int max4(int,int,int,int); //对max4的函数声明int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d); //输入4个数printf("max=%d\n",max4(a,b,c,d));//调用4个数中的最大者return 0;}int max4(int a,int b,int c,int d) //定义max4函数{int max2(int,int); //对max2的函数声明return max2(max2(max2(a,b),c),d); //调用max2把作为函数值带回main函数}int max2(int a,int b){return(a>b?a:b); //返回条件表达式的值,即a和b中的大者}3. 用递归调用的方法求5!。
#include<stdio.h>int main(){int fac(int);int n;scanf("%d",&n);printf("%d!=%d\n",n,fac(n));return 0;}int fac(int n){if(n==0||n==1)return 1;elsereturn fac(n-1)*n;}4. 按以下递归公式求函数的值。
⎩⎨⎧>+-==)1(2)1()1(10 fun(n)n n fun n 例如,当给n 输入5时,函数值为18,(要求用递归实现)。
#include<stdio.h>int main(){int fun(int);int n;scanf("%d",&n);printf("%d\n",fun(n));return 0;}int fun(int n){if(n==1)return 10;elsereturn fun(n-1)+2;}5. 用递归法将一个整数n 转换成字符串。
例如,输入483,应输出字符串“483”,n 的位数不确定,可以是任意位数的整数。
#include<stdio.h>void main(){void fun(int);int n;scanf("%d",&n);if(n<0){n=-n;putchar('-');}fun(n);puts("");}void fun(int m){if(m/10)fun(m/10);putchar(m%10+48);}6. 写一个函数,完成将一个数组中的值按逆序重新存放。
例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。
#include<stdio.h>#define N 5int main(){void fun(int a[]);int a[N],i;for(i=0;i<N;i++)scanf("%d",&a[i]);fun(a);return 0;}void fun(int a[N]){int t,i;for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-1-i];a[N-1-i]=t;}for(i=0;i<N;i++)printf("%d ",a[i]);puts("");}7. 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。
#include<stdio.h>int main(){float average(int c[],int n);int i,score_1[5],score_2[10];float p,q;for(i=0;i<5;i++)scanf("%d",&score_1[i]);for(i=0;i<10;i++)scanf("%d",&score_2[i]);p=average(score_1,5);q=average(score_2,10);printf("%f\n%f\n",p,q);return 0;}float average(int c[],int n){ float m=0.00;int i;for(i=0;i<n;i++)m=m+c[i];return(m/n);}8. 编写一个函数,实现将两个字符串连接起来,并在main函数中调用此函数,不要调用系统提供的strcat函数。
#include<stdio.h>int main(){void c(char st1[],char st2[]);char s1[100],s2[100];gets(s1); gets(s2);c(s1,s2); puts(s1);return 0;}void c(char st1[],char st2[]){int i=0,k=0;while(st1[++i]);while(st1[i++]=st2[k++]);}9. 编写一个函数,比较两个字符串的大小,并在main函数中调用此函数,不要调用strcmp函数。
#include<stdio.h>int main(){char a[100],b[100];void fun(char a[],char b[]);gets(a);gets(b);fun(a,b);return 0;}void fun(char a[],char b[]){for(int i=0;;i++){if(a[i]>b[i]){puts(a);break;}else if(a[i]<b[i]){puts(b);break;}elsecontinue;}}10. 编写一个函数,实现在一个升序排列的整型数组中插入一个整数的功能,并在main函数中调用此函数,输入数据和最后输出都在主函数中实现。
#include<stdio.h>int a[11]={1,3,5,7,14,23,45,87,155,231};int main(){int c,i;void fun(int a[],int c);printf("input an integer:");scanf("%d",&c);fun(a,c);for(i=0;i<11;i++)printf("%d ",a[i]);printf("\n");return 0;}void fun(int a[],int t){int i,j;if(t>a[9])a[10]=t;else{for(i=0;i<11;i++)if(t<a[i])break;for(j=10;j>i;j--)a[j]=a[j-1];a[i]=t;}}11. 写一个判断素数的函数,在主函数输入一个整数,是素数时输出yes,否则输出no,结果要求在主函数中输出。
#include<stdio.h>int main(){int a;int is_prime(int);scanf("%d",&a);if(is_prime(a)==0)printf("yes\n");elseprintf("no\n");return 0;}int is_prime(int a){int j,flag=1;for(j=2;j<=a/2;j++){if(a%j==0)break;}if(j>=a/2)flag=0;return flag;}12. 编写一个函数,将一个字符串中的原音字母赋值到另一个字符串中,并在main函数中调用此函数,输入数据和最后输出都在主函数中实现。
#include<stdio.h>char a[50],b[50]={0};int main(){void fun(char a[],char b[]);gets(a);fun(a,b);puts(b);return 0;}void fun(char a[],char b[]){int i,j;for(i=0,j=0;a[i]!='\0';i++)if(a[i]=='a'||a[i]=='A'||a[i]=='e'||a[i]=='E'||a[i]=='i'||a[i]=='I'||a[i]=='o'||a[i]=='O'||a[i]=='u'||a[i]=='U')b[j++]=a[i];}13. 建立动态数组,输入5个学生的成绩,编写函数检查其中有无低于60分的学生成绩,要求输入和输出功能在主函数中完成。
#include<stdio.h>#include<stdlib.h>int main(){void check(int *);int *p,i;p1=(int *)malloc(5*sizeof(int));for(i=0;i<5;i++)scanf("%d",p+i);check(p1);return 0;}void check(int *p){int i;printf("They are fail:");for(i=0;i<5;i++)if(*(p+i)<60)printf("%d ",p[i]);puts("");}14. 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。