小符号 大影响

简介: C语言学习bug记录第一弹

项目场景:


用函数实现判断100~200之间的素数

问题描述:


写代码过程成中在if (1 == is_prime(i))语句后面加上了;(分号)

从而导致代码运行结果出现偏差。

#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
  int j = 0;
  for (j = 2; j <= sqrt(i); j++)
  {
    if (i % j == 0)
      return 0;
  }
  return 1;
}
int main()
{
  int i = 0;
  int count = 0;
  for (i = 100; i <= 200; i++)
  {
    if (1 == is_prime(i));//是素数返回1,不是返回0
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

原因分析:


if(条件)

语句1;

的代码,当if(条件)后面加了分号之后,将成为

if(条件);

语句1;

这样,当条件表达式为真或不为真,都会执行语句1,且为真时,执行的是空语句,即分号前的语句,相当于:

if( 条件) 空语句;

语句1;

在你的代码中第十八行,if后面加了分号,意味着不管1 == is_prime(i)是否为真,都会直接执行count++;printf("%d ", i);。

所以运行结果就是100~200之间的数

解决方案:


将if (1 == is_prime(i))后的分号去掉

#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
  int j = 0;
  for (j = 2; j <= sqrt(i); j++)
  {
    if (i % j == 0)
      return 0;
  }
  return 1;
}
int main()
{
  int i = 0;
  int count = 0;
  for (i = 100; i <= 200; i++)
  {
    if (1 == is_prime(i))//是素数返回1,不是返回0
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

相关文章
|
6月前
|
存储
【BigDecima】不可变的,任意精度的有符号十进制数。
【BigDecima】不可变的,任意精度的有符号十进制数。
59 0
|
6月前
|
存储 人工智能 程序员
溢出、截断、类型提升:从易错代码入手分析整型数据存储与类型转换
这篇文章介绍了关于数据在内存中的存储以及可能出现的溢出问题,包括整型数据的存储方式、取值范围以及溢出的现象和原因。文章通过例子和罗盘图解释了整型数据溢出时的计算过程,并指出在进行运算时要注意数据类型的转换和可能的溢出情况。此外,文章还给出了几个练习题,帮助读者理解和应用这些知识。
202 0
|
编译器 C++
c++中基本类型详细解释外加基本运算规则
类型 含义 wchat_t 宽字符 bool 布尔类型 char 字符 chat16_t unicode字符 chat_32 unicode字符 short 短整型 int 整形 long 长整型 longlong 长整型 float 单精度浮点型 double 双精度浮点型 longdouble 扩展精度浮点型
120 1
输出十进制“08”等其他数值,报错无效的八进制数字,换个角度,三种方法解决问题
很显然,我们自己的语言与计算机有差别,我们想法是08,09,就是十进制数前加一个零,这是一个我们自定的格式,但计算机听不懂人类语言,就默认把0+某个数看成了八进制我们知道,八进制不可能出现8以上的数字,所以写程序时就有了下面这种报错:那我们赋值、输入时,无法表达出“我们认为”的这种所谓的十进制格式时,就应该换个角度去实现。.........
输出十进制“08”等其他数值,报错无效的八进制数字,换个角度,三种方法解决问题
|
C语言
用函数方法来比较三个数字中的较大值(常规,函数)
用函数方法来比较三个数字中的较大值(常规,函数)
130 0
用函数方法来比较三个数字中的较大值(常规,函数)
|
Serverless
宏程序变量运算规则
宏程序变量运算规则
|
C语言
符号配对 (20 分)
符号配对 (20 分)
203 0
|
算法 搜索推荐 数据安全/隐私保护
简明解释算法中的大 O 符号
2009年1月28日Arec Barrwin在StackOverflow上提问,“有没有关于大O符号(Big O notation)的简单解释?尽量别用那么正式的定义,用尽可能简单的数学来解释”。在经过众多热心网友的修改更新后,最佳回复的得分已高达 3234 分,详细内容,请见下文。
296 0
简明解释算法中的大 O 符号
上位机级,位机有符号无符号之间的关系及互换
首先,我们直观看, w(8)位有符号的值范围为 -2(w - 1) ~ 2(w - 1) - 1 = -128 ~ 127; w(8)位无符号的值范围2(w) - 1 = 255; 2(w) / 2(w - 1) = 2 2(5) / 2(5 - 1) = 2(5) / 2(4) = (2 * 2...
1356 0
|
存储
机器级大小端及移位规则
x /16 依次取余 ,最先余作十六进制的最低 字节有效位,最后的余数 作最高的字节有效位,其中我们需要注意理解 的是 一个 数据的 最高字节及 内存的 高地址及低地址 更进一步的就算机器存储的大小端模式了 小模式就是 低地址位存储低字节有效位,高地址存储高字节有效位; 大端模式 低地址位存...
1183 0