Рубрики
Uncategorized

Вступительный Письменный Экзамен в Школу | Обязательная Серия Письменных Экзаменов По Языку C!!!

Автор оригинала: David Wong.

Говоря о C, некоторые люди могут подумать, что это слишком просто.

Об этом нечего и говорить.

Но Су,,,,,

Сегодня мисс и сестра встретились с такой штукой.

Так что в языке Си все еще много ям.

Сегодня я собираюсь подготовить для вас несколько классических вопросов.

Может помочь вам успешно сдать письменный экзамен

1. Следующее утверждение неверно (D) A. Переменные с одинаковым именем могут использоваться в разных функциях B. Формальные параметры в функциях хранятся в стеке C. Переменные, определенные в функции, допустимы только в рамках этой функции. D. Переменные, определенные в составных операторах внутри функции, допустимы в пределах этой функции (Парные скобки в составных функциях, имеющих значение оператора) Примечание: Пункт D неверен. Позвольте мне привести вам пример.

#include
int man()
{
    {
      int a=10;
    }
    printf("%d\n",a);
    return 0;
}  

Если это будет скомпилировано снова, в a возникнет неопределенная ошибка.

2.

#include
#include
 
int main()
{
  int i;
  char acNEW[20];
  for (i = 0; i < 5; i++)
  {
    acNEW[i] = '0';
  }
  printf("%d\n", strlen(acNEW));
  system("pause");
  return 0;
}


Проблема в том, чтобы найти выход. : Ответ должен быть неопределенным, потому что он не присваивает ” 0 “при назначении массива символов, но функция strlen предполагает, что конечным критерием является “0”, поэтому, когда он считывает последний бит, он будет продолжаться до тех пор, пока не встретит “0”. Поскольку данные о спаме являются случайными, функция strlen не остановится, пока не встретит “0”, поэтому ответ неопределенен.

3. Можно ли определить глобальные переменные в заголовочных файлах, содержащихся в нескольких. Файлы C? ошибка Это приведет к ошибкам во время компиляции, но ее можно скомпилировать с помощью статической модификации.

4. В X86 существуют следующие программы:

include
include
int main()
{
  union
  {
    short k;
    char i[2];
  }*s,a;
  s = &a
  s->i[0] = 0x39;
  s->i[1] = 0x38;
  printf("%x\n", a.k);
  system("pause");
  return 0;
}
}
​

​ Каков вывод из этого вопроса? Консорциум точек знаний и небольшое хранилище, задействованное здесь, x86-это небольшое хранилище, и такие вещи нужно помнить. Вы не можете все знать общность пространства Содружества, верно. Короткая длина равна 2B, а длина символа I [2] равна 2B. Таким образом, ваш A. K не назначается, но вы выводите содержимое массива chari [2]. Хотя их названия различны, их содержание сейчас то же самое. Это проверяет наши представления о размере.

Далее я рисую понимание проблемы.

Вы также знаете, что чтение данных обычно начинается с высокой позиции. Например, число 120, мы должны сначала посмотреть на его самый большой бит справа (высокая позиция), поэтому ответ на этот вопрос-3839.

Позвольте мне еще раз проверить скриншоты:

5. Найдите выходные данные следующей программы

#include
#include
 
int main()
{
  unsigned char a = 200;
  unsigned char b = 100;
  unsigned char c = 0;
  c = a + b;
  printf("%d %d", a + b, c);
  system("pause");
  return 0;
}

Основной тест на этот вопрос-ваше понимание неподписанного. Затем я нарисую картинку, чтобы помочь вам понять.

Теперь я прав? Давайте посмотрим на результат.

6. В среде x86, VC + + 6.0 существуют следующие программы

#include
#include
 
int main()
{
  char c;
  unsigned char uc;
  unsigned short us;
  c = 128;
  uc = 128;
  us = c + uc;
  printf("0x%x\n", us);
  us = (unsigned char)c + uc;
  printf("0x%x\n", us);
  us = c + (char)uc;
  printf("0x%x\n", us);
  system("pause");
  return 0;
}

Прежде чем делать это, вы должны знать, что значение char колеблется от – 128 до 127, поэтому, когда вы назначаете UC 128, его реальное значение равно – 128.

Я прав насчет этого? Посмотрите на результаты.

7.

#include
#include
struct tagAAA
{
 
  unsigned char ucld : 1;
  unsigned char ucpara : 2;
  unsigned char ucState : 6;
  unsigned char ucTail : 4;
  unsigned char ucAvail;
  unsigned char ucTail2;
  unsigned char ucData;
}AAA_S1;
struct tagAAA2
{
 
  unsigned int ucld : 1;
  unsigned int ucpara : 2;
  unsigned int ucState : 6;
  unsigned int ucTail : 4;
  unsigned int ucAvail;
  unsigned int ucTail2;
  unsigned int ucData;
}AAA_S2;
int main()
{
  printf("%d  %d\n", sizeof(AAA_S1), sizeof(AAA_S2));
  system("pause");
  return 0;
}
​

Когда AAA_S выровнен на один байт и четыре байта соответственно, сколько места это занимает?

Ответ-616.

Это проблема битовых доменов. У меня есть блог, посвященный выравниванию структуры. Нажмите на эту ссылку, чтобы увидеть https://blog.csdn.net/Dawn_sf…

8.

#include
#include
#pragma pack(4);
int main()
{
  unsigned char puc[4];
  struct sagPIM{
    unsigned char ucpim1;
    unsigned char ucDate:1;
    unsigned char ucDate1:2;
    unsigned char ucDate2:3;
    }*pstPimData;
  pstPimData = (struct sagPIM*)puc;
  memset(puc, 0, 4);
  pstPimData->ucpim1 = 2;
  pstPimData->ucDate = 3;
  pstPimData->ucDate1 = 4;
  pstPimData->ucDate2 = 5;
  printf("%02x  %02x  %02x  %02x\n", puc[0], puc[1], puc[2], puc[3]);
  system("pause");
  return 0;
}
​

​ ​ Это в основном битовое поле, и существуют некоторые отношения хранения.

Поскольку он хранится в битовом домене, структуре требуется всего 2 байта для хранения всего содержимого, а затем она начинает задумываться о своей внутренней структуре.

Позвольте мне нарисовать картину, чтобы понять.

Посмотрите еще раз на результаты операции. Есть картинки и факты.

Все эти вопросы являются обязательными вопросами для письменных экзаменов на протяжении многих лет. Мы должны внимательно изучить связанные с ними области знаний, чтобы мы могли сдать письменные экзамены.~~