请问这段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);

当if()括号中的数大于0时,表示条件成立,此时if语句会执行。!表示非。
题目中变量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 &gt;= 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 &gt;= 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 &gt;= 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;

很明显valueanother_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语言中while(!x)的(!x)是啥意思啊?

C语言头文件中,下划线具体是啥意思?请问有没有高手指点一下?

请问 C语言里的 结构体中定义变量 后面的:是啥意思

这段代码的作用是啥,使用的每个符号是啥意思?使用的语言是 C,我只是编码的初学者

请问在C语言中,auto和static分别代表啥意思,有啥作用,谢谢

C语言中ASCII码值是啥意思