台州椒江找人做网站,安徽津城建设工程有限公司网站,网站建设着,修改wordpress用户名文章目录 May4,2023常量问题基本数据类型补码printf的字符格式控制关于异或、异或的理解赋值运算i和i的区别关系运算符 #xff2d;ay5,2023逻辑运算中‘非’的理解逗号运算运算符的优先级问题三目运算 摘自加工于C技能树 May4,2023
常量问题
//定义常量
const float PI;
PI… 文章目录 May4,2023常量问题基本数据类型补码printf的字符格式控制关于异或、异或的理解赋值运算i和i的区别关系运算符 ay5,2023逻辑运算中‘非’的理解逗号运算运算符的优先级问题三目运算 摘自加工于C技能树 May4,2023
常量问题
//定义常量
const float PI;
PI 3.14;
//false ,这种声明变量是错误的常量声明之后就不能修改即不能再赋值所以应该声明之处就赋值。
//正确的方法为下面两种
const float PI 3.14;
#define PI 3.14printf(半径为%.2f的圆面积是%.2f, radius, area);
//%.2f表示精确保留小数后2位数。//关于科学记数法
314e-2这个e和后面的-2是一个整体e可以理解为*10^与-2连起来就是*10^-2。所以314e-2就是314*10^-23.14。基本数据类型 signed代表有符号的第一个位代表正负剩余的代表大小例如signed int 大小区间为-128-127。默认为signedunsigned代表无符号的所有的位都为大小没有负数例如unsigned int 大小区间为0-255。补码
正数的补码是该数的二进制形式。 负数的补码需要通过以下几步获得 1先取得该数的绝对值的二进制形式
2再将第1步的值按位取反除符号位
3最后将第2步的值加1
printf的字符格式控制
printf函数的格式控制 说明符
%d有符号十进制整数 %u无符号十进制整数 %i与%d相同 %o无符号八进制整数不输出前缀0 %x无符号十六进制整数不输出前缀0 %c输出一个字符 %s输出一个字符串 %f浮点数十进制小数形式默认保留6位小数 %e浮点数e指数形式小数点前有且仅有一位非零数指数部分一般占4位 %g根据值自动选择%f或%e不输出无意义的0 %p输出指针地址 %%输出一个 %
(a ch z‖A’chZ) (ch a ch z)‖(ch A chZ)//前面表达是数学式的表达因为C语言中没有 连等于 这样的表达所以要用后面这种符合C语言表达的。scanf(%c,ch)什么意思?
scanf读变量的时候需要其实际存储的地址。%c是字符型把输入的数字按照ASCII码相应转换为对应的字符。字符型取地址要加。字符串数组或字符串指针变量由于数组名可以转换为数组和指针变量名本身就是地址就不加
关于异或、异或的理解
异或男性和女性能生出孩子否则就不行。
同或同性之间才是真爱
来源于知友 赋值运算
int abc10
连续赋值应保证等号左边为变量右边为赋值并且变量已经有了存储空间
此时bc相当于没有定义就使用了会报错应先定义赋予存储空间改为
int abc
abc10int main(int argc, char** argv)char** argv这句啥意思
argc是传入main的参数个数argv是传入main的函数列表char**二级指针去指向它i和i的区别 关系运算符 注意C语言的基本数据类型有char、int、double我们暂时认为只有char和int适用于上述关系运算符double和字符串字符数组的关系运算以后再讨论。 注意C语言没有“之间”、“中间”、“之内”或“在某范围内”的关系运算符例如年龄在25-30岁之间只能表达为年龄大于等于25岁 并且 年龄小于等于30岁。
ay5,2023
逻辑运算中‘非’的理解 year % 100 ! 0 和 !(year % 100 0)两者的区别是什么
逗号运算 引言这是我最兴奋的一章看了大佬文章就像是哥伦布发现新大陆那样感觉很新奇。但我这里只写我感觉到的并远没有大佬那种深层次看问题的角度也得不出来那样的结论但他们就是我的师傅我的目标是我想要成为的那种人。 Q:请教一下这个y(xab),(bc);语法是那个版本的支持的语法我用得编译器始终报错我想了了一下这个语句本质上归咎为y79了但这不符合我目前对C语言的认知想着是不是这种定义出错了呢 A:来自于大佬黛琳ghz的解答这种语法形式是 C 语言中的逗号表达式用于在一个语句中包含多个表达式。在该语法中逗号左边的表达式会被执行但其结果会被忽略然后逗号右边的表达式会被求值并赋值给 y。 C 语言中逗号表达式的优先级是最低的也就是说它是所有运算符中优先级最低的。因此在使用逗号表达式时要格外注意其优先级问题。 语句 y(xab),(bc); 实际上是将 (xab) 的结果赋值给 y然后对 (bc) 进行求值但该结果却被忽略了。所以实际上该语句的效果等同于 y (x a b);。 关于编译器报错的问题由于不同的编译器可能存在语法实现细节的差异建议检查一下使用的编译器是否支持该语法。
测试前
#include stdio.h
int main(int argc, char **argv)
{int a3, b4, c5;int x0;int y(x(ab)),(bc);printf(第一个y%d\n, y);y((xab),(bc));printf(第二个y%d\n, y);}//运行结果
/*
.code.tio.c:6:23: error: expected )int y(x(ab)),(bc);^
.code.tio.c:6:21: note: to match this (int y(x(ab)),(bc);^
.code.tio.c:6:22: error: redefinition of bint y(x(ab)),(bc);^
.code.tio.c:4:11: note: previous definition is hereint a3, b4, c5;^
2 errors generated.
/srv/wrappers/c-clang: line 5: ./.bin.tio: No such file or directory
*/对于以上错误查询未果于是阴差阳错下把y提前声明了一下就好。
#include stdio.h
int main(int argc, char **argv)
{int a3, b4, c5,x0,y;y(x(ab)),(bc);printf(第一个y%d\n, y);y((xab),(bc));printf(第二个y%d\n, y);}//运行结果
/*
第一个y7
第二个y9
.code.tio.c:5:19: warning: expression result unused [-Wunused-value]y(x(ab)),(bc);~^~
1 warning generated.
*/
总结
#include stdio.h
int main(int argc, char **argv) {int a1,b2,c3,d4;int x,y;x a,b,c,d;//不带括号的 数据类型 变量名 表达式1表达式2表达式3表达式4y (a,b,c,d);//带括号的 数据类型 变量名 (表达式1表达式2表达式3表达式4)printf(x%d\n,x);printf(y%d\n,y);
}//运行结果
1
4/*
注解逗号运算符有两种方式。
第一种是不添加括号的这种只会执行第一个表达式1而忽略其他表达式的结果并且返回第一个表达式的值或者说计算机可能把所有的表达式都执行了但是呈现给你的是第一个表达式的值
第二种是带括号的这种执行了前面的表达式即表达式1表达式2表达式3但是忽略了他们的结果只返回最后一个表达式即表达式4的值。
*/ 运算符的优先级问题 三目运算
比较三个数中的大小 B选项有点看不懂。