首页技术assert函数c语言作用(C语言断言assert的用途)

assert函数c语言作用(C语言断言assert的用途)

编程之家2026-06-28605次浏览

大家好,今天小编来为大家解答assert函数c语言作用这个问题,C语言断言assert的用途很多人还不知道,现在让我们一起来看看吧!

assert函数c语言作用(C语言断言assert的用途)

C语言中assert的作用是什么

是程序调试很重要的手段,ASSERT( f)在Debug模式下,每次运行到这里后会计算括号中的表达式,如果表达式为0,则中断执行,弹出一个警告框,用户可选择“继续”,“重试”,“忽略”在Release模式下,这句语句不会被编译进代码。ASSERT一般用于程序内部确认参数的正确性,即调用内部函数的时候,要由调用者保证参数的正确,而被调用函数内部,就可以通过ASSERT来检查参数是否满足要求。

21天学通C语言的作品目录

第一周课程

第1天课程 C语言初步2

1.1 C语言简史2

1.2为何要使用C语言2

1.3编程前的准备工作3

assert函数c语言作用(C语言断言assert的用途)

1.4程序开发周期4

1.4.1创建源代码4

1.4.2编译源代码4

1.4.3链接以创建可执行文件5

1.4.4结束开发周期6

1.5第一个C语言程序7

assert函数c语言作用(C语言断言assert的用途)

1.5.1输入并编译hello.c7

1.6总结9

1.7问与答9

1.8作业10

1.8.1小测验10

1.8.2练习10

TYPE&RUN1打印程序清单12

第一个TYPE&RUN12

第2天课程 C语言程序的组成部分14

2.1一个简短的C语言程序14

2.2程序的组成部分15

2.2.1 main()函数(第8~23行)15

2.2.2#include编译指令(第2行)15

2.2.3变量定义(第4行)15

2.2.4函数原型(第6行)16

2.2.5程序语句(第11、12、15、16、19、20、22和28行)16

2.2.6函数定义(第26~29行)16

2.2.7程序注释(第1、10、14、18和25行)16

2.2.8使用花括号(第9、23、27和29行)17

2.2.9运行程序17

2.2.10有关精度的说明18

2.3重温程序的组成部分18

2.4总结20

2.5问与答20

2.6作业20

2.6.1小测验20

2.6.2练习21

第3天课程存储信息:变量和常量23

3.1计算机内存23

3.2使用变量存储信息24

3.2.1变量名24

3.3数值变量的类型25

3.3.1变量声明27

3.3.2 typedef关键字27

3.3.3初始化变量28

3.4常量28

3.4.1字面常量28

3.4.2符号常量29

3.5总结31

3.6问与答32

3.7作业32

3.7.1小测验32

3.7.2练习32

第4天课程语句、表达式和运算符34

4.1语句34

4.1.1空白对语句的影响34

4.1.2创建空语句35

4.1.3使用复合语句35

4.2表达式35

4.2.1简单表达式35

4.2.2复杂表达式36

4.3运算符36

4.3.1赋值运算符36

4.3.2数学运算符37

4.3.3运算符优先级和圆括号40

4.3.4子表达式的计算顺序41

4.3.5关系运算符41

4.4 if语句42

4.4.1 else子句44

4.5判断关系表达式46

4.5.1关系运算符的优先级47

4.6逻辑运算符48

4.7再谈true/false值48

4.7.1运算符的优先级49

4.7.2复合赋值运算符50

4.7.3条件运算符50

4.7.4逗号运算符51

4.8再谈运算符优先级51

4.9总结52

4.10问与答52

4.11作业53

4.11.1小测验53

4.11.2练习53

TYPE&RUN2猜数游戏55

第5天课程使用函数封装代码57

5.1函数是什么57

5.1.1函数的定义57

5.1.2函数的用法57

5.2函数的工作原理59

5.3函数和结构化编程60

5.3.1结构化编程的优点60

5.3.2规划结构化程序60

5.3.3从顶向下的方法61

5.4编写函数61

5.4.1函数头62

5.4.2函数的返回类型62

5.4.3函数名62

5.4.4参数列表62

5.4.5函数体64

5.4.6函数原型67

5.5将参数传递给函数67

5.6调用函数68

5.6.1递归69

5.7函数的位置70

5.8内联函数70

5.9总结71

5.10问与答71

5.11作业72

5.11.1小测验72

5.11.2练习72

第6天课程基本的程序流程控制74

6.1数组的基本知识74

