复习与巩固
1. 进制转变
1.1 十六进制转变为十进制(函数嵌套)
#include <stdio.h>
/*十六进制变十进制*/
#include <math.h>
int main()
{
char a,b,c;
int s;
printf("十六进制转换为十进制\n请输入这个十六进制数有多少位:");
scanf("%d",&a);
getchar();
s=cha(a);
printf("这个数的十进制为:%d",s);
return 0;
}
int cha(int a)
{
char c,b;
int ret=0;
printf("请输入这个十六进制数:");
// getchar();
c=getchar();
b=getchar();
if(c=='0'&&b=='x')
{
while(c!='\n')
{
a--;
c=getchar();
switch(c)
{
case '0':
ret+=0*pow(16,a);
break;
case '1':
ret+=1*pow(16,a);
break;
case '2':
ret+=2*pow(16,a);
break;
case '3':
ret+=3*pow(16,a);
break;
case '4':
ret+=4*pow(16,a);
break;
case '5':
ret+=5*pow(16,a);
break;
case '6':
ret+=6*pow(16,a);
break;
case '7':
ret+=7*pow(16,a);
break;
case '8':
ret+=8*pow(16,a);
break;
case '9':
ret+=9*pow(16,a);
break;
case 'a':
ret+=10*pow(16,a);
break;
case 'b':
ret+=11*pow(16,a);
break;
case 'c':
ret+=12*pow(16,a);
break;
case 'd':
ret+=13*pow(16,a);
break;
case 'e':
ret+=14*pow(16,a);
break;
case 'f':
ret+=15*pow(16,a);
default:
break;
}
}
}
return ret;
}
1.2 八进制转换为十进制(函数嵌套)
#include <stdio.h>
unsigned int zhu(int a);
#include <math.h>
int main()
{
unsigned int n,sum;
printf("八进制转换为十进制\n请输入这个八进制有多少位(最高十位):");
scanf("%d",&n);
getchar();
sum=zhu(n);
printf("该八进制转换成十进制为:%u",sum);
return 0;
}
unsigned int zhu(int a)
{
unsigned int ret;
char ch,c;
printf("请输入这个八进制数:");
c=getchar();
// putchar(c);
if(c=='0')
{
while(a>=0)
{
a--;
ch=getchar();
switch(ch)
{
case '0':
ret+=0*pow(8,a);
break;
case '1':
ret+=1*pow(8,a);
break;
case '2':
ret+=2*pow(8,a);
break;
case '3':
ret+=3*pow(8,a);
break;
case '4':
ret+=4*pow(8,a);
break;
case '5':
ret+=5*pow(8,a);
break;
case '6':
ret+=6*pow(8,a);
break;
case '7':
ret+=7*pow(8,a);
break;
default:
break;
}
// putchar(ch);
// if(ch>47&&ch<56)
// ret+=(ch-48)*pow(8,a);
}
}
return ret;
}
2.兔子繁殖(函数嵌套、函数递归)
#include <stdio.h>
/*兔子繁殖*/
int mon(int num);
int n(int i);
int main()
{
int a,num;
printf("请输入目标兔子对数:");
scanf("%d",&num);
a=mon(num);
printf("达到%d对需要%d个月。",num,a);
return 0;
}
int mon(int num)
{
int i=0,ret=0;
while(ret<num)
{
i++;
if(i==1||i==2)
ret=1;
else
ret=n(i);
}
return i;
}
int n(int i)
{
int ret;
if(i==1||i==2)
ret=1;
else
ret=n(i-1)+n(i-2);
return ret;
}
所学新知识
1.类型和作用域
1.1 全局变量和局部变量
1.1.1 全局变量
保存在全局储存区中,占用静态储存单元,在程序执行结束后才被释放
1.1.2 局部变量
保存在栈中,只有在所有函数被调用时才动态的为变量分配空间,调用结束,变量空间释放(static变量例外);必须自己进行初始化,否则取值不确定。
2.作用域
2.1 全局变量
这个文件中可以使用,但只能在其定义的函数后使用
2.2 局部变量
2.2.1函数内部变量:整个函数内部可以使用
2.2.2快作用域变量:整个块内部可以使用
2.3 静态变量
使用关键字static修饰,变量值一直保留在内存中,不因作用域而销毁
2.4 寄存器类型变量
eg:register int a=100
3.宏定义和宏函数
3.1宏定义
本质就是文字替代
eg:
#define NUM 22 //之后碰到NUM直接就当成22
3.2宏函数
本质也是文字替代,但可以替代参数eg:
#define MAX(a,b) ( (a)>(b)? (a): (b))
int(main)
{
int max=MAX(1,3); //最大值为3
}
3.3多行宏函数
如果宏函数有多行,我们可以使用\(转义字符)来进行多行。eg:
#define IS_SUCCESS(code)\
if((code)==200) \
printf("200"\n)