Příklady v jazyku C – část 3

19
Příklady v jazyku C – část 3

description

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 #include int main() { int i, j; float f; i = 5, j = 2; /* pouziti operatoru carky */ - PowerPoint PPT Presentation

Transcript of Příklady v jazyku C – část 3

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. 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:

i=5;printf("%d\n", i == 8);

printf("%d\n", i = 8); printf("%d\n", i == 8);

#include <stdio.h>#include <stdlib.h>int main(){

i=5;printf("%d\n", i == 8);

printf("%d\n", i = 8); printf("%d\n", i == 8); 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"); break; case 3: printf("\ntri\n"); break; case 4: printf("\nctyri\n"); break; default: printf("\nNerozpoznané cislo\n"); getchar(); return 0; }

• Napište program ,který spočte počet dní od začátku roku:

#include <stdio.h>#include <stdlib.h>int main(){ int den, mes, rok, a, i, b ; int mesice[12]={ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; printf("Zadej datum ve formatu DD MM RRRR: "); scanf("%d %d %d", &den, &mes, &rok ); printf("Zadane datum: %d.%d.%d\n\n", den, mes, rok); a=0; for (i = 1;i <= (mes-1); i++) a += mesice[i-1]; b=rok%4; /* Korekce přestupného roku */ if (b=0 && mes>2) a++; printf("Pocet dni od zacatku roku do udaneho data: %d",den+a); while(!kbhit()); 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. 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'; else i += c2 - 'A' + 0xA; printf("Dekadicka hodnota je: %d\n", i); getchar(); return 0; }

• 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; }

• Ověřte,že podmínky if( výraz != 0 ) a if ( výraz ) a stejně takif( 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. 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,...}, 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; }