C语言-10日培训-小结

来源:互联网 发布:海尔模卡无网络能用么 编辑:程序博客网 时间:2024/04/29 01:57

一、C语言保留关键字:

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

(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;

~

&

^

>>

<<

左移n

printf

scanf

C++

%c 单字符

%d 十进制整数

cin>>dec>>

%f 十进制浮点数

%e 科学表示方法

cout<<setiosflags(ios::scientific)<<

%s 字符串

%u 无符号

%o 八进制

cin>>oct>>

%x %X 十六进制

cin>>hex>>

%P 指针

%% 百分号

\\反斜杠

注意:1.字符串都是见'\0'就停止输出;

  2.输入的时候呢会自动补'\0',自己打进去的不作数的哟;

  3.scanf注意事项,对出入格式的限制,如:逗号;

三、区别CC++

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 ?

头文件格式:1.# include  < >

2.# include  "" //自定义的头文件?

3.头文件只用来声明,不做定义。

Cpp文件:1.一个工程可以有多个头文件和cpp文件,只有一个main函数?

  2.函数可以定义在main函数后面,但是必须在main函数前对它进行声明;

  3.if语句调用函数,判断后可用return直接跳出函数(好像很少用exit(0))

四、回顾:

1.输入:cincin.getline的区别;

2.输出:cout中使用setw(int)需要头文件iosmanip.h

×cerr<<"立即输出\n";

×cout<<"输出缓冲\n"<<flush;

3.三种进制数的表示方法;0x16进制,在char定义中省略前面的0

五、动态变量申请:

×堆栈和动态内存分配地方是不同的咯·

×编译先堆函数名·

×每个函数在调用的时候才堆栈,先进后出原则·

×动态分配是在另一个区域找一整块空白空间给你,一直等到free才释放。

1.mallocfree结合使用,避免内存泄漏,一般对指针申请空间要用强制转换,且申请之后要进行判空;

2.free后的指针要置空,避免野指针,如:free(p); p=NULL;

3.memset初始化;

4.memcpy拷贝;

5.sizeofstrlen+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);产生一个0N-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);

}