!x,就是非x,非0就是真,非其他数字就是假。就是当x为0才成立.
void main() { int x=3; do { printf("%3d",x-=2); }while(!(--x)); int i=3; if(i%3) { printf("1"); } else { printf("0"); } //输出0,当0的时候为假 }
1 -2,第一遍while(!0),成立,继续执行。第二遍while(!-3),不成立,跳出循环
3. 优先级题int a=5,b=6,c=7,d=8,m=2,n=2; (m=a < b)&&(n=c4. 结合性,数值比较d); printf("%d",n); 输出0 int a=5,b=6,c=7,d=8,m=2,n=2; (m=a > b)&&(n=c>d); printf("%d",n); 输出2 考点:优先级,>比=高 &&,左边假,右边不执行
printf("%d", 35. 强制类型转换 把表达式的运算结果强制转换成类型说明符所表示的类型,只是转换了结果,变量的类型并不转换
运算符的 *** 作数语法 scanf
单目运算符:只有一个 *** 作数,例如:
逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&】、长度运算符【sizeof】这些是单目运算符双目运算符:有两个 *** 作数,例如:
,+,-,*,/,=,==三目运算符:需要三个 *** 作数,例如:
?:nt main() { int a,b,c; printf(“input three data:n”);//使用 scanf 之前先用 printf 提示输入。 scanf("%d%d%d",&a,&b,&c); // scanf 的“输入参数”中,前面的取地址符&记住 printf("%d,%d,%d/n",a,b,c); return 0; } 运行时按如下方式输入三个值: 3□4□5↙(输入a,b,c的值) 3,4,5 (printf输出的a,b,c的值)printfprintf("%.2fn",3.141592); 3.14 printf("%.3fn",3.141592); 3.142数据类型 变量标识符,就是一个对象的名字(变量,函数) 常量
- 一个有名字的,具有特定属性的一个存储单元,用来存放数据,可以改变。先定义(声明)后使用。
- a(3)a:变量名(不可变),3:变量值(可变),():存储单元:不能变
- 变量名实际上是以一个名字代表的一个存储地址,编译时,系统给每一给变量名分配对应的内存地址。
- 从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。。。间接访问:通过地址访问(指针),直接访问:从变量中取值
字符型数据********,与字符串数据进行比较
在那些定义中是一个常量:
1、字符常量:就是输入的字符,比如’c’就是常量,是不能改变的
2、const定义的常量:const int a = 10;
3、枚举定义的常量:enum sex{ grade, cls, num };此时当中的grade、cls、num都是常量
4、宏可以定义一个常量#define max_size = 400程序运行过程中,不能被改变的值就是常量
1)整形常量,整数
2)实型常量,十进制小数形式,数字和小数点组成。指数形式(1.2e3=1.2*10^3)(e或者E之前必须有数字)
3)字符常量,普通字符,单引号括起来的一个字符,存储过程中不是存储字符,而是存储其代码。转义字符,以开头的字符序列
4)字符串常量,用双引号把若干个字符括起来,“123”,“fsfd”
5)符号常量,用#define PI 3.14 末行没有分号,经过以上处理,文件中从此行开始,PI都是3.14。符号常量不占用内存,只是一个临时符号,预编译之后就不存在了
- char c=‘a’; 单引号,字符不能超过四个,最好是一个字符
- putchar(c)
putchar('s');输出s putchar(66);输出B
char ch; ch = getchar(); putchar(ch); 输入qqq,输出q,getchar函数只能接受一个字符数组C语言中不可以对数组整体引用。
二维数组字符数组 定义
- 与java相反,可以不写前面的下标,但必须写后面的。
- 每一行的列必须相同
char a[7]="dfsfwfd"; char b[7]={"dfsfwfd"}; char c[7]={'d','f','s','f','w','f','d'}; printf("%cn",c[6]);特点if…else…,没有循环的特点
- 用双撇号括起来的部分就是字符串常量,如“abc”,"Hello!"都是字符串常量。
- 字符串常量"abc"在内存中占用4个字节(而不是3个字节),编译系统会在字符串最后自动加上一个’’作为字符串结束标志。但’’并不是字符串的一部分,它只作为字符串的结束标志。 字符串常量通常要用字符数组来存放。
- '’是结束字符串
循环 break
- 可以是关系表达式,逻辑表达式,算术表达式
C语言规定else总是与其前面最近的尚未配对的if语句组成配对关系。只能用于循环语句和switch语句
continue函数 函数处理字符串 puts(字符数组)
- 提前结束本次循环,接着执行下次循环
- 作用:将一个字符串(以’’结束的字符序列)输出。
可以包含转义字符,但是’’还是结束,后面的字符串不输出gets(字符数组)
- 只能输出一个字符串
strcat(字符数组1,字符数组2)–字符串连接函数
- 输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址
- hello,不是五个字符,是六个
- 只能输入一个字符串
strcpy(字符数组1,字符数组2)和strncpy
- 字符串2接到字符串1后面,
- 连接前两个字符串的后面都有’’,连接时将字符串1后面的’’取消
strcmp(字符串1,字符串2)
- 字符数组1必须写成数组名的形式(str1),字符数组2可以是字符数组名,也可以是一个字符串常量,strcpy(str1,“china”);
- strncpy(str1,str2,2)是将str2中最前面的两个字符复制到str1中,取代str1中原有的字符的最前面两个字符,但是复制的字符个数n不应该多于str1中原有的字符(不包括’’)
strlen(字符数组)
- 两个字符串从左到右逐个字符相比,根据ASCII码值大小比较,直到出现不同的字符或遇到’’为止。
- 比较的结果由函数值带回,相等返回0,1>2返回正整数,1<2返回负整数
strlwr(字符串)
- 测试字符串长度(不包括‘’)
- char str1[20]="hello",str2[]="world"; printf("%d",strlen(str1));,输出5
大写转换为小写
strupr(字符串)小写转换为大写
函数的声明与定义的区别
C语言编译系统是由上往下编译的. 一般被调函数放在主调函数后面的话,前面就该有声明。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。
函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。
【返回类型】 函数名(参数1类型 参数1,参数2类型 参数2,……);
函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!声明与定义的区别:
函数的声明与函数的定义形式上十分相似,但是二者有着本质上的不同。声明是不开辟内存的,仅仅告诉编译器,要声明的部分存在,要预留一点空间。定义则需要开辟内存。
1)函数的定义
函数的定义是一个完整的函数单元:
包含函数类型、函数名、形参及形参类型、函数体等(首部?)
在程序中,函数的定义只能有一次
函数首部与花括号间不加分号
2)函数的声明
函数声明只是对编译系统的一个说明:
函数声明是对定义的函数的返回值的类型说明,以通知系统在本函数中所调用的函数是什么类型。
不包含函数体(或形参)
调用几次该函数就应在各个主调函数中做相应声明
函数声明是一个说明语句,必须以分号结束// 只是做个函数声明,并不用实现 int sum(int a, int b); int main() { int c = sum(1, 4); return 0; } // 函数的定义(实现) int sum(int a, int b) { return a + b; }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)