Aula01 Técnicas de Programaçãop1

April 4, 2018 | Author: ricksant2003 | Category: Control Flow, C (Programming Language), Macro (Computer Science), Software, Computer Science


Comments



Description

Preparatório EsFCExTÉCNICAS DE PROGRAMAÇÃO a. Lógica Aplicada Prof. Ricardo Sant'Ana Sumário 1 Introdução 2 Resolução de Exercícios 3 Conclusão Introdução Lista de Assuntos  2. TÉCNICAS DE PROGRAMAÇÃO: • a. Lógica aplicada: algoritmos, técnicas de construção de algoritmos, resolução de problemas. Introdução Bibliografia  COSTA, Daniel G. JAVA em Rede: Recursos Avançados. Rio de Janeiro: Brasport, 2008.  DEITEL, H. M. JAVA Como Programar. 6. ed. [S.l.]: Editora Bookman, 2006.  GAMMA, Erich et al. Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. [S.l.]: Bookman, 2005.  GUIMARÃES, Ângelo de Moura; LAGES, Newton de Castilho. Algoritmos Estruturados de Dados. [S.l.]: Editora LTC, 1994.  MORGAN, Michael. JAVA 2 para Programadores Profissionais. [S.l.]: Editora Ciência Moderna, 2001.  MUTO, Claudio Adonai. PHP & MYSQL Guia Completo. [S.l.]: Brasport, 2004.  TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de Dados Usando C. [S.l.]: Makron Books, 1995.  VELOSO, Paulo et al. Estrutura de Dados. [S.l.]: Editora Campus, 1983.  WIRTH, Niklaus. Algorítmos e Estruturados de Dados. [S.l.]: Editora PHB, 1989. Introdução Motivação: Questão 60 da segunda prova 2014 Teoria na forma de Exercícios  Conhecimento prévio! Introdução #include <stdio.h> int main(){ int i=9; i^=15; i>>=1; i<<=2; printf("%d",i); return 0; } Introdução #include <stdio.h> i=9 int main(){ int i=9; i^=15; i>>=1; i<<=2; printf("%d",i); return 0; } Introdução #include <stdio.h>  i^=15 int main(){  i=i^15 int i=9; i^=15;  ^ → operador xor i>>=1;  0000 1001 → 9 i<<=2; printf("%d",i);  0000 1111 → 15 return 0;  0000 0110 → 6 }  Portanto, i=6 Introdução #include <stdio.h>  i>>=1 int main(){  i=i>>1 int i=9; i^=15;  >> → operador i>>=1; deslocamento i<<=2; printf("%d",i);  0000 0110 11 → 6 return 0;  0000 0011 → 3 }  Portanto, i=3 Introdução #include <stdio.h>  i<<=2 int main(){  i=i<<2 int i=9; i^=15;  << → operador i>>=1; deslocamento i<<=2; printf("%d",i);  0000 0011 → 3 return 0;  0000 1100 11 → 12 }  Portanto, i=12 Introdução #include <stdio.h>  Imprime int main(){  %d → inteiro int i=9; i^=15;  Saída = 12 i>>=1; i<<=2; printf("%d",i); return 0; } Questão 01  Qual a saída desse código ? #include <stdio.h> int main(){ int i=~9; printf("%d",i); return 0; } Questão 01  Operador ~:complemento #include <stdio.h>  Originalmente, int tem tamanho de 4 bytes int main(){ int i=~9;  Representaremos com 2 printf("%d",i); bytes return 0;  0000 0000 0000 1001 → 9 }  E o que é o complemento ? Questão 01  0000 0000 0000 1001 → 9 #include <stdio.h>  1111 1111 1111 0110 → ~  Esse é um número negativo! 1 int main(){ a esquerda!!! int i=~9; printf("%d",i); return 0;  Mas que número é esse ? }  C utiliza complemento 2 para representar números negativos:  1111 1111 1111 0110  Inverte e soma 1 para ver que número é negativo:  0000 0000 0000 1001  0000 0000 0000 0001 +1  0000 0000 0000 1010  10 – portanto 10 negativo Questão 02  Qual a saída desse código ? #include <stdio.h> #include <stdlib.h> int main(){ int i = pow(2,16)-1; if (!i) { printf("verdadeiro %d",i); } else printf("falso! %d",i); return 0; } Questão 02  Qual é esse valor ? #include <stdio.h>  Pow → potência, ou seja,2 #include <stdlib.h> elevado a 16. int main(){  Ou seja,65536 int i = pow(2,16)-1;  Assim i= 65535 if (!i) { printf("verdadeiro %d",i); } else printf("falso! %d",i); return 0; } Questão 02  Em C podemos verificar #include <stdio.h> condições com qualquer valor #include <stdlib.h> → ao contrário do Java que utilizamos o tipo boolean. int main(){  Assim, o valor do int i = pow(2,16)-1; condicional será falso if (!i) { somente se for ZERO ! printf("verdadeiro %d",i); }  O que nos leva a crer que, else no caso dessa questão, o printf("falso! %d",i); valor será verdadeiro ! return 0; } Questão 02  Mas antes da variável i #include <stdio.h> existe o operador NOT (que #include <stdlib.h> funciona bit a bit). Assm:  i = 65535 int main(){ int i = pow(2,16)-1;  Ou seja, em binário, i tem o if (!i) { valor 1111 1111 1111 1111. printf("verdadeiro %d",i);  Assim, }  !i = 0000 0000 0000 0000 else printf("falso! %d",i);  Ou seja, !i vale ZERO.  Portanto será apresentado a return 0; saída: }  falso! 65535 Questão 03  Qual a saída desse código ? #include <stdio.h> #include <stdlib.h> int main() { int intern = 1; int extern = intern^extern; printf("%d \n",result); return 0; } Questão 03  Novamente, lembrando que ^ é #include <stdio.h> o operador xor, temos #include <stdlib.h>  0000 0000 0000 0001 int main() {  0000 0000 0000 1000 xor int intern = 1; int extern = 8;  -------------------- int result = intern^extern;  0000 0000 0000 1001 printf("%d \n",result); return 0;  }  Ou seja, resultado vale 9!   Questão 03  ERRADO ! #include <stdio.h> #include <stdlib.h>   extern → palavra reservada int main() { do C ! Não pode ser int intern = 1; utilizada como nome de int extern = 8; variável ! int result = intern^extern; printf("%d \n",result); return 0;  Esse programa não compila ! } Questão 04  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  São palavras-chave da linguagem C no padrão ANSI e, portanto, não podem ser utilizadas como nomes para variáveis a) typedef, master, core, newline. b) union, extern, main, core. c) int, long, static, void. d) Float, Long, Core, Continue. e) signed, unsigned, master, main. Questão 04  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  São palavras-chave da linguagem C no padrão ANSI e, portanto, não podem ser utilizadas como nomes para variáveis a) typedef, master, core, newline. b) union, extern, main, core. c) int, long, static, void. d) Float, Long, Core, Continue. e) signed, unsigned, master, main. Questão 04  auto break case char const continue default  do double else enum extern float for goto  if int long register return short signed  sizeof static struct switch typedef union  unsigned void volatile while Questão 04  Especificadores de Classe de Armazenamento:  auto  extern  static  register Questão 04  Especificadores de Classe de Armazenamento:  auto • O especificador de classe de armazenamento auto define variáveis locais. Raramente usado pois todas as variáveis do C são auto por definição #include <stdio.h> #include <stdlib.h> int main() { int auto i = 1; int auto e = 8; int auto result = i^e; printf("%d \n",result); return 0; } Questão 04  Especificadores de Classe de Armazenamento:  extern • O extern define variáveis que serão usadas em um arquivo apesar de terem sido declaradas em outro. int count; float sum; main (void){ ... return 0; } Questão 04  Especificadores de Classe de Armazenamento:  extern • O extern define variáveis que serão usadas em um arquivo apesar de terem sido declaradas em outro. extern int count; extern float sum; int RetornaCount (void) { ... return count; } Questão 04  Especificadores de Classe de Armazenamento:  static  O funcionamento das variáveis declaradas como static depende se estas são globais ou locais.  Variáveis globais static funcionam como variáveis globais dentro de um módulo, ou seja, são variáveis globais que não são (e nem podem ser) conhecidas em outros módulos.  Isto é util se quisermos isolar pedaços de um programa para evitar mudanças acidentais em variáveis globais. Questão 04  Especificadores de Classe de Armazenamento:  static  Variáveis locais static são variáveis cujo valor é mantido de uma chamada da função para a outra. Veja o exemplo: int count (void) { static int num=0; num++; return num; }  A função count() retorna o número de vezes que ela já foi chamada. Questão 04  Especificadores de Classe de Armazenamento:  register  O computador tem a memória principal e os registradores da CPU. As variáveis (assim como o programa como um todo) são armazenados na memória. O modificador register diz ao compilador que a variável em questão deve ser, se possivel, usada em um registrador da CPU. • Velocidade • Não pode ser global • Pedido do programador Questão 05 #include <stdio.h>  Qual a saída desse código ? void func(); int i = 10; int main() { int i = 20; func(); printf("i= %d ", i); { int i = 30; func(); printf("i= %d ", i); } return 0; } void func() { printf("i = %d ", i); } Questão 05 #include <stdio.h>  Essa é uma questão de escopo void func(); de variáveis. int i = 10;  A primeira variável i foi definida num escopo global int main() { int i = 20; e, portanto, tanto main() func(); como func() tem acesso a printf("i= %d ", i); ela: { void func(); int i = 30; func(); int i = 10; printf("i= %d ", i); } int main() { return 0; } ... } void func() { printf("i = %d ", i); } void func() { ... } Questão 05 #include <stdio.h>  Essa variável i=20 local void func(); sobrepõe a variável i int i = 10; global.  Chamamos a função fund() int main() { int i = 20;  Não há motivo para ter func(); acesso a variável i printf("i= %d ", i); declarada dentro do escopo { main() int i = 30; func();  Portanto será impresso o printf("i= %d ", i); valor da variável i GLOBAL: }  i=10 return 0; } void func() { printf("i = %d ", i); } Questão 05 #include <stdio.h>  Agora iremos imprimir o void func(); valor da variável i int i = 10; declarada no escopo main() - pois ela sobrepõe a variável int main() { i GLOBAL: int i = 20; func();  i=10 i=20 printf("i= %d ", i); { int i = 30; func(); printf("i= %d ", i); } return 0; } void func() { printf("i = %d ", i); } Questão 05 #include <stdio.h>  Declaramos uma variável i void func(); dentro de um “sub-escopo” do int i = 10; main (portanto variável local) com o valor 30. Essa int main() { variável sobrepõe a variável int i = 20; i declarada dentro do escopo func(); main() e sobrepõe a variável printf("i= %d ", i); i declarada GLOBAL. { int i = 30;  func(); printf("i= %d ", i); } return 0; } void func() { printf("i = %d ", i); } Questão 05 #include <stdio.h>  Chamamos a função fund() void func();  Não há motivo para ter int i = 10; acesso a variável i declarada dentro do sub- int main() { int i = 20; escopo main() func();  Portanto será impresso o printf("i= %d ", i); valor da variável i GLOBAL: { int i = 30;  i=10 i=20 i=10 func(); printf("i= %d ", i); } return 0; } void func() { printf("i = %d ", i); } Questão 05 #include <stdio.h>  Dentro do sub-escopo void func(); declarado em main() a int i = 10; variável i tem valor 30, portanto esse valor será int main() { impresso: int i = 20; func();  i=10 i=20 i=10 i=30 printf("i= %d ", i); { int i = 30; func(); printf("i= %d ", i); } return 0; } void func() { printf("i = %d ", i); } Questão 06 #include <stdio.h>  Qual a saída desse código ? func(int *a, int b) { int temp; temp = *a; *a = b; b = temp; } int main() { int a = 10, b = 20; func(&a, b); printf("a = %d, b = %d", a, b); return 0; } Questão 06 #include <stdio.h>  Esse código ś sobre passagem func(int *a, int b) { de parâmetro: por valor e int temp; por referência. temp = *a;  Quando chamamos a função *a = b; func (&a, b), a é passado b = temp; } por referência e b é passado int main() { por valor. Isso quer dizer int a = 10, b = 20; que se a função func func(&a, b); modificar “a” a variável printf("a = %d, b = %d", a, b); será realmente modificada. return 0; Se a função modificar “b”, b } continua inalterado. Questão 06 #include <stdio.h>  a=10 e b=20 func(int *a, int b) { int temp; temp = *a; *a = b; b = temp; } int main() { int a = 10, b = 20; func(&a, b); printf("a = %d, b = %d", a, b); return 0; } Questão 06 #include <stdio.h>  Chamamos a função func. func(int *a, int b) { int temp; temp = *a; *a = b; b = temp; } int main() { int a = 10, b = 20; func(&a, b); printf("a = %d, b = %d", a, b); return 0; } Questão 06 #include <stdio.h>  Para as variáveis locais da func(int *a, int b) { função func: int temp;  temp = *a, portanto temp=10 temp = *a; *a = b;  *a=b, portando a=20 b = temp;  b=temp, portanto b=10 } int main() {  int a = 10, b = 20; func(&a, b); printf("a = %d, b = %d", a, b); return 0; } Questão 06 #include <stdio.h>  Ao sair da função func() a func(int *a, int b) { variável a do escopo main() int temp; sofreu as alterações em func temp = *a; ou seja, a vale 20. Já a *a = b; variável b do escopo main() b = temp; continuou inalterada, } portanto, 20. int main() { int a = 10, b = 20;  Assim: func(&a, b);  a=20, b=20 printf("a = %d, b = %d", a, b); return 0; } Questão 07 #include <stdio.h>  Questão de lógica int concurso(int v[10], int c) {  Qual a saída do código ao int i = 0; int s = 9; lado ? int m; while (i <= s) { m = i + (s - i) / 2; if (c == v[m]) return m; else if (c < v[m]) s = m - 1; else i = m + 1; } return -1; } int main(int arc, char * argv[]) { int v[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; printf("%d\n", concurso(v, 3)); return 0; } Questão 07 #include <stdio.h>  Vetor v int concurso(int v[10], int c) {  0 1 2 3 4 5 6 7 8 9 int i = 0; int s = 9;  1 3 5 7 9 11 13 15 17 19 int m; while (i <= s) {  m = i + (s - i) / 2; if (c == v[m])  concurso(v,3) return m; else if (c < v[m]) s = m - 1; else i = m + 1; } return -1; } int main(int arc, char * argv[]) { int v[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; printf("%d\n", concurso(v, 3)); return 0; } Questão 07 #include <stdio.h>  Função concurso: int concurso(int v[10], int c) {  I=0, s=9 int i = 0; int s = 9;  While (i<=s) int m; while (i <= s) {  m=0+(9-0)/2 m = i + (s - i) / 2; if (c == v[m])  m=4 return m;  c == v[m]??? else if (c < v[m]) s = m - 1;  3 == v[4]? else i = m + 1;  3 == 9 ?? não ! } return -1;  Mas c<v[m], portanto }  s=4-1, s=3 int main(int arc, char * argv[]) { int v[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; printf("%d\n", concurso(v, 3)); return 0; } Questão 07 #include <stdio.h>  Função concurso: int concurso(int v[10], int c) {  i=0, s=3 int i = 0; int s = 9;  while (i<=s) int m; while (i <= s) {  m=0+(3-0)/2 m = i + (s - i) / 2; if (c == v[m])  m=1 return m;  c == v[m]??? else if (c < v[m]) s = m - 1;  3 == v[1]? else i = m + 1;  3 == 3 ?? SIM! } return -1;  Return m, ou seja return } 1 int main(int arc, char * argv[]) {  Assim, concurso(v,2) → 1 int v[10] = { 1, 3, 5, 7, 9, 11, 13,  É impresso na tela 15, 17, 19 }; printf("%d\n", concurso(v, 3));  1 return 0; } Questão 08  Prova: CESGRANRIO - 2010 - IBGE - Analista de Sistemas - Suporte  Para os recursos presentes na linguagem de programação C, são feitas as afirmativas abaixo.  I - Permite acesso de baixo nível através da introdução de código Assembly no programa C.  II - A passagem de parâmetros por referência para funções pode ser simulada através da utilização de ponteiros.  III - O tipo de dados typedef são estruturas variáveis que permitem que dados relacionados sejam combinados e manipulados como um todo.  Está(ão) correta(s) a(s) afirmativa(s)  a) I, apenas.  b) II, apenas.  c) III, apenas.  d) I e II, apenas.  e) I, II e III. Questão 08  I - Permite acesso de baixo nível através da introdução de código Assembly no programa C.  #include <stdio.h> int main() { int arg1=2, arg2=3, add, sub, mul ; __asm__ ( "addl %%ebx, %%eax;" : "=a" (add) : "a" (arg1) , "b" (arg2) ); __asm__ ( "subl %%ebx, %%eax;" : "=a" (sub) : "a" (arg1) , "b" (arg2) ); __asm__ ( "imull %%ebx, %%eax;" : "=a" (mul) : "a" (arg1) , "b" (arg2) ); printf( "%d + %d = %d\n", arg1, arg2, add ); printf( "%d - %d = %d\n", arg1, arg2, sub ); printf( "%d * %d = %d\n", arg1, arg2, mul ); return 0 ; } Questão 08  II - A passagem de parâmetros por referência para funções pode ser simulada através da utilização de ponteiros. #include<stdio.h> void troca(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a = 2, b = 3; printf("Antes de chamar a função :\na=%d\nb=%d\n", a, b); troca(&a, &b); printf("Depois de chamar a função:\na=%d\nb=%d\n", a, b); return 0; } Antes de chamar a função : a=2 b=3 Depois de chamar a função: a=3 b=2 Questão 08  II - A passagem de parâmetros por referência para funções pode ser simulada através da utilização de ponteiros.  Em PHP <?php function soma(&$valor) { $valor = $valor + 10; } $contador = 0; soma ( $contador ); echo $contador; ?> Questão 08  III - O tipo de dados typedef são estruturas variáveis que permitem que dados relacionados sejam combinados e manipulados como um todo. #include <stdio.h> int main(void){ typedef struct { char nome[30]; float matematica, fisica, media; }Alunos; Alunos alunos[3]; int count; for(count = 0 ; count < 3 ; count++){ fflush(stdin); __fpurge(stdin); printf("\nNome do aluno %d: ", count+1); gets(alunos[count].nome); printf("Nota de matematica: "); scanf("%f", &alunos[count].matematica); printf("Nota de fisica: "); scanf("%f", &alunos[count].fisica); alunos[count].media = (alunos[count].matematica + alunos[count].fisica)/2; } return 0; } Questão 08  Prova: CESGRANRIO - 2010 - IBGE - Analista de Sistemas - Suporte  Para os recursos presentes na linguagem de programação C, são feitas as afirmativas abaixo.  I - Permite acesso de baixo nível através da introdução de código Assembly no programa C.  II - A passagem de parâmetros por referência para funções pode ser simulada através da utilização de ponteiros.  III - O tipo de dados typedef são estruturas variáveis que permitem que dados relacionados sejam combinados e manipulados como um todo.  Está(ão) correta(s) a(s) afirmativa(s)  a) I, apenas.  b) II, apenas.  c) III, apenas.  d) I e II, apenas. apenas  e) I, II e III. Questão 09  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  O include da linha 1 é desnecessário nesse programa, uma vez que não é chamada nenhuma função da biblioteca stdio.h no código.  Certo Errado Questão 09  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  O include da linha 1 é desnecessário nesse programa, uma vez que não é chamada nenhuma função da biblioteca stdio.h no código.  Certo Errado Questão 10  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A função MyStr recebe três parâmetros como argumento. Todos eles são parâmetros por referência.  Certo Errado Questão 10  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A função MyStr recebe três parâmetros como argumento. Todos eles são parâmetros por referência.  Certo Errado Questão 11  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A linha 8, que faz parte da função MyStr , poderia ser retirada  sem prejuízo ao código e à saída gerada.  Certo Errado Questão 11  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A linha 8, que faz parte da função MyStr , poderia ser retirada  sem prejuízo ao código e à saída gerada.  Certo Errado Questão 12  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  Na linha 5,s[n] representa a posição do elemento que está  na sexta posição do array *s.  Certo Errado Questão 12  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, n int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1 SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  Na linha 5,s[n] representa a posição do elemento que está  na sexta posição do array *s.  Certo Errado Questão 13  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A função MyStr retorna um ponteiro  Certo Errado Questão 13  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *MyStr *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  A função MyStr retorna um ponteiro  Certo Errado Questão 14  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  Esse código possui duas saídas, produzidas nas linhas 13 e  15, que são iguais.  Certo Errado Questão 14  Prova: CESPE - 2009 - INMETRO - Analista Executivo em Metrologia e Qualidade - Redes - Parte II Considerando o código em linguagem C acima, julgue o item abaixo #include <stdio.h> #define SIZE 6 char *MyStr(char *s, int n, int i){ for(i=0;i<n/2;i++){ s[n]=*(s+i); s[i]=s[n-i-1]; } *(s+n-i-1)=*(s+n); *(s+n)='\0'; return s; } int main(void){ char str[SIZE]="abcde"; int i=0; printf("%s\n",MyStr(str,SIZE-1,i)); for(;i<sizeof(str);i++){ printf("%c",str[i]); } }  Esse código possui duas saídas, produzidas nas linhas 13 e  15, que são iguais.  Certo Errado Questão 15  Prova: CESPE - 2009 - TRE-GO - Programador de computador char *pc; float *px; float x; x=6.5; px=&x; pc = (char *)px;  Considerando as definições em linguagem C mostradas acima, assinale a opção correta.  a) A utilização de (char*) é um cast, que converte um tipo de dados em outro.  b) As variáveis px e pc apontam para posições de memória diferentes.  c) É correto afirmar que px + 1 e (*pc) + 1 apontam para as mesmas posições de memória.  d) Se px é um ponteiro para a variável x de tipo float, a expressão px + 1 se refere ao byte seguinte na memória, a partir do endereço de x. Questão 15  Prova: CESPE - 2009 - TRE-GO - Programador de computador char *pc; float *px; float x; x=6.5; px=&x; pc = (char *)px;  Considerando as definições em linguagem C mostradas acima, assinale a opção correta.  a) A utilização de (char*) é um cast, que converte um tipo de dados em outro.  The C Programming Language -- ANSI C  Brian W. C. Kernighan & Dennis M. Ritchie  Prentice Hall, 1988  (the (char*) in the last line is a ``cast'', which converts one data type to another), another) px and pc both point to the same location in memory--the address of x--but px + 1 and pc + 1 point to different memory locations. Questão 15  Prova: CESPE - 2009 - TRE-GO - Programador de computador char *pc; float *px; float x; x=6.5; px=&x; pc = (char *)px;  Considerando as definições em linguagem C mostradas acima, assinale a opção correta.  b) As variáveis px e pc apontam para posições de memória diferentes.  The C Programming Language -- ANSI C  Brian W. C. Kernighan & Dennis M. Ritchie  Prentice Hall, 1988  (the (char*) in the last line is a ``cast'', which converts one data type to another), px and pc both point to the same location in memory--the memory address of x--but px + 1 and pc + 1 point to different memory locations. Questão 15  Prova: CESPE - 2009 - TRE-GO - Programador de computador char *pc; float *px; float x; x=6.5; px=&x; pc = (char *)px;  Considerando as definições em linguagem C mostradas acima, assinale a opção correta.  c) É correto afirmar que px + 1 e (*pc) + 1 apontam para as mesmas posições de memória.  Nâo está comparando endereço de memória. Px é um endereço de memória e *pc é o valor num endereço de memória ! Questão 15  Prova: CESPE - 2009 - TRE-GO - Programador de computador char *pc; float *px; float x; x=6.5; px=&x; pc = (char *)px;  Considerando as definições em linguagem C mostradas acima, assinale a opção correta.  d) Se px é um ponteiro para a variável x de tipo float, a expressão px + 1 se refere ao byte seguinte na memória, a partir do endereço de x.  The C Programming Language -- ANSI C  Brian W. C. Kernighan & Dennis M. Ritchie  Prentice Hall, 1988  (the (char*) in the last line is a ``cast'', which converts one data type to another), px and pc both point to the same location in memory--the address of x--but px + 1 and pc + 1 point to different memory locations. Questão 16  Prova: CESPE - 2009 - TRE-GO - Programador de computador #include <stdio.h> void exchange(int a, int b); int main(void) { int a = 5; int b = 7; exchange(a, b); printf("a= %d, b= %d \n", a, b); } void exchange(int a, int b) { int temp; temp = a; a = b; b = temp; printf("a= %d, b= %d \n", a, b); }  Com relação à execução do código em linguagem C acima, assinale a opção correta.  a) O código não será executado pois tem erros de sintaxe, o que resultará em erros de compilação.  b) O programa imprimirá a = 7, b = 5 em uma linha e,na seguinte, a = 7, b = 5.  c) O programa imprimirá a = 7, b = 5 em uma linha e,na linha seguinte, a = 5, b = 7.  d) O programa imprimirá a = 7, b = 5 duas vezes na mesma linha. Questão 16  Prova: CESPE - 2009 - TRE-GO - Programador de computador #include <stdio.h> void exchange(int a, int b); int main(void) { int a = 5; int b = 7; exchange(a, b); printf("a= %d, b= %d \n", a, b); } void exchange(int a, int b) { int temp; temp = a; a = b; b = temp; printf("a= %d, b= %d \n", a, b); }  Com relação à execução do código em linguagem C acima, assinale a opção correta.  a) O código não será executado pois tem erros de sintaxe, o que resultará em erros de compilação.  b) O programa imprimirá a = 7, b = 5 em uma linha e,na seguinte, a = 7, b = 5.  c) O programa imprimirá a = 7, b = 5 em uma linha e,na linha seguinte, a = 5, b = 7.  d) O programa imprimirá a = 7, b = 5 duas vezes na mesma linha. Questão 17  Prova: PUC-PR - 2010 - COPEL - Analista de Sistemas Júnior  qual é o objetivo da função fwrite da linguagem C,que tem seu protótipo presente no arquivo stdio.h ?  A) Descarregar o buffer pendente de gravação em uma stream.  B) Gravar uma quantidade de bytes de uma região de memória em uma stream.  C) Gravar uma região de memória em uma variável.  D) Gravar uma String informada como parâmetro em um arquivo texto. Usará o caractere terminador “\0” para identificar o final da String.  E) Gravar uma String informada como parâmetro em um Socket . Usará o caractere terminador “\0” para identificar o final da String. Questão 17  Prova: PUC-PR - 2010 - COPEL - Analista de Sistemas Júnior  qual é o objetivo da função fwrite da linguagem C,que tem seu protótipo presente no arquivo stdio.h ?  Os arquivos em C são denominados STREAM.  Um STREAM é associado a um arquivo por uma operação de abertura do arquivo e, a partir da associação, todas as demais operações de escrita e leitura podem ser realizadas.  fwrite() : Grava um conjunto de dados heterogêneos (struct) no arquivo Questão 17  Prova: PUC-PR - 2010 - COPEL - Analista de Sistemas Júnior  qual é o objetivo da função fwrite da linguagem C,que tem seu protótipo presente no arquivo stdio.h ?  A) Descarregar o buffer pendente de gravação em uma stream.  B) Gravar uma quantidade de bytes de uma região de memória em uma stream.  C) Gravar uma região de memória em uma variável.  D) Gravar uma String informada como parâmetro em um arquivo texto. Usará o caractere terminador “\0” para identificar o final da String.  E) Gravar uma String informada como parâmetro em um Socket . Usará o caractere terminador “\0” para identificar o final da String. Questão 18  Prova: NUCEPE - 2009 - SEDUC-PI - Professor - Informática  Considere a instrução em linguagem C: int a = sizeof(float);. O valor armazenado em a é:  a) 2.  b) 4.  c) 6  d) 8.  e) 10. Questão 18  Prova: NUCEPE - 2009 - SEDUC-PI - Professor - Informática  Considere a instrução em linguagem C: int a = sizeof(float);. O valor armazenado em a é:  a) 2.  b) 4.  c) 6  d) 8.  e) 10.  char: 1 byte  short: 2 bytes  int: 4 bytes  long: 4 bytes  float: 4 bytes  double : 8 bytes Questão 19  Prova: NUCEPE - 2009 - SEDUC-PI - Professor - Informática  Assinale a alternativa que mostra o operador lógico OU em linguagem C:  a) $$.  b) ||.  c) &&  d) Or.  e) v. Questão 19  Prova: NUCEPE - 2009 - SEDUC-PI - Professor - Informática  Assinale a alternativa que mostra o operador lógico OU em linguagem C:  a) $$.  b) ||.  c) &&  d) Or.  e) v. Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez.  Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez.  Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez.  Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez. Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez. Questão 20  Prova: FUNIVERSA - 2012 - PC-DF - Perito Criminal - Informática  Na maioria das linguagens de programação, as estruturas de controle de fluxo são fundamentais para a criação de programas elegantes e de fácil entendimento. Assinale a alternativa correta com relação aos comandos de controle de fluxo da linguagem C, sabendo que o comando for apresenta a seguinte forma geral: for (inicialização;condição;incremento) declaração;  a) Não é permitido omitir a condição no comando for, pois não existiria maneira de parar o laço infinito.  b) Pode-se omitir a declaração, e, mesmo assim, o comando for ainda será válido.  c) Sem os comandos de controle de fluxo, só haveria uma maneira de o programa ser executado: de baixo para cima e comando por comando.  d) O comando continue usado dentro de um laço executa a próxima linha de código independentemente do fato de ela estar dentro ou fora do laço.  e) O comando for garante que o laço seja executado pelo menos uma vez. Questão 21  Exame Nacional para Ingresso na Pós-Graduação em Computação 30/09/2012  Nas linguagens de programação, uma questão importante é o escopo das declarações. Por exemplo, o escopo de uma declaração de x é a região do programa em que os usos de x se referem a essa declaração. Nesse sentido, a ligação de um nome a um escopo pode ser estática ou dinâmica. No programa C, a seguir, o identificador x é uma macro composta pela expressão ++y . Por ser uma macro, a resolução de x não é realizada somente em termos do texto do programa.  Com base nessa execução, assinale a alternativa que apresenta, corretamente, a saída desse programa.  a) 1 1  b) 1 2  c) 1 3  d) 2 2  e) 2 3 Questão 21  Exame Nacional para Ingresso na Pós-Graduação em Computação 30/09/2012  #include<stdio.h> #define x ++y int y = 2; void M() { int y = 1; printf("%d ", x); } void N() { printf("%d ", x); } int main() { M(); N(); return 0; } Questão 21  Exame Nacional para Ingresso na Pós-Graduação em Computação 30/09/2012  #include<stdio.h> int y = 2; void M() { int y = 1; printf("%d ",++y); } void N() { printf("%d ", ++y); } int main() { M(); N(); return 0; } Questão 21  Exame Nacional para Ingresso na Pós-Graduação em Computação 30/09/2012  Nas linguagens de programação, uma questão importante é o escopo das declarações. Por exemplo, o escopo de uma declaração de x é a região do programa em que os usos de x se referem a essa declaração. Nesse sentido, a ligação de um nome a um escopo pode ser estática ou dinâmica. No programa C, a seguir, o identificador x é uma macro composta pela expressão ++y . Por ser uma macro, a resolução de x não é realizada somente em termos do texto do programa.  Com base nessa execução, assinale a alternativa que apresenta, corretamente, a saída desse programa.  a) 1 1  b) 1 2  c) 1 3  d) 2 2  e) 2 3 Questão 22  Exame Nacional para Ingresso na Pós-Graduação em Computação 2013  Analise os trechos de código em linguagem de programação C a seguir (próximo slide)  Com base nesses trechos, assinale a alternativa correta.  a) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 indicará um erro de sintaxe na inicialização do ponteiro.  b) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 indicará um erro de sintaxe no laço de repetição.  c) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 imprimirá valores desconhecidos alocados na memória.  d) Ambos os trechos de código imprimirão o mesmo conteúdo na tela.  e) Ambos os trechos de código indicarão erro de sintaxe na inicialização da matriz mat Questão 22  Exame Nacional para Ingresso na Pós-Graduação em Computação 2013 Trecho 1 Trecho 2 #include<stdio.h> #include<stdio.h> int main() { int main() { int mat[2][2] = {{1,2}, int mat[2][2] = { { 1, {3,4}}; 2 }, { 3, 4 } }; int i,j; int * p = &mat[0][0]; for (i=0;i<2;i++) int i; for (j=0;j<2;j++) for (i = 0; i < 4; i++) printf("%d\n",mat[i][j]); printf("%d\n", *(p + i)); } } Questão 22  Exame Nacional para Ingresso na Pós-Graduação em Computação 2013  Analise os trechos de código em linguagem de programação C a seguir (próximo slide)  Com base nesses trechos, assinale a alternativa correta.  a) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 indicará um erro de sintaxe na inicialização do ponteiro.  b) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 indicará um erro de sintaxe no laço de repetição.  c) O Trecho 1 imprimirá os valores da matriz mat e o Trecho 2 imprimirá valores desconhecidos alocados na memória.  d) Ambos os trechos de código imprimirão o mesmo conteúdo na tela.  e) Ambos os trechos de código indicarão erro de sintaxe na inicialização da matriz mat Conclusão Chegamos aqui ? FIM CIDADE IDIOMAS & CURSOS PREPARATÓRIOS CLN 113 - Bloco C -  Sala 207 a 210  Asa Norte - Brasília - DF - CEP 70.763-503 Tel: (61) 3340-0433 / 9975-4464 / 8175-4509 E-mail: [email protected] Site: www.iic.pro.br Skype: luizcidade Prof. Ricardo Sant'Ana
Copyright © 2024 DOKUMEN.SITE Inc.