- •1. Информатика как наука.
- •2. Информация в материальном мире. Свойства информации.
- •3. Представление информации в эвм.
- •4. Системы счисления. Перевод чисел в различные системы счисления.
- •6. Представление целых положительных и отрицательных чисел
- •7. Истории развития вычислительной техники
- •8. Обшая структура и принцип работы эвм
- •9. Классификация эвм
- •11. Память. Виды памяти.
- •12. Устройства ввода-вывода данных.
- •10. Микропроцессор. Принцип работы.
- •13. Операционные системы. Общие понятия.
- •14. Классификация операционных систем.
- •15. Основы работы с операционной системой Windows.
- •16. Работа с файлами и папками в os Windows. Общие положения.
- •17. Операционная система Unix. Общие понятия.
- •Часть 1 Работа в среде
- •18. Текстовый редактор Word. Набор, редактирование и форматирование текста
- •19. Возможности и технология работы в табличном процессоре мs Ехсеl.
- •20. Виды информационно-вычислительных сетей.
- •21. Техническое обеспечение информационно-вычислительных сетей.
- •22. Интернет: теоретические основы.
- •23. Принципы работы службы www
- •24. Принципы работы службы dns.
- •25. Принципы работы службы fтр.
- •26. Принципы работы службы e-mail
- •27. Языки программирования.
- •28. Компилятор и интерпретатор.
- •29. Этапы создания программы на языке с.
- •30. Структура программы на языке с.
- •Дополнительный пример
- •31. Среда программирования и алгоритмы.
- •32. Создание блок-схемы алгоритма решения задачи.
- •34. Целочисленные типы данных языка с.
- •35. Вещественные типы данных языка с.
- •36. Математические функции
- •37. Ввод/Вывод в с. Стандартные потоки
- •38. Использование функции scanf(). Спецификаторы преобразования. Модификаторы.
- •39. Использование функции printf(). Спецификаторы преобразования. Модификаторы.
- •40. Печать с заданием ширины поля и точности представления.
- •41. Сокращенный оператор ветвления if... Составной оператор.
- •42. Полный оператор ветвления if... Else. Составной оператор.
- •43. Оператор выбора switch() Оператор bгеак.
- •44. Бинарные логические операции. Операции сдвига.
- •45. Бинарные логические операции. Применение, масок. Включение и отключение битов.
- •46. Операторы цикла while … Операторы break, continue.
- •47. Операторы цикла for … Операторы break, continue.
- •48. Операторы цикла do … while Операторы break, continue
- •49. Вложенные циклы.
- •50. Одномерные массивы. Объявление. Инициализация.
- •51. Ввод-вывод одномерных массивов.
- •52. Поиск наибольшего и наименьшего значения массива и их индексов в одномерном массиве.
- •53. Двумерные массивы. Объявление. Инициализация.
- •54. Ввод-вывод двумерных массивов.
- •60. Односимвольные функции ввода/вывода: getchar() и putchar(). Перенаправление ввода/вывода.
- •61. Символы. Библиотека символьных функций и ctype.H.
- •62. Строки. Предоставление строки в памяти.
- •63. Ввод-вывод строк с использованием функций puts(), fputs(), printf(), gets(), fgets(), scanf().
- •64. Обработка строк. Библиотека строковых функций string.H.
51. Ввод-вывод одномерных массивов.
Мы знаем, что скалярные переменные можно инициализировать в описании типа при помощи таких выражений, как например:
int fix = 1;
float flax = PI*2;
при этом предполагается, что PI - ранее введенное макроопределение. Можно ли инициализировать массивы?
Внешние, статические и автоматические массивы можно инициализировать!
Регистровые массивы инициализировать нельзя!
Если ничего не засылать в массив перед началом работы с ним, то внешние, статические и автоматические массивы инициализируются для числовых типов нулем и '\0' (null) для символьных типов, а регистровые массивы содержат какой-то мусор, оставшийся в этой части памяти. Если в статическом, внешнем или автоматическом массиве нам нужны первоначальные значения, отличные от нуля, в этом случае мы можем делать так:
/* дни месяца */
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
main( )
{
int index;
extern int days[];/*необязательное описание */
for(index = 0; index<12; index++)
printf("Месяц %d имеет %d дней.\n", index+1,
days[index]);
}
Результат:
Месяц 1 имеет 31 дней.
Месяц 2 имеет 28 дней.
Месяц 3 имеет 31 дней.
Месяц 4 имеет 30 дней.
Месяц 5 имеет 31 дней.
Месяц 6 имеет 30 дней.
Месяц 7 имеет 31 дней.
Месяц 8 имеет 31 дней.
Месяц 9 имеет 30 дней.
Месяц 10 имеет 31 дней.
Месяц 11 имеет 30 дней.
Месяц 12 имеет 31 дней.
Количество элементов в списке инициализации должно соответствовать размеру массива. Если список меньше размера массива, то элементы массива, на которых не хватило списка, будут забиты нулями. Если же список больше массива, то компилятор выдаст синтаксическую ошибку. Надо просто выделить массив, размер которого будет достаточен для размещения списка.
Предыдущую программу лучше переписать так:
int days[ ] = {31,28,31,30,31,30,31,31,30,31,30,31};
main( )
{
int index;
extern int days[ ];/* необязательное описание */
for(index=0;index<sizeof(days)/(sizeof(int));
index++)
printf("Месяц %d имеет %d дней.\n",index +1,
days[index]);
}
К этой программе следует сделать два существенных замечания.
Первое: если мы используем пустые скобки для инициализации массива, то компилятор сам определит количество элементов в списке и выделит для него массив нужного размера.
Второе: оно касается добавления, сделанного в управляющем операторе for. Не полагаясь на свои вычислительные способности, мы возложили задачу подсчета размера массива на компилятор. Оператор sizeof определяет размер в байтах объекта или типа, следующего за ним. Предположим в нашей вычислительной системе размер каждого элемента типа int равен двум байтам, поэтому для получения количества элементов массива мы делим общее число байтов, занимаемое массивом, на 2. Однако в других системах элемент типа int может иметь иной размер. Поэтому в общем случае выполняется деление на значение переменной sizeof для элемента типа int.
В результате работы этой программы мы получаем точно 12 значений. Наш метод, позволяющий программе самой находить размер массива, не позволил нам напечатать конец массива.
