You are on page 1of 19

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Tractament de dades simples


1. Estructura general d'un programa en C
1.1. Directives del preprocessador
1.2. Declaracions globals
1.3. Funci main()
1.4. Funcions definides per l'usuari
1.5. Comentaris

2. Elements bsics del llenguatge


2.1. Identificadors
2.2. Paraules reservades
2.3. Tipus de dades
2.4. Constants
2.4.1. Constants enteres
2.4.2. Constants reals
2.4.3. Constants carcter
2.4.4. Constants cadena
2.5. Variables
2.5.1. Inicialitzaci de les variables
2.5.2. mbit d'una variable

3. Entrades i sortides
3.1. Sortida
3.2. Entrada

4. Operadors i expressions
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.

Operador d'assignaci
Operadors aritmtics
Operadors d'incrementaci i decrementaci
Operadors relacionals
Operadors lgics
Conversions de tipus implcites
Prioritat i associativitat

Apndix: Biblioteca de problemes

Quique Lorente

Pgina 1

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Tractament de dades simples


1. Estructura general d'un programa en C
Un programa en C es composa d'una o ms funcions. Una de les funcions ha de ser obligatriament
main(). Una funci en C s un grup d'instruccions que realitzen una o ms accions. L'estructura
general d'un programa en C inclou:

Directives de preprocessador: #include, #define

Declaracions globals de variables i funcions


La funci main()
Funcions definides per l'usuari
Comentaris del programa: durant tot el programa
/* Programa exemple 1: Benvinguda al C */
#include <stdio.h>
/* Aquest programa imprimeix: Benvingut a la programaci en C */
void main()
{ /* inici del cos de la funci */
printf("Benvingut a la programaci en C\n");
} /* fi de la funci */
/* Programa exemple 2 */
void main()
{
int num; /* sentncia de declaraci */
num=1; /* sentncia d'assignaci */
printf("num val %d.\n", num); /* sentncia d'escriptura */
}

1.1. Directives del preprocessador


El preprocessador en un programa C es pot considerar com un editor de text intelligent que
consta de directives (instruccions al compilador abans de qu es compili el programa principal).
Les dues directives ms usades sn #include i #define.
Totes les directives del preprocessador comencen amb el smbol coixinet (#), que indica al
compilador que llegeixi les directives abans de compilar la resta del programa.
L's ms freqent de les directives s la inclusi d'arxius de capalera (arxiu amb extensi .h que
cont codi font C). Existeixen arxius de capalera estndard que s'utilitzen mpliament, com ara
stdio.h, stdlib.h, math.h, string.h i s'utilitzaran altres arxius de capalera definits per
l'usuari per al disseny estructurat.
La directiva #include indica al compilador que llegeixi l'arxiu de capalera que ve a continuaci i
insereixi el seu contingut en la posici on es troba la directiva. La directiva #include pot adoptar
un del segents formats:
#include <nomarx.h> o b #include "nomarx.h"

Quique Lorente

Pgina 2

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

El primer format significa que els arxius es troben en el directori per defecte include. El segon
format significa que l'arxiu est al directori actual (al mateix lloc que l'arxiu font). Si l'arxiu est en
un altre directori s'ha d'especificar la ruta completa.
L'arxiu de capalera ms freqent s stdio.h. Aquest arxiu proporciona al compilador C la
informaci necessria sobre les funcions de biblioteca que realitzen operacions d'entrada i
sortida. Com quasi tots els programes que escriviu imprimiran informaci en pantalla i llegiran
dades de teclat, necessitaran incloure scanf() i printf().
La directiva #define indica al preprocessador que substitueixi en el programa l'identificador que
el segueix per all que ve a continuaci. Se sol utilitzar per a declarar constants.
#define NUM 20

1.2. Declaracions globals


La zona de declaracions globals est situada abans de la funci main(), i inclou les declaracions
de variables comuns a totes les funcions del programa aix com les declaracions de funcions o
prototips de les funcions definides pel programador.
int nota;
int mitjana(int a, int b);

1.3. Funci main()


Cada programa C t una funci main() que s el punt d'entrada al programa. La seva estructura s:
void main()
{
...
/* bloc de sentncies */
}

A ms de la funci main(), un programa C consta d'una collecci de funcions. Una funci s un


subprograma que torna un nic valor, un conjunt de valors o realitza alguna tasca especfica.
En un programa curt, el programa complet pot incloure's totalment en la funci main(). Un
programa llarg, aix per, t massa codi per incloure'l en aquesta funci. La funci main() en un
programa llarg consta prcticament de cridades a les funcions definides per l'usuari.
void main()
{
obtenirdades();
ordenar();
veure();
}

