C语言-10日培训-小结
2012-07-30 13:25
309 查看
一、C语言保留关键字:
(n)表示字节数,指针始终占4个字节(32位机)。
二、回顾:
1.宏定义(如:#define PI (3) )与typedef的区别:前者为替换,变量要加括号,换行除了加分号还要在末尾加个反斜杠做连接符;
2.优先级:最好加括号来控制;
3.优化,如:逻辑与&&判断,如果前面不成立后面的就不做判断咯,再如,a>b>c是不同于数学表达式的哦;
4.变量范围:不小心就越界咯,注意有符号和无符号的区别,
如:unsigned char 永远不会小于0,为0~255;
5.强制转化,如:(char*);
6.printf注意事项,关于字符串的输出,数组要加地址符,如:int a[10] // 定义;
scanf( %d, &a[num] ) // 输入单个变量,其余见下清单;
7.struct/union等字节对齐方式,以结构中的最大变量为准进行对齐,
如:32位机为4字节对齐方式;
8.extern定义的变量可以在其他文件中使用(只要使用前加声明),而const则不行;
9.static是静态变量,const为常量,注意const定义与指针定义的结合;
10.注释://当行注释;/*多行注释*/;
11.大小写敏感;
12.按位运算,见下清单。
13.
清单:
如,一个整型变量int a=0000 0000 0000 0000,b=0000 0000 0000 1001;
注意:1.字符串都是见'\0'就停止输出;
2.输入的时候呢会自动补'\0',自己打进去的不作数的哟;
3.scanf注意事项,对出入格式的限制,如:逗号;
三、区别C和C++:
头文件格式:1.# include < >
2.# include "" //自定义的头文件?
3.头文件只用来声明,不做定义。
Cpp文件:1.一个工程可以有多个头文件和cpp文件,只有一个main函数?
2.函数可以定义在main函数后面,但是必须在main函数前对它进行声明;
3.用if语句调用函数,判断后可用return直接跳出函数(好像很少用exit(0))。
四、回顾:
1.输入:cin和cin.getline的区别;
2.输出:cout中使用setw(int)需要头文件iosmanip.h;
×cerr<<"立即输出\n";
×cout<<"输出缓冲\n"<<flush;
3.三种进制数的表示方法;0x是16进制,在char定义中省略前面的0;
五、动态变量申请:
×堆栈和动态内存分配地方是不同的咯·
×编译先堆函数名·
×每个函数在调用的时候才堆栈,先进后出原则·
×动态分配是在另一个区域找一整块空白空间给你,一直等到free才释放。
1.malloc与free结合使用,避免内存泄漏,一般对指针申请空间要用强制转换,且申请之后要进行判空;
2.free后的指针要置空,避免野指针,如:free(p); p=NULL;
3.memset初始化;
4.memcpy拷贝;
5.sizeof和strlen+1的区别:
如:char a[]="\\\0";strlen(a)=1;sizeof(a)=3;//a:\ \0 \0
六、指针:
1.指针可以直接用地址赋值,地址为一个16进制数(32位机);
2.指针调用函数要加括号,如:(*p)(void);
注意:在定义指针的时候要把入参类型都写好,才能匹配调用函数成功;
3.空指针;
4.函数定义入参时用指针,确保可释该函数时传入的变量得到了修改;
5.变量要用地址符&给函数入参;
6.p+1代表指针移动一个结构单位的字节,如,输入数组:cin>>*(p+1);
7.二维数组与指针的关系;
8.二级指针;
×我晕了!
9.指针用->取变量,如(*p).x 和p->x是等价的;
10.*pn++=*pm++,如,字符串输出用while语句:while(*pn++=*pm++!='\0');
11.链表运用中注意保护头指针(定义全局指针变量)。
七、初始化:
1.多维数组的初始化;
2.结构体的初始化;
3.指针初始化;
×4.构造函数。
八、格式要求:
1.for循环变量尽量不要用i,很容易错看成1,导致死循环情况;
2.判断条件的常量做好用宏定义,方便以后修改;
3.逻辑判断的常量现在变量前面,避免不小心写成了变量赋值语句;
如:ch=='b' 是判断,但ch='b' 就搞成赋值咯。
4.结合下划线对变量命名,增强代码可读性(用番茄辅助工具可以很快的提取很长的 变量名^o^,如:ErrCode_EN表示枚举型变量, TravelInfo_ST结构体变量。
5.使用typedef自定义类型名称;
6.注意<和<=在循环条件中的使用。
时间函数的调用
1.随机数
//头文件//
<time.h>
<stdlib,h>
//主函数//
srand(unsigned (time)); //产生随机种子//
rand%100; //取余,产生一个100以内的随机数//
×随机数还可以在math.h下产生
×randomize();初始化随机数
×random(N);产生一个0~N-1的随机整数
2.现在时间
//头文件//
<ctime.h>
using namespace std;
//主函数//
time_t now=time(0); //获得现在时间//
tm* t=localtime(&now); //格式转换//
Cout<<asctime(t)<<endl; //输出时间//
容器
1.链表list
2.队列queue
3.向量vector
4.迭代器::iterator
循环语句
1.switch 与if 之间转化
2.注意:switch(c)中c的数据类型没有float型;
3.do while 和while的区别
4.while 和for 循环
5.冒泡排序法
九、文件调试和测试:
1.白盒测试;
2.黑盒测试的三种方法:等价值;边界值;判定表(Y/N);
×(多指静态测试)
3.设计用例做测试用。
十、设计原则:
1.少重复;
2.圈复杂度;
数轴法,如数轴分为四段:
if (区间1)
else if(区间2)
else if(区间3)
else(区间4)
3.使用者的角色判断;
4.输入与输出的规格设计;
5.设计时提取功能点并作功能点的依赖关系图,以便分清它们的重量级;
文件操作:
# include <stdio.h>
# define ch_num (256*8)
extern char g_LogPath[] = "C://Lint//test-file.txt";
main(int argc,char*argv[])
{
FILE *fp;
argv[1]=(char*)&g_LogPath;
if (NULL==(fp=fopen(argv[1],"r")))
{
printf("不能打开%s文件\n",argv[1]);
return;
}
char letter[ch_num];
char c;
int num;
num=0;
do
{ c=fgetc(fp);
letter[num]=c;
num++;
if ((ch_num-1)==num)break;
} while (c!=EOF);
letter[num]='\0';
printf("%s\n",letter);
fclose(fp);
}
完
Double (4) | enum | unsigned | |
Short (2) | union | signed | |
Long (4) | struct | continue | |
Char (1) | typedef | interrupt | |
Int (4) | register | goto | return |
float | extern | for | void |
near | const | do | switch |
far | static | while | case |
huge | sizeof | if | break |
volatile | pascal | else | default |
二、回顾:
1.宏定义(如:#define PI (3) )与typedef的区别:前者为替换,变量要加括号,换行除了加分号还要在末尾加个反斜杠做连接符;
2.优先级:最好加括号来控制;
3.优化,如:逻辑与&&判断,如果前面不成立后面的就不做判断咯,再如,a>b>c是不同于数学表达式的哦;
4.变量范围:不小心就越界咯,注意有符号和无符号的区别,
如:unsigned char 永远不会小于0,为0~255;
5.强制转化,如:(char*);
6.printf注意事项,关于字符串的输出,数组要加地址符,如:int a[10] // 定义;
scanf( %d, &a[num] ) // 输入单个变量,其余见下清单;
7.struct/union等字节对齐方式,以结构中的最大变量为准进行对齐,
如:32位机为4字节对齐方式;
8.extern定义的变量可以在其他文件中使用(只要使用前加声明),而const则不行;
9.static是静态变量,const为常量,注意const定义与指针定义的结合;
10.注释://当行注释;/*多行注释*/;
11.大小写敏感;
12.按位运算,见下清单。
13.
清单:
如,一个整型变量int a=0000 0000 0000 0000,b=0000 0000 0000 1001;
~ | ||
& | ||
^ | ||
>> | ||
<< | 左移n | |
printf | scanf | C++ |
%c 单字符 | ||
%d 十进制整数 | cin>>dec>> | |
%f 十进制浮点数 | ||
%e 科学表示方法 | cout<<setiosflags(ios::scientific)<< | |
%s 字符串 | ||
%u 无符号 | ||
%o 八进制 | cin>>oct>> | |
%x %X 十六进制 | cin>>hex>> | |
%P 指针 | ||
%% 百分号 | \\反斜杠 |
2.输入的时候呢会自动补'\0',自己打进去的不作数的哟;
3.scanf注意事项,对出入格式的限制,如:逗号;
三、区别C和C++:
C(美国一群头脑敏捷的人搞的) | C++(丹麦人在C基础上改进的) |
stdio.h | iostream.h |
scanf() | cin>> |
printf() | cou<< |
构造函数 | |
析构函数 | |
malloc.h | |
malloc() | new |
free() | delete |
派生 | |
内联函数 inline | |
string.h | |
memcpy | strcpy strncpy(注意,要手工加'\0') |
string ? |
2.# include "" //自定义的头文件?
3.头文件只用来声明,不做定义。
Cpp文件:1.一个工程可以有多个头文件和cpp文件,只有一个main函数?
2.函数可以定义在main函数后面,但是必须在main函数前对它进行声明;
3.用if语句调用函数,判断后可用return直接跳出函数(好像很少用exit(0))。
四、回顾:
1.输入:cin和cin.getline的区别;
2.输出:cout中使用setw(int)需要头文件iosmanip.h;
×cerr<<"立即输出\n";
×cout<<"输出缓冲\n"<<flush;
3.三种进制数的表示方法;0x是16进制,在char定义中省略前面的0;
五、动态变量申请:
×堆栈和动态内存分配地方是不同的咯·
×编译先堆函数名·
×每个函数在调用的时候才堆栈,先进后出原则·
×动态分配是在另一个区域找一整块空白空间给你,一直等到free才释放。
1.malloc与free结合使用,避免内存泄漏,一般对指针申请空间要用强制转换,且申请之后要进行判空;
2.free后的指针要置空,避免野指针,如:free(p); p=NULL;
3.memset初始化;
4.memcpy拷贝;
5.sizeof和strlen+1的区别:
如:char a[]="\\\0";strlen(a)=1;sizeof(a)=3;//a:\ \0 \0
六、指针:
1.指针可以直接用地址赋值,地址为一个16进制数(32位机);
2.指针调用函数要加括号,如:(*p)(void);
注意:在定义指针的时候要把入参类型都写好,才能匹配调用函数成功;
3.空指针;
4.函数定义入参时用指针,确保可释该函数时传入的变量得到了修改;
5.变量要用地址符&给函数入参;
6.p+1代表指针移动一个结构单位的字节,如,输入数组:cin>>*(p+1);
7.二维数组与指针的关系;
8.二级指针;
×我晕了!
9.指针用->取变量,如(*p).x 和p->x是等价的;
10.*pn++=*pm++,如,字符串输出用while语句:while(*pn++=*pm++!='\0');
11.链表运用中注意保护头指针(定义全局指针变量)。
七、初始化:
1.多维数组的初始化;
2.结构体的初始化;
3.指针初始化;
×4.构造函数。
八、格式要求:
1.for循环变量尽量不要用i,很容易错看成1,导致死循环情况;
2.判断条件的常量做好用宏定义,方便以后修改;
3.逻辑判断的常量现在变量前面,避免不小心写成了变量赋值语句;
如:ch=='b' 是判断,但ch='b' 就搞成赋值咯。
4.结合下划线对变量命名,增强代码可读性(用番茄辅助工具可以很快的提取很长的 变量名^o^,如:ErrCode_EN表示枚举型变量, TravelInfo_ST结构体变量。
5.使用typedef自定义类型名称;
6.注意<和<=在循环条件中的使用。
时间函数的调用
1.随机数
//头文件//
<time.h>
<stdlib,h>
//主函数//
srand(unsigned (time)); //产生随机种子//
rand%100; //取余,产生一个100以内的随机数//
×随机数还可以在math.h下产生
×randomize();初始化随机数
×random(N);产生一个0~N-1的随机整数
2.现在时间
//头文件//
<ctime.h>
using namespace std;
//主函数//
time_t now=time(0); //获得现在时间//
tm* t=localtime(&now); //格式转换//
Cout<<asctime(t)<<endl; //输出时间//
容器
1.链表list
2.队列queue
3.向量vector
4.迭代器::iterator
元素 | 指针 | |
begin() | front | |
end() | back | |
1.switch 与if 之间转化
2.注意:switch(c)中c的数据类型没有float型;
3.do while 和while的区别
4.while 和for 循环
5.冒泡排序法
九、文件调试和测试:
1.白盒测试;
2.黑盒测试的三种方法:等价值;边界值;判定表(Y/N);
×(多指静态测试)
3.设计用例做测试用。
十、设计原则:
1.少重复;
2.圈复杂度;
数轴法,如数轴分为四段:
if (区间1)
else if(区间2)
else if(区间3)
else(区间4)
3.使用者的角色判断;
4.输入与输出的规格设计;
5.设计时提取功能点并作功能点的依赖关系图,以便分清它们的重量级;
文件操作:
# include <stdio.h>
# define ch_num (256*8)
extern char g_LogPath[] = "C://Lint//test-file.txt";
main(int argc,char*argv[])
{
FILE *fp;
argv[1]=(char*)&g_LogPath;
if (NULL==(fp=fopen(argv[1],"r")))
{
printf("不能打开%s文件\n",argv[1]);
return;
}
char letter[ch_num];
char c;
int num;
num=0;
do
{ c=fgetc(fp);
letter[num]=c;
num++;
if ((ch_num-1)==num)break;
} while (c!=EOF);
letter[num]='\0';
printf("%s\n",letter);
fclose(fp);
}
完