Programació en C domingo, 1 de noviembre de 2020 20:07 //Variables #include <stdio.h> int main() { int x; //Enter: nombre sense decimals (5, -5) 16 bits {2^16} float y; //Flotant: nombre amb decimals (9.5) 32 bits {2^32} double z; //Flotant: nombre amb decimals (-10.5) 64 bits {2^64} char n; //Caràcter: caràcter alfanumèric, ASCII (A o 64 és el mateix) x = 5; y = 9.5; z = -10.5; n = 'a'; printf("Valor de x: %d.\n",x); printf("Valor de y: %f.\n",y); printf("Valor de z: %f.\n",z); printf("Valor de n: %c.\n",n); system ("pause"); return 0; } //Asignació de valors i operacions amb variables #include <stdio.h> #define PI 3.1416 // #define: defineix un nombre int main() { float x; int y; x = PI; printf ("Introdueix un valor per y: "); //Printf: Introdueix textos scanf("%i",&y); //Scanf: Introdueix números printf ("El valor de y es: %i\n\n",y); // \n: crea un espai entre linia i linia Fonaments d'informàtica página 1 printf ("El valor de y es: %i\n\n",y); // \n: crea un espai entre linia i linia x = x*y; //Si es fa una operació la variable varia printf("El nou valor de x es: %f\n\n.",x); system("pause"); //System("pause") és necessari per netejar el tabulador return 0; } //Asignació i operacions bàsiques #include<stdio.h> #include<math.h> // <math.h>: Biblioteca d'operacions ampliades int main () { int x,y; x=10; y=2; //Operacions bàsiques x = x+y; // o també x += y; printf("El valor de x+y es: %i\n",x,y); x = x-y; // o també x -= y; printf("El valor de x-y es: %i\n",x,y); x=x*y; // o també x *= y; printf("El valor de x * y es: %i\n",x,y); x=x/y; // o també x /= y; printf("El valor de x/y es: %i\n",x,y); /* x=x%y; //o també x %= y; printf("El valor de x%y es: %i\n",x,y); */ x = pow (y,x); // y^x pow: eleva un nombre dins d'un altre nombre printf("El valor de y elevado a x es: %i \n",x); x = sqrt (x); // x^(1/2) sqrt: fa l'arrel quadrada d'un nombre printf("El valor de l'arrel quadrada de x es: %i\n",x); //Operadors de increment Fonaments d'informàtica página 2 x++; //x++: Suma +1 a una variable printf ("El valor de x++ es: %i\n",x); x--; //x--: Resta -1 a una variable printf ("El valor de x-- es: %i\n",x); system("pause"); return 0; } //Errors comuns //ERRORS COMUNS /* 1. Guardar en .c sempre 2. Ausència del signe al final de cada funció ' ; ' 3. Declarar variables que no existeixen */ //Estructures selectives #include <stdio.h> int main () { int x; x = 5; if (x == 4) { /* if: si és veraç la condició s'executa '=='(igual que) '<'(més petit que) '<=' '>' '>='(més gran o igual que) '!='(diferent que) */ printf("El valor de x es 5 \n"); } else { // else: si la primera condició no es compleix s'executa aquest codi printf("El valor de x no es 5 \n "); Fonaments d'informàtica página 3 } system("pause"); return 0; } //Exercici de condició if/else //Variable entera e iniciamos valor entre 1 y 10, solicitamos número y lo revisamos. #include <stdio.h> int main () { int x,y; x = 4; printf("Encerta el numero x! \nIntrodueix un valor: \n"); scanf("%i",&y); if(x==y) { printf("Has encertat el numero \n"); } else { printf("Intenta-ho una altre vegada \n"); } system("pause"); return 0; } /*Realitzar programa que llegueixi un número enter positiu i escrigui en la sortida estandar si és par o impar */ #include<stdio.h> int main () { int numero; printf("Escriu un numero:"); scanf("%d",&numero); Fonaments d'informàtica página 4 scanf("%d",&numero); if (numero%2==0) { printf("%d es par \n",numero); } else { printf("%d es impar \n",numero); } system("pause"); return 0; } //Exercici if/else anidades /* Realitzar programa que llegueixi un número entre 1 i 4. Desprès retorni el dia de la semana corresponent. */ #include<stdio.h> int main () { int x; printf("Introdueix un numero entre 1 i 4:"); scanf("%d",&x); if(x==1) { printf("Dilluns\n"); } else if (x==2) { printf("Dimarts\n"); } else if(x==3) { printf("Dimecres\n"); } else if(x==4) { printf("Dijous\n"); } else { printf("El numero no esta entre 1 i 4\n"); } Fonaments d'informàtica página 5 } system("pause"); return 0; } //Exercici switch /* Realitzar programa que llegueixi un número entre 1 i 4. Desprès retorni el dia de la semana corresponent. */ #include<stdio.h> int main () { int x; printf("Introdueix un numero entre 1 i 4:"); scanf("%d",&x); switch (x) { //switch: no funciona per float (només enters, int) case 1: printf("Dilluns\n");break; //break: acaba el switch i passa al final case 2: printf("Dimarts\n");break; case 3: printf("Dimecres\n");break; case 4: printf("Dijous\n");break; default: printf ("El numero no esta en el rang establert\n"); //default: si cap dels cases funciona s'executa } system("pause"); return 0; } //Condicions múltiples /*Fer un programa que digui si un número insertat es troba entre 1 i 10 o si no ho està*/ #include <stdio.h> int main () { int y; printf("Introdueix un numero:"); scanf("%i",&y); if (y >= 1 && y <= 10) { //'&&' es igual a 'i', las dos condicions s'han de complir printf("El numero %i es troba entre 1 i 10\n",y); } else { Fonaments d'informàtica página 6 else { printf("El numero %i no es troba entre 1 i 10\n",y); } system("pause"); return 0; } /*Fer un programa que digui si un número insertat es troba entre 1 i 10 o si no ho està*/ #include <stdio.h> int main () { int y; printf("Introdueix un numero:"); scanf("%i",&y); if (y >= 1 || y <= 10) { // '||' es igual a 'o', si una de les condicions es certa s'executa printf("El numero %i es troba entre 1 i 10\n",y); } else { printf("El numero %i no es troba entre 1 i 10\n",y); } system("pause"); return 0; } /*Escriure un programa que llegueixi tres numeros, hores, minuts, segons i torni l'hora que sigui al cap d'un segon, vigilant que sigui l'hora correcte*/ #include <stdio.h> int main () { int h,min,seg; printf("Escriu l'hora:"); scanf("%i",&h); printf("Escriu els minuts:"); scanf("%i",&min); printf("Escriu els segons:"); scanf("%i",&seg); if(h<=23 && min<=59 && seg<=59) { Fonaments d'informàtica página 7 seg += 1; // += s'utilitza per sumar a una variable algún número sense repetir-la if (seg==60) { min+=1; seg= 0; } if(min==60) { h+= 1; min=0; } if(h==24) { h=0; } printf("L'hora es %i:%i:%i\n",h,min,seg); } else { printf("L'hora no es correcte\n"); } system("pause"); return 0; } //Estructures while/for /* Escriu un programa que llegueixi dos números i mostri per pantalla tots els números que estan entre aquests números */ #include <stdio.h> int main () { int x,y,z; printf("Escriu el primer numero:"); scanf("%i",&x); printf("Escriu el segon numero:"); scanf("%i",&y); Fonaments d'informàtica página 8 scanf("%i",&y); //bucle for for (z=x+1;z<y;z++) { printf("%i",z); } printf("\n"); //bucle while z = x+1; while(z<y) { printf("%i",z); z++; // ++ es necesaari per evitar que vagi al infinit el programa } printf("\n"); system("pause"); return 0; } //Exercici for //Realitza un programa que imprimeixi la suma dels numeros pars entre 2 i 1000 #include<stdio.h> int main () { int x; float suma; suma=0; /* for(x=2;x<=2000;x+=2) { suma +=x; } printf("El resultat de la suma es:%f\n",suma); */ x=2; while(x<=2000) { x+=2; suma+=x; } printf("El resultat de la suma es:%f\n",suma); Fonaments d'informàtica página 9 printf("El resultat de la suma es:%f\n",suma); system("pause"); return 0; } //Realitzar programa que calculi mitja de x numeros. #include<stdio.h> int main() { int x,y,i; float suma; printf("Quants numeros vols de mitja aritmetica:"); scanf("%i",&x); i=0; suma=0; while(i<x) { printf("Escriu el %i numero: ",i+1); scanf("%i",&y); suma+=y; i++; } suma = suma/x; printf("La mitjana aritmetica es %f\n",suma); system("pause"); return 0; } //Bucle while /*Fer un bucle que ens pregunti si volem continuar i fins que no escrivim la lletra 's' no s'aturi */ #include<stdio.h> int main() { char x; do{ printf("Adivina la lletra correcte:"); fflush(stdin); //fflush neteja el buffer per evitar errors al compilar scanf("%s",&x); }while(x!='s'); Fonaments d'informàtica página 10 printf("Ho has adivinat! La lletra correcte es s\n"); system("pause"); return 0; } /* Escriu un programa que llegueixi dos números (el segon major que el primer) i mostri per pantalla tots els números que estan entre aquests números. */ #include <stdio.h> int main () { int x,y,z; printf("Escriu el primer numero:"); scanf("%i",&x); do{ printf("Escriu un nombre major a l'anterior:"); scanf("%i",&y); }while (y<x); for (z=x+1;z<y;z++) { printf("%i",z); } printf("\n"); system("pause"); return 0; } //Bucles aninats //Fer les taules de multiplicar del 1 al 9 #include<stdio.h> int main () { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=10;j++) { //bucle dintre de bucle, al arribar a 10, reinicia pero amb 2 printf("%i x %i = %i\n",i,j,i*j); } printf("\n"); system("pause"); //system pause: serveix per anar fent bucle per bucle Fonaments d'informàtica página 11 system("pause"); //system pause: serveix per anar fent bucle per bucle } system("pause"); return 0; } //Fer un cronometre que començi quan es presiona l'espai #include<stdio.h> #include<windows.h> //llibreria int main () { int h,m,s,x; x = 1000; for(h=0;h<24;h++) { for(m=0;m<60;m++) { for(s=0;s<60;s++) { printf("%02i:%02i:%02i\r",h,m,s); // \r sobreescriu la linia del compilador %02 fa que apareixin dos numeros Sleep(x); //para el procés durant un temps determinat (milisegons) } } } system("pause"); return 0; } //Trucs #include <locale.h> int main(int argc, char *argv[]) { setlocale(LC_ALL,""); // "Els accents es mostren correctament! fflush(stdin); // buida el buffer del teclat Podeu buidar la pantalla amb la funció _clrscr();, de la llibreria conio.h. //Funcions Fonaments d'informàtica página 12 #include<stdio.h> int maxima (); //necessari per funcionar int main() { int x,y; x=3; y=5; maxima (x,y); //esta escrita despres pero s'executa ara, s'ha de ficar (x,y) per pasar variables printf("El valor de x es %i i el valor de y es %i a main\n",x,y); system("pause"); return 0; } int maxima (a,b) { // a = x b = y INTERCANVI DE VARIABLES per només aquesta funció, a l'altre x/y no varia printf("El valor de x es %i i el de y es %i a la funcio maxima\n",a,b); a=6; b=8; return 0; } //Calcular el numero major entre dos numeros #include<stdio.h> int maxima (); //necessari per funcionar int main() { int x,y,max; x=3; y=10; max=maxima(x,y); printf("El valor maxim es %i\n",max); system("pause"); return 0; } int maxima (int a,int b) { // a = x b = y INTERCANVI DE VARIABLES per només aquesta funció, a l'altre x/y no varia Fonaments d'informàtica página 13 x/y no varia int aux; if(a<b) { aux=b; } else { aux=a; } return aux; //Nomes es pot retornar un valor, } //Calcular el factorial de 2 numeros amb una funció EL FACTORIAL ES 3!= 3+2+1=6 #include<stdio.h> int funcio (); int main () { int x,y,fact1,fact2; printf("Introdueix dos numeros:"); scanf("%i%i",&x,&y); fact1=funcio(x); fact2=funcio(y); printf("El factorial del numero %i es %i\n",x,fact1); printf("El factorial del numero %i es %i\n",y,fact2); system("pause"); return 0; } int funcio(int a) { // x=a y=b int i,aux; aux=1; for(i=1;i<=a;i++) { aux*=i; } return aux; } Fonaments d'informàtica página 14 //Vectors //Arrays/Vectors: Donarli valor a 10 enters i llegir-los #include<stdio.h> int main() { /* int v[] = {3,5,8,7,9}; //El numero 3 ocupa la posició 0, el 9 la posició 4. int i; for(i=0;i<5;i++) { printf("%i,",v[i]); //El i dintre del vector va variant, v[0] 1 2 3 v[4] } */ int v[10]; int i; for(i=0;i<10;i++) { printf("Donali valor al vector a la posicio %i:",i); //bucle que dona valors al vector scanf("%i",&v[i]); } for(i=0;i<10;i++) { printf("%i,",v[i]); //mostra els valors del bucle } printf("\n"); system("pause"); return 0; } //Vectors amb funcions: Introduir elemnts a un vector amb unaa funció #include<stdio.h> void fun (int a[]); //s'han de colocar el voids de les funcions utilitzades a l'inici void imprimir (int b[]); int main() { int v[2]; fun (v); imprimir (v); Fonaments d'informàtica página 15 imprimir (v); system("pause"); return 0; } void fun(int a[]) { int i; for(i=0;i<2;i++) { printf("Introdueix un valor al vector:"); scanf("%i",&a[i]); } } void imprimir(int b[]) { int i; for(i=0;i<2;i++) { printf("%i,",b[i]); } printf("\n"); } //Ordenar un vector de 10 enters de menor a major mitjançant una funció. #include<stdio.h> void ordenar(int a[]); void mostrar(int b[]); int main() { int v[10] = {6,9,2,0,8,1,7,2,1,4}; ordenar(v); mostrar(v); system("pause"); return 0; } void ordenar(int a[]) { int i,j,aux; for(i=0;i<10;i++) { for(j=i;j<10;j++) { if(a[i]>a[j]){ aux=a[i]; a[i]=a[j]; a[j]=aux; Fonaments d'informàtica página 16 a[j]=aux; } } } } void mostrar(int b[]) { int i; printf("El vector ordenat de menor a major es:"); for(i=0;i<10;i++) { printf("%i",b[i]); } printf("\n"); } //Vectors amb punters: Introdueix valors numerics en un erray mitjançant punters #include<stdio.h> void funcio (int *vec); void lectura (int *vec); int main() { /* int vec[] = {1,2,3}; int i; for(i=0;i<3;i++) { printf("%i",*(vec+i)); //vec[0] ==> *(vec+0) |ÉS EL MATEIX| } */ int vec[3]; funcio (vec); lectura (vec); system("pause"); return 0; } void funcio(int *vec) { int i; for(i=0;i<3;i++) { printf("Introdueix un valor per la posicio %i:",i+1); Fonaments d'informàtica página 17 printf("Introdueix un valor per la posicio %i:",i+1); scanf("%i",(vec+i)); } } void lectura(int *vec) { int i; for(i=0;i<3;i++) { printf("%i,",*(vec+i)); } printf("\n"); } //STRINGS //Strings: Introduir una frase com a cadena de caracters #include<stdio.h> #include<string.h> //llibreria necessaria per comparar strings int main() { /* char vector[12]; //hola que tal\c printf("Introdueix una frase:"); gets(vector); //gets emmagatzema el char, pero sobreescriu i pot crashear el programa printf("%s\n",vector); // fgets(vector,13,stdin); printf("%s\n",vector) */ //compara 2 cadenes de caracters char c1[5]; char c2[5]; printf("Introdueix la primera frase:"); fgets(c1,5,stdin); printf("Introdueix la segona frase:"); fflush(stdin); fgets(c2,5,stdin); Fonaments d'informàtica página 18 fgets(c2,5,stdin); if(strcmp(c1,c2) == 0) { printf("Els dos strings son iguals\n"); } else{ printf("Els dos strings no son iguals\n"); } system("pause"); return 0; } Fonaments d'informàtica página 19