Les variables i constants globals es declaren i defineixen fora de la definici de les funcions, abans
del main(), mentre que les variables i constants locals es declaren en la capalera del cos de les
funcions. Les sentncies situades en l'interior de les funcions han d'acabar en punt i coma.
1.4. Funcions definides per l'usuari
Un programa C s una collecci de funcions. Tots els programes es construeixen a partir d'una o
ms funcions que s'integren per crear una aplicaci.
Quique Lorente

Pgina 3

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Les funcions definides per l'usuari s'invoquen pel seu nom i els parmetres opcionals que puguin
tenir. Desprs de qu cada funci s cridada, el codi associat amb la funci s'executa i, a
continuaci, es retorna a la funci que ha cridat.
Totes les funcions tenen nom i una llista de valors que reben. Es pot assignar qualsevol nom a una
funci, per generalment es procura que aquest nom descrigui el propsit de la funci. En C, les
funcions requereixen una declaraci o prototip en el programa:
void tracarcorba();

Una declaraci de funci indica al compilador el nom de la funci pel que aquesta ser invocada en
el programa. La paraula reservada void significa que la funci no torna cap valor.
void esvocal(char caracter);

La definici d'una funci s l'estructura de la mateixa:


tipus_retorn nom_funci(llista_de_parmetres)
{
sentncies
}
tipus_retorn
nom_funci
llista_de_parmetres

s el tipus de valor, o void, tornat per la funci


Nom de la funci
Llista de parmetres, o void, passats a la funci. Es
coneixen tamb com arguments de la funci.

C proporciona tamb funcions predefinides que s'anomenen funcions de biblioteca (o llibreries).


Les funcions de biblioteca sn funcions llestes per executar que venen amb el compilador de C.
Requereixen la inclusi de l'arxiu de capalera estndard, com ara stdio.h, math.h, etc.
1.5. Comentaris
Un comentari s qualsevol informaci que s'afegeix a l'arxiu font per proporcionar documentaci
de qualsevol tipus. El compilador ignora els comentaris, no realitza cap tasca concreta. L's de
comentaris s molt recomanable.
Els comentaris en C comencen amb la seqncia /* i acaben amb la seqncia */. Tot el text situat
entre les dues seqncies s un comentari ignorat pel compilador.
/*
Programa:

suma.c

Programador:
Descripci:
Data creaci:

Quique Lorente
Primer programa en C
Octubre 2011

*/
scanf("%d",&x);

Quique Lorente

/*sentncia d'entrada d'un valor enter */

Pgina 4

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

2. Elements bsics del llenguatge


2.1. Identificadors
Un identificador s una combinaci de lletres (a-z, A-Z), nmeros (0-9) i subratllats (_), tenint
com a primer carcter una lletra o un subratllat. Atenent a aquestes normes, els segents
identificadors sn correctes:
comptador
X25
_sortida_75
M_32_A

I els segents identificadors seran incorrectes:


6comptador
X-25
valor total
que?

Comena amb un nmero


El gui no s vlid
Sn dos identificadors, els espais els separen
Les interrogacions no sn vlides

La longitud d'un identificador pot ser qualsevol, si b noms es reconeixen els primers 31 carcters.
Per tant els segents identificadors sn el mateix:
Aquest_identificador_es_de_longitud_38
Aquest_identificador_es_de_longitud_major_de_31

C distingeix les majscules de les minscules. Per tant, els segents 4 identificadors no sn el
mateix: total, TOTAL, Total, ToTal.
A l'hora de definir un identificador no s'han d'escatimar carcters, sempre s millor definir una
variable que va a contenir el radi d'una circumferncia com radi que no com r. Pot costar ms
escriure la paraula radi, per tamb t un nom autoexplicatiu, que permet entendre el programa
amb major facilitat.
2.2. Paraules reservades
Una paraula reservada o paraula clau (keyword o reserved word) t un significat definit pel
llenguatge i noms poden ser utilitzades per al propsit establert pel llenguatge. Per tant, no poden
ser utilitzades com a identificador. En C existeixen les segents paraules clau:
auto
break
case
char
const
continue
default
do

Quique Lorente

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

Pgina 5

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

2.3. Tipus de dades


Els tipus de dades bsics de C sn:
Tipus
char

Significat
carcter

Exemple
'C'

Bytes
1

int

enter

-1024

long

enter llarg

262144

float

real

10.5

double

real de doble precisi

0.00045

void

sense valor

Rang

0..255
-32768..32767
-2147483648..2147483637
3.4*10-38..3.4*1038
1.7*10-308..1.7*10308

