C学习代码04

#include <stdio.h>


//函数调用,迭代计算阶乘
long Fact(int n); //声明函数原型
int main(){
int m;
long ret;
printf("Input m:");
scanf("%d",&m);
ret = Fact(m);
printf("%d!=%ld\n",m,ret);
return 0;
}
long Fact(int n){
int i;
long result = 1;
for(i=2;i<=n;i++){


result *= i;
}
return result;
}


//递归调用,自己调用自己,递归计算阶乘
//满足递归调用的条件(1有一般情况,即可以持续执行的情况(2有基线情况,即结束此递归的条件
int main(){
int n;
long result;
printf("Input n:");
scanf("%d",&n);
result = Fact(n);
if (result == -1)
{
printf("n<0,data error!\n");
}
else
printf("%d! = %ld\n",n,result);
return 0;
}
long Fact(int n){
if (n<0)
{
return -1;
}else if (n==0 || n==1)
{
return 1;
}else{
return (n*Fact(n-1));
}
}


//静态内部局部变量计算多个阶乘
//函数体内定义的变量为局部变量,当函数调用完之后局部变量释放内存空间,变为默认值
//静态内部变量可以一直保存其值在内存空间,随程序生灭
long Func(int n);
int main(){
int i,n;
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("%d! = %ld\n",i,Func(i));
}
return 0;
}
long Func(int n){
static long p = 1; //静态局部变量,函数执行之后也不会清除其内存空间
p = p * n;
return p;
}


//一维数组
//数组名就是首地址
//一维数组[]可以省略,根据{}中个数生成长度
//do-while,代码是顺序执行的,如果判断条件为真,继续执行循环体
#include <stdio.h>
#define MONTHS 12
int main(){
int days[MONTHS] = {31,28,33,30,31};
int month;
do{
printf("Input a month:");
scanf("%d",&month);
}while(month<1 || month>12); //处理不合法数据输入
printf("the number of days is %d\n");
return 0;
}


//二维数组
//数组名就是首地址
//[][],行,列,行不可以省略,列可以省略
#include <stdio.h>;
#define MONTHS 12
int main(){
int days[2][MONTHS] = {{33,33,22,11,22,33,44,55,66,12,33,44},{
33,44,55,12,34,56,32,12,41,13,45,12}};
int year,month;
do{
printf("Input year,month:");
scanf("%d %d",&year,&month);
}while(month < 1 || month > 13);
if(((year%4==0) && (year%100!=0)) || (year%400==0))
printf("The number of days is %d\n",days[1][MONTHS-1]);
else
printf("The number of days is %d\n",days[0][MONTHS-1]);
return 0;
}


//输出二维数组


int main(){
int days[2][MONTHS] = {{33,33,22,11,22,33,44,55,66,12,33,44},
{33,44,55,12,34,56,32,12,41,13,45,12}};
int i,j;
for(j=0;j<=1;j++){
for(i=0;i<=11;i++){
printf(" %d",days[j][i]);
}
}
printf("\n");
return 0;
}




//一维数组作为函数参数 P197
//此时可省略数组长度


//指针
//*pa声明指针,其前的基类型必须和该地址存放的类型相符
//pa指该内存空间的地址,*pa指该内存空间地址存放的值
int main(){
int a=0,b=1;
char c='A';
int *pa=&a;
printf("pa is %p\n,*pa is %d",pa,*pa);
}


//传递指针参数
void Fun(*par);
int main(){
int arg=1;
Fun(&arg);
printf("arg=%d\n",arg);
return 0;
}
void Fun(int *par){
printf("par = %d\n",*par); //输出的是指针所指向的地址存放的值
*par = 2;
}

猜你喜欢

转载自blog.csdn.net/ivorybeach/article/details/79631114