Příklady v jazyku C – část 3
Upravte pomocí explicitní typové konverze dělení pro i=5 a j=2 podíl f=i / j tak, aby výsledek podílu byl 0,5 : #include <stdio.h> #include <stdlib.h> int main() { int i, j; float f; i = 5, j = 2; /* pouziti operatoru carky */ f = (float) i / j; printf("Typova konverze - 1. moznost: %f\n", f); f = i / (float) j; printf("Typova konverze - 2. moznost: %f\n", f); f = (float) i / (float) j; printf("Typova konverze - 3. moznost: %f\n", f); f = (float) (i / j); printf("Explicitni typova konverze - chybny zpusob: %f\n", f); f = i / j; printf("Implicitni typova konverze - chybny zpusob: %f\n", f); system("PAUSE"); }
Formát čísel a typová konverze Formát čísel a typová konverze. Jaké budou výsledky zobrazení a číselné hodnoty ? #include <stdio.h> #include <stdlib.h> int main(void) { float v,y=25; int x; printf("%d\n\n",5/2); v=(float)5/2; x=y/4; printf("%10.2f\n",v); printf("%010.2f\n",v); printf("%+10.2f\n",v); printf("%-10.2f\n",v); printf("%e\n",v); printf("%g\n\n",v); printf("%d\n",5%2); printf("%d\n",x); printf("%d\n",4/2); printf("%d\n",4%2); system("PAUSE"); return 0; }
Napište program , ve kterém budou příkazy a zdůvodněte dosažené výsledky: printf("%d\n", i == 8); printf("%d\n", i = 8); #include <stdio.h> #include <stdlib.h> int main() { system("PAUSE"); return 0; }
Napište program , ve kterém zobrazíte velikost proměnných typů int, short int, long int, long long int, float, double, long double: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("%d\n\n",sizeof(int)); printf("%d\n\n",sizeof(short int)); printf("%d\n\n",sizeof(long int)); printf("%d\n\n",sizeof(long long int)); printf("%d\n\n",sizeof(float)); printf("%d\n\n",sizeof(double)); printf("%d\n\n",sizeof(long double)); system("PAUSE"); return 0; }
Napište program , který přečte (scanf) 2 celá čísla 5 a 8 a pomocí ternálního operátoru ( ? : ) vytiskne: Menší číslo: 5 Větší číslo: 8 #include <stdio.h> #include <stdlib.h> int main() { int i, j; printf("Zadej dve cela cisla: "); scanf("%d %d", &i, &j); printf("Mensi cislo: %d\n", (i < j) ? i : j); printf("Vetsi cislo: %d\n", (i > j) ? i : j); system("PAUSE"); }
Napište program , který ověří činnost příkazu skoku “goto” #include <stdio.h> #include <stdlib.h> int main(void) { goto nav1; printf("Toto se nevytiskne"); nav1: printf("Toto se vytiskne\n\n"); system("PAUSE"); return 0; }
Napište program , který s pomocí příkazu skoku “goto” a podmíněného příkazu if vytiskne čísla od 1 do 10. #include <stdio.h> #include <stdlib.h> int main(void) { int i; i = 1; znovu: printf("%d ", i); i++; if(i<10) goto znovu; system("PAUSE"); return 0; }
Napište program ,který přečte číslo mezi 1 až 4 a vypíše toto číslo slovně. Použijte switch příkaz. Pokud bude číslo mimo zadaný interval, napíše text "Nerozpoznané číslo ". #include <stdio.h> int main(void) { int i; printf("Zadej cislo mezi 1 a 4: "); scanf("%d", &i); switch(i) { case 1: printf("\njedna\n"); break; case 2: printf("\ndva\n"); case 3: printf("\ntri\n"); case 4: printf("\nctyri\n"); default: printf("\nNerozpoznané cislo\n"); getchar(); return 0; }
Napište program ,který spočte počet dní mezi dvěma datumy. #include <stdio.h> int main(void) { int y1,y2,m1,m2,d1,d2,c1,c2,l1,l2,b,s,p,i; int fak1,fak2; int m[12]; m[0] = 31; m[1] = 28; m[2] = 31; m[3] = 30; m[4] = 31; m[5] = 30; m[6] = 31; m[7] = 31; m[8] = 30; m[9] = 31; m[10]= 30; m[11]= 31; printf("\n\nZadej prvni datum DD MM RRRR: "); scanf("%d %d %d",&d1,&m1,&y1); printf("\n\nZadej druhy datum DD MM RRRR: "); scanf("%d %d %d",&d2,&m2,&y2); c1=0; for (i=0;i<=m1-1-1;i++) c1=c1+m[i]; /* spocitani dnu v roce od zac.roku v poc.roce */ if((y1%4==0)&&(m1>2)) c1=c1+1; /* osetreni prestupneho roku v pocatecnim roce */ l1=c1+d1; c2=0; for (i=0;i<=m2-1-1;i++) c2=c2+m[i]; /* spocitani dnu v roce od zacatku roku v koncovem roce */ if((y2%4==0)&&(m2>2)) c2=c2+1; /* osetreni prestupneho roku v koncovem roce */ l2=c2+d2; b=(y2-y1)/4; /* pocet prestupnich roku */ s=(y2-y1)*365+b; /* pocet dnu v letech mezi pocatecnim a koncovym rokem */ p=s+l2-l1; printf("Pocet dni mezi temito datumy = %d \n\n",p); getchar(); return 0; }
Napište program , který přečte 2 znaky z rozsahu 0 až 9 nebo A až F Napište program , který přečte 2 znaky z rozsahu 0 až 9 nebo A až F. Tyto 2 znaky považujte za 1 hexadecimální číslo a to pak vypište dekadicky. #include <stdio.h> int main(void) { int c1, c2, i; printf("Zadejte hexadecimalni cislo (00 az FF): "); c1 = getchar(); c2 = getchar(); if (c1 >= '0' && c1 <= '9') i = 16 * (c1 - '0'); else /* predpokladame, ze je cislo zadane velkymi pismeny a ze je v povolenem rozsahu */ i = 16 * (c1 - 'A' + 0xA); if (c2 >= '0' && c2 <= '9') i += c2 - '0'; i += c2 - 'A' + 0xA; printf("Dekadicka hodnota je: %d\n", i); getchar(); return 0; }
K rozhodnutí použijte podmíněný příkaz if-else . Přečtěte znak, a není-li to písmeno ani číslice, vytiskněte text “interpunkční znak” , jinak vytiskněte text “alfanumerický znak”. K rozhodnutí použijte podmíněný příkaz if-else . #include <stdio.h> int main(void) { int c; printf("Zadej jeden znak: "); c = getchar(); if (c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') printf("Alfanumericky znak\n"); else printf("Interpunkcni znak\n"); getchar(); return 0; }
#include <stdio.h> Ověřte,že podmínky if( výraz != 0 ) a if ( výraz ) a stejně tak if( výraz == 0 ) a if ( !výraz ) mají stejnou funkci #include <stdio.h> #include <stdlib.h> int main() { int vyraz; printf("Splnene podminky:\n"); /* nulova hodnota */ vyraz = 0; if (vyraz != 0) printf("if (%d != 0)\n", vyraz); if (vyraz) printf("if (%d)\n", vyraz); if (vyraz == 0) printf("if (%d == 0)\n", vyraz); if (!vyraz) printf("if (!%d)\n", vyraz); putchar('\n'); system("PAUSE"); return 0; }
Přečtěte znaky až do “\n“ a spočítejte počet velkých a malých písmen Přečtěte znaky až do “\n“ a spočítejte počet velkých a malých písmen. Ostatní znaky neberte v úvahu. Použijte cyklus while. #include <stdio.h> int main(void) { int c, /* znaky se ctou do int !!! */ mala = 0, /* citac pro mala pismena */ velka = 0; /* citac pro velka pismena */ printf("Zadavej znaky a zadavani ukonci <Enter>\n"); while ((c = getchar()) != '\n') { if (c >= 'A' && c <= 'Z') velka++; if (c >= 'a' && c <= 'z') mala++; } printf("\nBylo precteno:\n %d malych pismen\n %d velkych pismen\n", mala, velka); getchar(); return 0;
Napište program,který přečte n čísel z klávesnice (n se zadá také z klávesnice).Pro každý vstup vypište: Zadej 1. číslo. Z načtených čísel určete, kolik jich leží v intervalu <25;38>. Použijte cyklus for. #include <stdio.h> int main(void) { int n, /* pocet cisel celkem */ v_interv = 0, /* pocet cisel v intervalu */ i, j; printf("Zadej pocet cisel: "); scanf("%d", &n); for (i = 1; i <= n; i++) { printf("Zadej %d. cislo: ", i); scanf("%d", &j); if (j >= 25 && j <= 38) v_interv++; } printf("\nBylo precteno %d cisel v intervalu <25, 38>\n", v_interv); getchar(); return 0;
Napište program,který vypočte faktoriál. Použijte typ long int #include <stdio.h> int main(void) {long int n, /* stupen faktorialu */ fakt = 1, /* hodnota faktorialu */ i; printf("Zadej stupen faktorialu: "); scanf("%ld", &n); for (i = 2; i <= n; i++) { fakt *= i; } printf("\nFaktorial cisla %ld je %ld\n", n, fakt); getchar(); return 0;
Napište program,který vypisuje přirozená čísla – tj. čísla {1,2,3, Napište program,který vypisuje přirozená čísla – tj. čísla {1,2,3,...}, které nabývá proměnná i<20 (pomocí příkazu for). Vykoušejte příkazy continue (i>=10) a break (i>=15) . #include <stdio.h> int main(void) { int i; printf("\nTest prikazu break a continue\n"); for (i = 1; i < 20; i++) { printf("\n%d ", i); if (i >= 15) { printf("break\n"); break; } if (i >= 10) { printf("continue "); continue; printf("posledni prikaz cyklu for"); getchar(); return 0;
Napište program,který přečte 2 kladná reálná čísla f a g a vypíše všechna sudá čísla v intervalu <f,g>. #include <stdio.h> int main(void) { double f, g; int i, d, /* dolni mez */ h; /* horni mez */ printf("Zadej dve realna kladna cisla: "); scanf("%lf %lf", &f, &g); /* nalezeni horni a dolni meze */ d = (f < g) ? f : g; h = (f >= g) ? f : g; /* zaokrouhleni na nejblizsi vyssi cele sude cislo */ d += (d % 2) ? 1 : 0; for (i = d; i <= h; i += 2) printf("%4d ", i); printf("\n"); getchar(); return 0; }