QQ:2835809579 有问题私聊我或者留言到评论区 原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。...在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是不是素数,给出判断结果。...输入输出示例 第一次运行: 输入:12 输出:NO 第二次运行: 输入:37 输出:YES 代码: #include int isprime(int n) { int i; for (i=2; i<=...n-1; i++) { if (n %i==0) return 0;} return 1; } int main() { int x,y; printf("请输λ一个整数: "); scanf("%d"...,&x); y= isprime(x); if(y==0) printf( "NO\n"); else printf( "YES\n"); } 结果:(让我偷个懒直接截屏)
2022-04-22:给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量。...换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。...时间复杂度:O(N**2)。 代码用rust编写。代码如下: fn main() { let m: Vec> = vec![ vec!['X', '.
a = 5 ,它也是180的质数因子 #我们可以通过append 将其加到列表的末尾 S.append(int(a)) print(S)#通过打印结果我们发现列表S最后一个数据a是浮点数 #...我们根据上面的循环可以发现 再最后一次求a时用了 15 / 3 # 所以结果是浮点数--->所以我们需要 用int() 将a转成整型数据 #通过for 循环 将它们按照数字和空格相间隔的形式打印出来.../ 是普通的除法运算符,结果是一个浮点数,即使两个数都是整数。...例如: >>> 7 // 2 3 >>> 10 // 3 3 因此,/ 和 // 的区别在于,/ 运算符返回浮点数,而 // 运算符返回整数。...意味着,当你修改其中一个列表的元素时,另一个列表也会受到影响。
数字判断函数或宏 //如果x是正无穷大返回1,负无穷大返回-1,否则返回0 int isinf(x) //如果x是无穷大返回0 int isfinite(x) //如果x是一个规格化浮点数则返回非0...int isnormal(x) //如果x是一个非法的数字返回非0 int isnan(x) //如果x是负数返回非0 int signbit(x) /** *返回浮点数的分类: FP_INFINITE...long double ldexpl(long double x, int n); 既然上面已经存在了一个exp函数,如果我们要实现相同的功能按理来只要:x*exp(n)就好了,为什么还要单独提供一个新的...以32位IEEE单精度浮点数的NAN为例,按位表示即:S111 1111 1AXX XXXX XXXX XXXX XXXX XXXX,其中的S是符号位,而符号位后面的指数位为8个1表示这个数字是一个特殊的浮点数...} 有一个地方疑惑的是为什么NAN定义默认值是一个quiet NAN而不是signaling NAN ---- ?递增函数 1. 返回x在y方向上的下一个可表示的浮点数。
这是因为在 16 位系统上,一个整数占用 16 位,其中一位用来表示正负号,所以剩下的 15 位用来表示数值。 int 类型通常用于表示整数,通常是 32 位或 64 位。...这是因为在 32 位系统上,一个整数占用 32 位,其中一位用来表示正负号,所以剩下的 31 位用来表示数值。...,丢弃掉后面的小数部分; 商有小数:只有当定义为浮点类型时并且在运算数中有一个浮点数时,打印时定义为浮点型,才会进行浮点数除法。...printf("%.2s\n","abcd");//输出为ab 9.2 scanf 1、基本用法 当我们需要给变量输入值时就可以使用 scanf 函数;用户输入数据、按下回车键后, scanf( ) 就会处理用户的输...为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表示读取字符串的最大长度,后⾯的字符将被丢弃。
泛型是go在1.18版本引入的新特性,泛型的引入使得在某些场景下,可以极大的简化代码的编写,提高了代码的复用性。有必要掌握泛型,可以减少很多重复的代码。一、为什么需要泛型?为什么我们需要泛型?...假设我们需要实现一个函数,它的主要功能是做加法计算,比如计算a + b的值。...当我们发现代码逻辑都一致,唯一不同的地方是类型不同时,考虑使用泛型。三、注意的坑?在使用泛型操作自定义类型时,需要注意它的返回值是底层类型还是自定义类型,下面我们看一个例子。..., scaledSlice)// slice is []int// 这里会提示没有找到print方法 因为当前返回的scaledSlice是[]int类型 而非pointscaledSlice.print...()}我们发现,泛型函数返回的切片类型是底层类型,而不是自定义类型。
类型的基本归类: 整型家族: char unsigned char //归为整型其中一种类型 signed char //内存大小为一个字节 //C语言规定中并未明确指出char的类型是有符号或无符号的...然而当我们看下一个数字时,我们就会发现事情没简单。内存中的值是0xf6 ff ff ff,明显不是-10转换成十六进制的数字。...浮点数表示的范围:float.h中定义(编译器的配置文件,可自行搜索) 3.1例子 下面通过一个例子讲讲浮点数的存储: int main() { int n = 9; float *pFloat =...的类型去改变n中存储的值,虽然是同样大小的数值,改变后的内容却是和原来完全不一样,当我们再次以%d的形式看待时会得出来一个非常大的奇怪的值,而当以%f的形式看待时却会得到刚刚赋值的9.0....首先,E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。
此时,pFloat 指向的内存中存储的是一个整数值 9。 通过 pFloat 打印该值时,由于 pFloat 是一个浮点数指针,所以它会尝试将内存中的值解释为浮点数。...这意味着你现在改变了原来存储整数 9 的内存,使其现在包含一个浮点数的表示。 再次尝试打印整数 n 的值时,它会尝试将内存中的浮点数表示解释为一个整数。...这就是为什么你得到了一个奇怪的数字 1091567616(这个数字是 9.0 的 IEEE 754 单精度表示形式解释为整数时的结果)。...而当打印 *pFloat 的值时,它正确地显示为 9.0。 3.1 浮点数存的过程 但是因为存储有可能会改变原先的值。...至于指数E,情况就比较复杂 首先,E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。
我们想象一下,-1此时是放在unsigned int i里面的,对于无符号类型来说,站在它的角度来说,-1的补码是32个1,最高位不是符号位,所以代表很大的数,画个图理解一下: 打开计算器算一下究竟多大...但是实际情况是: 为什么?strlen的返回结果是size_t: size_t实际上是unsigned int。求字符串的长度根本不可能是负数,所以设置为unsiged int。...首先,E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0-255;如果E为11位,它的取值范围为0~2047。...但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。...一个例子 #include int main() { int n = 9; float* pFloat = (float*)&n; printf("n的值为:%d\n", n)
浮点数表示的范围:float.h中定义 3.1 一个例子 浮点数存储的例子: int main() { int n = 9; float *pFloat = (float *)&n; printf...("*pFloat的值为:%f\n",*pFloat); return 0; } 运行结果如下: 3.2 浮点数存储规则 num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大...首先,E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。...但是,我们知道,科学计数法中的E是可以出现负数的, 所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023 比如,...2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即 10001001。
[m]s 指定输出的长度,其中 [m] 代表一个数字,表示所要输出的长度 // 输出 hello #include int main() { printf("%.5s\n", "hello...它用于在输出整数时指定特定的格式。让我逐步解释一下它的含义: “%”:是格式化输出的起始标记。...“#”:是一个可选标志,它用于在输出的数字前面添加一个前缀,比如在八进制数前添加"0",在十六进制数前添加"0x"。 “0”:是一个可选标志,它指定将数字填充为指定的宽度时使用零填充。...return 0; } scanf的返回值 scanf() 的返回值是一个整数,表示成功读取的变量个数。...为了防止这种情况,使用 %s 占位符时,应该指定 读入字符串的最长长度,即写成 %[m]s ,其中的 [m] 是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
为什么有大端和小端: 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。...; printf("*pFloat的值为:%f\n",*pFloat); return 0; } 输出的结果: 浮点数存储规则 num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大...首先,E为一个无符号整数(unsigned int)这意味着,如果E为8位,它的取值范围为0255;如果E为11位,它的取值范围为02047。...但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。...比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即 10001001。
.(-1)^S * M * 2 ^ E 2.S代表符号位,当S等于0,二进制浮点数为正数,当S等于1,二进制浮点数为负数 3.M表示为有效数字,大于等于1小于2 4.E表示指数位:为什么他是2的E...xxxxxx,其中xxxxxx是小数部分,所以IEEE规定,当储存有效数字位时,我们只储存小数部分,等到读取时,我们再把开头的1补上去,这样做可以帮助机器多储存一个有效数字位 2.指数位(指数是非常复杂的...): (1.指数的存储):首先E为一个无符号整数(unsigned int),如果是单精度浮点数,E的取值范围是0到255,如果是双精度浮点数,E的取值范围是0到2047.但是科学计数法中的E是可以出现负数的...,所以IEEE规定,当我们在内存中存储整数E时,E的真实值要加上一个中间数,对于不同的精度浮点数,这个中间数分别是127和1023 (2.指数从内存中的取出):当我们存储的知识点介绍完之后,读取指数的方式又分为...但当我们打印浮点数时,我们在存储和读取是于int型是不同的,符号位是0,指数位也是0,因为指数位是全0,那么属于读取的第二种情形,将浮点数表示为0.92^-126,这个数字表示非常小的数字,机器就会输出
*f\n", 6, 2, 0.5); return 0; } // 等同于printf("%6.2f\n", 0.5); 2.4.4 输出部分字符串 %s 占位符⽤来输出字符串,默认是全部输出。...[m]s 指定输出的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度。...3.2 scanf的返回值 scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。...特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。...为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。
浮点数 IEEE754标准使用V = (-1)^s^ × M × 2^E^表示浮点数,符号位(sign)s 决定该数是正数(s=0)还是负数(s=1),尾数(significand)M是一个二进制小数,...单精度浮点数中,s占用1位,M占用23位,E占用8位,总共32位,双精度浮点数s占1位,M占52位,E占11位,总共64位,这两种分别对应C中的float和double,另外还有一个扩展双精度它占用80...其次非规格值的另外一个用途是表示那些非常接近0.0的数。 2.3 特殊值:E所有位都为1,这时又有两种以下两种情况 无穷大:M所有位全为0,当符号位为0是就是正无穷,当符号位为1时就表示负无穷。...当我们把两个特别大的数相乘或者除0的时候无穷能表示溢出的结果。 NaN(Not a Number):M不全为0,如果一些运算的结果不能是实数或者无穷,比如对-1开平方根时就会返回NaN。...直接舍去后面的位的话意味着计算机中所有小数都小于等于它的实际值,进1的话意味着计算机中所有小数都大于等于它的实际值,四舍五入看起来不错,但是由于中间的5会进位,所以仍然会使计算系统中的小数整体偏大。
0; } 注: 当局部变量和全局变量同名时,局部变量使用优先(同名时不是同一个变量,也不是重新赋值!!!)...printf("%d\n",y); // 1 return 0; } 上面示例,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0,而不是1.5....如果希望得到浮点数的结果,两个运算数至少有一个浮点数,这时C语言就会进行浮点数除法。...[m]s 指定输出的长度,其中[m] 代表一个数字,表示所要输出的长度。...scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等 10.2.2 scanf()的返回值 scanf() 的返回值是一个整数,表达式成功读取的变量个数。
大小端字节序和字节序判断 当我们了解了整数在内存中存储后,我们调试看一个细节: #include int main() { int a = 0x11223344; return...); printf("*pFloat的值为:%f\n",*pFloat); return 0; } 3.2 浮点数的存储 上面的代码中, num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大...至于指数E,情况就比较复杂 首先,E为一个无符号整数(unsigned int)这意味着,如果E为8位,它的取值范围为0 ~ 255;如果E为11位,它的取值范围为0 ~ 2047。...但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。...比如,210的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即 10001001 。
当所有的操作数都是true时,将返回最后一个表达式的结果。...当所有的操作数都是false时,将返回最后一个表达式的结果。...当这种情况发生时(您希望返回一个整数,而不是浮点数),您可以使用两个波浪号:~~。(需要注意为英文格式) 一个波浪号~,被称为“按位不运算符”,等价于 - n - 1。所以~15 = -16....// 下面几种写法是等价的 Math.pow(2, n); 2 << (n - 1); 2**n; 其中需要注意的是 2 << 3 = 16 等价于 2 ** 4 = 16 7、快速Float转Integer...如果n是正数的,则 n | 0 有效地向下舍入。如果n是负数的,它则有效地向上取整。更准确地说,该操作结果是直接删除小数点后的内容,将浮点数截断为整数,和上面提到的其他几个方法是有所区别的。
原因就在于 C 语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。 如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时 C 语言就会进行浮点数除法。...[m]s 指定输出的长度,其中 [m] 代表一个数字,表示所要输出的长度 // 输出 hello #include int main() { printf("%.5s\n", "hello...它用于在输出整数时指定特定的格式。让我逐步解释一下它的含义: “%”:是格式化输出的起始标记。...“#”:是一个可选标志,它用于在输出的数字前面添加一个前缀,比如在八进制数前添加"0",在十六进制数前添加"0x"。 “0”:是一个可选标志,它指定将数字填充为指定的宽度时使用零填充。...为了防止这种情况,使用 %s 占位符时,应该指定 读入字符串的最长长度,即写成 %[m]s ,其中的 [m] 是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
题目会报错: 问题就出在,当我们输入“03”这样的数据时,在输出时会被编译器自动转换成“3”,造成该数据没有前导0,进而导致题目出错。...0,所以%.f和%.0f相同 如:"%5.2f"打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字。...ptrdiff_t是两个指针差值的类型(C99)。 如:"%td","%12ti" z 和整形转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型(C99)....0,所以%.f和%.0f相同 如:"%5.2f"打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字。...0,所以%.f和%.0f相同 如:"%5.2f"打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字。
领取专属 10元无门槛券
手把手带您无忧上云