Exercicis
de C
per
Jordi Binefa
http://www.binefa.net/
- Escriu el programa OUT3.CPP, que mostri una taula
d’arrels quadrades dels números enters en el
ventall que va des de el 2 al 10. Empra l’arxiu
d’encapçalament MATH.H per importar la
funció sqrt(), que calcula l’arrel quadrada
d’un argument tipus double. Empra els controladors de format
%3.01f i %3.41f per mostrar els números i llurs arrels
quadrades respectivament.
- Escriu el programa IF5.CPP per a resoldre les arrels
d’una equació quadràtica.
L’equació quadràtica és :
A*x^2 + B*x + C = 0
Les arrels de l’equació
quadràtica són :
Root1 = ( -B + sqrt( B^2 – 4*A*C ) ) / (
2* A)
Root2 = ( -B - sqrt( B^2 – 4*A*C ) ) / (
2* A)
Si el terme de l’arrel quadrada
és negatiu, les arrels
són complexes. Si el terme de l’arrel quadrada
és zero, les dos arrels són la
mateixa i són iguals a : -B / (2*A)
- Escriu el programa SWITCH2.CPP que implementa una calculadora
simple de quatre funcions. El programa té que demanar
l’operand i l’operador, i presentar tant el
teclejat com el resultat. Has d’incloure la
revisió d’errors a l’introduïr
l’operand i l’intent de dividir per zero.
- Escriu el programa FOR5.CPP, el qual empra un cicle for per
obtenir i mostrar la suma dels enters senars en el ventall de
l’11 al 121.
- Escriu el programa WHILE2.CPP, que fa servir un cicle while per
obtenir i mostrar la suma dels quadrats dels enters senars en el
ventall de l’11 al 121.
- Escriu el programa DOWHILE2.CPP, que fa servir un cicle do-while
per obtenir i mostrar la suma dels quadrats dels enters senars en el
ventall de l’11 al 121.
- Escriu el programa showCapitals.cpp
que et demana una cadena qualsevol i tan sols treu per pantalla les
majúscules inserides.
- Fes el programa MATRIU1.CPP, que serveix per calcular la
temperatura mitja de n poblacions. Primer de tot el programa et demana
quantes poblacions vols entrar (n). Després et pregunta una
per una (temp[i]=_ ) les temperatures, essent i un número
que va des de 0 a n-1. Finalment el programa calcula la temperatura
mitja i la presenta per pantalla. Suposa que com a màxim
poden haver-hi 20 poblacions.
- Fes el programa MATRIU2.CPP, que serveix per calcular la
temperatura mitja de n poblacions al llarg de la setmana. El
mètode de funcionament es similar al de l’exercici
7, amb la diferència que has de fer servir un array
bidimensional, una dimensió per als dies de la setmana (7
dies) i un altra per a les poblacions. La forma de preguntar les
temperatures serà : temp[i][j]=_, essent i un
número que va des de 0 a n-1 (representa el
número de població) i j varia entre 1 i 7 (dia de
la setmana). Es a dir, primer ens preguntarà temp[0][1],
després temp[0][2] ... fins que arribem a temp[0][7] i
després preguntarà temp[1][0]... fins arribar a
temp[n-1][7]. Al final el programa ens presenta la temperatura mitja
setmanal de cada població i la temperatura mitja total.
- Prova de coneixements assolits fins ara :
- (4
punts) Escriu
exactament el que surt per pantalla a
l’executar el següent programa (sense
ordinador):
#include
<stdio.h>
#include
<conio.h>
#define
TRUE 1
#define
FALSE 0
int
sumaAB(float *A, float *B, float *resultat){
if
( ( (*A)+(*B) ) >= 0
){
(*resultat)
= (*A)+(*B);
return
(TRUE);
}
else
{
return(FALSE);
}
}
void
main(){
float
x,y,z;
int
k;
x=-2.0;
y=5.0;
clrscr();
while(
sumaAB(&x,&y,&z) ){
printf("\n\n
%4.3f + %4.3f = %4.3f",x,y,z);
x
-= 1.0;
}
getch();
}
- (1 punt) Explica, breument
i clar, el funcionament de la rutina sumaAB del problema anterior (sense
ordinador).
- (2 punts) Desenvolupa una funció float
resta2num(float a, float b) que retorni el valor de la resta : a
– b
- (3 punts) Desenvolupa un void
main()
que declari com a
variables locals, a l’inici: float x=7.0, y=2.0,
z;
, i que contingui un bucle que faci :
- Donar a z el valor
de y - x , emprant la rutina resta2num del problema 3.
- Presenta per pantalla
l’operació de la forma: 2.00
- 7.000 =
-5.0000
- Incrementa el valor de x,
sumant-li 1.5
i la condició de
permanència del bucle és que y-x
doni un valor negatiu, suposant que el zero és un
número
positiu.
- (2 punts) Desenvolupa la funció quadrat, de forma que pugui ser cridada
així: quadrat(&result,valor); i que després fent un printf(“\n\n
(%d)^2 = %d”,valor,result); es visualitzi que el valor de result és el quadrat de valor (Per desenvolupar el quadrat
pensa en que x^2 = x*x).
- Tenim el següent codi :
void
preguntaCadena(char *c){
printf("\n\nInsereix cadena :
");
captaCadena(c);
printf("\n\n");
}
i veiem que si void
captaCadena(char *s) fem servir un scanf(“%s”,s);
no podem inserir espais.
·
Desenvolupa void
captaCadena(char *s) amb la funció getche();
per permetre inserir
espais.
·
Fes la
funció int esMajuscula(char car); que
retorna un 1 si car és majúscula i
0 si és qualsevol altre caracter.
·
Desenvolupa
void treuMajuscules(char *ent, char *sort); que capta una
cadena qualsevol
a ent i copia a sort el mateix
contingut però amb les majúscules
convertides a minúscules.
·
Modifica void
treuMajuscules(char *ent, char *sort); per int
treuMajuscules(char *ent,
char *sort); que retorna un 1 si la cadena ent
i sort son
diferents (és a dir, si a ent hi havia alguna
majúscula).
·
Fes un void
main() que demostri com funcionen les rutines desenvolupades.
- Fes el programa escrFitx.cpp
que generi l'arxiu "proves.txt". El programa ha de carregar una cadena
de text a l'arxiu.
- Fes el programa lectFitx.cpp
que faci la lectura de l'arxiu "proves.txt"
- Fes el programa menaDeType0.cpp
que faci la lectura de qualsevol arxiu (una mena de type del DOS)
- Millora el programa anterior, menaDeType.cpp,
comptant les línies que té l’arxiu que
visualitzem
- Fes un programa, escriu.cpp,
que et pregunti el teu nom i edat i ho escrigui a un arxiu anomenat
"first.txt". Un cop enregistrada la informació a l'arxiu fer
una lectura de llur contingut.
- Fent servir l’opció que dona
el MS-DOS de passar arguments a un arxiu. Desenvolupa arguments.exe
per a que funcioni de la següent forma :
![](./index_archivos/image002.jpg)
Nota :
Fixa’t amb l’ordre amb que surt. Es demana aquest
ordre i no un altre.
- El nostre calendari anomenat gregorià,
va ser aprovat per Gregori XIII el 1582. A partir d’aquesta
data existeixen els 29 de Febrer en els anys de traspàs. Com
gairebé tothom sap, són considerats anys de
traspàs o bixestos els que són
múltiples de quatre i que no acaben en dos zeros, i
també els acabats en dos zeros que tenen el nombre que
quedaria, en treure els dos zeros finals, divisible per quatre.
Per això es diu que la data
més crítica d’enguany és el
29/2/2000, un cop superats el 9/9/99 (la cadena 9999 era emprada als
inicis de
la programació com EOF) i el famós efecte Y2K.
- Fes un programa que escrigui el fitxer
traspas.txt on hi siguin tots els anys de traspàs des de el
1492 fins el 2150 inclòs. Per a fer-ho, has
d’emprar la rutina void writeYear(int number, FILE *file) que
rep un número enter i escriu al fitxer traspas.txt els 4
caracters i un ‘\n’ al fitxer que apunta *file.
- Sabent que un any normal té 365 dies,
un de traspàs 366 i que l’1/1/1998 va caure en
dijous (dia 4 de la setmana) fes la rutina int day1January(int year) que retorna quin dia de la
setmana (1..7) va ser l’1 de Gener de l’any que li
passem com a paràmetre. Aquesta rutina en fa servir un altre
: int
numLeapYearsFrom98(int number) que retorna el número
d’anys de traspàs que hi ha entre l’any
que li passem i 1998. Emprar signe, o no, queda al vostre criteri.
- Fes un programa que et pregunti un any i et
generi el fitxer "calend.txt". Per fer això et cal saber que
els mesos que tenen 31 dies són els: 1, 3, 5, 7, 8, 10 i 12.
També has de fer servir la rutina generada al problema 2.
L’estructura del fitxer serà la següent :
La primera línia posarà "ANY xxxx ", a la segona
"MES 1", a la tercera "DL DT DC DJ DV DS DG", les 4 o 5
línies següents hi hauran els números
del dia del mes sota el seu dia de la setmana corresponent, la
següent línia "MES 2",... i així fins
completar tot el calendari.
- Fes un nou programa modificant l’anterior
que et generi el fitxer "calXXXX.txt" essent XXXX les xifres de
l’any entrat. A més que en comptes
d’escriure "MES 1" escrigui "Gener", "MES 2" ho
canviï per "Febrer" i així amb tots els mesos.
- Dissenya un programa que et creï n fitxers
d’un byte. El fitxer a generar serà de
l’estil "fileXXXX.txt", i el byte que tindrà cada
fitxer serà el caracter "A".
- Fes un programa que tradueixi un fitxer "*.txt" a
un "*.mor" (aquest fitxer serà el mateix document "*.txt"
però en codi morse). Com a ajuda per fer aquest programa
podeu accedir al fitxer morse.htm.
- Fes un programa que tradueixi un fitxer "*.mor" a
un "*.txt". Es a dir el contrari del problema anterior.
- Tenim un moble amb N
( p.e. : 30)calaixos on desem els components. Cada calaix
conté la següent informació :
-
component (14 caracters)
-
quantitat (enter)
-
preu (enter)
-
moneda (10 caracters)
- Fes la definició de tipus estructura calaix
- Fes un main amb
variables locals : struct calaix cal
com array de N posicions i int numcalplens, i les funcions : pregNcal, insertaValors, visualitzaValors
El main te que preguntar el
número de calaixos plens mitjançant pregNcal dient quin és llur
màxim
possible i retornant el valor a numcalplens.
Després s’han
d’insertar les dades mitjançant insertaValors
pasant la referència de cal
i el valor de numcalplens.
I visualitzar els valors mitjançant visualitzaValors.
- Implementa la funció pregNcal
- Implementa la funció insertaValors
- Implementa la funció visualitzaValors
- Fes una calculadora de números
complexes. Demana al principi el valor dels dos operands i
després presenta un menú que permeti sumar,
restar, multiplicar, dividir i reintroduir els valors als dos operands.
Com a suggerència baixat menuCompl.zip
i extreu l’arxiu executable per veure com funciona el
programa que es demana.
Més
exercicis i enllaços
interessants :