Sobre a Linguagem C

Este capítulo contém questões específicas sobre a linguagem C.

  1. Uma das características da linguagem C é que ela é case sensitive. Explique o isso significa. Dê um exemplo.

  2. O que são palavras-reservadas de uma linguagem de programação?

    Resposta: são palavras que a linguagem de programação fornece aos programadores para a criação de programas. Essas palavras não podem ser utilizadas pelos programadores para nomear variáveis ou funções. Por exemplo, em C, não é possível criar uma variável com nome float, pois este é utilizado para identificar os números em ponto flutuante.

  3. Como a linguagem de programação C trata do tipo lógico de dados?

  4. O que significa o modificador de tipos unsigned em C?

  5. (Prova EST/2010-1) Qual é a diferença entre os comandos break e continue?

  6. (Prova EST/2010-1) O que representa o comando unsigned int?

  7. A Linguagem C aceita que os comandos aritméticos ++ e -- sejam pré-fixados ou pós-fixados, porém estes são diferentes quanto ao resultado gerado. Portanto, y=x++ não é a mesma coisa que y=++x. Qual é a diferença?

  8. Considere o programa abaixo e responda ao que se pede:

    #include <stdio.h>
    int main() {
    	printf("%d", 5>3>2);
    	return 0;
    }
    

    É possível executar esse programa? Se não for possível, justifique a sua resposta. Caso seja possível, qual seria o resultado? E o que aconteceria se fosse substituído o valor 2 por 0 nesse programa? Justifique a sua resposta.

  9. Considere o programa abaixo e diga o que será impresso.

    #include <stdio.h>
    int main() {
    	float i;
    	int x;
    	x=2;
    	printf("%d\n", x);
    	x=1/2;
    	printf("%d\n", x);
    	x = 2/4;
    	printf("%d\n", x);
    	x = 2.0/4;
    	printf("%d\n", x);
    	i = 2.0/4.0;
    	printf("%f\n", i);
    	i = 2.0/4;
    	printf("%f\n", i);
    	i = 2/4;
    	printf("%f\n", i);
    	i = 1/2;
    	printf("%f\n", i);
    	return 0;
    }
    

    COMENTáRIOS: PARA RESOLVER ESSA QUESTãO O ALUNO DEVE TER CONHECIMENTO SOBRE COMO A LINGUAGEM C ENTENDE A DIVISãO DE TIPOS NUMéRICOS.

  10. Considere o programa abaixo e diga o que será impresso.

    #include <stdio.h>
    int main() {
    	int i;
    	float x;
    	i = (float) 2;
    	printf("%d\n", i);
    	i = i / (float) 2;
    	printf("%d\n", i);
    	i = (int) (2/4);
    	printf("%d\n", i);
    	i = (int) 2./ (float) 4;
    	printf("%d\n", i);
    	x = 2.0 / (int) 4.0;
    	printf("%f\n", x);
    	x = (int) 2.0/4;
    	printf("%f\n", x);
    	x = (int) (2.0/4);
    	printf("%f\n", x);
    	x = 2 / (float) 4;
    	printf("%f\n", x);
    	x = (float) (1/2);
    	printf("%f\n", x);
    	x = 1 / (float) 2;
    	printf("%f\n", x);
    	return 0;
    }
    

  11. O que é impresso no programa abaixo?

    #include <stdio.h>
    int main(void) {
    char i;
    for (i='A'; i<='Z'; i++) 
        printf ("%c", i);
    printf ("\n");
    return 0;
    }
    

  12. O que é impresso no programa abaixo?

    #include <stdio.h>
    int main(void) {
    char i;
    for (i=65; i<=90; i++) 
    	printf ("%c", i);
    printf ("\n");
    return 0;
    }
    

  13. O que é impresso no programa abaixo?

    #include <stdio.h>
    int main(void) {
    int i;
    for (i='A'; i<='Z'; i++) 
    	printf ("%d ", i);
    printf ("\n");
    return 0;
    }
    

  14. O que é impresso no programa abaixo?

    #include <stdio.h>
    int main(void) {
    int i;
    for (i='A'; i<='Z'; i++) 
    	printf ("%d - %c\n", i, i);
    printf ("\n");
    return 0;
    }
    

  15. O que é impresso no programa abaixo?

    #include <stdio.h>
    int main(void) {
    char i;
    for (i='A'; i<='z'; i++) 
    	printf ("%d ", i);
    printf ("\n");
    return 0;
    }
    

  16. Considere o programa abaixo e depois responda ao que se pede:

    #include <stdio.h>
    int main(void) {
    	int a,b;
    	a = 2147483647;
    	b = a + a;
    	printf("%d\n", a);
    	printf("%d\n", b);	
    	return 0;
    }
    

    Ao compilar e executar o programa é obtido os seguintes valores na tela: 2147483647 e -2. O que ocorreu?

    COMENTáRIOS: PARA RESPONDER ESSA QUESTãO, é IMPORTANTE SABER QUE O VALOR 2147483647 é O MAIOR VALOR POSSíVEL PARA O TIPO INTEIRO EM C (USANDO 4 BYTES). COLOQUE O MODIFICADOR UNSIGNED ANTES DO TIPO INT E VERIFIQUE A MUDANçA (SERá NECESSáRIO TAMBéM MUDAR A MáSCARA DE IMPRESSãO PARA %U.

  17. Considere o programa abaixo e verifique o que ocorreria se o usuário digitasse o número 2.

    #include <stdio.h>
    
    int main() {
    	int n;
    	scanf("%d", &n);
    	switch (n) {
    	  case 0:
    	    printf("Você digitou zero.");
    	    break;
    	  case 1:
    	  case 4:
    	  case 9:
    	    printf("n é um quadrado perfeito.");
    	    break;  
    	  case 2:
    	    printf("n é um número par.");
    	  case 3:
    	  case 5:
    	  case 7:
    	    printf("n é um número primo.");
    	    break;
    	  case 6:
    	  case 8:
    	    printf("n é um número par.");
    	    break;
    	  default:
    	    printf("Somente números de 1 dígito são permitidos.");
    	    break;
    	}
    	return 0;
    }
    

  18. Considere o programa abaixo e responda ao que se pede:

    #include <stdio.h>
    
    int main() {
    	int a;
    	printf("Digite um número positivo:");
    	scanf("%d", &a);
    	switch (a) {
    		case 1: case 2: case 3:
    		printf("Número de 1 a 3.\n");
    		case 4: case 5: case 6:
    		printf("Número de 4 a 6.\n");
    		default:
    		printf("Número digitado é maior que 6.\n");
    	}
    	return 0;
    }
    

    a) Existe algum erro no programa que não possa gerar um executável? Se existir, o que está errado?

    b) Caso o programa possa ser compilado sem erro, o que seria exibido se o valor digitado pelo usuário fosse igual a 2? Isto estaria correto? Se não estiver, faça as devidas modificações para que as mensagens estejam de acordo com os possíveis valores digitados. Neste caso, considere que o usuário irá digitar um valor positivo.

  19. Há necessidade de se colocar o comando break após o comando default? Justifique a sua resposta.

    Resposta: Não faz sentido colocar o comando break após o comando default, pois isto seria desnecessário. Porém, de acordo com os criadores da linguagem (Brian Kerninghan e Dennis Ritchie), isso poderia ser necessário na hipótese do programador adicionar, posteriormente, um caso após este comando [pág. 52 do livro The Programming Language - second edition]. Os autores chamam essa prática de programação defensiva.

  20. Considere o programa abaixo e responda ao que se pede:

    #include <stdio.h>
    
    int main() {
    	char c;
    	for ( ; ; ) {
    		printf("@");
    		scanf("%c", &c);
    		if (c == 'a')
    			break;
    	}
    	return 0;
    }
    

    a) O que faz o comando for ( ; ; )?

    b) Execute o programa e verifique como é possível finalizá-lo.

  21. Considere o programa abaixo e responda ao que se pede:

    #include <stdio.h>
    
    int main() {
    	int i;
    	for (i=0; ;i++) {
    		printf("%d\n", i);
    	}
    	return 0;
    }
    

    É possível utilizar o comando for sem a condição de parada? Se for possível, o que acontecerá com a execução desse programa?

  22. Considere o programa abaixo e verifique o será impresso após a sua execução.

    #include <stdio.h>
    
    int main() {
    	int j=0;
    	for ( ;j!=5; ) {
    		printf("%d\n", j);
    		j++;
    	}
    	return 0;
    }
    

    Resposta: o programa irá apresentar uma sequência de números (de zero a quatro). Neste programa, deve-se observar que o comando for que normalmente tem a inicialização e o incremento (ou decremento) na própria instrução, não precisa ter esses elementos para funcionar. Inclusive, poderia até mesmo não ter nenhuma das suas partes (inicialização, condição de parada e incremento ou decremento) - situação em que estaria em loop eterno.

  23. Escreva um programa em C que leia uma string a partir do teclado e imprima o número de caracteres dessa string. Para tanto, escreva uma função chamada contadorCaracteres que receba a string digitada pelo usuário e imprima na tela a seguinte mensagem: “A <palavra-digitada> possui <quantidade> caracteres.”.

Tiago Eugenio de Melo 2014-03-31