NOTA: la grandria en bytes depn del compilador i de la mquina. Per saber-ho exactament es pot utilitzar la funci sizeof()

2.4. Constants
En C existeixen quatre tipus bsics de constants: enteres, reals, carcter i cadena de carcters. Quan
s'utilitza una constant en diversos llocs del programa se sol declarar mitjanant la directiva
#define utilitzant un identificador.
2.4.1.Constants enteres
Sn constants que representen nmeros sense decimals. Es pot posar un signe davant del
nmero, el qual indicar que el nmero s negatiu. Segons la base en qu s'escrigui la constant
tenim tres tipus: decimals (dgits del 0 al 9), octals (dgits del 0 al 7 i sempre comenant per 0) i
hexadecimals (dgits del 0 al 9 i lletres A, B, C, D, E, F, comenant sempre per 0x o 0X).

Decimal:

19, -213, 3

Octal:

023, -0325, -03

Hexadecimal: 0x13, 0Xd5, 0x3


2.4.2.Constants reals

Una constant real comprn una part entera, un punt (forma anglosaxona de representar els
decimals), una part fraccionria, una "e" o una "E" seguida d'un exponent amb signe (potncia de
10).
4.7, -5.65, 5.0, 4E3, -7e-2, 4.8E4, -7.2e-2

s important fer notar que 5 s una constant entera, mentre 5.0 s una constant real. Quan apareix
la lletra "E" s'anomena notaci cientfica, on la lletra "E" substitueix al nmero 10. Aix, el
nmero 4.8 * 104 s el 4.8E4. Les segents constants representen el mateix valor:
0.00075E1, 0.0075, 0.075E-1, 0.75E-2, 75E-4

