这个c语言逗号运算中的类试逗号的符号如何打出啊?

c语言初级问题_百度知道
c语言初级问题
&c)?为什么当a&gt?,c);从命令行获取3个整数;b;,&a;;%d&quot,b,c,并把最大的数输出&#92,a&gt:printf(&quot:b);%d%d%d&int a?a;b时不显示结果;n&;%d&quot?a;)?printf(&c:b&scanf(&a&gt,&bprintf(&b??;这句话有错吗
b+115);,b;);%d&quot,但是一运行就关闭程序;把任意四位数倒序后加115的结果输出\*10+a/;n&10%10*100+a/b=a%10*1000+a&#47,a);%d&scanf(&quotprintf(&quot??;printf(&编译无错误
提问者采纳
printf(&这样就行了第二个你把a转化成b的逻辑是错的;a = a &gt: c ? a :n& b , a),看不太明白最后一行你写的太乱了,你自己好好算一下?%d\;a = a &gt
嗯 这个我知道。 我就是想一句写出来,用3目。比如输入 5 4 3 结果就不显示但是输入的a小于b的话
就能正确执行
三目运算符?:
&的运算优先级是大于 :的所以先操作的b&c,你改下(a&b?a:b)&c?printf(&%d&,(a&b?a:b)):printf(&%d&,c);这样就行了, 我试过了
提问者评价
其他类似问题
为您推荐:
其他2条回答
&gt,第一个:之前的;b为真就执行a这条语句
比如输入 5 4 3 结果就不显示
久违了C,对以上回答稍作解释,或许会错,希望有帮助 1.B
\,\”,N,a,m,e,\,\A,d,d,r,e,s,s,\n,
pad=sum++,pad++,++是逗号表达式吧,就是最后一个表达式的结果作为最终结果,而计算所从左到右,计算,++pad,就是pad加一并且本次将加一后的值作为结果,跟pad++相对,pad++是加一但本次以加一前的值作为结果。
(exp1,exp2)和(exp3,exp4,exp5)也是个逗号表达式吧。
4.char a=3,b=6,c;中,c没有赋值,应该是个随机值吧,或者你能写掉了内容。
5.A) printf(&a=%%d,b=%%d\n&,a,c);}中括号中的a=%好b=%将原样打出,只有后面的%d好\n作为修饰符号处理。
6.这个我不确定,不知道\后接数字是什么,如果它合法的话就应该是A,因为char就是定义字符,只能包含一个字符,或者就是不合法的。
7. C #define ...
您可能关注的推广
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言符号_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||文档简介
&&c​语​言​基​础​符​号
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢c语言*怎么打出来 这个符号什么意思_百度知道
c语言*怎么打出来 这个符号什么意思
提问者采纳
这个符号表示乘法运算符,你看看,或指针运算符。Shift+8就可以打出来……就是键盘上的8上面
贴完整的一行语句,不要断章取义。
提问者评价
来自团队:
其他类似问题
为您推荐:
其他3条回答
那个8就是。这个符号表示指针,但是要按下shift+8才能输入键盘字母I上面一行
pirntf(&*&);这是属于图形的星号星号的另一种表达就是算术运算符中的乗号
哪有c 语言这样写的,你写全了好吗?连那个分号。
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言宏定义中的连接符
C语言宏定义中的连接符
(一)宏定义中的## 连接符与# 符## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。假设程序中已经定义了这样一个带参数的宏:#define paster( n ) printf( "token" #n " = %d", token##n ) 同时又定义了一个整形变量: int token9 = 9;现在在主程序中以下面的方式调用这个宏: paster( 9 );那么在编译时,上面的这句话被扩展为: printf( "token" "9" " = %d", token9 );注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。 可想而知,上面程序运行的结果就是在屏幕上打印出token9=9(二)"\"与一个较长占多行的宏宏定义中允许包含两行以上命令的情形,此时必须在最右边加上"\"且该行"\"后不能再有任何字符,连注释部分都不能有,下面的每行最后的一定要是"\","\"后面加一个空格都会报错,更不能跟注释。 #define exchange(a,b) {\\ t=a;\ a=b;\ b=t;\ }详细说明:C语言宏定义##连接符和#符的使用 C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。 关于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "\n"); } while(0) 那么实际使用中会出现下面所示的替换过程: WARN_IF (divider == 0); 被替换为 do { if (divider == 0) fprintf(stderr, "Warning" "divider == 0" "\n"); } while(0); 这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。而##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。那么下面的代码就非常实用: struct command { char * void (*function) (void); }; #define COMMAND(NAME){ NAME, NAME ## _command } // 然后你就用一些预先定义好的命令来方便的初始化一个command结构的数组了: struct command commands[] = { COMMAND(quit), COMMAND(help), ... } COMMAND宏在这里充当一个代码生成器的作用,这样可以在一定程度上减少代码密度,间接地也可以减少不留心所造成的错误。我们还可以n个##符号连接 n+1个Token,这个特性也是#符号所不具备的。比如: #define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d typedef struct _record_type LINK_MULTIPLE(name,company,position,salary); // 这里这个语句将展开为: // typedef struct _record_type name_company_position_ 关于...的使用 ...在C宏中称为Variadic Macro,也就是变参宏。比如: #define myprintf(templt,...) fprintf(stderr,templt,__VA_ARGS__) // 或者 #define myprintf(templt,args...) fprintf(stderr,templt,args) 第一个宏中由于没有对变参起名,我们用默认的宏__VA_ARGS__来替代它。第二个宏中,我们显式地命名变参为args,那么我们在宏定义中就可以用 args来代指变参了。同C语言的stdcall一样,变参必须作为参数表的最有一项出现。当上面的宏中我们只能提供第一个参数templt时,C标准要求我们必须写成: myprintf(templt,); 的形式。这时的替换过程为: myprintf("Error!\n",); 替换为: fprintf(stderr,"Error!\n",); 这是一个语法错误,不能正常编译。这个问题一般有两个解决方法。首先,GNU CPP提供的解决方法允许上面的宏调用写成: myprintf(templt); 而它将会被通过替换变成: fprintf(stderr,"Error!\n",); 很明显,这里仍然会产生编译错误(非本例的某些情况下不会产生编译错误)。除了这种方式外,c99和GNU CPP都支持下面的宏定义方式: #define myprintf(templt, ...) fprintf(stderr,templt, ##__VAR_ARGS__) 这时,##这个连接符号充当的作用就是当__VAR_ARGS__为空的时候,消除前面的那个逗号。那么此时的翻译过程如下: myprintf(templt); 被转化为: fprintf(stderr,templt); 这样如果templt合法,将不会产生编译错误。 这里列出了一些宏使用中容易出错的地方,以及合适的使用方式。错误的嵌套-Misnesting 宏的定义不一定要有完整的、配对的括号,但是为了避免出错并且提高可读性,最好避免这样使用。由操作符优先级引起的问题-Operator Precedence Problem 由于宏只是简单的替换,宏的参数如果是复合结构,那么通过替换之后可能由于各个参数之间的操作符优先级高于单个参数内部各部分之间相互作用的操作符优先级,如果我们不用括号保护各个宏参数,可能会产生预想不到的情形。比如: #define ceil_div(x, y) (x + y - 1) / y 那么 a = ceil_div( b & c, sizeof(int) ); 将被转化为: a = ( b & c + sizeof(int) - 1) / sizeof(int); // 由于+/-的优先级高于&的优先级,那么上面式子等同于: a = ( b & (c + sizeof(int) - 1)) / sizeof(int); 这显然不是调用者的初衷。为了避免这种情况发生,应当多写几个括号: #define ceil_div(x, y) (((x) + (y) - 1) / (y)) 消除多余的分号-Semicolon Swallowing 通常情况下,为了使函数模样的宏在表面上看起来像一个通常的C语言调用一样,通常情况下我们在宏的后面加上一个分号,比如下面的带参宏: MY_MACRO(x); 但是如果是下面的情况: #define MY_MACRO(x) { } //... if (condition()) MY_MACRO(a); else {...} 这样会由于多出的那个分号产生编译错误。为了避免这种情况出现同时保持MY_MACRO(x);的这种写法,我们需要把宏定义为这种形式: #define MY_MACRO(x) do { } while(0) 这样只要保证总是使用分号,就不会有任何问题。 Duplication of Side Effects 这里的Side Effect是指宏在展开的时候对其参数可能进行多次Evaluation(也就是取值),但是如果这个宏参数是一个函数,那么就有可能被调用多次从而达到不一致的结果,甚至会发生更严重的错误。比如: #define min(X,Y) ((X) & (Y) ? (Y) : (X)) //... c = min(a,foo(b)); 这时foo()函数就被调用了两次。为了解决这个潜在的问题,我们应当这样写min(X,Y)这个宏: #define min(X,Y) ({ typeof (X) x_ = (X); typeof (Y) y_ = (Y); (x_ & y_) ? x_ : y_; }) ({...})的作用是将内部的几条语句中最后一条的值返回,它也允许在内部声明变量(因为它通过大括号组成了一个局部Scope)。
发表评论:
TA的推荐TA的最新馆藏[转]&[转]&c语言中这些奇怪的符号是怎么回事##_##_百度知道
c语言中这些奇怪的符号是怎么回事##_##
st( P##port##_##pin## ^= 1,^又是什么意思?#define MCU_IO_TGL_PREP(port,这是什么意思?
st()又是怎么回事?另外,双目操作符之间多了个_##_##
提问者采纳
st( P##port##_##pin## ^= 1:#define XNAME(n)
x##n如果这样使用宏XNAME(8)则会被展开成这样x8 #define MCU_IO_TGL_PREP( )这个也是个宏定义如果这样使用 MCU_IO_TGL_PREP(8,9)展开就成这样 st(P8_9^=1) 看不到具体程序##这个运算符把两个语言符号组合成单个语言符号看例子
其他类似问题
为您推荐:
您可能关注的推广
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言 逗号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信