C :: Aufgabe #58

2 Lösungen Lösungen öffentlich

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:

Konsolenausgabe:


Zahl eingeben: 365

binär: 101101101
oktal: 555
hexadezimal: 16D

Lösungen:

vote_ok
von devnull (8870 Punkte) - 27.11.2014 um 16:26 Uhr
Quellcode ausblenden C-Code
/********************************************
 * 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;
}
vote_ok
von kathleenw (3600 Punkte) - 09.07.2020 um 11:19 Uhr
Quellcode ausblenden C-Code
#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;
}