一下是c语言的一段代码,我很难理解,尤其是有关bool的,求注释解释。感谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一下是c语言的一段代码,我很难理解,尤其是有关bool的,求注释解释。感谢!相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdbool.h>
int main(void)

unsigned long num;
unsigned long div;
bool isPrime;
printf("Please enter an interger for analysis:");
printf("Enter q to quit.\n");
while(scanf("%lu",&num)==1)

for(div=2,isPrime=ture;(div*div)<=num;div++)

if(num % div == 0)

if((div*div)!=num)
printf("%lu is divsible by %lu and %lu.\n",numndiv,num/div);
else
printf("%lu is divisible by %lu.\n",num,div);
isPrime = false;


if(isPrime)
printf("%lu is prime.\n",num);
printf("Please enter anthor interger for analysis: ");
printf("Enter q to quit.\n");

printf("bye.\n");
return 0;

以下不清楚:
1.isPrime不是函数还是自定义的;isPrime和输入的NUM有什么关系;isPrime和质数什么关系呢;
2.“for(div=2,isPrime=ture;(div*div)<=num;div++)” ---为什么在开始要将num设为质数也就是为什么isPrime=ture;
3.“isPrime = false; //如果能被2以上的整数整除,则该bool型变量置否,表示num不是质数" ---这句话是将false赋值给isPrime,为什么要这么做呢,for语句里每次开头都要在把他设为ture,很难理解。
4.“if(isPrime)” 您的注释是如果num是质数。但是isPrime就是一个bool变量,是不是应该“if(isPrime==ture)”呢?
很混乱,求解释,谢谢!

    isPrime是个布尔类型的标志,用于标示所输入的数是否是质数。

    开始时假设输入数是质数,然后在循环中试图找出num的因数,如果能找到则把它改成false。

    如果num能被div整除,那么num就不是质数,因此将isPrime设为否以表示num不是质数,同时结束循环。printf("%lu is divsible by %lu and %lu.\\n",numndiv,num/div); 这行代码应该是个笔误,代码应该为printf("%lu is divsible by %lu and %lu.\\n",num,div,num/div);

    if(isPrime)在isPrime为非零值时为真,if(isPrime)与if(isPrime==true)其实有相同的作用(条件是false被定义成0而true为非零)。

希望对你有帮助。

参考技术A bool是布尔型变量,也就是逻辑型变量的定义符,bool变量的取值false跟ture ,应该定义在stdbool.h中,一般flase为0,ture为非0.
详情请见 http://baike.baidu.com/link?url=5rbEb1QMjqnM7KW1A1UCmDzL9W7nHhHBYaEnBewS9fCPFjfQldTzQqU7gUS9_m1RaSlq8HnPZQovC1MUtCiAsa

以下是我的一此注释

#include<stdio.h>
#include<stdbool.h>
int main(void)

unsigned long num;
unsigned long div;
bool isPrime;
printf("Please enter an interger for analysis:");
printf("Enter q to quit.\n");   //这个提示没有实现:输入q加Enter并不会退出
while(scanf("%lu",&num)==1) //将输入的整数赋值给num

     // 该循环的作用寻找num的因数,并确定num是不是质数
for(div=2,isPrime=ture;(div*div)<=num;div++) //div从2开始,初始设定num为质数

if(num % div == 0) //如果num能被div整除

if((div*div)!=num) //该if语句避免输出相同的因子
printf("%lu is divsible by %lu and %lu.\n",num ,div,num/div);//此处应该是打错字了,num和div中间的n应该为逗号
else
printf("%lu is divisible by %lu.\n",num,div);
isPrime = false; //如果能被2以上的整数整除,则该bool型变量置否,表示num不是质数


if(isPrime)  //如果num是质数
printf("%lu is prime.\n",num);
printf("Please enter anthor interger for analysis: ");
printf("Enter q to quit.\n");

printf("bye.\n");
return 0;
追问

以下不清楚:
1.isPrime不是函数还是自定义的;isPrime和输入的NUM有什么关系;isPrime和质数什么关系呢;
2.“for(div=2,isPrime=ture;(div*div)<=num;div++)” ---为什么在开始要将num设为质数也就是为什么isPrime=ture;
........
您好对您的追问已经在我的提问中添加,因为字数有限,麻烦您看下,谢谢!

追答

1、2、3,isPrime 是bool型变量,那句注释可能不是很清楚,改为“ 如果num能被2以上的整数整除,则num不是质数,用bool型变量置否来表示。”可能会比较清楚一点。
3.初值为ture,再在循环过程中选择性置false,是非此及彼的关系。如果num在循环内不能被整除,则isPrime将保持为ture,否则,将为false.
4.isPrime == ture 这个表达式是bool值,而isPrime本身也是bool 值。写成"isPrime==ture"也是可以的,不过有画蛇添足的感觉。

本回答被提问者采纳

关于sas宏的一点想法

有人说把sas宏比作其他语言的函数,但是我做此类比的时候陷入了死胡同,没有成功,举一例,如果是函数就要有返回值,sas宏的返回又是什么。而且sas宏涉及到编译阶段,导致很难理解。

 

直到看到了一个人说,宏是帮你写程序的程序,才有那么点感觉。

如果真的是这样,我们的程序其实就是一段文本,传给后台,然后运行。类似于在sql中我们是用execute函数来执行一段被引号括起来的sql语句。

所以我们是否可以把宏当做文本编辑语言,或者最直接的就是一个字符串编辑语言,编辑生成一个字符串,然后将字符串提交给后台进行运行。

举个例子:


%let x=%str(data a;set sashelp.class;run;);
%PUT &x.;
&x.;

这段代码可以直接运行,而且生成了数据集A,那么这里的宏变量x其实就是一段可执行的sas代码,使用%str()是为了以防sas解析时认为;是句子的分隔符。

再看下一段代码:

%let x=%str(data r;);
%let y=%str(set sashelp.class;);
%let z=%str(run;);
%let s=&x.&y.&z.;
&s.;

这个的字符串拼接其实就非常明显了。

错误:ERROR: Open code statement recursion detected.

解决方法:单独执行run; quit;等即可。

 

宏拼接字符串的难点在于单引号双引号%&等特殊符号在何时应该被解析,我们提交给sas后台的代码不像其他语言那样是带有双引号或者单引号的!

 

今天先写到这里,后面我会进行更多的试验,把这方面的内容从理论和实际方面补齐。

 

以上是关于一下是c语言的一段代码,我很难理解,尤其是有关bool的,求注释解释。感谢!的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Objective-C 很难

大一参加蓝桥杯c语言比赛,望有经验的来指教一下。到目前为止我只学了c语言,我看过往年的题目,那绝不

澄清 C 中的位域排序语义

主流编程语言最好的编辑器,你的工具用对了吗?

主流编程语言最好的编辑器,你的工具用对了吗?

主流编程语言最好的编辑器,你的工具用对了吗?