C语言:函数

来源:互联网 发布:国债期货模拟软件 编辑:程序博客网 时间:2024/06/04 01:08

任务代码:

任务1:星号图

#include <stdio.h>void printstars(int m) //定义能输出一行m个星号的函数{    int j;    for (j=1; j<=m; ++j)         printf("*");}int main( ){  int n=6; //n代表要输出的行数  int i;  for(i=1; i<=n; ++i)    {        printstars(2*i-1);        printf("\n");    }  return 0;}


任务2:根据main函数中对printchs函数的调用,以及printchs的功能要求,编写printchs函数,使下面的程序能输出星号图:

//调用函数printchs输出星号图#include <stdio.h>//在下面写printchs函数的定义,功能是输出一行若干个指定字符void printchs(int,char);//函数声明可以不带有变量void printchs(int a,char b){    int i;    for(i=0;i<a;i++)    {        printf("%c",b);//或者使用putchar(b);    }    return;}int main( ){    int n=6; //n代表要输出的行数    int i;    //通过在下面的循环里调用printchs函数,输出右面的图    for(i=1; i<=n; ++i)    {        printchs(n-i,' ');        printchs(2*i-1,'*') ;        printf("\n");    }    return 0;}


任务3:在上面的程序中,只改动一处,输出下面的图形

//调用函数printchs输出星号图#include <stdio.h>//在下面写printchs函数的定义,功能是输出一行若干个指定字符void printchs(int,int);//函数声明可以不带有变量void printchs(int a,int b){    int i;    for(i=0;i<a;i++)    {        printf("%c",b);//或者使用putchar(b);    }    return;}int main( ){    int n=6; //n代表要输出的行数    int i;    //通过在下面的循环里调用printchs函数,输出右面的图    for(i=1; i<=n; ++i)    {        printchs(n-i,32);        printchs(2*i-1,64+i) ;        printf("\n");    }    return 0;}


任务4:
求解分段函数的值


#include<stdio.h>double f(double);     //这一句是对自定义函数f的声明int main( ){    double x;    printf("请输入x的值:");    scanf("%lf", &x);    printf("解得:f(%.2f)=%.2f\n", x, f(x));  //调用函数f求解    return 0;} //将自定义函数f的定义写在下面double f(double a){    double result;    int c;    c=(a-0.3<0)+(a-0.8<0);    switch(c)    {        case 0: //a>=0.3        result=1;        break;    case 1://a>=0.3&&a<=0.8        result=(a-0.3)/(0.8-0.3);        break;    case 2://x<0.3的情况        result=0;        break;    }    return result;}


任务5:项目3-求最大公约数

#include <stdio.h>//int gcd(int x,int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成int gcd(int x,int y){  int c=1,z;  while(1)  {    if(x<y)    {        z=x;        x=y;        y=z;    }    c=x%y;    if(c==0)break;    x=y;    y=c;  }  return y;}int main(){    int a,b,g;    printf("请输入两个数字:");    scanf("%d %d", &a, &b);    g=gcd(a,b);    printf("最大公约数是:%d\n", g);    return 0;}


求四个数的最大公约数:

#include <stdio.h>//用于求四个数的最大公约数int gcds(int a,int b,int c, int d){    int result1,result2,result3;    result1=gcd(a,b);    result2=gcd(c,d);    result3=gcd(result1,result2);    return result3;}int gcd(int x,int y){  int c=1,z;  while(1)  {    if(x<y)    {        z=x;        x=y;        y=z;    }    c=x%y;    if(c==0)break;    x=y;    y=c;  }  return y;}int main(){    int a,b,c,d,g;    printf("请输入4个数字:");    scanf("%d %d %d %d", &a, &b,&c,&d);    g=gcds(a,b,c,d);    printf("最大公约数是:%d\n", g);    return 0;}



任务6:当年第几天
定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。

