Modulo-Operator in C
-
Verwendung des Modulo-Operators
%
zur Berechnung des Rests bei der Division in C -
Verwendung des
%
Modulo-Operators zur Implementierung einer Schaltjahrüberprüfungsfunktion in C -
Verwenden Sie den Modulo-Operator
%
, um Zufallszahlen im gegebenen Ganzzahlbereich in C zu generieren
In diesem Artikel werden mehrere Methoden zur Verwendung des Modulo-Operators in C vorgestellt.
Verwendung des Modulo-Operators %
zur Berechnung des Rests bei der Division in C
Modulo %
ist einer der binären arithmetischen Operatoren in der Sprache C. Er erzeugt den Rest nach der Division von zwei gegebenen Zahlen. Der Modulo-Operator kann nicht auf Fließkommazahlen wie float
oder double
angewendet werden. Im folgenden Beispielcode zeigen wir den einfachsten möglichen Fall für die Verwendung des %
-Operators, indem wir das Ergebnis von Modulo 9
des gegebenen int
-Arrays ausgeben.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int arr[8] = {10, 24, 17, 35, 65, 89, 55, 77};
for (int i = 0; i < 8; ++i) {
printf("%d/%d yields the remainder of - %d\n", arr[i], 9, arr[i] % 9);
}
exit(EXIT_SUCCESS);
}
Ausgabe:
10/9 yields the remainder of - 1
24/9 yields the remainder of - 6
17/9 yields the remainder of - 8
35/9 yields the remainder of - 8
65/9 yields the remainder of - 2
89/9 yields the remainder of - 8
55/9 yields the remainder of - 1
77/9 yields the remainder of - 5
Verwendung des %
Modulo-Operators zur Implementierung einer Schaltjahrüberprüfungsfunktion in C
Alternativ können wir den %
-Operator verwenden, um komplexere Funktionen zu implementieren. Der nächste Beispielcode demonstriert die boolesche Funktion isLeapYear
, die prüft, ob das angegebene Jahr ein Schaltjahr ist oder nicht. Beachten Sie, dass ein Jahr als Schaltjahr betrachtet wird, wenn sein Wert durch 4 teilbar ist, aber nicht durch 100 teilbar ist. Außerdem ist es ein Schaltjahr, wenn der Jahreswert durch 400 teilbar ist.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
bool isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;
}
int main(void) {
uint year = 2021;
isLeapYear(year) ? printf("%d is leap\n", year)
: printf("%d is not leap\n", year);
exit(EXIT_SUCCESS);
}
Ausgabe:
2021 is not leap
Verwenden Sie den Modulo-Operator %
, um Zufallszahlen im gegebenen Ganzzahlbereich in C zu generieren
Eine weitere nützliche Funktion des Modulo-Operators ist die Begrenzung der Obergrenze von Zahlen bei der Zufallszahlengenerierung. Nehmen wir nämlich an, wir haben eine Funktion, die eine zufällige ganze Zahl erzeugt. In diesem Fall können wir den Rest der Division zwischen der zurückgegebenen Zahl und dem Wert nehmen, den wir als Maximum benötigen (im folgenden Beispiel als Makro MAX
definiert). Beachten Sie, dass die Verwendung der Funktionen srand
und rand
zur Erzeugung von Zufallszahlen keine robuste Methode ist, und Anwendungen, die qualitativ hochwertige Zufallszahlen benötigen, sollten andere Möglichkeiten nutzen.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COUNT 10
#define MAX 100
int main(void) {
srand(time(NULL));
for (int i = 0; i < COUNT; i++) {
printf("%d, ", rand() % MAX);
}
printf("\b\b \n");
exit(EXIT_SUCCESS);
}
Ausgabe:
3, 76, 74, 93, 51, 65, 76, 31, 61, 97
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook