C语言学习——第一篇博客(四)

来源:互联网 发布:编程入门课程 编辑:程序博客网 时间:2024/04/27 20:15

2016年10月6日20:10:54

函数

形式参数和实际参数
在调用有参函数时,主调函数和被调用函数之间有数据传递关系
定义函数时函数名后面的变量名称为“形式参数”(简称“形参”)
主调函数中调用一个函数时,函数名后面参数称为“实际参数”(简称“实参”)
 实际参数可以是常量、变量或表达式

示例一:

用递归方法求n!

#include <stdio.h>
int main()
 {int fac(int n); 
  int n;  int y;
  printf("input an integer number:");
  scanf("%d",&n);  
  y=fac(n);
  printf("%d!=%d\n",n,y);
  return 0;
}

int fac(int n) 
 {
     int f;
     if(n<0)     
     printf("n<0,data error!");
     else if(n==0 | | n==1)
     f=1;
     else  f=fac(n-1)*n; 
     return(f);
 }


示例二 汉若塔

Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。

#include <stdio.h>
int main()
{  void hanoi(int n,char one,
                       char two,char three);  
    int m;
    printf(“the number of diskes:");
    scanf("%d",&m);
    printf("move %d diskes:\n",m);
    hanoi(m,'A','B','C');
}

void hanoi(int n,char one,char two,
                                          char three)  
 {  void move(char x,char y); 
     if(n==1)
        move(one,three);
     else
     {  hanoi(n-1,one,three,two);
         move(one,three);
         hanoi(n-1,two,one,three);
      }
 }

void move(char x,char y)  
 {
      printf("%c-->%c\n",x,y);
 }

示例三:

用选择法对数组中10个整数按由小到大排序。

#include <stdio.h>
int main()
{ void sort(int array[],int n);
   int a[10],i;
   printf("enter array:\n");
   for(i=0;i<10;i++)  scanf("%d",&a[i]);
   sort(a,10); 
   printf("The sorted array:\n");
   for(i=0;i<10;i++)   printf("%d ",a[i]);
   printf("\n");
   return 0;

void sort(int array[],int n)
 { int i,j,k,t;
    for(i=0;i<n-1;i++)
    { k=i;
       for(j=i+1;j<n;j++)
         if(array[j]<array[k])    k=j;
   t=array[k];
       array[k]=array[i];
       array[i]=t;
 }
 }


示例四:

   例7.16 考察静态局部变量的值。
#include <stdio.h>
int main()
{ int f(int);           
   int a=2,i;            
   for(i=0;i<3;i++)
     printf(“%d\n”,f(a));
   return 0;
}

int f(int a)
{ auto  int b=0; 
   static c=3;      
   b=b+1;
   c=c+1;
   return(a+b+c);
}

由于c是静态存储的,地址不释放,所以得到结果 7,8,9

示例五:

有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现

#include <stdio.h>
int main()
{ extern void enter_string(char str[]); 
   extern void delete_string(char str[],
                                             char ch); 
   extern void print_string(char str[]); 
   char c,str[80];
   enter_string(str);             
   scanf(“%c”,&c); 
   delete_string(str,c);  
   print_string(str);      
   return 0;     
}

a.c

void enter_string(char str[80]) 
{  gets(str);   } 

文件b.c

void delete_string(char str[],char ch)
{ int i,j;
   for(i=j=0;str[i]!='\0';i++)
  if(str[i]!=ch)   str[j++]=str[i];
   str[j]='\0';

d.c
void print_string(char str[]) 
{ printf("%s\n",str); }



0 0