初学C语言,有几个问题请教各位大佬
有如下代码,请教的问题:1.for循环下存在if循环,当条件(比如7)满足for循环进入if循环后,发现不能满足if条件 ,是不是直接转入在下一个if循环?
2.这里 bool类型的isPrime有什么作用?第一个if里面的语句isPrime = false是什么意思?尤其是下面if (isPrime)这句。
以上,如能解答,不胜感激!
# include <stdio.h># include <stdbool.h>
int main(void)
{
unsigned long num;
unsigned long div;
bool isPrime;
while (scanf("%d",&num) == 1)
{
for (div=2,isPrime=true;(div*div)<=num;div++)
{
if (num%div==0)
{
if ((div*div)!=num)
printf("%lu is divisible by %u and %lu.\n",
num,div,num/div);
else
printf("%lu is divisible by %lu.\n",num,div);
isPrime=false;
}
}
if (isPrime)//这条语句是什么意思,isPrimer???
printf("%lu is primer. \n",num);
printf("Next one:\n");
}
printf("Bye");
return 0;
} 第一个问题,代码是一条一条执行的,首先看这个for循环里面的语句,只有一个if和属于if的花括号包含的语句,也就是说进入这个for循环的话就只能执行if语句,如果if条件没有满足就没有其他语句可以执行了,所以直接进入下一次循环。第二个问题bool isPrime是声明变量isPrime为布尔类型,话说我怎么记得C没有布尔类型?总之布尔类型就是两个值,True为真等价于1,False为假等于0,if里面为真也就是为1就会进入if里面执行里面的语句,否则不执行。if (isPrime) 的意思就是假如isPrime为真,也就是isPrime为1或者True就会执行if里面的语句,只是你这里if(isPrime) 后面似乎没有语句可以执行啊?下面的输出语句缩进也不是在if里面的。 for的条件如果满足,继续循环;不满足的话,跳出循环
语言太多了 本帖最后由 一剑飘零 于 2023-7-30 13:20 编辑
gjs1206 发表于 2023-7-30 11:22
第一个问题,代码是一条一条执行的,首先看这个for循环里面的语句,只有一个if和属于if的花括号包含的语句 ...
有的。要加头文件。 <stdbool.h>
查了一下说C99之前没有
我可能直接学的C99的吧。之前的不清楚。
if (isPrime) 后面如果没有分号,后面可以跟一条语句是连在一起的。
虽然不推荐但是也可以这么写。 我觉得学语言还是要踏踏实实的,一步一步来。
很明显你有一些基础的东西没懂,所以你从别的地方贴来了这份代码,比如:这代码根本就运行不起来,说明你语法还不过关。
这份代码其实只是输入一个数字,判断这个数字是不是质数而已,因为源代码的缩进看着头痛,我就重新贴一份
```c
#include <stdio.h>
#include <stdbool.h>
int main()
{
unsigned long num;
unsigned long div;
bool isPrime;
while (scanf("%d", &num) == 1)
{
for (div=2, isPrime=true; (div*div) <= num; div ++)
{
if (num % div == 0)
{
if ((div*div)!=num)
printf("%lu is divisible by %u and %lu.\n", num, div, num/div);
else
printf("%lu is divisible by %lu.\n", num, div);
isPrime = false;
}
}
if (isPrime)
printf("%lu is primer. \n",num);
printf("Next one:\n");
}
printf("Bye");
return 0;
}
```
然后开始回答你的问题:
> 1.for循环下存在if循环,当条件(比如7)满足for循环进入if循环后,发现不能满足if条件 ,是不是直接转入在下一个if循环?
for循环下存在if循环?什么意思?if又不是循环,就算你说错了,if里面有个循环,而实际if里面也没有循环,所以不知道你这句话说的啥意思。
后来我猜测,你可能想说的是“for循环语句块里存在if条件判断语句块”
> 不能满足if条件 ,是不是直接转入在下一个if循环
还是听不懂。。。不能满足if条件,语句就直接往后走,如果后面有语句就执行语句,没有语句了,就开始for的下一轮循环
> 2.这里 bool类型的isPrime有什么作用?
用来标记输入的数字是不是质数,一开始先默认它是质数,所以设置成true,在for循环一次又一次的验证下,然后发现这个数存在别的因数,那么就知道输入的数字不是质数,把它标记为false
> 第一个if里面的语句isPrime = false是什么意思?
就是我说的,把它标记为不是质数
> 尤其是下面if (isPrime)这句。
这句是判断,判断经过for循环的多轮结果后,看看这个变量是不是还是质数,然后是,要输出一句“xxx是质数”
如果你不理解bool类型的变量,可以把`bool isPrime;`看成`int isPrime;`,把 `isPrime=true` 看成 `isPrime=1`,把 `isPrime=false` 看成 `isPrime=0`,这样替换后,程序依旧能运行
我看代码里面还有一个注释提了问题
> //这条语句是什么意思,isPrimer???
这个``没有任何意思,是你自己复制代码复制错了,不知道你从哪里复制的,c语言也没有这种写法,而且加上这个``程序都运行不起来,也就是我说的,“这代码根本就运行不起来” if (isPrime)//这条语句是什么意思,isPrimer???
printf("%lu is primer. \n",num);
if后面没有{},就只对应IF下边这一行。
printf("Next one:\n");
这一行就不属于IF语句了 看不懂 太深奥了
本帖最后由 lyjccmm 于 2023-7-30 16:41 编辑
lyjccmm 发表于 2023-7-30 14:34
我觉得学语言还是要踏踏实实的,一步一步来。
很明显你有一些基础的东西没懂,所以你从别的地方贴来 ...
我知道那个`b`是什么东西了
你竟然在发帖的时候,粘贴代码的时候,你在代码段里面加粗了注释,那个`b`是论坛发帖的“加粗”
这种操作没有用的,显示出来就会是你现在看到的那样,在代码里面,多了一个`b`和一个`/b`,没有显示加粗,还导致代码运行不起来。 当满足for循环条件时,会进入if循环。如果if循环中的条件不满足,则不会执行if循环中的语句,而是直接进入下一个循环。
bool类型的isPrime在这里用于标记一个数字是否为素数。如果一个数字满足素数的条件,则isPrime为true,否则为false。第一个if里面的语句isPrime = false表示当前数字不是素数,将isPrime标记为false。后面的if (isPrime)则检查isPrime的值,如果为true,则表示当前数字是素数,否则不是素数。
页:
[1]
2