Главная » Все файлы » Просмотр файлов из архивов » Документы » Краткий конспект семинарских занятий по языку C - Н.Д. Васюкова_ И.В. Машечкин_ В.В.Тюляева_ Е.М.Шляховая

Краткий конспект семинарских занятий по языку C - Н.Д. Васюкова_ И.В. Машечкин_ В.В.Тюляева_ Е.М.Шляховая, страница 3

2019-05-08СтудИзба

Описание файла

Документ из архива "Краткий конспект семинарских занятий по языку C - Н.Д. Васюкова_ И.В. Машечкин_ В.В.Тюляева_ Е.М.Шляховая", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Краткий конспект семинарских занятий по языку C - Н.Д. Васюкова_ И.В. Машечкин_ В.В.Тюляева_ Е.М.Шляховая"

Текст 3 страницы из документа "Краткий конспект семинарских занятий по языку C - Н.Д. Васюкова_ И.В. Машечкин_ В.В.Тюляева_ Е.М.Шляховая"

p1=s; p2=t;

while( *p2++=*p1++);

Задачи.

  1. Конкатенировать строки (аналог функции strcat).

  2. Сравнить строки (аналог функции strcmp).

  3. Присвоить переменной единицу, если одна строка содержится в конце другой, и ноль в противном случае.

  4. Поменять местами первый отрицательный элемент вещественного массива m1 с последним положительным элементом вещественного массива m2.

  5. Изменить знак у всех отрицательных элементов вещественного массива X.

  6. Определить, у скольких элементов целочисленного массива X равные соседи(предыдущий и последующий элементы). Записать ответ в переменную n.

  7. Проверить на равенство строки s1 и s2 при условии, что пробелы не учитываются.

  8. Описаны 2 строки:

char s[255], t[10];

Подсчитать количество вхождений строки t в строку s, ответ записать в переменную count, а переменной last присвоить индекс начала последнего вхождения.

  1. Описаны 2 строки:

char s[200], t[200];

Все цифры строки s записать в начало строки t, а остальные символы – в конец (в любом порядке).

  1. Упорядочить вещественный массив х по неубыванию, используя метод сортировки выбором (найти максимальный элемент массива и переставить его с последним элементом; затем применить этот же метод ко всем элементам, кроме последнего).

  2. Упорядочить вещественный массив х по неубыванию, используя метод сортировки обменом ("метод пузырька") (последовательно сравнивать пары соседних элементов: x1 с x2, х2 с х3 и т.д., и если первый элемент пары больше второго, то переставлять их – наибольший элемент окажется в конце массива; затем применить этот же метод ко всем элементам, кроме последнего).

  3. Упорядочить вещественный массив х по неубыванию, используя метод сортировки вставками (пусть первые k элементов уже упорядочены по неубыванию; взять (k+1)-ый элемент и разместить его между первыми k, не нарушая порядок).

ТЕМА 4. Понятие функции. Оператор return. Понятие прототипа функции. Механизм передачи параметров.

В стандарте ANSI C представлено два способа описания и определения функций, так называемые «новая» (введенная стандартом) и «старая» (используемая до принятия стандарта) нотации.

Согласно новой нотации определение любой функции имеет следующий вид:

[<тип результата>]<имя функции>([список параметров])

{ [декларации]

[операторы]

}

Согласно старой нотации функция определяется следующим образом:

[<тип результата>]<имя функции>([список имен парам.])

[описание параметров]

{ [декларации]

[операторы]

}

В этом случае в круглых скобках после имени функции перечисляются имена параметров, а их типы задаются перед первой открывающей фигурной скобкой. Функция может возвращать одно значение, тип которого указывается в заголовке, а само значение задается выражением в операторе return:

return <выражение>;

Оператор return возвращает управление вызвавшей функции.

Если возвращаемое значение имеет тип int, то тип результата можно не указывать. Функция может и не возвращать значение, тогда вместо типа результата следует писать void.

В стандарт Си было добавлено средство контроля за соответствием фактических параметров в вызове функции ее формальным параметрам. В начале программного файла, как правило, для всех функций, кроме main, задаются прототипы. Синтаксически прототип повторяет заголовок функции. При отсутствии прототипа функции, если в выражении встретилось имя, нигде ранее не описанное, за которым следует открывающая скобка, такое имя считается именем функции, возвращающей значение типа int. При несоответствии типов формальных и фактических параметров автоматическое приведение типов не осуществляется, что приводит к ошибочному результату. А при наличии прототипа функции все приведения типов осуществляются автоматически. Согласованность имен параметров в прототипе и в определении функции не требуется, могут быть указаны только типы параметров без имен.

В случае старой нотации в прототипе функции параметры не указываются, и компилятор не может обнаружить ошибок при несоответствии количества формальных и фактических параметров или их типов. Пример описания и определения функции в новой и в старой нотациях:

Аргументы функции передаются по “значению”. Если аргументом является имя массива, то функции передается копия адреса начала этого массива, а сам массив не копируется. Нельзя передать целиком сам массив функции и таким образом:

int arr[10];

...

f(*arr);

В этом случае функция f получит в качестве фактического значения аргумента значение нулевого элемента массива.

Задача1. Написать функцию, суммирующую два вещественных значения в двух вариантах: сумма – возвращаемое значение функции и сумма – параметр функции.

. . .

double sum1(double,double);/* прототип

функции sum1*/

void sum2(double,double,double*); /* прототип

функции sum2*/

main()

{ double a1=2.5, u;

int a2=3;

u=sum1(a1,a2);

printf(“u=%f\n”,u); /* u=5.5 */

sum2(a1,a2,&u);

printf(“u=%f\n”,u); /* u=5.5 */

}

double sum1(double x,double y)

{ return x+y; }

void sum2(double x,double y,double *z)

{ *z=x+y; }

Задача 2. Написать функцию суммирования двух целочисленных векторов.

. . .

void sum_vec(int*,int*,int*,int);

main()

{ int m1[20],m2[20],m3[20],i;

. . .

sum_vec(m1,m2,m3,20);

for(i=0;i<20;i++)

printf(“m3[%d]=%d\n”,i,m3[i]);

}

void sum_vec(int x[],int *y,int z[],int k)

{ int i;

for(i=0;i<k;i++)

*z++=x[i]+y[i]; /*z[i]=x[i]+y[i];*/

}

Список формальных параметров функции может быть переменной длины – в этом случае он заканчивается “, …” и должен содержать хотя бы один именованный параметр. Примером такой функции является функция печати printf, описанная в stdio.h:

int printf(const char *format, …);

Для работы с параметрами, количество и тип которых заранее не известны, используется механизм макросов из файла стандартной библиотеки <stdarg.h>. В теле функции заводится переменная типа va_list – указатель на очередной неименованный аргумент. Доступ к неименованным параметрам через переменную типа va_list возможен только после обращения к макросу va_start. Макрос va_start получает два параметра - переменную типа va_list и последний именованный параметр функции и инициализирует переменную типа va_list так, чтобы она указывала на первый неименованный параметр:

int f(p1, p2, ...)

{

va_list parg;

va_start(parg, p2);/* p2 – последний

именованный параметр функции f */

int i = va_arg(parg, int);

...

va_end(parg);

}

Далее, каждое обращение к макросу va_arg выдает очередной параметр и передвигает указатель (переменную типа va_list) на следующий параметр. К макросу va_arg обращаются с двумя параметрами – переменной типа va_list, проинициализированной с помощью va_start, и именем типа возвращаемого параметра. Макрос va_end нужен для корректного завершения работы с переменной типа va_list.

Поскольку функции не известны ни типы передаваемых неименованных параметров, ни их количество, то для корректной работы с такими параметрами может использоваться различная дополнительная информация. Например, как в случае функции printf, параметр format полностью определяет типы и число последующих параметров. Другой способ – передавать через фиксированный параметр количество неименованных параметров.

Пример: Написать функцию, возвращающую максимальный из полученных ею фактических параметров (типа unsigned int).

#include <stdio.h>

#include <stdarg.h>

unsigned int unsgn_max(unsigned int count, ...);

/* Число неименованных параметров передается через параметр count и не учитывается при поиске максимума. */

main()

{

printf(“max = %d\n”,

unsgn_max (3, 10, 20, 30));

}

unsigned int unsgn_max(unsigned int count, ...)

{

va_list ap;

unsigned int res = 0, cur;

int i;

va_start(ap, count);

for(i=1; i<=count; i++)

if(res < (cur = va_arg(ap,uinsigend int)))

res = cur;

va_end(ap);

return res;

}

Задачи.

  1. Дан массив, содержащий заданное количество вещественных чисел. Написать функцию, возвращающую максимальное значение этого массива.

  2. Даны целочисленные массивы X и Y , содержащие по 20 элементов. Написать функцию, которая возвращает значение u.

  1. Написать аналог функции strstr , которая возвращает указатель на первое вхождение одной строки в другую и нулевой указатель в противном случае. Используя функцию strstr, найти последнее вхождение строки “end” во введенной строке. Распечатать символы, которые следуют за этим вхождением.

  2. Написать функцию, упорядочивающую вещественный массив. Число элементов массива и сам массив передать в качестве параметров.

  3. Написать функцию getletter(), читающую одну литеру из стандартного ввода с помощью getchar() и возвращающую введенную литеру, если это большая или малая латинская буква, и –1 в противном случае.

  4. Описать функцию, определяющую, сколько элементов вещественного массива X из n элементов равны числу у.

  5. Написать функцию, которой передаются 2 100-элементных вещественных массива, определяющую, составлены ли эти 2 массива из одних и тех же чисел без учета порядка их следования, но с учетом повторяющихся чисел(функция возвращает 1 в случае положительного ответа).

  6. Написать функцию, которая за 1 просмотр циклически сдвигает полученный вещественный массив на 20 позиций влево (функция для работы должна использовать вспомогательный массив).

  7. Написать функцию, вычисляющую n-ое число Фибоначчи (n>=0) по правилу:

ТЕМА 5. Общая структура программного файла. Области видимости и существования переменных. Препроцессор.

Программа может размещаться как в одном, так и в нескольких файлах, содержать одну или несколько функций, одна из которых считается головной (main), с нее начинается выполнение программы. Определение каждой функции размещается полностью в одном файле, но файл может содержать несколько определений различных функций.

В соответствии со структурой программы переменные могут обладать следующими качествами:

  • видимость переменной (область видимости);

  • существование переменной (область существования).

Область видимости переменной определяет текстовое пространство программы (оно не обязательно непрерывно), из любой точки которого доступна данная переменная с данным именем. С точки зрения видимости можно выделить следующие группы переменных:

  • видимые в пределах блоков,

  • видимые в пределах файла,

  • видимые в пределах программы.

Для переменных, определенных внутри функции в начале любого блока, областью видимости является весь этот блок. В случае вложенных блоков переменные, определенные внутри вложенного блока, “перекрывают” переменные с такими же именами, определенные в объемлющем блоке (и так для любой степени вложенности). Например:

main()

{ int x = 1;

if(x>0)

{ int x = 2;

printf(“x = %d\n”, ++x); /*выводит: x = 3 */

}

printf(“x = %d\n”, x); /*выводит: x = 1 */

}

Переменные, определенные внутри функции, “перекрывают” формальные параметры с теми же именами4:

int f(int f)

{

int f = 1;

}

Переменные, определенные вне блоков, доступны с точки определения до конца файла. Если на такую переменную нужно сослаться до того, как она определена, должно быть ее описание со спецификатором extern, например:

int x;

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
420
Средний доход
с одного платного файла
Обучение Подробнее