请问这段C语言啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问这段C语言啥意思相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
void main()
int ok1=1 ,ok2=2,ok3=3,x=15;
if(!ok1)
x--;
else
if(ok2)
if(ok3)
x=3;
else
x=4;
printf("%d",x);
题目中变量ok1的值为1,那么!ok1就的值就为0;所以x--的语句不会执行。
跳到if(ok2),因为ok2=2,所以if语句执行。
继续跳到if(ok3),ok3=3,所以if语句执行,即把3赋给x。
ps:【if(ok3)是在if(ok2)成立的情况下才会执行的】
最后的else是当if(!ok1)和if(ok2)都不执行时,该语句才执行。
因此,最后输出x的结果为3。 参考技术A 如果ok1等于0输出x-1的值,这里是14
如果ok1不是0而且ok2不是0且ok3不是0,x等于3输出x是3
如果ok1不是0而且ok2不是0且ok3是0,x等于4输出x是4追问
if(ok1)为何是ok1=0的意思啊,我新手求解
追答ok1是1,那么ok1取反就是0,ok1前面的!是取反的意思
本回答被提问者采纳 参考技术B #include <stdio.h>为c语言的引用void main()//c语言的函数
int ok1=1 ,ok2=2,ok3=3,x=15;//定义的4个整型变量
if(!ok1) //判断变量ok1是否不等于0,由于ok1=1,符合条件,所以执行x--,即x=14
x--;
else
if(ok2)
if(ok3)
x=3;
else
x=4;
printf("%d",x);//最后输出x的值,14
参考技术C #include <stdio.h>
void main()
int ok1=1 ,ok2=2,ok3=3,x=15;
if(!ok1) //如果ok1等于零 此时ok1=1不满足条件,不执行x--
x--;
else
if(ok2) //如果ok2不等于零 此时ok2=2满足条件,执行判断ok3
if(ok3) // 如果ok3不等于零 此时ok3=3满足条件,执行x=3
x=3;
else
x=4;
printf("%d",x);
所以结果就是3. 参考技术D #include <stdio.h>
void main()
int ok1=1 ,ok2=2,ok3=3,x=15;
if(!ok1) 如果ok1为0,那么x=x-1
x--;
else 如果ok1不为0
if(ok2) 如果ok2不为0
if(ok3) 且如果ok3不为0
x=3; 那么x=3
else 满足ok2不为0,但ok3为0,x=4
x=4;
printf("%d",x); 输出结果x 3
这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者
【中文标题】这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者【英文标题】:What does this piece of code do and what does each of the symbols used mean? The language used is C and I am just a beginner to coding这段代码的作用是什么,使用的每个符号是什么意思?使用的语言是 C,我只是编码的初学者 【发布时间】:2015-04-22 04:45:08 【问题描述】:遇到了一段我无法理解这两行代码在做什么的代码。甚至无法获得语法。请说明使用了哪些类型的功能,例如我猜在第一行中使用了条件运算符。
unsigned long long base_size = b >= 2 ? (b-2)/2:0;
printf("%llu\n",(base_size*(base_size+1))/2);
【问题讨论】:
是条件运算符 Ternary operator 获取一本关于 C 语言的书。然后查找 ?: 运算符,也称为三元运算符或条件运算符。接下来查找 printf 标准库函数及其格式字符串。 【参考方案1】:这里使用的是条件运算符(也称为三元运算符,因为它使用了3个表达式)条件运算符的格式是
expression1 ? expression2 : expression3.
现在让我解释一下。
如果expression1
的值为真,则整个表达式的值为expression2
的值,否则,整个表达式的值为expression3
。
现在举这个简单的例子
result = marks >= 50 ? 'P' : 'F' ;
如果表达式marks >= 50
的计算结果为真,result
将具有值'P'
,否则,result
将得到'F'
。
现在让我们继续处理您的案例
unsigned long long base_size = b >= 2 ? (b-2)/2:0;
printf("%llu\n",(base_size*(base_size+1))/2);
它检查是否b >= 2
,如果是,则将base_size
赋值为(b-2)/2
,否则将base_size
赋值为0。
也相当于
if( b >= 2 )
base_size = ( b - 2 ) / 2;
else
base_size = 0;
现在,以防万一你不知道
printf("%llu\n",(base_size*(base_size+1))/2);
它的作用是将base_size * ( base_size + 1 ) / 2
的值输出到您的输出屏幕上。
【讨论】:
【参考方案2】:根据operator priority是c,第一行有效
unsigned long long base_size = ( b >= 2 ? (b-2)/2:0 );
现在,( )
中的表达式使用ternary operator 或条件运算符。
根据C11
标准,第 6.5.15 章,语法为
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
语义是[按照我的重点]
第一个操作数被求值;它之间有一个序列点 评估和第二个或第三个操作数的评估 (以评估为准)。 第二个操作数只有在 首先比较不等于0;仅在以下情况下评估第三个操作数 第一个比较等于 0;结果是第二个的值 或第三个操作数(以被评估者为准)转换为下述类型注意。
注意:条件表达式不会产生左值。
那么,接下来,你的情况,
b >= 2 ? (b-2)/2:0
首先,评估第一个表达式b >= 2
。如果b
的值大于或等于2
,则返回1
,否则返回0
。
如果计算结果为1
,则执行第二个操作数(b-2)/2
,条件运算符的最终结果是表达式的值。
类似地,它的计算结果为0
,第三个操作数0
作为条件运算符的结果返回。
最后使用三元运算符的返回值来初始化unsigned long long base_size
变量。
关于第二行,printf()
是一个标准的C库函数,原型在stdio.h
。您可以在此here 上找到更多信息。
【讨论】:
@iharob 谢谢。顺便说一句,更新了我的答案。请审查它。 :-) @iharob 现在很高兴听到活跃的 SO 成员的消息。谢谢和欢呼!!【参考方案3】:这称为三元运算符
x = condition ? value : another_value;
意思
if (condition)
x = value;
else
x = another_value;
很明显value
和another_value
应该与x
具有相同的类型,并且condition
必须是一个可以计算为真值的表达式。
您发布的代码虽然看起来不太好,因为它很难阅读,但这样会更好
unsigned long long base_size;
base_size = (b >= 2) ? (b - 2) / 2 : 0;
printf("%llu\n", (base_size * (base_size + 1)) / 2);
这相当于
if (b >= 2)
printf("%llu\n", (((b - 2) / 2) * (((b - 2) / 2) + 1)) / 2);
else
printf("0\n");
【讨论】:
以上是关于请问这段C语言啥意思的主要内容,如果未能解决你的问题,请参考以下文章
C语言头文件中,下划线具体是啥意思?请问有没有高手指点一下?
这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者