鱼C论坛

 找回密码
 立即注册
查看: 84|回复: 0

[学习笔记] 每日一学15

[复制链接]
发表于 2024-12-11 16:16:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
变量的存储类别2

外部类型(extern)
在任何函数之外定义的变量都叫作外部变量。外部变量通常用关键字extern说明。
其一般形式为:

extern 类型 变量名;

在一个文件中定义的全局变量默认为外部的,即extern关键字可以省略。但是如果其他文件要使用这个文件中定义的全局变量,则必须在使用前用"extern"作外部声明,外部声明通常放在文件的开头。

外部变量示例。
//文件1"file1.c"
#include<stdio.h>

extern int a;       //外部变量a

extern int sum(int x);

void main()
{
    int c;

    c=sum(a);

    printf("1+2+...+%d=%d\n",a,c);
}

//文件2"file2.c"
#include<stdio.h>

int a=20;       //全局变量a

int sum(int x)
{
    int i,y=0;

    for(i=1;i<=x;i++)
    {
        y=y+i;
    }
    return y;
}

例题分析:
本范例file2.c文件中定义的1个全局变量,其作用域可以延伸到其他文件中,即其他文件也可以使用这个变量,但是在使用前用”extern“作外部声明。
file1文件使用了file2文件中的变量a,就要在前面加上extern声明,一般放在文件的开头。另外引用的sum()子函数也是第1个文件,也作了一个外部声明。


综合应用——日期判断
编写程序,给出年、月、日,计算该日是该年的第几天。
//文件1 control.c

#include<stdio.h>

extern int days();              //定义外部函数

//extern
 int year,month,day;      //外部变量

void main()
{
    printf("输入年、月、日:\n");

    scanf("%d%d%d",&year,&month,&day);

    printf("%d月%d日是%d年的第%d天\n",month,day,year,days());+

}


//文件2 day.c
int year,month,day;         //定义全局变量

int days()
{
    int i,count=0;          //count记录天数

    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //用一维数组记录每个月的天数

    if((year%100)&&!(year%4)||!(year%400))      //如果此年为闰年,将二月份的天数改为29天

        a[2]=29;

    for(i=0;i<month;i++)        //累加该日期前面几个月份的天数

        count+=a[i];

    count=count+day;        //再加上该日期在本月份中的天数

    return count;
}

例题分析:
本例题中,要计算天数,首先必须知道每个月有多少天,这里使用一维数组记录一年当中每个月的天数,数组下标与年份吻合。另外,还要知道要计算的日期所在的年份是否是闰年,所以用if((year%100)&&!(year%4)||!(year%400))计算闰年,如果是闰年,将下表为2的元素改为29,否则不发生变化.这样就可以进行天数相加,先加前面几个月份的天数和,再于该日期中的day相加即可。本例题在day.c源文件中采用了全局变量存放年、月、日,并在另一个文件中使用了这3个外部变量和外部函数days()。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表