C语言函数练习2

1.auto自动变量,函数凡是未知存储类型说明的变量均为自动变量。也就是说,局部变量在默认情况下是自动变量。调用时就存在,退出时就消失。

2.register寄存器变量,当一个变量频繁永定时,必须要反复访问内存,从而耗费大量的存取时间,为此,定义寄存器变量存放在CPU的寄存器中。对于循环次数较多的循环控制变量及循环体内反复使用的变量可定义为寄存器变量。

3.extern外部变量,当一个程序被分成两个或多个文件,分别编译它们,然后将它们连接起来,必然产生一些问题,如文件之间如何共享全局变量。一个全局变量只能说明一次,而在多个文件的程序中,会有两个或多个文件都需要访问这个全局变量。因此,必须提供一种方法通知编译器,该变量是程序的全局变量。extern存储类型正好解决此问题。它的生存期是整个程序运行的结束,作用域较大以至于安全性较差。

4.static静态变量,无论是调用还是退出程序函数都存在。系统自动为其赋初始值为0,自动变量则不定。函数被告知调用时,其中的静态局部比昂两的值将保留前次调用的结果。

如:
#include <stdio.h>


void format();

int main()
{
 int i;
 
 for(i=0;i<50;i++)
 {
  printf("%d", i);
  format();
 }

 return 0;
}


void format()
{
    static int m=0;
 m++;
 if(m%10==0) //用于控制每行只输出10个数据。
 {
  printf("\n");
 }
 else
 {
  putchar(' ');
 }

}

以上,静态变量m祈祷了记录函数被访问次数的功能,这种功能通过自动变量无法完成。若将m前的static去掉,则无论调用多少次都不会换行,由于m是自动变量,每次函数调用建立新m并初始化为0,所以无论调用format()函数多少次,m也不可能达到10.

 

5.传值调用,调用函数的实参用表达式值,被调用函数的形参用变量名。在调用时,系统将实参拷贝一个副本给形参,使形参与实参具有相同的值,形参变动时实际是变量实参传递给它的副本,二实参根本没改变过。参数个一样,并且实参类型与形参类型相同。
如:
#include<stdio.h>
void increment(int ,int );
void main()
{
 int num1,num2;
 printf("/n 请输入两个数:");
 scanf("%d %d",&num1,&num2);
 printf("/n 递增前的值是:%d和%d/n",num1,num2);
 increment(num1,num2);
 printf("/n 递增后的值是:%d和%d/n",num1,num2);
}
void increment(int value1,int value2)
{
 value1++;
 value2++;
 printf("/n 子函数中值是:%d和%d/n",value1,value2);
}


 

输出结果:

 请输入两个数:25 48

 递增前的值是:25和48

 子函数中值是:26和49

 递增后的值是:25和48

 

6.引用调用,调用函数的实参使用地址值,被调用函数的形参要求是指针,参数个数一样,且实参类型与形参类型相同。将实参传给形参时,是把实参的地址给形参,让形参直接指向实参。传址方式在时间和空间的开销上都将减少,因此可以提高运行效率。

如,


#include<stdio.h>
void increment(int *,int *);
void main()
{
 int num1,num2;
 printf("/n 请输入两个数:");
 scanf("%d %d",&num1,&num2);
 printf("/n 递增前的值是:%d和%d/n",num1,num2);
 increment(&num1,&num2);
 printf("/n 递增后的值是:%d和%d/n",num1,num2);
}
void increment(int *ptr1,int *ptr2)
{
 (*ptr1)++;
 (*ptr2)++;
 printf("/n 子函数中值是:%d和%d/n",*ptr1,*ptr2);
}

 

输出结果:

 

 


 请输入两个数:25 48

 递增前的值是:25和48

 子函数中值是:26和49

 递增后的值是:26和49

 

7.数组作为参数来传递信息。

#include<stdio.h>
#define N 5
void sort(float a[]);
void main()
{
 float grade[N];
 int i;
 printf("/n 输入%d个学员的成绩:/n",N);
 for(i=0;i<N;i++)
 {
  scanf("%f",&grade[i]);
 }
 sort(grade);
 printf("/n 排序后的成绩为:/n");
 for(i=0;i<N;i++)
 {
  printf("%5.2f ",grade[i]);
 }
 printf("/n");
}
void sort(float a[N])
{
 int i,j;
 float temp;
 for(i=0;i<N;i++)
 {
  for(j=0;j<N-1-i;j++)
  {
   if(a[j]>a[j+1])
   {
    temp=a[j+1];
    a[j+1]=a[j];
    a[j]=temp;
   }
  }
 }
}

8.通过函数实现求5个数中的最大值。

#include<stdio.h>
int find_larg(int *);

void main()
{
 int array[5];
 int i,larg_num;
 printf("/n 输入5个整数:/n");
 for(i=0;i<=4;i++)
 {
  scanf("%d",&array[i]);
 }
 larg_num=find_larg(array);
 printf("/n 最大的数是:%d/n",larg_num);
}
int find_larg(int *ptr)
{
 int larg=*ptr;
 int i;
 ptr++;
 for(i=1;i<=4;i++)
 {
  if(larg<*ptr)
  {
   larg=*ptr;
  }
  ptr++;
 }
 return larg;
}

 

转载于:https://www.cnblogs.com/storys/archive/2013/02/12/2910397.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值