BPC2
ZÁPOČTOVÝ TEST
PROSÍM ČTĚTE!!!! Příklady jsou zpracovány tak aby bylo možné je odzkoušet v programu Microsoft Visual C++ jako konzolovou aplikaci. Všechny příklady jsou 100% funkční. V červeném rámečku je část programu, která stačí vypsat do testu. Za vzniklé škody nenese autor zodpovědnost!
1. Pokladna na čerpací stanici ukládá do řádků pole float money[3][100] údaje o tom, kolik jednotliví zákazníci zaplatili za natankovanou naftu (31 Kč/l), natural 95 (33 Kč/l) a natural 98 (35 Kč/l). Za hodnotou posledního nákupu je vždy uloženo záporné číslo. Vytvořte program, který vypočítá počet prodaných litrů každého paliva. 5 b. (NENÍ MI ÚPLNĚ JASNÉ ZADÁNÍ – beru v úvahu, že na první řádku je útrata za naftu, na druhém za natural 95 a na třetím za natural 98) #include "stdafx.h" #include "stdio.h" int main( void) { float money[3][100]; float nafta=0, nat95=0, nat98=0; int n=0; money[0][0] money[0][1] money[0][2] money[0][3] money[0][4]
= = = = =
350; 210; 880; 695; -1;
money[1][0] money[1][1] money[1][2] money[1][3] money[1][4]
= = = = =
1350; 1210; 1880; 1695; -1;
money[2][0] money[2][1] money[2][2] money[2][3] money[2][4]
= = = = =
985; 1011; 859; 1244; -1;
while(money[0][n] >= 0){ nafta += money[0][n]; n++; } n=0; while(money[1][n] >= 0){ nat95 += money[1][n]; n++; } n=0; while(money[2][n] >= 0){ nat98 += money[2][n]; n++; } printf("Prodano %5.2f litru nafty. \n", nafta/31); printf("Prodano %5.2f litru naturalu 95. \n", nat95/33); printf("Prodano %5.2f litru naturalu 98. \n", nat98/35); getchar(); return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz
2. Deklarujte stůj vlastní datový typ TVector – pole pěti racionálních čísel. Deklarujte proměnné A a B tohoto typu a v deklarační části je naplňte daty. Vytvořte funkci, která vypočte skalární součin vektorů (a ⋅b + a ⋅b + a ⋅b + …). Výsle-dek násobení vypište 1
1
2
2
3
3
do konzolového okna. 5 b. #include "stdafx.h" #include "stdio.h" typedef float TVector[5]; float soucin(TVector A, TVector B) { int n; float vysl = 0; for(n=0; n<5; n++) { vysl += A[n]*B[n]; } return vysl; } int main( void) { TVector A = {6, 4, 8, 3, 2}; TVector B = {3, 5, 7, 9, 1}; float vysl; vysl = soucin(A, B); printf("Skalarni soucin vektoru A a B je %5.2f", vysl); getchar(); return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz
3. Napište program, který z klávesnice postupně načte dvě celá čísla a, b a jeden znak (+, –, *, /). Vypočítejte odpovídající výraz (a+b, a–b, …) a výsledek vypište do konzolového okna. 5 b. ¨ #include "stdafx.h" #include "stdio.h" int main( void) { char znak = '0'; int a, b; while(znak != 'k'){ printf("\nZadejte prvni cislo: "); scanf("%d", &a); getchar(); printf("\nZadejte druhe cislo: "); scanf("%d", &b); getchar(); printf("\nZadejte operaci(+,-,*,/,k-konec): "); scanf("%c", &znak); getchar(); switch(znak) { case '+': printf("\nVysledek break; case '-': printf("\nVysledek break; case '*': printf("\nVysledek break; case '/': printf("\nVysledek break; }
scitani je: %d", a+b);
odcitani je: %d", a-b);
nasobeni je: %d", a*b);
deleni je: %d", a/b);
} return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz
4. V poli znaků char words[5][21] každý řádek odpovídá jednomu slovu. Seřaďte slova podle abecedy. V úvahu berte pouze první písmeno slova. 5 b. #include "stdafx.h" #include "stdio.h" int main( void) { int i, n, x; char words[5][21]; char pom; words[3][0] = 'b'; words[3][1] = 'u'; words[3][2] = 'b'; words[3][3] = 'a'; words[3][4] = 'k'; words[3][5] = '\0'; words[1][0] words[1][1] words[1][2] words[1][3] words[1][4]
= = = = =
'a'; 'h'; 'o'; 'j'; '\0';
words[4][0] words[4][1] words[4][2] words[4][3]
= = = =
'c'; 'a'; 'u'; '\0';
words[0][0] words[0][1] words[0][2] words[0][3]
= = = =
'n'; 'i'; 'c'; '\0';
words[2][0] words[2][1] words[2][2] words[2][3] words[2][4]
= = = = =
't'; 'e'; 's'; 't'; '\0';
for(i=0; i<5; i++) { for(n=0; n<4; n++) { if(words[n][0] > words[n+1][0]) { for(x=0; x<21; x++) { pom = words[n][x]; words[n][x] = words[n+1][x]; words[n+1][x] = pom; } } } } for(n=0; n<5; n++) { for(i=0; i<21; i++) { if(words[n][i] != '\0')
Zpracoval Vilém Závodný, http://narrow.ic.cz
{ printf("%c", words[n][i]); }else{ i = 21; } } printf("\n"); } getchar(); return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz
5. Vytvořte funkci s hlavičkou void cz2en(char *cz, char *en), která v řetězci cz (číslo s desetinnou čárkou) najde čárku, nahradí ji tečkou a uloží do řetězce en. Pokud číslo desetinnou čárku neobsahuje, jsou řetězce cz a en totož-né. Funkci cz2en volejte v hlavním programu, výsledek zobrazte v konzolovém okně. 4 b. #include "stdafx.h" #include "stdio.h" #include "string.h" char cz[30] = "12.10"; char en[30]; void cz2en(char *cz, char *en) { int n; for(n=0; n<strlen(cz); n++) { if(cz[n] == ',') { cz[n] = '.'; } } strcpy(en, cz); } int main( void) { cz2en(cz, en); printf("%s", en); getchar(); return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz
6. Deklarujte strukturu t_pivo, která obsahuje řetězec name s názvem piva a racionální proměnnou price s cenou piva. Napište funkci, která vrátí ukazatele na dynamickou proměnnou typu t_pivo a vytvořené paměťové místo naplní daty. Funkci volejte v hlavním programu s parametry Starobrno Medium a 12.50. 4 b. #include #include #include #include
"stdafx.h" "stdio.h" "string.h" "stdlib.h"
typedef struct t_pivo{ char name[20]; float price; }a_pivo; typedef t_pivo* t_pole[20]; t_pivo* add(char *a_name, float a_price) { t_pivo *A; A = (t_pivo*) malloc(sizeof(t_pivo)); strcpy(A->name, a_name); A->price = a_price; return A; } int main( void) { int count=0; t_pole zaznam; zaznam[count++] = add("Starobrno Medium", 12.50); getchar(); return 0; }
Zpracoval Vilém Závodný, http://narrow.ic.cz