2.4.3.Constants carcter
Una constant carcter est constituda per un nic carcter entre cometes simples (').
'A', 'c', '?', ' '

Es pot utilitzar el conjunt de carcters ASCII. Cada carcter t associat un valor numric, el qual
tamb val per referenciar al carcter. Per tant, si en C comparem la constant carcter 'A' amb el
Quique Lorente

Pgina 6

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

seu codi ASCII, que s el 65, l'ordinador ens dir que sn iguals. Aix s perqu en realitat el que
s'emmagatzema en memria no s el carcter en s, sin el seu codi corresponent.
Hi ha carcters que no es representar utilitzant el teclat, com ara el carcter sigma (). Com el seu
codi ASCII s el 228, podem assignar a una variable carcter directament el nombre 228 perqu
contingui aquest carcter.
Existeixen alguns carcters no imprimibles o que tenen un significat especial per al C i que poden
ser expressats com seqncies d'escapament. Una seqncia d'escapament s una parella de
carcters que en realitat representen un sol carcter. D'aquests dos carcters, el primer sempre s la
barra invertida \. En la segent taula tenim les seqncies d'escapament ms usades:
Seqncia d'escapament
\n
\r
\t
\b
\f
\\
\"
\0

Significat
nova lnia
retorn de carro
tabulaci horitzontal
espai enrere
salt de pgina
barra invertida
cometa doble
carcter nul

Mnemotcnic
NL
HT
BS
CR
FF
\
"
NULL

Codi ASCII
13 + 10
13
9
8
12
92
34
\0

Podem veure que la seqncia d'escapament '\n' representa el carcter de nova lnia. Aquest
carcter no t un smbol que el representi en pantalla, sin que quan s visualitzat en la pantalla el
que es produeix s un salt de lnia.
Com el carcter barra invertida marca l'inici d'una seqncia d'escapament, per poder-lo expressar,
el que s'ha de fer s escriure dues barres invertides seguides '\\'.
2.4.4.Constants cadena
Una constant de tipus cadena de carcters est constituda per una seqncia de carcters
delimitada per cometes dobles (").
"Cadena de carcters"
"123"
"23 d'abril de 1707"
"El carcter barra invertida: \\"
"Per a posar \" mireu com es fa"

Es pot escriure una cadena en vries lnies, acabant cada lnia amb "\"
"Aix s una cadena\
que t dues lnies"

Tota cadena de carcters acaba amb el carcter NULL (ASCII 0) que colloca automticament el
compilador.
Els programadors principiants en C sovint confonen les cadenes d'un sol carcter amb les
constants carcter. Aix, no s el mateix el carcter 'A' que la cadena de carcters "A", i per tant
no poden intercanviar-se en el seu s. Mentre la primera t un valor numric corresponent, la
cadena no el t i inclou un nul al final.
Quique Lorente

Pgina 7

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

2.5. Variables
Una variable s un identificador que fa referncia a una posici de memria on s possible
emmagatzemar valors d'un cert tipus de dades. Aquest valor pot ser modificat al llarg del programa,
per aix el nom de variable.
Totes les variables han de ser declarades abans de seu usades. s a dir, abans d'usar una variable
s'ha de dir a quin tipus pertany. Aix es fa especificant un tipus, seguit d'una llista de variables.
tipus nom_variable;
int x, y, z;
char a, b;

2.5.1.Inicialitzaci de les variables


S'anomena inicialitzar una variable al fet d'assignar-li un valor al mateix temps que se la declara.
Per tant, es tracta de donar-li un valor inicial a la variable. La forma de fer-ho s posar un signe
igual i el valor desitjat darrere de la declaraci de la variable.
tipus nom_variable = valor;
char resposta = 'S';
int x, y = 10;

2.5.2.mbit d'una variable


Depenent del lloc on es declaren les variables, estes es poden utilitzar en la totalitat del
programa o noms dins d'una funci. La zona d'un programa en qu una variable est activa
s'anomena mbit de la variable.
Les variables poden ser declarades en tres llocs distints:

Dins d'una funci. Se les anomena variables locals, i noms podran ser usades dins de la
funci.
Capalera d'una funci. Aleshores se les anomena parmetres de la funci, i contenen valors
que sn passats en la crida a la funci.
Fora de totes les funcions. Aleshores se les anomena variables globals, i poden ser usades en
totes les funcions que segueixen a la seua declaraci.

Les variables globals s'han d'evitar, ja que ocupen memria durant tota l'execuci del programa i, a
ms, poden ser modificades per error en qualsevol lloc del programa, cosa que dificulta la seua
depuraci.
Tant els parmetres com les variables locals noms existeixen mentre s'est executant la funci, per
tant desprs deixen d'ocupar memria. En conseqncia, podem utilitzar els mateixos identificadors
de variables en diferents funcions.

3. Entrades i sortides
Els programes interactuen amb l'exterior a travs de dades d'entrada o dades de sortida. El
llenguatge C no proporciona directament ordres d'entrada o sortida. Aix per, en la biblioteca de
funcions C trobem aquestes facilitats.
Quique Lorente

Pgina 8

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

3.1. Sortida
La funci ms significativa per a la sortida de dades s la funci printf(), definida en la
biblioteca stdio.h.
printf(cadena de control, llista de variables);

La cadena de control pot contenir b carcters normals o b codis de format que comencen pel
signe %.
Codi de format
%d
%ld
%e
%f
%g
%s
%c
%nmero
.nmero

Significat
enter
enter llarg
real amb notaci exponencial (cientfica)
real amb notaci decimal
real; representaci ms curta, %e o %f
cadena de carcters
carcter
ajustar a l'esquerra
amplitud del camp
amplitud del camp desprs del punt decimal

La llista de variables sn les variables, separades per comes, els valors de les quals es van a
mostrar per la sortida. Hauran d'haver tantes variables en la llista com carcters % hi hagi en la
cadena de control.
Conv recordar l'existncia de les seqncies d'escapament, ja que se solen utilitzar bastant en el
printf().

Exemple:
int i=23; char
c='f';
float x=12.23;
long l=45000;
printf("Enter: %d\nCarcter: %c\nReal: %f\nEnter llarg:%ld", i, c, x, l);

3.2. Entrada
La ms important de les funcions d'entrada de dades des de teclat s scanf(), tamb de la
biblioteca stdio.h. Podrem considerar que esta funci s la inversa de printf().
scanf(cadena de control, llista de variables);

La cadena de control s idntica al cas de printf(). Els parmetres de la funci scanf() s'han de
passar per referncia, s a dir, s'ha de passar la seua adrea de memria perqu puguin ser
modificats. Per a aix es necessita l'operador d'adrea, el prefix &.
printf("Introdueix edat i altura: ");
scanf(" %d %f", &edat, &altura);
printf(Preu de venda al pblic");
scanf(" %f", &preu_venda);

Quique Lorente

Pgina 9

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

A causa del funcionament un poc estrany de la funci scanf(), desprs de la seva utilitzaci
deixa un carcter Enter en la memria que llegeix la segent instrucci de lectura, cosa que
provoca problemes. Per tant, cada vegada que s'utilitzi la funci scanf() conv executar la
instrucci fflush(stdin), que allibera la memoria o b getchar().

4. Operadors i expressions
En els programes C tamb ens trobem amb expressions. Una expressi s una seqncia
d'operacions i operants que especifiquen un clcul.
Ens trobarem amb operadors binaris, com ara el - quan actua com a resta, i operadors unaris, com
ara el com a indicador de signe.
Els operadors tindran una precedncia i una associativitat entre ells, que es pot alterar mitjanant
l's dels operadors parntesis ( i ). En cas de dubte o simplement per facilitar la llegibilitat,
conv utilitzar parntesis.
4.1. Operador d'assignaci
L'operador d'assignaci (=) assigna el valor de l'expressi dreta a la variable situada a la seua
esquerra.
codi = 3467;
coordX = 525;
pi = 3.1416;

Este operador s associatiu per la dreta; aix permet realitzar assignacions mltiples. Esta propietat
permet inicialitzar vries variables amb una sola sentncia:
int a, b, c;
a = b = c = 5;

/* s'assigna 5 a les variables a, b i c */

4.2. Operadors aritmtics


Els operadors aritmtics serveixen per realitzar operacions aritmtiques bsiques. Els operadors
aritmtics C segueixen les regles algebraiques tpiques de jerarquia o prioritat. Estes regles
especifiquen la precedncia de les operacions aritmtiques. Per estes regles, l'expressi 3 + 5
* 2 equival a l'expressi 3 + (5 *2).
Operador
+
*
/
%

Significat
Suma i signe positiu
Resta i signe negatiu
Producte
Divisi entera o divisi real, depenent dels operants
Residu de la divisi entera
Precedncia (major a menor)
+, - (unaris)
*, /, %
+, -

Quique Lorente

Exemple
x + y
b c
x * y
b / 5
b % 5

Associativitat
esquerra dreta
esquerra dreta
esquerra dreta
Pgina 10

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

4.3. Operadors d'incrementaci i decrementaci


Unes de les caracterstiques ms particulars i tils de C sn els operadors d'increment ++ i
decrement --. Estos operadors sumen o resten 1 respectivament a la variable a qu s'apliquen.
Aleshores,
a++;

s igual que
a = a + 1;

Estos operadors tenen la propietat de qu poden utilitzar-se en posici prefixa o en posici


postfixa. El resultat de l'expressi pot ser distint, depenent del context.
Si els operadors ++ i -- estan en posici prefixa, l'operaci d'increment o decrement s'efectua
abans que l'operaci d'assignaci; si els operadors ++ i -- estan en posici postfixa, l'assignaci
s'efectua en primer lloc i la incrementaci o decrementaci a continuaci.
Les sentncies
++n;
n++;

tenen el mateix efecte; aix com


--n;
n--;

Aix per, quan s'utilitzen en expressions com ara


n = 5;
m = ++n; /* incrementa n en 1, 6, i l'assigna a m */
n = 10;
printf("n= %d", --n); /* decrementa n en 1, 9, i el passa a
printf() */

el resultat s distint que si s'utilitzen en posici prefixa.


n = 5;
m = n++; /* assigna n (5) a m, desprs incrementa n en 1 (6) */
n = 10;
printf("n= %d", n--); /* passa n (10) a printf(), desprs decrementa
n (9) */

Per a evitar problemes, conv utilitzar els operadors d'incrementaci i decrementaci sols, sense
mesclar-los en altres expressions.
4.4. Operadors relacionals
Els operadors relacionals permeten realitzar comparacions entre valors. El seu resultat s cert o
fals. C no t tipus de dades lgics per representar els valors cert i fals. En el seu lloc s'utilitza el
tipus int, amb el valor enter 0 que representa a fals i distint de zero a cert.
fals
cert
Quique Lorente

zero
distint de zero
Pgina 11

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Els operadors relacionals s'utilitzen en expressions de la forma


expressi operador_relacional expressi

Els operadors relacionals s'usen normalment en sentncies de selecci o d'iteraci per a comprovar
el valor d'una condici.
Operador
==
!=
>
<
>=
<=

Significat
Igual a
No igual a
Major que
Menor que
Major o igual que
Menor o igual que

Exemple
a==b
a!=b
a>b
a<b
a>=b
a<=b

Un error tpic, fins i tot entre programadors experimentats, s confondre l'operador d'assignaci (=)
amb l'operador d'igualtat (==).
Quan s'utilitzen els operadors en una expressi, l'operador relacional produeix un 0, o un 1,
depenent del resultat de la condici, falsa o certa. Per exemple, si s'escriu
c = 3 < 7;

la variable c es posa a 1, donat que com 3 s menor que 7, aleshores l'operaci < torna un valor
d'1, que s'assigna a c.
Exemple: Si x, a, b i c sn de tipus float, nmero de tipus int, i inicial de tipus char, les
segents expressions sn vlides:
x < 5.75
b * b >= 5.0 * a * c
nmero == 100
inicial != 'M'

Els carcters tamb es comparen utilitzant els codis numrics del codi ASCII.
'A' < 'C' s 1, cert, ja que A s el codi 65 i s menor que el codi 67 de C.
'a' < 'c' s 1, cert: a codi 97, b codi 99.
'b' < 'B' s 0, fals: b codi 98, B codi 66.

Els operadors relacionals tenen menor prioritat que els operadors aritmtics, i associativitat
d'esquerra a dreta. m + 5 <= 2 * n equival a (m + 5) <= (2 * n).
4.5. Operadors lgics
A ms dels operadors matemtics, C t tamb operadors lgics. Estos operadors s'utilitzen amb
expressions per tornar un valor cert (qualsevol enter distint de zero) o un valor fals (0). Els
operadors lgics s'anomenen tamb operadors booleans, en honor de George Boole, creador de
l'lgebra de Boole.
Operador
Significat
!
Negaci
&&
I lgic
||
O lgic
Quique Lorente

Pgina 12

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Les taules de veritat d'estos operadors sn les segents:


a
0
0
1
1

b
0
1
0
1

a && b
0
0
0
1

a || b
0
1
1
1

a
0
1

!a
1
0

La prioritat i associativitat d'estos operadors s la segent:


Prioritat
!
&&
||

Associativitat
esquerra dreta
esquerra dreta
esquerra dreta

4.6. Conversions de tipus implcites


Els tipus de dades bsics poden ser mesclats lliurement en assignacions i expressions. Aleshores es
produeixen conversions de tipus automtiques: els operants de tipus ms baix es converteixen en
els de tipus ms alt.
int i = 12;
double x = 4;
x = x + i;
/* el valor de i es converteix a double abans de la
suma */
x = i/5;
/* primer fa una divisi entera i/5==2, 2 es
converteix a tipus double: 2.0 i s'assigna a x */
x = 4.0;
x = x/5;
/* converteix 5 a tipus double, fa una divisi real:
0.8 i s'assigna a x */
i = x;
/* converteix 0.8 a tipus enter, 0, i s'assigna a i */

4.7. Prioritat i associativitat


La prioritat o precedncia d'operadors determina l'ordre en qu s'apliquen els operadors a un valor.
Prioritat
1
2
3
4
5
6
7
8
9

Operadors
( )
++ -- ! - +
* / %
+ < <= > >=
== !=
&&
||
=

Associativitat
E-D
D-E
E-D
E-D
E-D
E-D
E-D
E-D
D-E

Si dos operadors s'apliquen al mateix operant, l'operador amb major prioritat s'aplica primer.
Quique Lorente

Pgina 13

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Tots el operadors del mateix grup tenen igual prioritat i associativitat.


L'associativitat esquerra-dreta significa aplicar l'operador ms a l'esquerra primer, en
l'associativitat dreta-esquerra s'aplica primer l'operador ms a la dreta.
Els parntesis tenen la mxima prioritat.

Quique Lorente

Pgina 14

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Apndix: Biblioteca de problemes


Estructura general d'un programa
1. Escriviu i executeu un programa que imprimeixi el vostre nom i adrea.
2. Depureu el programa segent:
include <stdio.h>
void main()
{
printf("El llenguatge de programaci C")

Elements bsics del llenguatge


3. Quins dels segents identificadors sn vlids?
a)
b)
c)
d)
e)
f)

g)
h)
i)
j)
k)
l)

n
ProblemaMeu
JocMeu
Joc Meu
write
m&m

_m_m
registre
A B
85 Nombre
AAAAAAAAAA
Nom_Cognoms

m)
n)
o)
p)
q)
r)

Saldo_Actual
92
Universitat
Autnoma
Set 15
* 143Edat

4. Indiqueu les definicions de variables errnies i especifiqueu l'error.


a)
b)
c)
d)

char
char
char
char

char = 'A';
A = 65;
parell = "B";
pin = '7';

e) int ample = 2.5;


f) float mol = 1.5E-7;
g) int long = 745;

5.

Quin tipus de dades bsic s'ha d'utilitzar per a definir variables que continguin els segents
valors:
a)
b)
c)
d)
e)

El nombre d'habitants de Reus


La nota mitjana dels alumnes d'una classe
La lletra ms freqent a l'obra Tirant lo Blanc
La distncia en metres de Valncia a Barcelona
L'edat en anys d'una persona

6. Identifiqueu el tipus i el significat de les segents constants:


a)
b)
c)
d)

7.

'\n'
27
99.44
-2.5E30

Indiqueu quines de les segents dades numriques sn constants vlides en C, especificant el


tipus de dades al que pertanyen. Aix mateix, especifiqueu tamb la base en qu est escrita
cada constant entera vlida.
a.- 0.34
e.- 27,822
i.- 0515

