C :: Aufgabe #58
2 Lösungen
Zahlenausgabe in verschiedenen Schreibweisen
Anfänger - C
von pocki
- 26.11.2014 um 11:53 Uhr
Schreibe ein Programm, welches eine positive Ganzzahl in dezimaler Schreibweise entgegen nimmt.
Gib diese Zahl dann in binärer, oktaler und hexadezimaler Schreibweise, ohne Verwendung der integrierten Formatierungsfunktionen, wieder aus.
Beispiel:
Gib diese Zahl dann in binärer, oktaler und hexadezimaler Schreibweise, ohne Verwendung der integrierten Formatierungsfunktionen, wieder aus.
Beispiel:
Konsolenausgabe:
Zahl eingeben: 365
binär: 101101101
oktal: 555
hexadezimal: 16D
Lösungen:
/********************************************
* numbox.c Zahlenausgabe bin/okt/hex
********************************************/
#include <stdlib.h>
#include <stdio.h>
#include <values.h>
void printval(char *buffer, int len, char *text) {
int p;
printf("%s: ", text);
for (p=len-1; p; p--)
if (buffer[p] != '0')
break;
for (; p>=0; p--)
putchar(buffer[p]);
putchar('\n');
}
int main() {
unsigned mask, num, zahl;
int nibble, pos, shift;
char buffer[32];
// Eingabe
printf("Zahl: ");
scanf("%d", &zahl);
// Binaer
mask = 1;
num = zahl;
for (pos=0,shift=0; shift<INTBITS; shift++) {
buffer[pos++] = '0' + (num&mask);
num >>= 1;
}
buffer[pos] = 0;
printval(buffer, pos, "binär");
// Oktal
mask = 07;
num = zahl;
for (pos=0,shift=0; shift<INTBITS; shift+=3) {
buffer[pos++] = '0' + (num&mask);
num >>= 3;
}
buffer[pos] = 0;
printval(buffer, pos, "oktal");
// Hex
mask = 0xf;
num = zahl;
for (pos=0,shift=0; shift<INTBITS; shift+=4) {
nibble = num&mask;
buffer[pos++] = (nibble > 9) ? 'A'+nibble-10 : '0'+nibble;
num >>= 4;
}
buffer[pos] = 0;
printval(buffer, pos, "hexadezimal");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int zahl, zahl_beginn, i, j;
int binaer[100];
i=0;
printf("Bitte gebe eine Zahl ein welche umgewandelt werden soll: \n");
scanf("%d", &zahl);
fflush(stdin);
zahl_beginn = zahl;
//in binaer umwandeln
do {
binaer[i] = zahl%2;
zahl =zahl/2;
i++;
}while(zahl!=0);
//binaere Zahl ausgeben
printf("\nbinaer: ");
for (j=(i-1);j>=0;j--) {
printf("%d",binaer[j]);
}
printf("\n");
printf("oktal: %O\n",zahl_beginn);
printf("hexadezimal: %X\n", zahl_beginn);
return EXIT_SUCCESS;
}
