一、
1.全局变量
定义在函数外面的变量是全局变量
全局变量具有全局的生存期和作用域
它们与任何函数都无关
在任何函数内部都可以使用它们,它的作用域是大于所有的函数的。
2.局部变量
定义在函数内部的变量。
只在本函数的作用域中才能使用
生存期也是由函数的结束而自动释放内存。
3.静态本地变量
在本地变量定义时加上static修饰符就成为静态本地变量
当函数离开的时候,静态本地变量会继续存在并保持其值
静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
静态本地变量拥有全局变量的生存期 和局部变量的作用域,是特殊的全局变量。
二、
寻找最大和的连续子数组,可利用动态规划
首先开辟一个数组dp,用来记录num数组里上一步数与该步的数之间的最大值。
dp[i]=max(dp[i-1]+num[i],num[i])
再利用fr循环输出dp数组中的最大值,即连续子序列的和。
代码如下
#include<stdio.h>
int max(int a,int b);
int main(){
int a[100];
int dp[100];
int n,i;
int max_;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
dp[0]=a[0];//初始化dp数组
for(i=1;i<n;i++){
dp[i]=max(dp[i-1]+a[i],a[i]);//取得每一步dp的最大值,即对于第i个数是否加上进行判断,如果加上之后比a[i]大,那么就接着继续加,否则就从a[i]开始重新计算
}
for(i=0;i<n;i++){
printf("%d\n",dp[i]);
}
max_=dp[0];
for(i=0;i<n;i++){
if(dp[i]>max_)
max_=dp[i];//取得dp中的最大值
}
printf(" %d",max_);
}
int max(int a,int b){
int t;
t=a>b?a:b;
return t;
}