Quique Lorente

b.- 34.2e-12
f.- 87654321
j.- 0x25353

c.- 10101010
g.- O.SE 8
k.- 0XBATA

d.- 0.8E+0.8
h.- -12.8e22
l.- 0x2dab3

Pgina 15

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Entrades i sortides
8. Proveu el segent programa:
#include <stdio.h>
void main()
{
int i = 1234;
char c = 'A';
float x = 123.456;
printf ("%d,%3d,%10d,%-10d,%010d.\n", i, i, i, i, i);
printf ("%c,%3c,%10c,%-10c.\n", c, c, c, c);
printf ("%f,%3f,%10f,%-10f,%010f.\n", x, x, x, x, x);
printf ("%.2f,%10.2f,%e,%g.\n", x, x, x, x);
printf ("Tabulador: \t, cometes: \", tant per cent: %%.\n");
}

9. Un programa en C cont les segents declaracions de variables:


char a='A', b='9' , c='?';

Mostreu la sortida resultant de cadascuna de les segents sentncies, incloent espais i salts de
lnia.
printf("%c %c%% %c\n", a, b, c);
printf("%c%c\t\"%c\"\n", a, b, c);
printf ("%4c %5c %6c\n", a, b, c) ;
printf ("a=%c, b=%-12c, c=%10c\n",a,b,c) ;

