- •Основы программирования
- •Содержание
- •Лабораторная работа №1 Линейные и разветвляющиеся вычислительные процессы
- •Краткие теоретические сведения
- •Классификация данных
- •Декларирование объектов
- •Структура программы
- •Константы
- •Операции Операции выражения
- •Арифметические операции
- •Операция присваивания
- •Сокращенная запись операции присваивания
- •X##; - постфиксную.
- •Преобразование типов операндов арифметических операций
- •Операция приведения типа
- •Операции сравнения
- •Логические операции
- •Побитовые логические операции, операции над битами
- •Операция «,» (запятая)
- •Функции вывода информации
- •Функции ввода информации
- •Ввод - вывод потоками
- •Стандартные математические функции
- •Синтаксис операторов языка Си
- •Операция присваивания
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Условная операция "? :"
- •Оператор выбора switch
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Циклические операторы while и do–while
- •Вложенные циклы
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операции над указателями (адресная арифметика)
- •Связь указателей и массивов
- •Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа №4 Многомерные массивы, динамическое распределение памяти
- •Краткие теоретические сведения
- •Массивы указателей
- •Указатели на указатели
- •Динамическое размещение данных
- •Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Вызов функции.
- •Изменение значений параметров.
- •Область действия переменных
- •Классы памяти.
- •Рекурсивные функции.
- •Операция typedef
- •Указатели на функции
- •Примеры работы с функциями
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Декларация структурного типа данных
- •Создание структурных переменных
- •Обращение к полям структур
- •Вложенные структуры
- •Использование typedef
- •Массивы структур
- •Размещение структурных переменных в памяти
- •Пример на использование структур
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 7 Файлы в языке с
- •Краткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 8 Графический режим работы
- •Kраткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Команды вставки и удаления (под блоком понимается выделенное подсветкой подмножество символов)
- •Команды работы с блоками
- •Набор текста программы
- •Компиляция, редактирование связей, запуск программы на выполнение
- •Многофайловая компиляция
- •Отладка программы
- •Использование глобальных переменных, объявленных вне файла
- •Литература
Связь указателей и массивов
Указатели и массивы в языке С тесно связаны между собой. Имя массива является указателем на его первый элемент, т.е. для массива
intp[10],
p
p[0]
имеют одинаковые значения, т.к. адрес первого (с индексом 0) элемента массива это адрес начала последовательно расположенных элементов массива. Рассмотрим обращение к элементам массива на примере. Пусть объявлены - массив из 100 бъектов типа floatи указатель на объект типаfloat:
float p[100];
float *q;
int i;
если выполнить операцию q=p;
то обращения к элементу массива p: p[i] *(q+i) и *(p+i) эквивалентны.
Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: q[i] и *(q+i). Первая форма удобнее для читаемости текста, но вторая обычно эффективнее по быстродействию программы.
Очевидна эквивалентность выражений
&q[0] <-> &(*q) <-> q // адрес нулевого элемента массива
*q <-> q[0] // значение нулевого элемента массива
Операция sizeof
Для определения размера памяти, необходимого для размещения объектов в языке С используется унарная операция:
int sizeof(параметр);
параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof возвращает размер памяти в байтах, отводимый под объект.
Если указан идентификатор сложного объекта (массив, структура, объединение), то результатом является размер всего сложного объекта.
Например:
sizeof(int) результат 2 байта,
int b[5]; sizeof(b) результат 10 байт;
intc[3][4];sizeof(c) результат 24 байта.
Нарпимер:
char *m[]={"Winter","Spring","Summer","Automn"};
k=sizeof(m)/sizeof(*m);
printf("\n Количество строк = %d",k);
Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:
#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{
char s[20][10],r[10];
int i,j,n;
clrscr();
puts(" Веди количество слов \n";
scanf(“%d”,&n);
for(i=0;i<n;i++)
scanf("%s",&s[i]);
for(i=0;i<(n-1);i++)
for(j=(i+1);j<n;j++)
if(strcmp(s[i],s[j])>0)
{
strcpy(r,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],r);
}
for(i=0;i<n;i++)
printf("\n %s",s[i]);
getch();
}
Пример 2: Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main(void)
{
char *s,*s1; // Обьявление строки указателем
int i, k;
clrscr();
puts(" Введите исходную строку");
gets(s);
k=strlen(s);
puts("РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ\n");
for (i=0; i<k; i++)
printf("%c",s1[i]=s[k-i-1]); // Переворачиваем строку s
s1[k]=’\0’; // Устанавливаем конец строки
printf(“ %s\n”,strcpy(s1,s) ? ” YES - Polindrom!”:” NO !”)
printf("\n Press any key...");
getch();
}
Варианты индивидуальных заданий
1. Ввести целое число N. Выделить из этого числа цифры, кратные 3, и записать их в одномерный массив.
2. В заданной двумерной матрице выделить 3 блока по 2 строки и 2 столбца (блоки расположены на главной диагонали матрицы). Упорядочить блоки по величине их диагоналей (по убыванию значений их диагоналей).
3. Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе. Сформировать одномерный массив из 5 элементов: a, а2, а3, а4, а5.
4. Элементы заданного массива X циклически сдвинуть на K позиций вправо (влево).
5. Дано число N целого типа. Определить, симметрично ли оно, т.е. одинаковы ли цифры слева и справа (12321). Записать 3 последние цифры в одномерный массив.
6. Упорядочить элементы массива x по возрастанию.
7. Даны координаты n точек на плоскости: x1,y1, x2,y2,…. xn,yn. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара единственная).
8. Заданы два массива по N целых чисел. Найти наименьшее среди чисел первого массива, которое не входит во второй массив (считая, что хотя бы одно такое число есть).
9. Дан массив из N целых чисел. Определить количество инверсий в этом массиве (т.е. таких пар элементов, в которых большее число находится слева от меньшего: xi > xjпри i < j).
10. Определить количество шестизначных чисел, в которых сумма первых 3 цифр равна сумме 3 последних цифр, например 105123.
11. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 2, то удаляются все числа, которые делятся на 2.
12. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L четная, то удаляются 2 первых и 2 последних символа.
13. Выяснить, имеются ли среди символов S1...Sn некоторой строки все буквы, входящие в слово DOS.
14. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L нечетная, то удаляется символ, стоящий посередине строки.
15. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов каждого второго символа ! на $.
16. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов всех пробелов на символ $.
17. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L>10, то удаляются все цифры.
18. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 3, то удаляются все числа, делящиеся на 3.
19. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 5, то подсчитывается количество скобок всех видов.
20. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 4, то первая часть строки меняется местами со второй.
21. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L=10, то удаляются все A...Z.
22. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина
L >15, то удаляются все a…z.
23. В строке символов поменять местами символы на четных и нечетных позициях.
24. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина
L >6, то выделяется подстрока в { } скобках.
25. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L >5, то выделяется подстрока до первого пробела.
26. Ввести целое число N. Выделить из этого числа цифры, кратные 3, и записать их в одномерный массив.
27. В заданной двумерной матрице выделить 3 блока по 2 строки и 2 столбца (блоки расположены на главной диагонали матрицы). Упорядочить блоки по величине их диагоналей (по убыванию значений их диагоналей).
28. Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе. Сформировать одномерный массив из 5 элементов: a, а2, а3, а4, а5.
29. Элементы заданного массива X циклически сдвинуть на K позиций вправо (влево).
30. Дано число N целого типа. Определить, симметрично ли оно, т.е. одинаковы ли цифры слева и справа (12321). Записать 3 последние цифры в одномерный массив.