6.2控制程序的执行75

6.2.1 for语句75

6.2.2嵌套for语句79

6.2.3 while语句80

6.2.4嵌套while语句82

6.2.5 do…while循环84

6.3嵌套循环87

6.4总结88

6.5问与答88

6.6作业88

6.6.1小测验89

6.6.2练习89

第7天课程信息读写基础90

7.1在屏幕上显示信息90

7.1.1 printf()函数90

7.1.2格式化字符串90

7.1.3转义序列91

7.1.4使用puts()显示消息96

7.2使用scanf()函数输入数值数据97

7.3三字符序列100

7.4总结101

7.5问与答101

7.6作业102

7.6.1小测验102

7.6.2练习102

第一周复习104

第二周课程

第8天课程使用数值数组110

8.1数组是什么110

8.1.1一维数组110

8.1.2多维数组113

8.2命名和声明数组114

8.2.1初始化数组115

8.2.2初始化多维数组116

8.2.3数组的最大长度119

8.3总结121

8.4问与答121

8.5作业121

8.5.1小测验121

8.5.2练习122

第9天课程指针123

9.1指针是什么123

9.1.1计算机内存123

9.1.2创建指针123

9.2指针和简单变量124

9.2.1声明指针124

9.2.2初始化指针124

9.2.3使用指针125

9.3指针和变量类型126

9.4指针和数组127

9.4.1作为指针的数组名128

9.4.2数组元素的存储128

9.4.3指针算术130

9.5有关指针的注意事项133

9.6数组下标表示法和指针133

9.7将数组传递给函数133

9.8总结137

9.9问与答137

9.10作业138

9.10.1小测验138

9.10.2练习138

TYPE&RUN3让程序暂停139

第10天课程字符和字符串141

10.1 char数据类型141

10.2使用字符变量141

10.3使用字符串144

10.3.1字符数组144

10.3.2初始化字符数组144

10.4字符串和指针144

10.5不存储在数组中的字符串145

10.5.1编译时分配字符空间145

10.5.2 malloc()函数145

10.5.3使用malloc()函数146

10.6显示字符串和字符148

10.6.1 puts()函数149

10.6.2 printf()函数149

10.7从键盘读取字符串150

10.7.1使用gets()函数输入字符串150

10.7.2使用scanf()函数输入字符串152

10.8总结154

10.9问与答154

10.10作业155

10.10.1小测验155

10.10.2练习156

第11天课程结构、共用体和TypeDef157

11.1简单结构157

11.1.1定义和声明结构157

11.1.2存取结构的成员158

11.2复杂结构160

11.2.1包含其他结构的结构160

11.2.2包含数组的结构162

11.3结构数组164

11.4初始化结构167

11.5结构和指针168

11.5.1将指针作为结构的成员168

11.5.2创建指向结构的指针170

11.5.3使用指针和结构数组171

11.5.4将结构作为参数传递给函数173

11.6共用体174

11.6.1定义、声明和初始化共用体175

11.6.2存取共用体的成员175

11.7使用typedef给结构创建别名179

11.8总结179

11.9问与答179

11.10作业180

11.10.1小测验180

11.10.2练习180

第12天课程变量作用域182

12.1作用域是什么182

12.1.1演示作用域182

12.1.2作用域为何重要184

12.2外部变量184

12.2.1外部变量的作用域184

12.2.2何时使用外部变量184

12.2.3 extern关键字184

12.3局部变量185

12.3.1静态变量和动态变量186

12.3.2函数参数的作用域187

12.3.3外部静态变量188

12.3.4寄存器变量188

12.4局部变量和main()函数189

12.5应使用哪种存储类型189

12.6局部变量和代码块189

12.7总结190

12.8问与答191

12.9作业191

12.9.1小测验191

12.9.2练习191

TYPE&RUN4机密消息194

第13天课程高级程序流程控制197

13.1提早结束循环197

13.1.1 break语句197

13.1.2 continue语句199

13.2 goto语句200

13.3死循环202

13.4 switch语句205

13.5退出程序212

13.5.1 exit()函数212

13.6在程序中执行操作系统命令213

13.7总结214

13.8问与答215

13.9作业215

13.9.1小测验215

13.9.2练习215

第14天课程操纵屏幕、打印机和键盘217

14.1流和C语言217

14.1.1何为程序的输入/输出217

14.1.2什么是流217

14.1.3文本流和二进制流218

14.1.4预定义的流218

