// Beispiel WHILE-Schleife: // Buchstaben und Woerter zaehlen #include <stdio.h> void main() { int bc=0, wc=1; char ch='a'; do { puts("Einen Satz eingeben und mit RETURN abschliessen"); while (ch != '\r') { ch = getche(); bc ++; if (ch == ' ') wc++; } printf("\nAnzahl Buchstaben:%i \nAnzahl Woerter: %i ", bc, wc); puts ( "\n\nWollen Sie weitermachen? x -> ENDE"); //ch = getche(); } while ( (ch=getche()) != 'x'); getchar(); }
/////////////////////////////////////////////////////// // Ganzzahlige Teiler berechnen: #include <stdio.h> int main() { int c=1; int d=1; printf("Bitte Zahl eingeben - ich berechne alle Teiler!:"); scanf("%i", &d); printf("Teiler von %i: \n", d); while (c++ < d/2) { if (d%c ==0) { printf("%i : ", c); //printf( "%i = %i * %i \n", d, c, d/c); } } return 0; } /////////////////////////////////////////////////////// // Lebensdauer berechnen #include <stdio.h> #include <string.h> void main() { char vorname[20]; char nachname[20]; int jahr, monat, tag, gesamt; printf("Vorname? "); scanf("%s", vorname); printf("Nachname? "); scanf("%s", nachname); strcat(vorname, nachname); printf("Jahr? "); scanf("%i", &jahr); printf("Monat? "); scanf("%i", &monat); printf("Tag? "); scanf("%i", &tag); gesamt = (2001-jahr)*365; gesamt = gesamt + monat*30; gesamt = gesamt + tag; printf("%s ist %i Tage alt\n", vorname, gesamt); getchar(); }
// Zeichenketten aneinander hängen #include <stdio.h> #include <string.h> void main() { char vorname[20]; char nachname[20]; printf("Vorname? "); scanf("%s", vorname); // gets(vorname); fflush(stdin); printf("\nNachname? "); scanf("%s", nachname); // gets(nachname); strcat(vorname, " "); strcat(vorname, nachname); // printf("\nName: %s", vorname); puts(vorname); getchar(); }
// Zeitumrechnung #include <stdio.h> void main() { int h, m ,s; printf("Umrechnung in Sekunden\n"); printf("Stunden? "); scanf("%i", &h); printf("\nMinuten? "); scanf("%i", &m); printf("\nSekunden? "); scanf("%i", &s); printf("Das sind insgesamt %i Sekunden.\n", h*3600 + m*60 + s); getchar(); }
// Lohnberechnung #include <stdio.h> void main() { double h, m ,s; printf("Wochenlohn-Berechnung\n---------------------\n"); printf("normale Arbeitsstunden? "); scanf("%lf", &h); printf("\nUeberstunden? "); scanf("%lf", &m); printf("\nStundenlohn? "); scanf("%lf", &s); printf("\nWochenlohn: %6.2lf DM\n", h*s + m*(1.25*s)); getchar(); } // Lohnberechnung alternativ: #include <stdio.h> void main() { double h, m ,s, w; printf("Wochenlohn-Berechnung\n---------------------\n"); printf("normale Arbeitsstunden? "); scanf("%lf", &h); printf("\nUeberstunden? "); scanf("%lf", &m); printf("\nStundenlohn? "); scanf("%lf", &s); w = h * s + m * 1.25 * s; printf("\nWochenlohn: %6.2lf DM\n", w); getchar(); }
// Geometrische Berechnungen // Dreieck-Umfang: #include <stdio.h> void main() { double a, b, c, u; printf("Berechnung Dreieck-Umfang\n---------------------\n"); printf("Seite a? "); scanf("%lf", &a); printf("\nSeite b? "); scanf("%lf", &b); printf("\nSeite c? "); scanf("%lf", &c); u = a+b+c; printf("\nUmfang: %6.2lf \n", u); getchar(); } //-------------------------------- // Dreieck-Fläche: #include <stdio.h> void main() { double a, b, f; printf("Berechnung Dreieck-Flaeche\n---------------------\n"); printf("Grundseite ? "); scanf("%lf", &a); printf("\nHoehe? "); scanf("%lf", &b); f = a * b / 2; printf("\nUmfang: %6.2lf \n", f); getchar(); } //-------------------------------- // Kreis (Umfang und Fläche): #include <stdio.h> void main() { double r, f, u; const double pi= 3.14159265358979306235; printf("Kreis-Berechnung (Umfang und Flaeche)\n---------------------\n"); printf("Radius ? "); scanf("%lf", &r); //pi=1; // geht nicht: Konstanten duerfen nicht veraendert werden f = pi * r * r; u = 2 * pi * r; printf("\nUmfang: %6.2lf, Flaeche: %6.2lf \n", u, f); getchar(); } //-------------------------------- // Quersumme einer Zahl berechnen: #include <stdio.h> void main() { int a, b, c, d, e, f, g; printf("Quersumme berechnen (max. 5 Stellen)\n---------------------\n"); printf("Zahl? "); scanf("%i", &a); // a=12345 b = a/10000; // b=1 a = a-b*10000; // a=2345 printf("%i + ",b); c = a/1000; // c=2 a = a-c*1000; // a=345 printf("%i + ",c); d = a/100; // d=3 a = a-d*100; // a=45 printf("%i + ",d); e = a/10; // e=4 a = a-e*10; // a=5 printf("%i + ",e); f = a/1; // f=5 a = a-f*1; // a=0 printf("%i ",f); g = b + c + d + e + f; // g=15 printf("= %i\n", g); getchar(); }
//////////////////////////////// // Quadratzahlen ausgeben 2 4 8 16 3 9 27 81 4 16 64 256 5 25 125 625 6 36 216 1296 7 49 343 2401 8 64 512 4096 9 81 729 6561 10 100 1000 10000 ////////////////// // mit FOR-Schleife: #include void main() { int i, j, k; for( i=2; i<=10; i++ ) { for( j=i, k=0; k < 4 ; j++, k++ ) { printf("%5i ", j); j = ( j * i) -1; // !!!! } printf("\n"); } } //////////////////////// // mit WHILE-Schleife #include void main() { int i, j, k; i = 1; while ( i++ < 10 ) { k = 1; j = i; while ( k++ <= 4 ) { printf("%5i ", j); j = j * i; } printf("\n"); } }
// Zeile zeichenweise einlesen, // umgedreht wieder ausgeben // und Anzahl Zeichen ausgeben #include #include ////////////////////////////// // Loesung mit for-Schleife: void main() { char zeile[80]; char c; int anzahl,n; puts("Bitte Zeile eingeben beendet:"); for(n = 0; n < 80; n++) { zeile[n] = getche(); if(zeile[n]=='\r') break; } // Abschliessendes Stringkennzeichen // anhängen... zeile[n]='\0'; // Anzahl eingegebener Zeichen merken... anzahl = n-1; // String umgekehrt ausgeben... printf("String umgekehrt ausgeben: \n"); for( n = anzahl; n>=0; n--) { printf("%c", zeile[n]); } printf("\nAnzahl eingelesener Zeichen: %i \n", anzahl); } ///////////////////////////// // Loesung mit while-Schleife void main() { char zeile[80]; char c; int anzahl=0, n=0; // Einlesen bis puts("Bitte Zeile eingeben beendet:"); while ( (c = getche()) != '\r') { zeile[n] = c; n++; } // Abschliessendes Stringkennzeichen // anhängen... zeile[n]='\0'; // Anzahl eingegebener Zeichen merken... anzahl = n; n--; // String umgekehrt ausgeben... printf("\nString umgekehrt ausgeben: \n"); while ( n >= 0 ) { printf("%c", zeile[n]); n--; } // Anzahl eingelesener zeichen ausgeben... printf("\nAnzahl eingelesener Zeichen: %i \n", anzahl); } ///////////////////////////// // Loesung mit while-Schleife void main() { char zeile[80]; int anzahl=0, n=0; // Einlesen bis ... puts("Bitte Zeile eingeben beendet:"); while ( (zeile[n++] = getche()) != '\r' && n < 80 ); // Abschliessendes Stringkennzeichen // anhängen... zeile[n]='\0'; // Anzahl eingegebener Zeichen merken... anzahl = (n -= 1); // String umgekehrt ausgeben... printf("\nString umgekehrt ausgeben: \n"); while ( n >= 0 ) { printf("%c", zeile[n--]); } // Anzahl eingelesener zeichen ausgeben... printf("\nAnzahl eingelesener Zeichen: %i \n", anzahl); getchar(); }
// Eingabekontrolle // Nur Buchstaben erlaubt: #include #include // wg. getch() void main() { unsigned char c; // unsigned char: wegen öüä... printf("Nur Buchstaben werden akzeptiert! \n"); printf("Buchstabe: ASCII-Wert\n---------------------\n"); while((c = getch()) != '\r') { // beendet if (c >= '0' && c <= '9') { printf("%c ist eine Ziffer! \n",c); continue; } printf("%c: %i \n", c,c); } }
////////////////////////// // Steuerung des // Bildschirmcursors // mit Cursortasten #include #include #define C_LINKS 75 #define C_RECHTS 77 #define C_HOCH 72 #define C_RUNTER 80 #define HORIZ 205 #define VERTI 186 void main() { char ch, ch1='x'; // int x=40, y=12; // Anfang int x1=6, y1=9; // Ziel int schritte=0; // Anzahl Schritte bis zum Ziele clrscr(); // printf("************* Cursor mit Pfeiltasten bewegen ******************"); gotoxy(x1, y1); putchar(ch1); gotoxy(x, y); // while ( getch() == 0 ) { switch( getch() ) { case C_LINKS : x--; ch=HORIZ; break; case C_RECHTS : x++; ch=HORIZ; break; case C_HOCH : y--; ch=VERTI; break; case C_RUNTER : y++; ch=VERTI; break; } x = x > 79 ? 78 :x; x = x < 1 ? 2 :x; y = y > 25 ? 24 :y; y = y < 2 ? 3 :y; schritte++; gotoxy(x, y); // putch(ch); // if((x==x1) && (y==y1)) printf("\t Getroffen!\a %i Schritte",schritte); } }
// Sortieren // BUBBLE.C Ganze Zahlen mit "Bubble-Sort" sortieren. #include #define MAX 100 /* Maximale Anzahl */ #define CLS printf("\033[2J") #define LOCATE(z,s) printf("\033[%d;%dH", z, s) long zahl[MAX]; /* Zur Speicherung der Zahlen */ int main() { int i, anzahl; /* Index und aktuelle Anzahl */ int sortiert = 0; /* Merker, ob Zahlen sortiert */ long hilf; /* Hilfsvariable beim Tauschen */ CLS; LOCATE(2,20); printf("------- Ganze Zahlen sortieren -------"); printf("\n\nBitte geben Sie bis zu 100 ganze Zahlen ein:" "\n(Abbruch durch ungltige Eingabe, z.B. q)\n\n"); /* --- Zahlen einlesen: --- */ for( i = 0 ; i < MAX && scanf("%ld", zahl+i) == 1 ; ++i) ; anzahl = i; /* --- Zahlen sortieren: --- */ while(!sortiert) /* Solange die Zahlen noch */ { /* nicht sortiert sind. */ sortiert = 1; for( i = 1 ; i < anzahl ; ++i) /* Benachbarte Zahlen */ if( zahl[i-1] > zahl[i]) /* vertauschen. */ { sortiert = 0; hilf = zahl[i]; /* Tauschen */ zahl[i] = zahl[i-1]; zahl[i-1] = hilf; } } /* --- Zahlen sortiert ausgeben: --- */ printf("\n\nDie Zahlen sortiert:\n\n"); for( i = 0 ; i < anzahl ; ++i ) printf("%10ld", zahl[i] ); printf("\n\n"); return 0; } ////////////////////////////////////// // STRUCT-Vektor anlegen // mit Werten füllen, // sortieren mit // BUBBLE- SORT #include #include #define MAX 5 void main() { // ------ Definition des structs struct student { char vorname[20]; // 20 Bytes char nachname[20];// 20 Bytes int matrikel; // 4 Bytes } ; int i; int sortiert; // 0 -> unsortiert, 1 -> sortiert int vergleich; struct student st[MAX]; // Vektor von Structs struct student temp; // Hilfs-struct für Tausch beim Sortieren // Kontrollausgabe struct student printf("Groesse des structs: %i Bytes\n", sizeof(struct student)); printf("Groesse des struct-Vektors: %i Bytes\n", sizeof(st)); printf("Vektor hat %i Elemente \n\n", sizeof(st)/sizeof(struct student)); // Eingabe der Daten ---------------------------------------- printf("Bitte Daten eingeben:\n\n"); for (i=0; i < MAX; i++) { printf("%i. Student \nMatrikelnr.: ", i+1); scanf("%i",&(st[i].matrikel)); fflush(stdin); printf("Vorname: "); //scanf("%s",st[i].vorname); gets(st[i].vorname); printf("Nachname: "); gets(st[i].nachname); puts("\n"); } // struct-Vektor sortieren nach Matrikelnummer : while (sortiert == 0) { // solange Vektor unsortiert sortiert = 1; // Vorgabe: Vektor sortiert // Vektor elementweise durchlaufen for(i = 1; i < MAX; i++) { // wenn die Matrikelnr dieses Elements des struct-Vektors // kleiner ist als die des vorhergehenden Elements: tauschen ! vergleich = strcmp(st[i].nachname, st[i-1].nachname); if(vergleich < 0) { temp = st[ i ]; st[ i ] = st[i - 1]; st[ i - 1 ] = temp; sortiert = 0; // heisst: in diesem Durchlauf hat // ein Tausch stattgefunden } } } // Ausgabe der Daten for (i=0; i < MAX; i++) { printf("MatrikelNr.: %i \n" " %s %s \n", st[i].matrikel, st[i].vorname, st[i].nachname); } getchar(); } //---------------------------------------------------------- ////////////////////////////////////// // STRUCT-Vektor Studenten anlegen, // Daten einlesen, // nach Nachname sortieren // (BUBBLE-SORT) // mit Normalisierung, // bei Gleichheit nach Vorname sortieren // wenn wieder gleich: löschen // Gruppe 7401, Misch 1/2002 #include #include #define MAX 2 // Groesse des Vektors (Anzahl struct-Elemente) #define KLEINBUCHSTABE 90 #define DIFF 32 // ASCII-Differenz zwischen Groß und Kleinbuchstaben // Protoypen der Funktionen: void eingabe(); void sortieren(); void ausgabe(); // Globale Datendeklarationen --------------------- // SYNTAX: typedef datentyp NEUERNAME; typedef struct student { char vorname[20]; // 20 Bytes char nachname[20]; // 20 Bytes int matrikel; // 4 Bytes } STUDENT ; // STUDENT ist nun der Name für // den Datentyp STUDENT st[MAX]; // Vektor von STUDENTen STUDENT temp; // Hilfs-STUDENT für Tausch beim Sortieren STUDENT leer; // Leer-STUDENT zum schnellen Löschen // Globale Variablen -------------------------------- // int anzahl; // Anzahl der eingelesen STUDENTEN im Vektor, kommt später... ////////////////////////////////////////////////////////////////////////// void main() { // Kontrollausgabe des Vektors STUDENT[MAX] printf("Groesse eines STUDENTen: %i Bytes\n", sizeof(STUDENT)); printf("struct-Vektor hat %i Elemente \n", sizeof(st)/sizeof(STUDENT)); printf("Groesse des struct-Vektors: %i Bytes\n\n", sizeof(st)); // Eingabe der Daten eingabe(); // Sortieren der Daten sortieren(); // Ausgabe der Daten ausgabe(); } //////////////////////////////////////////////////////////////////// // // FUNKTIONEN void eingabe() { int i=0; printf("Bitte Studenten-Daten eingeben:\n\n"); for (i=0; i < MAX; i++) { printf("\n%i. Student \nMatrikelnr.: ", i+1); scanf("%i",&(st[i].matrikel)); fflush(stdin); printf("Vorname: "); gets(st[i].vorname); printf("Nachname: "); gets(st[i].nachname); // Strings normalisieren: 1.Zeichen groß, alle anderen klein /* if( st[i].vorname[0] > KLEINBUCHSTABE ) st[i].vorname[0] -= DIFF; if( st[i].nachname[0] > KLEINBUCHSTABE ) st[i].nachname[0] -= DIFF; */ // oder: st[i].vorname[0] = st[i].vorname[0] > KLEINBUCHSTABE ? st[i].vorname[0] -=DIFF : st[i].vorname[0] ; st[i].vorname[0] = st[i].vorname[0] > KLEINBUCHSTABE ? st[i].vorname[0] -=DIFF : st[i].vorname[0] ; } } ///////////////////////////////////////// // struct-Vektor sortieren nach Nachname void sortieren() { int i; int sortiert=0; // 0 -> unsortiert, 1 -> sortiert int vergleich; // Resultat des Stringvergleichs strcpy(leer.vorname, ""); // Leer-STUDENT initialisieren strcpy(leer.nachname, ""); leer.matrikel=0; // if(st[0]==st[1]) puts("GLEICH") ; // geht leider nicht !!! while (sortiert == 0) { // solange Vektor unsortiert sortiert = 1; // Vorgabe: Vektor sortiert // Vektor elementweise durchlaufen // und sortieren for(i = 1; i < MAX; i++) { // Nachname benachbarter Elemente (structs) vergleichen vergleich = strcmp(st[i].nachname, st[i-1].nachname); // Wenn Nachname dieses Elements des struct-Vektors // "kleiner" als der des vorhergehenden Elements if(vergleich < 0) { // dann Elemente tauschen temp = st[ i ]; st[ i ] = st[i - 1]; st[ i - 1 ] = temp; sortiert = 0; // heisst: in diesem Durchlauf hat // ein Tausch stattgefunden } if (vergleich == 0) { // Wenn Nachnamen gleich, // dann nach Vornamen sortieren vergleich = strcmp(st[i].vorname, st[i-1].vorname); if(vergleich < 0) { temp = st[ i ]; st[ i ] = st[i - 1]; st[ i - 1 ] = temp; sortiert = 0; } if(vergleich == 0) { // wenn vor- und Nachname gleich: // struct löschen // Aber ACHTUNG: Datenverlust st[i] = leer; sortiert=0; } } } } } ///////////////////////////////////////////// // Ausgabe void ausgabe() { int i; puts("\n------------------------------\n"); puts("Sortiert nach Nachnamen:\n"); for (i=0; i < MAX; i++) { if( st[i].matrikel > 0 ) // gelöschte Structs nicht darstellen printf("MatrikelNr.: %i \n" " %s %s \n", st[i].matrikel, st[i].vorname, st[i].nachname); } getchar(); }