Exercicis de C

per Jordi Binefa

http://www.binefa.net/

  1. 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.
  2. 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)

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Escriu el programa showCapitals.cpp que et demana una cadena qualsevol i tan sols treu per pantalla les majúscules inserides.
  6. 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.
  7. 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.
  8. Prova de coneixements assolits fins ara :

#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();

}

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

    1. (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).
  1. 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.

  1. Fes el programa escrFitx.cpp que generi l'arxiu "proves.txt". El programa ha de carregar una cadena de text a l'arxiu.
  2. Fes el programa lectFitx.cpp que faci la lectura de l'arxiu "proves.txt"
  3. Fes el programa menaDeType0.cpp que faci la lectura de qualsevol arxiu (una mena de type del DOS)
  4. Millora el programa anterior, menaDeType.cpp, comptant les línies que té l’arxiu que visualitzem
  5. 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.
  6. 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 :

 

Nota : Fixa’t amb l’ordre amb que surt. Es demana aquest ordre i no un altre.

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

    1. 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.
    2. 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.
    3. 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.
    4. 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.
  1. 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".
  2. 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.
  3. Fes un programa que tradueixi un fitxer "*.mor" a un "*.txt". Es a dir el contrari del problema anterior.
  4. 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)

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.

    1. Implementa la funció pregNcal
    2. Implementa la funció insertaValors
    3. Implementa la funció visualitzaValors
  1. 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 :

Creative Commons License
Aquesta obra està subjecta a una Llicència de Creative Commons.