14.2使用C语言的流函数219

14.2.1例子219

14.3读取键盘输入220

14.3.1字符输入220

14.3.2格式化输入225

14.4控制屏幕输出231

14.4.1使用putchar()、putc()和fputc()输出字符231

14.4.2使用puts()和fputs()输出字符串233

14.4.3使用printf()和fprintf()格式化输出234

14.5重定向输入/输出238

14.5.1重定向输入239

14.6何时使用fprintf()239

14.6.1使用stderr240

14.7总结241

14.8问与答241

14.9作业242

14.9.1小测验242

14.9.2练习242

第二周复习244

第三周课程

第15天课程有关指针的高级主题252

15.1声明指向指针的指针252

15.2指针和多维数组253

15.3指针数组259

15.3.1复习字符串和指针259

15.3.2声明char类型指针数组259

15.3.3范例261

15.4函数指针265

15.4.1声明函数指针265

15.4.2初始化并使用函数指针266

15.5链表273

15.5.1有关链表的基本知识273

15.5.2使用链表274

15.5.3演示简单链表278

15.5.4实现链表280

15.6总结286

15.7问与答286

15.8作业286

15.8.1小测验287

15.8.2练习287

第16天课程使用磁盘文件289

16.1将流与磁盘文件关联起来289

16.2磁盘文件的类型289

16.3文件名290

16.4打开文件290

16.5读写文件数据292

16.5.1格式化文件输入/输出293

16.5.2字符输入/输出296

16.5.3直接文件输入/输出297

16.6文件缓冲技术:关闭和刷新文件300

16.7顺序文件存取和随机文件存取301

16.7.1 ftell()和rewind()函数301

16.7.2 fseek()函数303

16.8检测文件尾305

16.9文件管理函数307

16.9.1删除文件307

16.9.2给文件重命名308

16.9.3复制文件309

16.10使用临时文件311

16.11总结312

16.12问与答312

16.13作业313

16.13.1小测验313

16.13.2练习313

TYPE&RUN5计算字符数314

第17天课程操纵字符串318

17.1确定字符串的长度318

17.2复制字符串319

17.2.1 strcpy()函数319

17.2.2 strncpy()函数320

17.2.3 strdup()函数321

17.3拼接字符串322

17.3.1 strcat()函数322

17.3.2 strncat()函数324

17.4比较字符串325

17.4.1比较两个完整字符串325

17.4.2比较字符串的一部分326

17.4.3比较字符串时忽略大小写328

17.5查找字符串328

17.5.1 strchr()函数328

17.5.2 strrchr()函数329

17.5.3 strcspn()函数329

17.5.4 strspn()函数330

17.5.5 strpbrk()函数331

17.5.6 strstr()函数331

17.6字符串转换332

17.7其他字符串函数333

17.7.1 strrev()函数333

17.7.2 strset()和strnset()函数334

17.8将字符串转换为数字334

17.8.1将字符串转换为int335

17.8.2将字符串转换为long值335

17.8.3将字符串转换为long long值335

17.8.4将字符串转换为浮点数335

17.9字符检测函数336

17.9.1 ANSI对大小写转换的支持339

17.10总结340

17.11问与答340

17.12作业341

17.12.1小测验341

17.12.2练习341

第18天课程有关函数的高级主题343

18.1将指针传递给函数343

18.2 void类型的指针346

18.3接受可变数目参数的函数348

18.4返回指针的函数350

18.5总结352

18.6问与答352

18.7作业352

18.7.1小测验352

18.7.2练习353

第19天课程函数库354

19.1数学函数354

19.1.1三角函数354

19.1.2指数函数和对数函数354

19.1.3双曲线函数355

19.1.4其他数学函数355

19.1.5演示数学函数355

19.2处理时间356

19.2.1时间的表示356

19.2.2时间函数356

19.2.3使用时间函数359

19.3处理错误360

19.3.1 assert()宏361

19.3.2头文件errno.h362

19.3.3 perror()函数362

19.4查找和排序364

19.4.1使用bsearch()进行查找364

19.4.2使用qsort()进行排序365

19.4.3演示查找和排序365

19.5总结370

19.6问与答370

19.7作业370

19.7.1小测验370

19.7.2练习371

TYPE&RUN6计算抵押贷款的偿还金额372

第20天课程管理内存374

20.1类型转换374

20.1.1自动类型转换374

20.1.2显式转换376

20.2分配内存的存储空间377

20.2.1使用malloc()函数分配内存377