10. Un programa en C cont les segents declaracions:


float x= -2.5, y= 0.00003, z= 2500.5;

Mostreu la sortida resultant de cadascuna de les segents sentncies


printf("%f %f %f\n", x, y, z);
printf("%14f %14f %14f\n", x, y, z);
printf ("%15.4f %15.4f %15.4f\n", x, y, z);
printf ("%e %e %e\n", x, y, z);
printf("%15e %12e %20e\n", x, y, z);
printf("%g %g %g\n", x, y, z);
printf ("%10.3e %10.3e %10.3e\n", x, y, z);
printf("%+16f %-16f %016f\n", x, y, z);

Operadors i expressions
11. Determineu el valor de les segents expressions aritmtiques:
a)
b)
c)
d)

15 / 12
24 / 12
123 / 100
200 / 100

e)
f)
g)
h)

15 % 12
24 % 12
123 % 100
200 % 100

12. Quin s el valor de cadascuna de les segents expressions?


a)
b)
c)
d)
e)
f)

15 * 14 3 * 7
4 * 5 * 2
(24 + 2 * 6) / 4
3 / 3 / 3 * 4
3 + 4 * (8 * (4 (9 + 3) / 6))
4 * 3 * 5 + 8 / 3 * 2 5

Quique Lorente

Pgina 16

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

g) 4 - 40 / 5
h) (-5) % (-2)

13. Escriviu les segents expressions com expressions dordinador. La potncia pot fer-se amb la
funci pow(), per exemple (x+y)2==pow(x+y,2).
a)
b)

x
+1
y

e) (a + b)

x+ y
x y

f)

g)

x+
c)

d)

x+

((a + b) 2 ) 2

z
y

xy
1 4x
xy
h)
mn

i)

b
c+d

( x + y)2 (a b)

14. Escriviu el resultat de les segents expressions:


a)
b)
c)
d)
e)
f)

24 % 5
7 / 2 + 2.5
10.8 / 2 + 2
16 / 3 * 2 - 4 * 5 / 2
(4 + 6 ) * 3 + 2 * ( 5.5 - 1 )
22 / 3 + 5.5 * 2 - ( 7 % 2 + ( 6 * 2 ) ) + 7.5 / 2

15. Escriviu el resultat de les segents expressions:


a)
b)
c)
d)
e)
f)

7 >= 5 && 27 == 8
45 <= 7 || ! ( 5 >= 7 )
8 > 8 || 7 == 7 && ! ( 5 < 5 )
4 + 2 < 8 && 24 + 1 == 25 || 0
( 2 * 7 > 5 || 7 / 2 == 3 ) && ( 7 > 25 || ! 1 ) && 27
(8 == 3 + 2) && !(24 > 5) && (7 != 4) || (28 * 5)

