const int count=10;
int const count1=10;
count=20;//代码出错;
#define Add 10+15
printf("%d\n",10*Add);//=10*10+15
定义和声明:
eg.
int n=3;
if(n==3){
int x=9; //栈内有效(栈区变量)
n=9;
}
//x=8; //代码出错,超出x的作用域
printf("n=%d",n);
变量存储类型决定变量存在的时间
局部变量分为三种
auto--自动型变量,不写默认也是自动型,每次使用时被创建,出了其作用域后自动释放
static--静态型变量,定义为静态变量之后,在程序运行期间一直保持,直到程序运行结束
register--寄存器型变量,和自动型变量具有相同的持续时间,但是被存储到了寄存器内,但是有些编译器并不支持此类型,那么就当做auto型使用
全局变量分为三种:
无修饰符(auto)--在程序运行时创建一次,程序结束时销毁,允许在同项目的其他文件中使用该变量
static--程序运行时创建一次,程序结束时销毁,不允许在同项目的其他文件中进行使用
extern--扩展其他文件中的全局变量到本文件进行使用,并不创建新的变量,而是使用已有的同名变量
函数默认为extern,extern可以用来扩展扩展其他文件中的函数到本文件使用
eg. 共N个桃子,猴子每天吃了一半,还不过瘾,就有吃了一个,第二次有将剩下的桃子吃掉一半,有多吃了一个。以后每天都吃了前一天剩下的一半零一个。到了第十天就剩下两个桃子,求第一天多少个
分析: 10 2
9 6
8 14
#include
int taozi(int x);
int main(int argc, const char * argv[]) {
int a=taozi(1);
printf("%d\n",a);
printf("-------------------------------\n");
return 0;
}
int taozi(int x){
if (x==10) {
return 2;
}
return 2*(taozi(x+1)+1);
}
#define SQUARE1(x) x*x
#define SQUARE2(x) (x)*(x)
.....
int main(){
//加括号和不加括号的区别
printf("%d\n",SQUARE1(10+20)); //10+20*10+20
printf("%d\n",SQUARE2(10+20));//(10+20)*(10+20)
...
}
经典练习题:
1..编写一个自己的四舍五入函数,并加以使用。把一个实数四舍五入到n位小数的算法是:
将这个数乘以10^n。
将第一步的结果值加0.5。
删除结果的小数部分。
将第三步的结果值除以10^n。
double approach(double number,int n);
int main(int argc, const char * argv[]) {
double num1,num2;
int n;
printf("请输入一个小数\n");
scanf("%lf",&num1);
printf("请输入您想保留的位数\n");
scanf("%d",&n);
num2=approach(num1, n);
printf("%f四舍五入后(保留%d位小数)为%f\n",num1,n,num2);
return 0;
}
double approach(double number,int n){
for (int i=0; i
int getdiv(int a,int b);
int main(int argc, const char * argv[]) {
int num1,num2;
int mindiv=1;
printf("请输入两个整数!(用空格隔开)\n");
scanf("%d%d",&num1,&num2);
mindiv=getdiv(num1, num2);
printf("%d与%d的最大公约数为%d\n",num1,num2,mindiv);
return 0;
}
int getdiv(int a,int b){
int max=a,min=b,remainder=0;
if (a
long count=0;
void moves(int n,char fetch,char put);
void hanoi(int n,char a,char b,char c);
int main(int argc, const char * argv[]){
char a='A',b='B',c='C'; //三根珠子的名称
int n = 3; //盘子个数
hanoi(n, a, b, c);
printf("总共移动了%ld次",count);
return 0;
}
void moves(int n,char fetch,char put){
count++;
printf("将第%d个盘子从%c--->%c\n",n,fetch,put);
}
void hanoi(int n,char a,char b,char c){
if(n == 1){
//如果就只有一个盘子,将其从第一个移动到第三个
moves(1,a,c);
}else{
//多于1个盘子的情况,分解为以下三步:
//1、将n - 1个盘子从第一个移动到第二个上
hanoi(n - 1,a,c,b);
//2、将第n个盘子从第一个移动到第三个上
moves(n,a,c);
//3、将n - 1个盘子从第二个上移动到第三个上
hanoi(n - 1,b,a,c);
}
}
随堂笔记为个人学习笔记,若有错误,望指出,谢谢!!