20.2.2使用calloc()函数分配内存379

20.2.3使用realloc()函数分配更多的内存380

20.2.4使用free()函数释放内存381

20.3操纵内存块383

20.3.1使用memset()函数初始化内存383

20.3.2使用memcpy()复制内存中的数据383

20.3.3使用memmove()函数移动内存中的数据383

20.4位的用法385

20.4.1移位运算符385

20.4.2按位逻辑运算符386

20.4.3求补运算符387

20.4.4结构中的位字段387

20.5总结389

20.6问与答389

20.7作业390

20.7.1小测验390

20.7.2练习390

第21天课程编译器的高级用法392

21.1使用多个源代码文件的编程392

21.1.1模块化编程的优点392

21.1.2模块化编程技术392

21.1.3模块的组成部分394

21.1.4外部变量和模块化编程395

21.1.5使用.obj文件395

21.1.6使用生成工具396

21.2 C语言的预处理器396

21.2.1#define预处理器编译指令397

21.2.2使用编译指令#include400

21.2.3使用#if、#elif、#else和#endif400

21.2.4使用#if…#endif来帮助调试401

21.2.5避免将头文件包含多次401

21.2.6#undef编译指令402

21.3预定义的宏402

21.4使用命令行参数403

21.5总结405

21.6问与答405

21.7作业405

21.7.1小测验405

21.7.2练习406

第三周复习407

附加课程(具体内容见光盘)413

附录A ASCII字符集414

附录B C/C++中的保留字418

附录C使用二进制和十六进制数420

C.1十进制420

C.2二进制420

C.3十六进制420

附录D移植性问题422

D.1 ANSI标准422

D.2 ANSI关键字422

D.3区分大小写422

D.4可移植的字符424

D.5确保ANSI兼容性424

D.6绕开ANSI标准424

D.7使用可移植的数值变量425

D.7.1最大值和最小值426

D.7.2确定数字的类型430

D.7.3转换字符的大小写:一个可移植性范例434

D.8可移植的结构和共用体434

D.8.1字对齐434

D.8.2读写结构435

D.8.3在可移植的程序中使用非-ANSI特性436

D.8.4 ANSI标准头文件437

D.9总结438

D.10问与答438

D.11作业438

D.11.1小测验438

D.11.2练习439

附录E常用的C语言函数440

附录F作业答案444

第1天课程的答案444

小测验444

练习444

第2天课程的答案445

小测验445

练习445

第3天课程的答案446

小测验446

练习446

第4天课程的答案447

小测验447

练习447

第5天课程的答案449

小测验449

练习449

第6天课程的答案452

小测验452

练习452

第7天课程的答案453

小测验453

练习453

第8天课程的答案457

小测验457

练习457

第9天课程的答案461

小测验461

练习461

第10天课程的答案463

小测验463

练习463

第11天课程的答案465

小测验465

练习466

第12天课程的答案467

小测验467

练习467

第13天课程的答案470

小测验470

练习471

第14天课程的答案471

小测验471

练习472

第15天课程的答案472

小测验472

练习473

第16天课程的答案473

小测验473

练习474

第17天课程的答案474

小测验474

练习474

第18天课程的答案475

小测验475

练习475

第19天课程的答案475

小测验475

练习476

第20天课程的答案476

小测验476

练习477

第21天课程的答案477

小测验477

附加课程1的答案478

小测验478

附加课程2的答案478

小测验478

附加课程3的答案478

小测验478

附加课程4的答案479

小测验479

附加课程5的答案479

小测验479

附加课程6的答案480

小测验480

附加课程7的答案480

小测验480

练习480

附录G Dev-C++编译器482

G.1 Dev-C++简介482

G.2在Microsoft Windows上安装Dev-C++482

G.3 Dev-C++中的程序484

G.4使用Dev-C++484

G.4.1针对C语言编程定制Dev-C++485

G.4.2在Dev-C++中输入并编译程序486

G.4.3编译Dev-C++程序488

G.4.4运行Dev-C++程序488

G.5总结489

简述C语言中有哪些常用表达式

这种东西简述不了,我给你来份大全

