一下是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为非零)。
希望对你有帮助。
详情请见 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的,求注释解释。感谢!的主要内容,如果未能解决你的问题,请参考以下文章