c语言基础
c语言基础
#include <stdio.h>头文件,就是调用人家写好的一些函数(就是一些功能模块的集合)
Int main()主函数,表示一个程序的开始。有且仅有一个main函数。
return 0表示正常退出。
Int a;2的32次-1,定义一个整型变量,这个整型变量里面存储的是整数。
a=10;给一个整形变量赋值。
1.如何命名一个变量
变量名:它是只能由数字,字母,下划线组成的,开头只能是字母或者下划线;比如:
student_id01 student student01 student_haha01; 合法的变量名 2student; 不合法的变量名
2.指针,地址
0x01
0000...1010 |
|
|
|
|
int *p;
p=0x001;
*p;
int a=10;
int *p;
p=&a;
*p
※编译的四个步骤
1.预处理 简单的替换,将一些宏定义库函数替换到代码中去。
gcc -E hello.c -o hello.i
2.编译 将预处理之后的代码进行词义分析,语法检查。(报错一般出在这个阶段)并且生成汇编代码。
gcc -S hello.i -o hello.s
3.汇编 将汇编代码转换成二进制的代码
gcc -c hello.s -o hello.o
4.链接 将生成的二进制文件链接成计算机可执行的文件。
gcc hello.o -o hello
我们编写一段代码,每一个变量都有它自己所在的存储位置。都有哪些存储位置:
栈 一般存储局部变量
它的空间比较小,它是由系统自动分配和释放内存的
int a;//系统分配了四个字节的空间给了a
一般的局部变量都是存储在栈中的。
定义在一个函数(就是一个功能模块)中的局部变量,在函数结束时就不能再次使用了,因为它已经被系统回收了。
定义的全局变量存放在全局数据段,(总之就是不在栈中),它的作用范围是整个程序。
堆 程序员手动分配内存的变量,调用malloc、calloc之类的手动分配内存的函数
未初始化数据段 又称未初始化全局变量区
初始化数据段 已经初始化的全局变量
代码段(正文段) 一些条件语句,代码存放在代码段
int a=0; //全局初始化区,.data段
static int b=20;//全局初始化区,.data段
static 静态的意思,作用,变量b,它被限定在本文件中,不能被其他文件使用。一般来说,它存储在初始化数据段
char *p1;//全局未初始化区 .bss段
const int A=10;// .rodata段,const表示只读,就是说A的值不能改变,或者说A是一个常量
void main(void)
{
Int b;//栈
char s[]=”abc”;//栈
char *p2;//栈
static int c=0;//全局(静态)初始化区,.data段
char *p3=”123456”;//123456\0在常量区,p3在栈上。
char *p=”wangling”;//这里是定义一个字符串常量,字符串常量不可改变。
p1=(char*)malloc(10);//分配得来的10和20个字节的区域就在堆区
p2=(char*)malloc(20);
strcpy(p1,”123456”);//123456\0在常量区,编译器可能会将它与p3所指向的”123456”优化成一个地方
}
getchar();putchar(); 输入输出单个字符的函数;括号中能填写变量名、转义字符、16进制数、8进制数、10进制数。
需要注意的是:你的字符或者转义字符,必须是单个,必须用单引号括起来,你的数字(不管是什么进制的数,都不要加单引号)
具体代码截图如下:
gets();puts(); 输入输出字符串的函数;
scanf(" %d ",&n); printf(",,,,,,"); 最常用的输入输出函数。
字符串输入输出:
练习:
1.输入一个大写字母,转换为小写字母输出
方法一:
方法二:
2.输出姓名,年龄,工资,性别
方法一:
方法二:
结果如下:
If else语句
执行结果:
执行结果:
&&
执行结果:
||
执行结果:
switch语句
执行结果:
字符作为常量表达式
易错点:case后面要空一格;常量后有:冒号;defalut在最后结束;跳出循环用break;
配置vimrc
输入三个整数,输出最大值和最小值
易错点:先从键盘输入a,b,c,然后再把a赋值给max,min,然后进行比较;可以直接使用if
执行结果:
输入三个实数,按从大到小的顺序输出
}
易错点:赋值的顺序;先把值赋给空值;比较的顺序也不能乱
执行结果:
求1——100的和:(用循环语句for)
}
执行结果:
计算1——100的和(while语句)
If else
If else if else
Switch
For
While
For(表达式1;表达式2;表达式3)
{
循环体4;
}
1--2--4--3--2--4--
For(;;)//表示死循环
只要表达式成立,就继续循环
While(1)//表示死循环
While(表达式)
{
}
Do
{
}while(表达式);
易错点:(ch=getchar())!=‘\n’
练习1:循环输入n个数,n的值通过终端输入,求出输入的n个数中大于0的数值的和。
易错点:给sum赋初值;先scanf输入才能判断大小;scanf中数值要加&
练习2:假设公鸡5元钱一只,母鸡3元钱一只,小鸡1元钱3只,给你100元钱,请买100只鸡,设计算法
易错点:给z赋值:z=100-5*x-3*y;x+y+3*y要加括号!
1.static 静态
2.特点:
1.用static定义的全局变量----它的主要作用是,限定该变量只能被本文件中的行数使用,不能被其他文件中的函数调用。就是限定作用域在本文件中。
2.用static定义的局部变量----只被初始化一次,当函数结束时,保留函数结束时的值。当函数再次被调用的时候,a就不会再次被初始化为0。
3.
void swap()
{
static int a=0;
a++;
printf(“%d\n”,a);
}
int main()
{
swap();//调用一个函数
swap();//调用一个函数
printf();
}