Diskuze: Aritmetický průměr C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Mas pouzito celociselne deleni vysledek bude int,pokud chces aby byl vysledek
float tak c = (a + b) / 2.0;
A pro vypis misto %d pouzij %.01f vypise na jedno des. misto.
V C se výsledný typ ve výrazu řídí určitými pravidly. Existují dva typy typových konverzí - implicitní a explicitní.
Implicitní konverzí se rozumí, že ke konverzi dochází na straně překladače. Explicitní konverze je zase záležitost programátora.
Implicitní konverze se řídí těmito třemi pravidly - podpora celých čísel, podpora typu, konverze typu při přiřazení.
Ve stručnosti:
podpora celých čísel - typy char a short se při vyhodnocování výrazu
rozšiřují na typ int.
podpora typu - všechny typy ve výrazu jsou povýšeny na největší typ
konverze typu při přiřazení - pokud se typ pravé strany v přiřazovacím
příkazu liší od typu na levé straně, je typ pravé strany převeden na typ
na levé straně.
Máme-li např. následující výraz
c = (a + b) / 2.0 kde c je typu float a, b jsou typu int. Pak výraz v závorce je typu int protože oba operandy jsou typu int. Výsledný výraz na pravé straně je typu double, protože konstanta 2.0 je typu double. Nakonec je celý výraz na pravé straně převeden na float neboť výraz na levé straně je typu float.
Proto pokud bychom měli výraz c = (a + b) / 2, tak typ na pravé straně (je typu int) neobsahuje informace o desetiných hodnotách a tedy ani samotný převod na float se tyto hodnoty nezobrazí. Pravá část bude celé číslo, ke kterému budou pouze přidány nuly na desetinných místech po převodu na float. Což není přesný výsledek výrazu.
Explicitní konverzi řídí programátor. Jedná se o tzv. přetypování,
kde typ ve výrazu je dočasně převeden na požadovaný typ.
Syntaxe přetypování je: (typ) proměnná Např. (float)pocet
Zde je ukázka pokročilejšího příkladu na zjištění průměru ze zadaného počtu čísel. Ukazuje způsob použití přetypování.
// Prumer z N cisel
#include <stdio.h>
int main(void) {
unsigned int pocet;
int cislo, soucet = 0;
printf("Zadej pocet cisel: ");
scanf("%u", &pocet);
for (unsigned int i = 0; i < pocet; i++) {
printf("Zadej %u. cislo: ", i + 1);
scanf("%d", &cislo);
soucet += cislo;
}
printf("Prumer ze zadanych cisel je: %.3f\n", soucet / (float)pocet);
return 0;
}
Program očekáváná zadání počtu a hodnot čísel, z niž se bude určovat průměr. Nakonec vypíše hodnotu průměru zaokrouhlenou na tři desetinná čísla.
Zobrazeno 3 zpráv z 3.