16. Escriviu una expressi que indiqui la condici de qu un nmero enter n sigui estrictament
positiu i mltiple de 10 per distint de 500.
17. Donades les variables enteres a, b, c, d, expresseu amb llenguatge C:
Els valors da i b son ambds menors que 17.
Els valors da, b i c sn idntics i distints de d.
Els valors de b i d estan compresos estrictament entre els valors da i c, sabent que a s
inferior a c.
Entre els valors da, b, i c hi ha almenys dos idntics.
Entre els valors da, b i c hi ha dos valors i noms dos idntics.
Entre els valors da, b, i c hi ha com a mxim dos valors idntics.
a s inferior al producte de b per c i agafa un valor pertanyent al conjunt segent:
{3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 23, 24, 25, 26, 27, 28, 29, 34}
a s un nmero parell i est comprs entre dues vegades b i quatre vegades la diferncia c
menys d.
el quocient enter de c entre a s un nmero divisible per tres vegades d.
Quique Lorente

Pgina 17

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

18. Donades les variables enteres europeu, casat, muller i edat i la variable de tipus float saldo
expresseu amb llenguatge C:
europeu s igual a 1 i casat s igual a zero.
europeu s distint de zero, casat s igual a 1 i edat est compresa entre 20 i 30.
saldo s superior a 100.000 o europeu s igual a zero i edat divisible por quatre.
europeu i casat sn iguals a 1 i edat s menor que 30 o europeu s igual a zero i saldo no
s inferior a 250.000.
muller s igual a 1, europeu s igual a zero i saldo est comprs entre 50.000 i 250.000 o
muller s igual a zero, europeu s igual a 1 i edat s superior a 25 i saldo s no negatiu.

Programes. Exercicis bsics


19. Construu un programa que calculi i escrigui el producte, quocient enter i residu de dos
nmeros.
20. Escriviu un programa que solliciti a l'usuari la longitud i amplria d'una habitaci i a
continuaci visualitzi la seua superfcie amb quatre decimals.
21. Escriviu un programa que llegeixi dos enters dins de dos variables, intercanvi els valors de les
dos variables mitjanant sentncies d'assignaci, i a continuaci mostri el resultat.
22. Quins sn els resultats visualitzats pel segent programa, si les dades proporcionades sn 5 i 8?
#include <stdio.h>
#define M 6
void main()
{
int a, b, c;
printf("Introdueix el valor d'a i de b");
scanf("%d %d", &a, &b);
c = 2 * a - b;
c = c M;
b = a + c M;
a = b * M;
printf("\n a = %d\n", a);
b= -1;
printf(" %6d %6d", b, c);
}

23. Escriviu un programa que desglossi certa quantitat de segons introduda per teclat en el seu
equivalent en setmanes, dies, hores, minuts i segons.
24. Realitzeu un programa que certa quantitat d'euros la passi a pessetes (canvi 166.386).
25. Escriviu un programa que expressi certa quantitat d'euros en la mnima quantitat de bitllets i
monedes de curs legal en l'actualitat.
26. Dissenyeu un programa que calculi i escrigui el percentatge descomptat en una compra,
introduint el preu real de l'article i el preu pagat.

Quique Lorente

Pgina 18

Curs 2012-2013 Mdul 3 : Programaci Tractament de dades simples

Programes. Exercicis d'ampliaci


27. Escriviu un programa per calcular la longitud de la circumferncia i l'rea del cercle per a un
radi introdut per teclat (utilitzeu la constant M_PI de la biblioteca math.h).
28. Si una temperatura expressada en graus Celsius es multiplica per 9/5 i al resultat se li suma 32
s'obt la temperatura en graus Farenheit. Escriviu un programa que llegeixi la temperatura en
graus Celsius i digui a quans graus Farenheit correspon.
29. Calculeu l'rea d'un triangle mitjanant la frmula:
rea= (p(p-a)(p-b)(p-c))1/2

on p s el semipermetre, p= (a+b+c)/2, sent a, b, c els tres costats del triangle.


30. Feu un programa que calculi l'rea d'un polgon regular una vegada introdut per teclat el valor
del permetre (P) i l'apotegma (ap).
Area = (P * ap) / 2

31. Feu un programa que calculi l'rea d'un trapezi, introduint per teclat els valors de les bases i la
seua altura.
A = (B + b) * h / 2

32. Escriviu un programa que llegeixi el valor corresponent a una distncia en milles marines i
l'escrigui expressada en metres (1 milla, equival a 1852 metros).
33. Escriviu un programa que calculi la velocitat d'una pilota de tennis en qm/hora, coneixent la
distncia recorreguda en metres i el temps emprat en segons per a recrrer la distancia.
34. Un corredor de marat (distncia=42.195 qm.) ha recorregut la carrera en certa quantitat
d'hores, minuts i segons. Es desitja un programa que calculi i escrigui la mitjana de temps en
minuts i segons que ha tardat per quilmetre.

Quique Lorente

Pgina 19

You might also like