Разделы презентаций


Программирование на языке Си

Содержание

Массивы в процедурахЗадача: составить процедуру, которая переставляет элементы массива в обратном порядке. void Reverse ( int A[] , int N ){int i, c;for ( i = 0; i < N/2; i

Слайды и текст этой презентации

Слайд 1Программирование на языке Си
Массивы в процедурах и функциях

Программирование  на языке Си Массивы в процедурах и функциях

Слайд 2Массивы в процедурах
Задача: составить процедуру, которая переставляет элементы массива в

обратном порядке.
void Reverse ( int A[] , int N

)
{
int i, c;
for ( i = 0; i < N/2; i ++ ) {
c = A[i];
A[i] = A[N-1-i];
A[N-1-i] = c;
}
}

int A[]

параметр-массив

размер массива

Массивы в процедурахЗадача: составить процедуру, которая переставляет элементы массива в обратном порядке. void Reverse ( int A[]

Слайд 3Задания
Написать процедуру, которая сортирует массив по возрастанию, и показать пример

ее использования.

ЗаданияНаписать процедуру, которая сортирует массив по возрастанию, и показать пример ее использования.

Слайд 4Покажите применение данной процедуры для следующей задачи:
Имеются результаты забега

на 100 м - массив из 20 случайных чисел в

диапазоне от 3 до 18, вывести результаты в порядке возрастания.
Покажите применение данной процедуры для следующей задачи: Имеются результаты забега на 100 м - массив из 20

Слайд 5Массивы в функциях
Задача: составить функцию, которая находит сумму элементов массива.


int Sum ( int A[], int N )
{
int i, sum

= 0;
for ( i = 0; i < N; i ++ )
sum += A[i];
return sum;
}

результат – целое число

int A[]

параметр-массив

размер массива

Массивы в функцияхЗадача: составить функцию, которая находит сумму элементов массива. int Sum ( int A[], int N

Слайд 6Задания
Создайте функцию, которая находит сумму элементов больше среднего.

ЗаданияСоздайте функцию, которая находит сумму элементов больше среднего.

Слайд 7Программирование на языке Си
Символьные строки

Программирование  на языке Си Символьные строки

Слайд 8Символьные строки
рабочая часть
s[0]
s[1]
s[2]
s[3]
char s[80];
признак окончания строки: символ с кодом 0
Символьная

строка – это последовательность символов, которая заканчивается символом '\0'.

Символьные строкирабочая частьs[0]s[1]s[2]s[3]char s[80];признак окончания строки: символ с кодом 0Символьная строка – это последовательность символов, которая заканчивается

Слайд 9Объявление символьных строк
Объявить строку = выделить ей место в памяти

и присвоить имя.

char s[80];

char s1[80] = "abc";

char qqq[] =

"Вася";

выделяется 80 байт, в строке – «мусор» (если она глобальная, то нули '\0‘)

выделяется 80 байт, занято 4 байта (с учетом '\0')

выделяется 5 байт
(с учетом '\0')

Объявление символьных строкОбъявить строку = выделить ей место в памяти и присвоить имя.char s[80]; char s1[80] =

Слайд 10Ввод и вывод символьных строк
Задача: ввести слово с клавиатуры и

заменить все буквы «а» на буквы «б».
main()
{
char q[80];
int

i;
printf("Введите строку\n");
scanf( "%s", q);
i = 0;
while ( q[i] != '\0' ) {
if ( q[i] == 'а' ) q[i] = 'б';
i ++;
}
printf ( "Результат: %s ", q );
}

%s

не надо ставить &:
q  &q[0]

%s – формат для ввода и вывода символьных строк (выводится только часть до '\0'

"%s"

пока не дошли до конца строки

переход к следующему символу

начали с q[0]

Ввод и вывод символьных строкЗадача: ввести слово с клавиатуры и заменить все буквы «а» на буквы «б».main(){

Слайд 11Ввод одного слова:



Ввод строки с пробелами:
char q[80];
printf ("Введите текст:\n");
scanf (

"%s", q );
printf ("Введено:\n%s", q );
Ввод символьных строк
Введите текст:
Вася пошел

гулять
Введено: Вася

char q[80];
printf("Введите текст:\n");
gets ( q );
printf("Введено:\n%s", q );

Введите текст:
Вася пошел гулять
Введено: Вася пошел гулять

gets ( q );

Ввод одного слова:Ввод строки с пробелами:char q[80];printf (

Слайд 12Универсальный способ:



Только для одной строки:
printf ( "Результат: %s", q );
Вывод

символьных строк
puts ( q );
можно выводить сразу и другую информацию:

надписи, значения переменных, …

вывод только одной строки
после вывода – переход на новую строку

printf ( "%s\n", q );

Универсальный способ:Только для одной строки:printf (

Слайд 13Функции для работы со строками
Длина строки: strlen (string length)
Подключение библиотеки:
#include


char q[80] = "qwerty";
int n;
n = strlen ( q );
n

= 6
Функции для работы со строкамиДлина строки: strlen (string length)Подключение библиотеки:#include char q[80] =

Слайд 14Сравнение строк
char q1[80], q2[80];
int n;
gets ( q1 );
gets ( q2

);
n = strcmp ( q1, q2 );
strcmp (string comparison):

Сравнение строкchar q1[80], q2[80];int n;gets ( q1 );gets ( q2 );n = strcmp ( q1, q2 );strcmp

Слайд 15Пример решения задачи
Задача: ввести строку и определить, сколько в ней

слов. Программа должна работать только при вводе правильного пароля.
Идея решения:
проверка

пароля – через strcmp
количество слов = количеству первых букв слова
первая буква: пробел и за ним «не пробел»


исключение: предложение начинается со слова (а не с пробела)
Пример решения задачиЗадача: ввести строку и определить, сколько в ней слов. Программа должна работать только при вводе

Слайд 16Проверка пароля
#include
main()
{
char secret[] = "123", pass[20];
printf (

"Введите пароль\n" );
gets ( pass );
if ( strcmp

( pass, secret ) != 0 )
{
printf ( "Пароль неверный" );
getch ();
return 1;
}
...
}

если пароль неверный...

сообщить об ошибке и выйти из программы

аварийное завершение, код ошибки 1

Проверка пароля#include main(){ char secret[] =

Слайд 17Основная часть программы
#include
#include
main()
{
char q[80];
int i,

len, count = 0;
... // проверка пароля
printf ("Введите

предложение\n");
gets ( q );
len = strlen( q );
if ( q[0] != ' ') count++;
for ( i = 0; i < len - 1; i ++ )
if ( q[i] == ' ' && q[i+1] != ' ' )
count ++;
printf ( "Найдено %d слов", count );
}

особый случай

если нашли пробел, а за ним не пробел…

предыдущий слайд

Основная часть программы#include #include main(){ char q[80]; int i, len, count = 0; ... // проверка пароля

Слайд 18Задания
Ввести предложение и определить, сколько слов заканчиваются на букву 'а'.

Пример:
Введите предложение: Введите предложение:
Мама мыла

раму Декан пропил бутан Найдено слов: 2 Нет таких слов
ЗаданияВвести предложение и определить, сколько слов заканчиваются на букву 'а'.  Пример:	 Введите предложение:   Введите

Слайд 19Копирование строк
strcpy (string copy)
char q1[10] = "qwerty", q2[10] = "01234";

strcpy

( q1, q2 );
куда
откуда
копирование «хвоста» строки
char q1[10] = "qwerty", q2[10]

= "01234";
strcpy ( q1, q2+2 );

q2

q1

q2 = &q2[0]

q2+2 = &q2[2]

Копирование строкstrcpy (string copy)char q1[10] =

Слайд 20Копирование строк
копирование в середину строки
char q1[10] = "qwerty", q2[10] =

"01234";
strcpy ( q1+2, q2 );
q2
q1
q1+2 = &q1[2]
char q1[10] = "qwerty",

q2[10] = "01234";
strcpy ( q1+2, q2+3 );

q2

q1

q2+3 = &q2[3]

q1+2 = &q1[2]

Копирование строккопирование в середину строкиchar q1[10] =

Слайд 21Копирование строк
strncpy – копирование нескольких символов
char q1[10] = "qwerty", q2[10]

= "01234";
strncpy ( q1+2, q2, 2 );
q2
q1
q1+2 = &q1[2]


Слайд 22Копирование строк
копирование строки-константы
char q1[10] = "qwerty";
strcpy ( q1+1, "ABCD");
q1
char q1[10]

= "qwerty";
strcpy ( "ABCD", q1+2 );
НЕ

Копирование строккопирование строки-константыchar q1[10] =

Слайд 23Копирование строк
копирование внутри одной строки
char q[10] = "012345";
strcpy ( q,

q+2 );
q
char q[10] = "012345";
strcpy ( q+2, q );
q
Зацикливание и

зависание компьютера!
Копирование строккопирование внутри одной строкиchar q[10] =

Слайд 24Объединение строк
strcat (string concatenation) = копирование второй строки в конец

первой
char q1[10] = "qwe", q2[10] = "0123";
strcat ( q1, q2

);

q2

q1

char q1[10] = "qwe", q2[10] = "0123";
strcat ( q1, q2+2 );

q2

q1

Объединение строкstrcat (string concatenation) = копирование второй строки в конец первойchar q1[10] =

Слайд 25что-то другое
Проблемы при копировании строк
char q1[] = "qwer", q2[10] =

"01234";
strcpy ( q1+2, q2 );
не хватает места для строки-результата
q2
q1
зацикливание при

копировании в ту же строку «слева направо»

char q[10] = "01234";
strcpy ( q+2, q );

что-то другоеПроблемы при копировании строкchar q1[] =

Слайд 26Программирование на языке Си
Файлы

Программирование  на языке Си Файлы

Слайд 27Файлы
Файл – это область на диске, имеющая имя.
Файлы
только текст без

оформления, не содержат управляющих символов (с кодами < 32), кроме перевода

строки

ACSII (1 байт на символ)
UNICODE (2 байта на символ)

*.txt, *.log,
*.htm, *.html

могут содержать любые символы кодовой таблицы

*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg

Текстовые

Двоичные

Папки (каталоги)

ФайлыФайл – это область на диске, имеющая имя.Файлытолько текст без оформления, не содержат управляющих символов (с кодами

Слайд 28Принцип сэндвича
I этап. открыть файл (сделать его активным, приготовить к

работе)
f = fopen("qq.dat", "r");
II этап: работа с файлом
III этап:

закрыть (освободить) файл

fclose ( f );

fscanf ( f, "%d", &n ); // ввести значение n

fprintf( f, "n=%d", n ); // записать значение n

для чтения ("r", англ. read)

f = fopen("qq.dat", "w");

для записи ("w", англ. write)

f = fopen("qq.dat", "a");

для добавления ("a", англ. append)

Переменная типа «указатель на файл»: FILE *f;

Принцип сэндвичаI этап. открыть файл (сделать его  активным, приготовить к работе)f = fopen(

Слайд 29Работа с файлами
Особенности:
имя файла упоминается только в команде fopen, обращение

к файлу идет через указатель f;
файл, который открывается на чтение,

должен существовать
если файл, который открывается на запись, существует, старое содержимое уничтожается
данные (этим способом) записываются в файл в текстовом виде
когда программа заканчивает работу, все файлы закрываются автоматически
после закрытия файла переменную f можно использовать еще раз для работы с другим файлом
Работа с файламиОсобенности:имя файла упоминается только в команде fopen, обращение к файлу идет через указатель f;файл, который

Слайд 30Последовательный доступ
при открытии файла курсор устанавливается в начало
чтение выполняется с

той позиции, где стоит курсор
после чтения курсор сдвигается на первый

непрочитанный символ

12 5 45 67 56●

конец файла
(end of file, EOF)

12 5 45 67 56●

f = fopen("qq.dat", "r");

fscanf ( f, "%d", &x );

Последовательный доступпри открытии файла курсор устанавливается в началочтение выполняется с той позиции, где стоит курсорпосле чтения курсор

Слайд 31Ошибки при открытии файла
FILE *f;
f = fopen("qq.dat", "r");
if ( f

== NULL ) {
puts("Файл на найден.");
return;
}
NULL
неверное имя

файла
нет файла
файл заблокирован другой программой

Если файл открыть не удалось, функция fopen возвращает NULL (нулевое значение)!

!

FILE *f;
f = fopen("qq.dat", "w");
if ( f == NULL ) {
puts("Не удалось открыть файл.");
return;
}

NULL

неверное имя файла
файл «только для чтения»
файл заблокирован другой программой

Ошибки при открытии файлаFILE *f;f = fopen(

Слайд 32Пример
Задача: в файле input.txt записаны числа (в столбик), сколько их

– неизвестно. Записать в файл output.txt их сумму.
Алгоритм:
Открыть файл input.txt

для чтения.
S = 0;
Прочитать очередное число в переменную x.
Если не удалось, перейти к шагу 7.
S += x;
Перейти к шагу 3.
Закрыть файл input.txt.
Открыть файл output.txt для записи.
Записать в файл значение S.
Закрыть файл output.txt.

цикл с условием «пока есть данные»

ПримерЗадача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output.txt их

Слайд 33Как определить, что числа кончились?
FILE *f;
int n, x;
f = fopen("input.txt",

"r");
...
n = fscanf ( f, "%d", &x );
if ( n

! = 1 )
puts ( "Не удалось прочитать число" );

дошли до конца файла
встретили «не число»

Как определить, что числа кончились?FILE *f;int n, x;f = fopen(

Слайд 34Программа
main()
{
FILE *f;
int n, x, S = 0;
f = fopen (

"input.txt", "r" );
if ( f == NULL ) {
printf("Файл

не найден.");
return;
}
while ( 1 ) {
n = fscanf ( f, "%d", &x );
if ( n != 1 ) break;
S += x;
}
fclose ( f );
f = fopen ( "output.txt", "w" );
fprintf ( f, "S = %d", S );
fclose ( f );
}

ошибка при открытии файла

цикл чтения данных: выход при n  1.

запись результата

Программаmain(){FILE *f;int n, x, S = 0;f = fopen (

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика