对本星期二的课笔记进行一个总结。
目录
三目运算符(也叫条件 *** 作符)
逗号表达式
补充:
单目 *** 作符
关系 *** 作符和逻辑 *** 作符
真与假
关键字(不能自己创建)
typedef关键字:
register寄存器关键字:
static关键字(修饰变量与函数)
sum运算
宏的定义
复合表达式
!=EOF
!感叹号还可以用来翻转一个等式的真假。
三目运算符(也叫条件 *** 作符)格式为
exp1?exp2:exp3
#includeint main() { int a,b,c; scanf("%d %d %d"),&a,&b,&c); printf("%d",(a>b?a:b)>c?(a>b?a:b):c); return 0; }
其中a>b?a:b表示a与b比较大小,若a>b则整段输出a到a。否则输出b到b。
后面即为a>c?a:c,即a与c比大小,输出较大的那个到%d中。
逗号表达式int a =3; int b =20; int c =0; int d =(a-=3,b+=a,c=a-b,b=a-4); //int d =后面括号内的就是逗号表达式。 //a-=3得出a=0,b+=a也就是20加0还是10,c后面就成了-20,b得出-4。 //因此d的值为-4。补充:
int arr[10] = {0}; arr [5] = 9; //其中[]为下标引用 *** 作符, *** 作数为数组名和下标。 int m = get max (3,5); //其中()为函数调用 *** 作符, *** 作数为函数名和3,5。单目 *** 作符
! - + sizeof (为 *** 作符中的运算符,并不是函数。) ~ ++ -- 强制类型转换
其中强制类型转换的格式为:
int main() { int a = 3.14; //这里改成int a = (int) 3.14;就可以把3.14强制转换为int类型。 printf("%d",a); return 0; }
其中++和--有以下概念:
int a = 10; int b = ++a; int a = 10; int b = a++; //++a为前置++,先++后使用,打印出来a,b都为11。 //a++为后置++,先使用后++,打印出来a=11,b=10。关系 *** 作符和逻辑 *** 作符
//关系 *** 作符: > >= < <+ != == //逻辑操作符: && ||
int a = 3; int b = 4' if(a=3)&&(b=4)//两者都要为真才使用if。 if(a=3)||(b=4)//两者一个为真即可使用if。真与假
C语言中有真与假。0代表假,1代表真。等式也存在真假。
#includeint main() { int a=5,b=3,c=8; int d=(a>b),e=(b>c); //a>b表达式为真,b>c表达式为假 printf("%d %d",d,e); //那么程序的运行结果是什么呢 return 0; }
打印出来d值为1,e值为0。
int a = 0; if(a==5) //if判断值时必须用等号,一个等号判断真假,两个才是判断相等与否。 { printf("hehen"); }
注意:当if(a=0)的时候,此时a=0这一赋值表达式为假(非零即真),就不会执行后续的else语句。
若if(a=1)的时候,就可以执行后续else语句。
关键字(不能自己创建) typedef关键字:unsignned int num = 10; typedef unsignned int uint unit num2 = 10; //现在第一句和第三句的意思完全一致了,typefed相当于把unsigned int起了一个别名。register寄存器关键字:
register 关键字的采用范围:
1. 位于局部的,
2. 不会被写入的,
3. 读取频繁的,
4. 不会大规模使用的。
register修饰的变量,不能取地址(因为已经放在寄存区中)。
#include#include int main() { register int a = 0; printf("&a = %pn", &a); //编译器报错:错误 1 error C2103: 寄存器变量上的“&” //注意,这里不是所有的编译器都报错,目前我们的vs2013是报错的。 system("pause"); return 0; }
int num = 10; //4个字节。 register int num2 = 20; //建议将20放在寄存器中。
register关键字把数据存储到寄存器中来获取更快的计算速度。
static关键字(修饰变量与函数)可以修饰全局变量,局部变量,函数。
void test () { int a = 5; a++ printf("%d",a); } int main() { int i = 0; while(i<10) { test(); i++; } return 0; } //此时输出的为6,6,6,6,6,6,6,6,6,6 //但是如果变成了static int a =5; //你们就可以打印成6,7,8,9,10,11,12,13,14,15
因为static修饰的局部储存在静态区了。
内存有栈区,堆区和静态区。原本的a = 5存放于栈区。但是static修饰变量实际上是改变了变量的储存位置,把它放到了静态区,导致变量出了作用于仍在,生命周期没有结束。
静态区一般储存的静态变量和全局变量。栈区都是存放的局部变量和函数的参数。堆区是用于动态内存开辟的。
sum运算格式为如下:
#includeint sum(int x,int y,int z) { int c; c = x+y+z; return c; } //函数声明。 int main() { int a; int b; int c; scanf("%d" "%d" "%d",&a,&b,&c); //scanf输入小数时把int改为float,scanf的%d改为%f, printf("%d",sum(a,b,c)); //printf的%d改为%.2f就可以。 return 0; }
或者,a,b,c有具体值时。
int main() { int a = 10; int b = 20; int c = 30; int sum = 0; //初始化。 printf("%d",sum); return 0; }宏的定义
#includeint Max(int x, int y) { if(x>y) return x; else return y; } #define Max(x,y) (x>y?x:y) int main() { int a = 10; int b = 20; int max = Max(a,b); printf("max=%dn",Max); return 0; }
先抄写一遍,只是遇到了这么个解法,并没有深入了解。
复合表达式#includeint main() { if(4<2<3) printf("ha"); if(4>2>3) printf("ha"); if(4<3>2) printf("ha"); return 0; }
首先第一个4<2为假,输出0。0<3为真,输出1。
同理可得第二个第三个输出0。
其中<和>的结合性为从左到右,即从左往右计算。=的结合性为从右到左,但是=的优先级要低于<>。
#includeint main() { int a, b; if (a = b = 4) printf("%d %d ",a,b); if (a = 5 > 3) printf("%d", a); return 0; }
第一个printf输出为4,4。而第二个printf输出为1。因为5>3等式的值为真也就是1。
!=EOF#include!感叹号还可以用来翻转一个等式的真假。int main() { int a=0; while(scanf("%d",&a)!=EOF);//可以进行多行输入。 if(a>=140) { printf("Geniusn"); } return 0; } //因为scanf函数在读取失败后回返回到EOF,因此需要写上!=EOF来排除。 //EOF全称为end of file,是文件的结束标志。
int x = 5; !x即为假。 int y = 0; !y即为真。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)