吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 584|回复: 13
收起左侧

[求助] 初学C语言,有几个问题请教各位大佬

  [复制链接]
doul3 发表于 2023-7-29 23:00
有如下代码,请教的问题:
1.for循环下存在if循环,当条件(比如7)满足for循环进入if循环后,发现不能满足if条件 ,是不是直接转入在下一个if循环?
2.这里 bool类型的isPrime有什么作用?第一个if里面的语句isPrime = false是什么意思?  尤其是下面if (isPrime)这句。

以上,如能解答,不胜感激!
[C] 纯文本查看 复制代码
# 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)  [b]//这条语句是什么意思,isPrimer??? [/b]
	printf("%lu is primer. \n",num);
	printf("Next one:\n");
}
printf("Bye");	

return 0; 
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gjs1206 发表于 2023-7-30 11:22
第一个问题,代码是一条一条执行的,首先看这个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里面的。

免费评分

参与人数 1热心值 +1 收起 理由
doul3 + 1 多谢多谢

查看全部评分

stars5 发表于 2023-7-30 11:38
for的条件如果满足,继续循环;不满足的话,跳出循环
bj6688 发表于 2023-7-30 13:09
一剑飘零 发表于 2023-7-30 13:15
本帖最后由 一剑飘零 于 2023-7-30 13:20 编辑
gjs1206 发表于 2023-7-30 11:22
第一个问题,代码是一条一条执行的,首先看这个for循环里面的语句,只有一个if和属于if的花括号包含的语句 ...

有的。要加头文件。 <stdbool.h>
查了一下说C99之前没有
我可能直接学的C99的吧。之前的不清楚。

if (isPrime) 后面如果没有分号,后面可以跟一条语句是连在一起的。

虽然不推荐但是也可以这么写。
lyjccmm 发表于 2023-7-30 14:34

我觉得学语言还是要踏踏实实的,一步一步来。

很明显你有一些基础的东西没懂,所以你从别的地方贴来了这份代码,比如:这代码根本就运行不起来,说明你语法还不过关。

这份代码其实只是输入一个数字,判断这个数字是不是质数而已,因为源代码的缩进看着头痛,我就重新贴一份

#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???

这个[b]没有任何意思,是你自己复制代码复制错了,不知道你从哪里复制的,c语言也没有这种写法,而且加上这个[b]程序都运行不起来,也就是我说的,“这代码根本就运行不起来”

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
doul3 + 1 热心回复!
HA? + 1 + 1 热心回复!

查看全部评分

ddsluo 发表于 2023-7-30 14:37
if (isPrime)  //这条语句是什么意思,isPrimer???
    printf("%lu is primer. \n",num);
if后面没有{},就只对应IF下边这一行。
    printf("Next one:\n");
这一行就不属于IF语句了
c222y 发表于 2023-7-30 15:53
看不懂 太深奥了
lyjccmm 发表于 2023-7-30 16:38
本帖最后由 lyjccmm 于 2023-7-30 16:41 编辑
lyjccmm 发表于 2023-7-30 14:34
[md]我觉得学语言还是要踏踏实实的,一步一步来。

很明显你有一些基础的东西没懂,所以你从别的地方贴来 ...

我知道那个`b`是什么东西了

你竟然在发帖的时候,粘贴代码的时候,你在代码段里面加粗了注释,那个`b`是论坛发帖的“加粗”

这种操作没有用的,显示出来就会是你现在看到的那样,在代码里面,多了一个`b`和一个`/b`,没有显示加粗,还导致代码运行不起来。
ccbbaa 发表于 2023-7-30 18:02
当满足for循环条件时,会进入if循环。如果if循环中的条件不满足,则不会执行if循环中的语句,而是直接进入下一个循环。
bool类型的isPrime在这里用于标记一个数字是否为素数。如果一个数字满足素数的条件,则isPrime为true,否则为false。第一个if里面的语句isPrime = false表示当前数字不是素数,将isPrime标记为false。后面的if (isPrime)则检查isPrime的值,如果为true,则表示当前数字是素数,否则不是素数。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表