C语言语法参考大全(流程控制语句)----------------------------------------------------------------------------------------------------------01条件语句的一般形式为:if(表达式)语句1;else语句2;上述结构表示:如果表达式的值为非0(TURE)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0(FALSE)即假,则跳过语句1而执行语句2。注意: 1.条件执行语句中"else语句2;"部分是选择项,可以缺省,此时条件语句变成:if(表达式)语句1;表示若表达式的值为非0则执行语句1,否则跳过语句1继续执行。 2.如果语句1或语句2有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中,此时条件语句形式为:if(表达式){语句体1;}else{语句体2;}3.条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");对于上述情况, Turbo C2.0规定: else语句与最近的一个if语句匹配,上例中的else与if(y<=100&&y>x)相匹配。为了使else与if(x>20||x<-10)相匹配,必须用花括号。如下所示:if(x>20||x<-10){ if(y<=100&&y>x) printf("Good");}else printf("Bad");4.可用阶梯式if-else-if结构。阶梯式结构的一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;..else语句n;这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else语句n。最后这个else常起着"缺省条件"的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中。02switch语句在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-fi语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况, Turbo C2.0提供了一个开关语句。开关语句格式为:switch(变量){ case常量1:语句1或空; case常量2:语句2或空;... case常量n;语句n或空; default:语句n+1或空;}执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。注意:1. switch中变量可以是数值,也可以是字符。2.可以省略一些case和default。3.每个case或default后的语句可以是语句体,但不需要使用"{"和"}"括起来。下例的switch中变量为整数型。main(){int test;for(test=0; test<=10; test++){switch(test)/*变量为整型数的开关语句*/{case 1:printf("%d", test);break;/*退出开关语句*/case 2:printf("%d", test);break;case 3:printf("%d", test);break;default:puts("Error");break;}}}下例的switch中变量为字符型。#include<stdio.h>main(){char c;while(c!=27)/*循环直到按Esc键结束*/{c=getch();/*从键盘不回显接收一个字符*/switch(c){case A:/*接收的字符为A*/putchar(c);break;/*退出开关语句*/case B:putchar(c);break;default:/*接收的字符非A和B*/puts("Error");break;}}}03for循环for循环是开界的。它的一般形式为:for(<初始化>;<条件表过式>;<增量>)语句;(1)初始化总是一个赋值语句,它用来给循环控制变量赋初值;(2)条件表达式是一个关系表达式,它决定什么时候退出循环;(3)增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。例如:for(i=1; i<=10; i++)语句;上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。注意:1. for循环中语句可以为语句体,但要用"{"和"}"将参加循环的语句括起来。2. for循环中的"初始化"、"条件表达式"和"增量"都是选择项,即可以缺省,但";"不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。3. for循环可以有多层嵌套。例16:main(){ int i, j, k; printf("i j k"); for(i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf(%d%d%d", i, j, k);}04while循环与do-while循环while循环的一般形式为:while(条件)语句;while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句.例17:#include<stdio.h>main(){char c;c=;/*初始化c*/while(c!=X0D)/*回车结束循环*/c=getche();/*带回显的从键盘接收字符*/}上例中, while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=X0D,条件为假,循环便告结束。与for循环一样, while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。注意:1.在while循环体内也允许空语句。例如:while((c=getche())!=X0D);这个循环直到键入回车为止。2.可以有多层循环嵌套。3.语句可以是语句体,此时必须用"{"和"}"括起来。例18:#include<stdio.h>main(){char c, fname[13];FILE*fp;/*定义文件指针*/printf("File name:");/*提示输入文件名*/scanf("%s", fname);/*等待输入文件名*/fp=fopen(fname,"r");/*打开文件只读*/while((c=fgetc(fp)!=EOF)/*读取一个字符并判断是否到文件结束*/putchar(c);/*文件未结束时显示该字符*/}05do-while循环do-while循环的一般格式为:do语句;while(条件);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此, do-while循环至少要执行一次循环语句。同样当有许多语句参加循环时,要用"{"和"}"把它们括起来。06continue语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。 main(){ char c; while(c!=0X0D)/*不是回车符则循环*/{ c=getch(); if(c==0X1B) continue;/*若按Esc键不输出便进行下次循环*/ printf("%c", c);}}07break语句 break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。main(){ int i=0; char c; while(1)/*设置循环*/{ c=;/*变量赋初值*/ while(c!=13&&c!=27)/*键盘接收字符直到按回车或Esc键*/{ c=getch(); printf("%c", c);} if(c==27) break;/*判断若按Esc键则退出循环*/ i++; printf("The No. is%d", i);}printf("The end");}

望采纳,谢谢

OK,本文到此结束,希望对大家有所帮助。

程序设计(Python程序)vb考试题库及答案(把题库做成答题软件)