#include<stdio.h>int days(int y, int m, int d);int main(){    int year, month, day;    printf("输入年 月 日: ");    scanf("%d %d %d", &year, &month, &day);    printf("这是该年的第 %d 天\n", days(year, month, day));    return 0;}int days(int y, int m, int d){    //输入日期判断    if(m>12)    {     printf("输入月份错误!\n");     main();    }    else if(m==2)    {        if((y%4==0&&y%100!=0)||y%400==0)//闰年        {           if(d>29){            printf("输入日错误!\n");            main();}        } else if(d>28){            printf("输入日错误!\n");            main();}    }    else if(m==4||m==6||m==8||m==10||m==12)    {        if(d>30){            printf("输入日错误!\n");            main();}    }else if(m==1||m==3||m==5||m==7||m==9||m==11)    {         if(d>31){            printf("输入日错误!\n");            main();}    }    int sum=d;    //以下要加上前m-1天的天数    int i;    for(i=1;i<m;i++)//从一月份开始计算    {        switch(i)            {          case 2://二月份全年最特殊需要单独拿出来讨论            sum=sum+((y%4==0&&y%100!=0)||y%400==0)?29:28;//满足闰年的情况29天否则28天          case 4:          case 6:          case 8:          case 10:          case 12:            sum=sum+30;//双数月份都是30天          default:            sum=sum+31;//单数月份31天            };    }    return sum;}
数组解答:

#include<stdio.h>  int days(int y, int m, int d);  int main()  {      int year, month, day;      printf("输入年 月 日: ");      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 sum=d;      int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};      int i;      for(i=1; i<m; i++)      {          sum+=a[i];      }      if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天          sum++;      return sum;  }  

任务7:Reverse()经典编法(可接受任意数)

#include<stdio.h>int reverse(int);//自定义函数的原型(即函数声明)int main(){    int m,n;    printf("请输入任何数:");    scanf("%d", &m);    n=reverse(m);    printf("把这个数倒过来是%d\n", n);    return 0;}int reverse(int x){    int m=0;    while(x>0)    {        m=m*10+x%10;//很值得借鉴的算法        x=x/10;    }    return m;}

任务8:编制isPalindrome(),用于判断参数是否是回文数——回文数,即从前往后读和从后往前读都一样的数,如1221和121都是回文数,而1231、123都不是回文数。isPalindrome()函数的返回值是int型,是回文返回1(真),不是回文,返回0(假)。请编制isPalindrome(函数,在下面代码的基础上补充相关的部分,实现要求的功能。

#include <stdio.h>int isPalindrome(int);int main(){    int m;    printf("请输入一个数字:");    scanf("%d", &m);    if(isPalindrome(m))        printf("%d是回文数,噢耶!\n", m);    else        printf("%d不是回文数。回文有什么好!\n", m);    return 0;    }int isPalindrome(int n)  //在这个函数中只管判断,不能出现printf语句!{    int palindrome=0,m,k; //为0代表假,默认不是回文数    m=n;    k=0;//k用于求出n的反序数    while(m>0)//用于确定是否这个数还大于0    {        k=k*10+m%10;        m=m/10;    }    if(k==n)        palindrome=1;//是回文,修改为1   return palindrome;}


任务9:
编制一个返回值为int型的函数isPrimer(),用于判断参数是否为素数(是素数返回1-真,不是回文,返回0-假),自编main函数用于测试。

#include<stdio.h>  #include<math.h>  int isPrime(int);  int main()  {      int m;      scanf("%d", &m);      if(isPrime(m))          printf("%d是素数。\n", m);      else          printf("%d不是素数。\n", m);     return 0;  }    int isPrime(int n)  {      int prime=1;      int k=(int)(sqrt(n)); //简便穷举     int i;      for(i=2; i<=k; i++)      {          if(n%i==0)          {              prime=0;              break;          }      }      return prime;  }  



知识总结:


心得体会:


原创粉丝点击