c语言学习笔记(%取余)

c语言学习笔记(%取余)首先要打印 26 行 26 列 每一行有 26 个数组 数组是从 0 开始计算 所以最后一位是 25 第一行从 0 位开始打印 打印 26 个数 第二行从第 1 位开始打印 就这样一直打印到最后一个数 再从第 0 位开始继续打印 就这样一直打印 26 行

大家好,欢迎来到IT知识分享网。

首先a%b        a,b两个数必须是整型(int ; short ; char ; long int ;  long long)而不可以是浮点型(float ; double)

整除后的余数= 被除数 – 商*除数

取余的几个应用:

1. 判断能否整除某个数

2. 判别奇偶数,判别质数

3.计算范围,形成循环

4.求最大公约数:求最大公约数的最常用方法是欧几里得算法(辗转相除法)其计算原理依赖于定理gcd(a , b) = gcd (b , a mod b)

下面是几个题目帮助理解:

打印从0到99共100个数,要求每10个数换下一行打印

int main() { int n = 100; for (int i = 0; i < n; i++) { printf("%3d", i); //打印的宽度为3 if ((i + 1) % 10 == 0) //如果是i%10 == 0 的话,0就会被单独放在第一行,后面也就都乱了 { printf("\n"); } } printf("\n"); return 0; }

想一下为啥这样写打印的就是错的

int main() { int n = 100; for (int i = 0; i < n; i++) { if ((i + 1) % 10 == 0) { printf("\n"); } printf("%3d", i); } printf("\n"); return 0; }

但其实除了上面那样写,还有下面一种思路

int main() { int n = 100; for (int i = 1; i <= n; i++) { printf("%3d", i-1); if (i % 10 == 0) { printf("\n"); } } printf("\n"); return 0; }

第二个题:打印100中的所有偶数

int main() { int n = 100; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { printf("%4d", i); } } printf("\n"); return 0; }

另一种写法

int main() { int n = 100; for (int i = 2; i <= n; i += 2) { printf("%4d", i); } printf("\n"); return 0; }

如果要是打印奇数就把if 语句改一下,变成 if (i % 2 != 0)  // != 代表的是不等于

第三个题:要打印第一行abcdefghijklmnopqrstuvwxyz

                             第二行bcdefghijklmnopqrstuvwxyza

                  直到最后一行zabcdefghijklmnopqrstuvwxy

代码思路:首先要打印26行26列,每一行有26个数组,数组是从0开始计算,所以最后一位是25,第一行从0位开始打印,打印26个数,第二行从第1位开始打印,就这样一直打印到最后一个数,再从第0位开始继续打印,就这样一直打印26行

int main() { char stra[] = { "abcdefghijklmnopqrstuvwxyz" }; //加分号 int n = 26; //第012345 ... 位 for (int i = 0; i < n; i++) { int k = i; for (int j = 0; j < n; j++) { printf("%c", stra[k]); //注意打印char 类型的为%c k += 1; //也可以写成k++等 if (k == n) { k = 0; } } printf("\n"); } printf("\n"); return 0; }

最后一个题目:求两数的最大公约数

解题思路1:首先定义两个变量a,b  ;找到它们中间的最小值,可以用三目运算符c = a<b?a:b;  (=的优先级只比,高,比? :三目运算符低,所以c是取a,b中最小的

再a%c == 0&&b%c == 0 ; 直至c循环到1为止(1是任何数的公约数)          &&是并且的意思

int main() { int a = 0, b = 0 ,c = 0; scanf("%d %d", &a, &b); c = a < b ? a : b; while(c > 1) //当c>1时进入循环 { if (a % c == 0&&b % c == 0) { break; //结束当前循环,可以在while,do{}while , for( ; ; )中使用 } c--; } printf("c = %d\n", c); return 0; }

另一种方法:辗转相除法   gcd(a , b) = gcd (b , a mod b)        mod是取余的意思

c语言学习笔记(%取余)

int main() { int a = 0, b = 0, tmp = 0; scanf("%d %d", &a, &b); while (b != 0) { tmp = a % b; a = b; b = tmp; } printf("a = %d\n", a); return 0; }

最后,对于取余

如果%左边的操作数是正数,则取余的结果为正数或者0,如果%左边的操作数为负数,则取余的结果为负数或者0

如:

13%2   //余1

13% -2  //余1

-13%2   //余-1

-13%-2  //余-1

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121248.html

(0)
上一篇 2025-10-24 19:20
下一篇 2025-10-24 19:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信