函数——练习

来源:互联网 发布:大学生网络防诈骗 ppt 编辑:程序博客网 时间:2024/06/07 00:30
#include <stdio.h>void printstars(int m); //函数原型声明 void printchs(int a,char ch);int main(){    int n=6;    //n控制输出行数     printstars(n);  //n的值传递给printstars函数     return 0;}void printstars(int m)  //函数定义,此时 m==n {    int i,j;    for(i=1;i<=m;i++)   //从1到8依次增加行数     {        for(j=1;j<=2*i-1;j++)   //2*i-1控制  * 数目         {            printf("*");        }        printf("\n");   //输出一行 * 就换行     }}

运行结果
这里写图片描述

#include <stdio.h>void printchs(int a, char ch);int main(){    int i;    int n=6;    for(i=1;i<=5;++i)   //循环指定行数     {        printchs(n-i,' ');  //空格由5减至0         printchs(2*i-1,'*');    // * 从1个到11个         //值的传递修改为'A'+i-1,既输出A到E。         printf("\n");       }    return 0;}void printchs(int a, char ch){    int i;     for(i=1; i<=a; ++i)     {        printf("%c", ch);     }}

运行结果
这里写图片描述
这里写图片描述

分段函数求值

#include <stdio.h>double f(double x);int main(){    double x;    printf("请输入x的值:");    scanf("%lf",&x);    printf("解得:f(%.2f)=%.2f\n", x,f(x));    return 0;}double f(double x){    double y;    if(x<0.3)    {        y=0;    }    if(x>=0.3 && x<=0.8)    {        y=(x-0.3)/0.5;    }    if(x>=0.8)    {        y=1;    }    return y;}

运行结果这里写图片描述

求四个数最大公约数

#include <stdio.h>int gcd(int a,int b);int gcds(int , int ,int , int);int main()//实现四个数的最大公约数 {    int x;    int y;    int x1;    int y1;    printf("请输入四个整数:");    scanf("%d %d %d %d",&x,&y,&x1,&y1);    //printf("最大公约数为%d\n",gcd(x,y));    printf("四个数的最大公约数是%d\n", gcd(gcd(x,y),gcd(x1,y1)));    //上面gcd函数递归调用自身     printf("四个数的~最大公约数是%d\n", gcds(x,y,x1,y1));    return 0;}int gcd(int a, int b){    int r=1,t;/*  if(a<b)    {        t=a;   //这个交换是多余的         a=b;        b=t;        }  */    while(b>0)    {        r=a%b;        a=b;        b=r;    }    return a;       }int gcds(int x, int y, int x1, int y1){    int a,b,c;    a=gcd(x,y);    b=gcd(x1,y1);    c=gcd(a,b);     return c;} 

运行结果
这里写图片描述

请输出满足条件n=a!+b!+c!的所有三位数n,其中,a、b、c分别是n的百、十、个位数。要求用自定义函数实现求阶乘。

#include <stdio.h>long fac(int m);int main(){    int a,b,c;    int sum=0,i;    for(i=100;i<=999;++i)    {        a=i/100;        b=i%100/10;        c=i%10;        sum=fac(a)+fac(b)+fac(c);        if(sum==i)        {            printf("各位数的阶乘和等于n自身:%d\n",sum);            break;        }    }    printf("n各位数的阶乘和为:%d!+%d!+%d!=",a,b,c);    printf("%d+%d+%d=%d",fac(a),fac(b),fac(c),sum);    return 0; }long fac(int m){    int i,f=1;    for(i=1;i<=m;i++)        f*=i;    return f;}

运行结果
这里写图片描述

求组合数

#include <stdio.h>long fac(int a);//求阶乘函数int main(){    int n,m,c;    printf("请输入m,n的值:");    scanf("%d %d",&m,&n);    c=fac(m)/fac(n)*fac(m-n);    if(m>n)         printf("n,m的组合数为%d", c);    else        printf("m不能小于n");       return 0;}long fac(int a){    int i;    int f=1;        for(i=1;i<=a;i++)        f*=i;    return f;}

运行结果
这里写图片描述

#include <stdio.h>int days(int y, int m, int d);int main(){    int year, month, day;    printf("输入年 月 日:\n");    scanf("%d %d %d",&year, &month, &day);    printf("这是该年的第 %d 天\n", days(year,month,day));    return 0;} int days(int y,int m, int d){    int i,sum=d;    for(i=1; i<m;i++)//不能等于m     switch(i)    {        case 2:            sum+=28;            break;         case 1:        case 3:         case 5:         case 7:         case 8:         case 10:         case 12:            sum+=31;            break;        default:            sum+=30;            break;    }    if( (y%4==0 && y%100!=0) || y%400==0 )//判断如果是闰年加1天     {        sum++;    }    return sum; }

运行结果
这里写图片描述

编制一个函数reverse,返回给定数据的“反序数”,例如输入1234,输出4321。

#include <stdio.h>int reverse(int x);int main(){    int m,n;    scanf("%d", &m);    n=reverse(m);    printf("%d\n", n);    return 0;}int reverse(int x) {    int r,i;    r=0;    while(x>0)    {        i=x%10;         r=r*10+i;        x=x/10;     }    return r;}

运行结果
这里写图片描述

编制isPalindrome(),用于判断参数是否是回文数——回文数

#include <stdio.h>int isPalindrome(int n);int main(){    int m;    scanf("%d", &m);    if(isPalindrome(m))        printf("%d是回文数!\n", m);    else        printf("%d不是回文数!\n", m);    return 0;}int isPalindrome(int n){    int r,i,t,n1;    r=0;    n1=n;    while(n>0)    {        i=n%10;         r=r*10+i;        n=n/10;     }    if(r==n1)        t=1;    else        t=0;    return t;}

运行结果
这里写图片描述

编制一个返回值为int型的函数isPrimer(),用于判断参数是否为素数

#include <stdio.h>int isPrimer(int n);int main(){    int m;    printf("输入一个整数:");    scanf("%d",&m);    if(isPrimer(m))        printf("%d是素数\n",m);    else        printf("%d不是素数\n",m);    return 0;}int isPrimer(int n){    int t=1,i;    for(i=2;i<9;i++)    {        if(n%i==0)        {            t=0;            break;        }    }    return t;}

运行结果
这里写图片描述

#include <stdio.h>int isPrimer(int n);int isPalindrome(int n);int reverse(int x); int main(){    int m;    for(m=1;m<=50;m++)    {        if(isPrimer(m))            printf("素数:%d\n", m );    }    for(m=1;m<=50;m++)    {        if(isPalindrome(m))            printf("回文数:%d\n", m );    }    for(m=1;m<=50;m++)    {        if(isPrimer(m)==1 && isPalindrome(m)==1)        {            printf("%3d是素数也是回文数\n",m);        }    }    for(m=1;m<=100;m++)    {        if(isPrimer(m))        {            if(isPrimer(reverse(m))==1)                printf("可逆素数:%3d 反序数:%d\n",m,reverse(m));        }    }    return 0;}int isPrimer(int n){    int t=1,i;    for(i=2;i<n;i++)    {        if(n%i==0)        {            t=0;            break;        }    }    return t;}int isPalindrome(int n){    int r,i,t,n1;    r=0;    n1=n;    while(n>0)    {        i=n%10;         r=r*10+i;        n=n/10;     }    if(r==n1)        t=1;    else        t=0;    return t;}int reverse(int x) {    int r,i;    r=0;    while(x>0)    {        i=x%10;         r=r*10+i;        x=x/10;     }    return r;}

运行结果
这里写图片描述

0 0
原创粉丝点击