RESPOSTAS DOS EXERCÍCIOS – LISTA 3
[1]
Nos programas abaixo, qual será a saída mostrada na tela ao se executar o programa? Não
é necessário incluir a parte onde o system(“PAUSE”) solicita que se pressione qualquer
tecla para continuar:
(a)
#include <stdlib.h> #include <stdio.h> int main(void) { int a = 5; if ( (a > 4) && (a < 0) ) printf("Lista 03 "); printf("Comando if"); system("PAUSE"); return 0; }(b)
#include <stdlib.h> #include <stdio.h> int main(void) { int a = 5; if ( a ) printf("Lista 03 "); printf("Comando if"); system("PAUSE"); return 0; }(c)
#include <stdlib.h> #include <stdio.h> int main(void) { int a = 5; if ( !a ) printf("Lista 03 "); else printf("Comando if"); system("PAUSE");return 0; }
#include <stdio.h> #include <math.h> int main(void) { int a = 5, b = 0; if ( b != 0 ) a = pow(a,b); else a = pow(a,(b+1)); printf("%d\n",a); system("PAUSE"); return 0; }
(e)
#include <stdlib.h> #include <stdio.h>int funcao(int var) { if(var > 10) return 1; else return 2; } int main(void) { int a = 5;
if(funcao(20) == 2) printf("If e' complicado"); else printf("Ou nao...");
system("PAUSE"); return 0;
}
(f)
#include <stdlib.h> #include <stdio.h>char funcao(int var) {
if(var == '8') return 'A'; else return 'B'; } int main(void) { int a = 5; putchar(funcao(8)); system("PAUSE"); return 0; }
(g)
#include <stdlib.h> #include <stdio.h>char funcao(int var) {
if(var == '8') return 'A'; else return '8';
}
int main(void) {
int a = 5;
putchar( funcao( funcao(8) ) ); //essa é complicada...
system("PAUSE"); return 0;
}
[2]
Considerando as cinco variáveis declaradas como segue: int a =
5
, b =
4
, c =
3
, d =
2
, y;
Qual o valor atribuído a y nas expressões abaixo?
a) y = ( a > b );
1
b) y = ( (a/d) > d );
0
c) y = b/a;
0
d) y = b/(a-b);
4
e) y =
102.49
;
102
f) y = ( b && (a-c+d) );
1
g) y = ( !(d/a) && (a/
7
) );
0
h) y = 'X' +
10
;
98
i) y = ( !(d/c) || (a/
7
) );
1
j) y = ( (!(d/a) || (a/
7
)) && (a/
7
) );
0
[3]
Crie uma função que realiza a conversão de radianos para graus. A função deverá receber o
ângulo em radianos e retorná-lo em graus
.
float rad2gra(float ang) {
return 360*ang/(2*M_PI); }
complexo qualquer. A função deverá receber como parâmetros, além da parte real e
imaginária do número, uma variável de controle
2 2 1
tan
a
b
Z
b
a
φ
−=
+
=
que indique qual operação a função
deverá realizar. Lembre-se que, para um número complexo z = a + j·b:
Utilize a função float atan(float __x) da biblioteca math.h
Essa função retorna o arco-tangente em radianos.
Utilize a função do exercício anterior para retornar o ângulo em graus.
float mod_ou_arg(float re, float im, int controle){
float aux;
//se minha variável de controle for zero retorno módulo:
if(controle == 0) return (sqrt(re*re + im*im)); //senão retorno argumento:
else {
aux = atan(im/re); //atan retorna em radianos!
return rad2gra(aux); //a função converte o valor antes de retornar
} //a função rad2gra já deve ter sido desenvolvida
}
Programa para testar as funções:
#include <stdlib.h>#include <stdio.h> #include <math.h>
float rad2gra(float ang) {
return 360*ang/(2*M_PI); }
float mod_ou_arg(float re, float im, int controle) {
float aux;
//se minha variável de controle for zero retorno módulo:
if(controle == 0) return (sqrt(re*re + im*im)); //senão retorno argumento:
else {
aux = atan(im/re); //atan retorna em radianos!
return rad2gra(aux); //a função converte o valor antes de retornar
} //a função rad2gra já deve ter sido desenvolvida
}
int main(void) {
float mod, arg;
mod = mod_ou_arg(5,5,0); //zero calcula modulo
arg = mod_ou_arg(5,5,1); //qualquer outra coisa calcula argumento
printf("O numero 5 + j5 possui modulo %f e angulo de fase %f\n",mod,arg); system("PAUSE");
return 0; }
[5]
Escreva uma função que calcula e retorna
#include <stdlib.h>
a soma, subtração, multiplicação ou divisão de
dois números. A função deverá receber como parâmetros, além dos dois números, um
caractere de controle (com o caractere da operação a ser realizada). A função deverá
selecionar a operação adequadamente utilizando a escada if-else-if.
#include <stdio.h>
float multioperacao(float a, float b, char controle) {
if(controle == '+') return a+b; //se receber '+', retorna soma
else if(controle == '-') return a-b; //senão, se receber '-', retorna sub.
else if(controle == '*') return a*b; //senão se '*' multiplica
else return a/b; //senão, só sobrou dividir...
}
int main(void) //só para testar a função...
{
printf("%f\n",multioperacao(4,3,'/')); system("PAUSE");
return 0; }
[6]
Analisando a relação tensão-corrente de um diodo zener nota-se que, caso se deseje obter
a corrente em função da tensão, uma função definida por partes pode ser utilizada para
representar o diodo. Sem mais detalhes, a função definida por partes pode ser escrita
como:
| ( ) 0 | | Z z Z z D D D D v V v v V r i v v V v V v V v v V r + ∀ < − = ∀ − > > − ∀ > Escreva uma função que retorne a corrente
#include <stdlib.h>
em um diodo zener para qualquer tensão
aplicada em seus terminais. A função deverá receber como parâmetros V
Z, V
D, r
D, r
Ze a
tensão v aplicada ao diodo.
#include <stdio.h>float corrente(float VZ, float VD, float rD, float rZ, float v) {
if(v < -VZ) return (v + VZ)/rZ; //se v for menor que VZ...
else if(v > VD) return (v - VD)/rD; //senão, se v for maior que VD
else return 0; //senão eu retorno zero
}
int main(void) //só para testar a função
{
printf("%f\n",corrente(5.8,0.7,0.5,3,-7)); system("PAUSE");
return 0; }
Além disso, a função deverá calcular e imprimir na tela o valor das raízes s
1e s
2da solução
do circuito. A função deverá receber como parâmetros a resistência R, a capacitância C e a
indutância L do circuito.
Ao aplicar as Leis de Kirchhoff para obter a resposta a entrada zero, obtém-se uma
equação diferencial ordinária (EDO) de segunda ordem com a forma:
2 0
( )
2
( )
( )
0
y t
+
ζ
y t
+
ω
y t
=
Onde:
ζ é o fator de amortecimento e ω
0é a frequência de ressonância. Esses parâmetros, para o
circuito série, são apresentados abaixo:
0
2
1
R
L
LC
ζ
ω
=
=
Caso ζ > ω
0, a resposta será SUPERAMORTECIDA, se ζ = ω
0a resposta será CRITICAMENTE
AMORTECIDA. Finalmente, se ζ < ω
0a resposta será SUB-AMORTECIDA.
Os valores das raízes da equação, para cada caso, estão dispostos na tabela abaixo.
TIPO DA RESPOSTA
Raízes
SUPERAMORTECIDO
2 2 1 0 2 2 2 0s
s
ζ
ζ
ω
ζ
ζ
ω
= − +
−
= − −
−
CRITICAMENTE AMORTECIDA
s
1=
s
2= −
ζ
SUB-AMORTECIDA
2 2 1 0 2 2 2 0s
j
s
j
ζ
ω
ζ
ζ
ω
ζ
= − +
−
= − −
−
#include <stdlib.h> #include <stdio.h> #include <math.h>
void RLCserie(float R, float L, float C) {
float fa,wr,s1,s2,re,im;
printf("A resposta de um ckt RLC serie onde:\n");
printf("R = %f Ohms, L = %f H e C = %f F sera:\n",R,L,C);
//calculo do fator de amortecimento e prequencia de ressonancia:
fa = R/(2*L); wr = 1/sqrt(L*C);
//verificação do tipo de resposta:
if (fa > wr) //se fa for maior que wr então é superamortecida
{
printf("SUPERAMORTECIDA, com raizes em:\n"); printf("s1 = %f, ",-fa-sqrt(fa*fa-wr*wr)); printf("s2 = %f\n",-fa+sqrt(fa*fa-wr*wr)); }
else {
if(fa == wr) //se fa for igual a wr, entao é criticamente amortecida
{
printf("CRITAMENTE AMORTECIDA, com raizes em:\n"); printf("s1 = s2 = %f\n",-fa);
}
else //senão só resta ser subamortecida
{
printf("SUBAMORTECIDA, com raizes em:\n");
printf("s1 = %f + %fj, ", -fa, -sqrt(wr*wr-fa*fa)); printf("s2 = %f + %fj\n", -fa, sqrt(wr*wr-fa*fa)); }
} }
int main(void) //só para testar a função
{ float r,l,c; printf("Digite R: "); scanf("%f",&r); printf("Digite L: "); scanf("%f",&l); printf("Digite C: "); scanf("%f",&c); RLCserie(r,l,c); system("PAUSE"); return 0; }