C语言中关于求模的问题。 C语言当中的模运算

作者&投稿:陈没牧 (若有异议请与网页底部的电邮联系)
这个程序很简单,下面我们来一步一步看
char s1[5]="ABCD",s2[5]; 定义了两个字符数组,其中一个赋值为ABCD
然后转到函数fun的分析
其中最关键的一句话就是
for(k=0;k<n;k++) a2[k]=(a1[k]-'A'-3+26)%26+'A';
这句话是遍历指针a1所指向的字符数组,然后对每一位做处理
具体的处理过程如下
a1[k]-'A'-3+26这句话相当于是将a1[k]中字符向前数3位,计算出其相对于字符‘A’的偏移量,其中有一个+26,这个是必须的,因为前一步-3可能出现负数,负数在C程序的求模运算中是得不到我们想要的整数结果的。然而,+26后可能超出了我们的偏移量范围,所以在括号外有一个%26,而后+‘A’将新求出的字符赋值给a2的相应位置。
其实上面这个功能说白了,就是每一位的字符都向前数3位,将'A'~'Z'视为一个圈。所以‘A’向前3为就是X,‘B’向前3为就是Y,依次类推。

所以结果是XYZA

至于你所说的2%3为1,这是不可能的,可能是你看错了。2%3=2
模运算就是取余运算,余数一定要小于除数,并且要大于等于0,所以对于模运算来说,结果是唯一的。
至于程序中,负数对正数取余时会出现负结果的情况,是因为,C语言中对于模运算来说,符号位不参与运算,所以就会得到负数的结果,所以在写程序的时候,我们要对此类情况做判断,并加以特殊处理,就像此例中-3后+26一样,就是为了避免出现负数结果的情况。

2%3结果是2不是1, a2[0]=(a1[0]-'A'-3+26)%26+'A'这句是指23+'A',结果就是x,其他的你自己算下,差不多的

a1[k]-'A'表示每个字母与A的ASCII值之差,k=0,为a2[0]=('A'-'A'-3+26)%26+'A'=X,

这个程序很简单,下面我们来一步一步看
char
s1[5]="ABCD",s2[5];
定义了两个字符数组,其中一个赋值为ABCD
然后转到函数fun的分析
其中最关键的一句话就是
for(k=0;k
评论
0
3
加载更多

楼上的都回答地差不多了

C语言取模~

取模就是求余数

3%5 就是3除以5商0余3
13%3==1 就是13除以3商4余1

  C语言怎中取模运算符是“%”,作用是求两个数相除的余数。
  例如,请看下面这段代码:
x=15/7;

  如果x是一个整数,x的值将为2。然而,如果用取模运算符代替除法运算符"/",得到的结果就不同了: 
 X=15%7;

  这个表达式的结果为15除以7的余数,等于1,这就是说,15除以7得2余1。

  取模运算符通常用来判断一个数是否被另一个数整除。例如,如果要打印字母表中序号为3的倍数的字母,可以使用下面这段代码:
 int x;
  for(x=1; x<=26; x++)
  if((x%3)==0)
  printf("%c"; x+64);
  上例将输出字符串"cfilorux",即字母表中序号为3的倍数的所有字母。

C语言大数取模问题,求解决方案
答:可以使用快速幂算法(pow)来求a^n%c的值 首先,先把里面的除号解决(因为快速幂算法不能计算除法)a^(n+1)-b^(n+1)/(a-b)= (a-b)(a^n+a^(n-1)*b^(n-1)+b^n)

在c语言的求模运算中a%b与b%a结果一样吗?谁是除数谁是被除数?_百度知 ...
答:不一样。之前的是被除数, %之后的是除数 举例:12%11=1 11%12=11 2%1=0 1%2=1

c语言求模运算符的使用方法
答:取模运算符 (%)一个表达式的值除以另一个表达式的值,并返回余数。number1 % number2 参数 number1任何整数表达式。number2任何整数表达式。备注 取模或余数运算符用 number2 除 number1 并只返回余数。 结果中的符号与 number1 的符号相同。 结果值在 0 和 number2 的绝对值之间。示例 下面的...

C语言求模是怎么计算的
答:设a和b是两个int变量,则:a%b==a-a/b*b

什么是c语言里面的取模
答:C语言中的取模运算就是一个取余数的过程。常用%号表示取模运算。可以将取模运算看成取余运算。例如:10÷3=3...1 10除3的余数为1 ,在C语言中10%3的结果也为1。两者在处理的效果上没任何差别。只不过一个是数学运算,一个是编程语言中的一种运算方式。取模运算常用在判断素数,判断奇偶数,...

C语言对负数求模
答:首先你的理解就是错误的C或者C++里面对于负数取模是有规则的规则一: 余数和除数同号规则二: |余数| < |被除数|基于这两个规则, (-19) % 26 应该商0余-19

数据结构顺序循环队列中取模(求余)问题,C语言
答:因为是循环队列 所以 完全有可能出现 队头在队尾后面的情况,即R<F 比如 一共10个元素 M=10 先入队9个元素,队头指向最后一个 即9 然后 出队5个元素,队尾指向5 再入队三个元素, 队头指向2 这是队内实际个数为(2-5+10)%10 = 7个 至于为什么要加上 是因为 当F=9 R=5的时候 (9...

c语言怎样算负数取余数,负数取模数?
答:比如-7%5=-2;7%-5=2;-7%-5=-2;负数取余的原理:任何一个整数n都可以表示成n=k*q+r其中0<=|r|<|q|这里的r就是n除以q的余数,即r==n%q例如:-9=(-2)*4+(-1)则-9除以4的余数为-1。求余:取整除后的余数。求模:基本意义和求余相同,不过要求a%b中的b不是负数。

VB语言中先对一个数求余数(MOD)在对一个数求模(/)有什么作用求高手指点...
答:1234 ÷ 100 = 12 ... 34 所以Mod和/结合使用是非常自然的事,一点也不奇怪,一个求商,一个求余数,简单得很。至于在编程中有什么作用,要根据具体情况来看,并没有所谓的“总结性回答”。另外纠正你一点:求模与求余数是同一个概念(Mod的英文原意是求余数,而读音与“模”谐音,所以又叫求...

c语言中“%=”是什么意思?
答:是求模的意思,两边必须是整数类型的,求模常用符号为mod,就是小学学的求余运算符。例如50%23=4,因为余数为4,所以在程序中必须保证两边为整数才是这个意思。类似的还有 +=,-=,*=,/= 等。但是a%=b这种运算的效率,要高于a=a%b这种的效率,因为a%=b是直接在a上做求余运算,a=a%b则...