C语言详解+例子2

来源:互联网 发布:游戏攻略软件 编辑:程序博客网 时间:2024/06/06 03:57

1、函数

在c语言中函数是程序的基本组成单位。向子程序传递变量的方法有俩种,分别为值传递和地址传递。值传递就是把实参复制到形参中,形参的改变对实参没有影响;在函数进行值传递时,进行的时单向传递,即只是将变量的值传入到参数中,而参数的值不再回传到变量中,无论参数的值是否变化。地址传递就是将实参的地址复制到子程序的形参中,子程序通过该地址访问实际变量,这样通过参数进行的修改可以影响到原变量的值。

函数的返回值的数据类型可以是除数组外的任何类型。函数的参数必须分别声明,且类型和变量名成对出现。

当数组作为参数时,一般有俩种情况,第一种是数组元素作为函数实参,在这种情况下,和一般变量作为函数参数区别不大;第二种情况是用数组作为函数参数,此时实参和形参都应该用数组名和数组指针。当数组作为函数参数时,传入函数的只是数组的地址,在这种情况下,函数中的代码是对实际数组操作的。如果发生修改,修改的是实际数组的实际内容。此外还需注意三点:

(1)用数组作为函数参数时,应该在主调函数和被调函数中分别定义数组,而不能只在一方定义。

(2)实参数组和形参数组的类型应该一致

(3)实参数组和形参数组大小可以一致也可以不一致,C编译时对形参数组大小不做检查,只是将实参数组的首地址传给形参数组。不过如果要求形参数组得到实参数组全部元素值时则应当指出形参数组和实参数组大小一致。

int main()

{

//数组转置

   int array[3][3];

   int i,j;

    printf("输入数组元素:\n");

   for(i=0;i<3;++i)

    {

       for(j=0;j<3;++j)

        {

           scanf("%d",&array[i][j]);

        }

    }

    printf("\n数组是:\n");

   for(i=0;i<3;++i)

    {

       for(j=0;j<3;++j)

        {

           printf("%d\t",array[i][j]);

        }

       printf("\n");

    }

   convert(array);

    printf("转置数组是:\n");

   for(i=0;i<3;++i)

    {

       for(j=0;j<3;++j)

        {

           printf("%d\t",array[i][j]);

        }

           printf("\n");

    }

    

   return0;

}

void convert(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;

        }

    }

}

命令行参数是操作系统命令中执行程序名字后的信息

//命令行参数

#include "stdio.h"

#include "stdlib.h"

#include "ctype.h"

#include "string.h"

void main(int argc,char *argv[])

{

   int disp,count;

   if(argc<2)

    {

        printf("You must enter the length of the count\n");

        printf("on the command line. Try again\n");

       exit(1);

    }

   if(argc==3&&!strcmp(argv[2],"display"))

        disp=1;

   else

        disp=0;

   for(count=atoi(argv[1]);count;--count)

       if(disp)

           printf("%d\n",count);

   putchar('\a');//将产生蜂鸣

   printf("Down");

    return;

}


函数返回值;


//字符串查找

int find_substr(char *s1,char *s2)

{

    register int t;

   char *p,*p2;

   for(t=0;s1[t];t++)

    {

        p=&s1[t];

        p2=s2;

       while(*p2&&*p2==*p)

        {

            p++;

            p2++;

        }

       if(!*p2)

        {

           return t;

        }

    }

   return -1;

}

int main()

{

    if(find_substr("C is fun","is")!=-1)

        printf("Substring is found.\n");

   return0;

}


//一元三次方程组用弦截法求解方程的根

//x^3-8x^2+12x-30=0

#include"math.h"

//定义函数f,以实现方程

float f(float x)

{

   float y;

    y=((x-8.0)*x+12.0)*x-30.0;

   return y;

}

//定义函数xpoint,求出弦与x轴对焦点横坐标

float xpoint(float x1,float x2)

{

   float y;

    y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));

   return y;

}

//定义函数root,求解区间(x1x2)的实根

float root(float x1,float x2)

{

   float x,y,y1;

    y1=f(x1);

   do{

        x=xpoint(x1, x2);

        y=f(x);

       if(y*y1>0)

        {

            y1=y;

            x1=x;

        }else{

            x2=x;

        }

    }while(fabs(y)>=0.0001);

   return x;


}

int  main()

{

   float x1,x2,f1,f2,x;

   do{

        printf("please input x1,x2:\n");

       scanf("%f %f",&x1,&x2);

        f1=f(x1);

        f2=f(x2);

    }while (f1*f2>0);

    x=root(x1, x2);

    printf("A root of equation is %9.6f\n",x);

   return 0;

}

//将整数转换为字符串

#include <stdio.h>

void covert1(int n)

{

   int i;

   if((i=n/10)!=0)

       covert1(i);

   putchar(n%10+'0');

}

int main()

{

   int number;

    printf("输入整数:\n");

   scanf("%d",&number);

   if(number<0)

    {

       putchar('-');

        number=-number;

    }

   covert1(number);

   putchar('\n');

   return 0;

}



0 0