
- •1.1 Арифметические операторы.
- •1.3. Логические операторы
- •1.6. Выражения
- •1.7. Преобразование типов
- •2.6. Вложение else if
- •2.7. Инструкция switch
- •3.1. Оператор цикл for
- •3.4. Цикл do-while
- •3.3. Цикл while
- •4.1. Алгоритм Евклида
- •4.2. Алгоритмы обмена чисел
- •4.3.А. Для заданного натурального числа определить количество единичных бит в его представлении.
- •4.3.B. Найти количество повторений каждой цифры у заданного натурального числа
- •4.3.C. Перевод из 10-й с/с в 2..9
- •5.1. Объявление и определение функций .
- •5.2. Функция main()
- •5.3. Функция main() с параметрами
- •5.4. Обмен данными между функциями. Возвращаемое значение
- •5.5. Параметры функции
- •5.6.A. Функция перевода числа в различные нумерации
- •5.6.C. Поиск количества единичных бит в двоичном представлении числа.
- •5.6.E. Вычисление n!
- •5.6.F. Вычисление сочетаний из n по m без факториала
- •7. Функции форматированного вывода
- •8. Функции форматированного ввода
- •9. Функции общего назначения
- •Void srand(unsigned int );
- •11.1. Объявление и инициализация массива
- •11.3. Ввод-вывод массивов
- •11.4 Операции над элементами массива
- •11.5. Передача массивов функциям
- •11.6. Обработка одномерных и двумерных массивов
- •11.7. Поиск элемента с заданными характиристиками
- •12.1. Переменные-указатели
- •12.2. Oператоры для работы с указателями.
- •12.3. Арифметические действия с указателями.
- •12.4. Динамическое распределение памяти
- •12.5. Указатели и массивы
- •12.6. Массивы-параметры
- •12.7. Указатели на константы и константные указатели.
- •12.8. Указатели на функции.
- •12.9. Алгоритмы преобразование и перестановки .
- •12.10. Алгоритмы расширение и сжатие массивов
- •13.1Сортировка пузырьком
- •13.2Сортировка Вставками
- •13.3Сортировка выбором
- •13.4Линейный поиск
- •Int sprintf(char *buffer, const char *format, ...);
- •15 Цели введения новых типов:
- •Int fclose(file* stream);
- •Int feof(file* stream);
- •18. Функции и разработка программ
- •18.1. Функции с переменным количеством параметров
- •18.2. Глобальные и локальные переменные, область видимости и время существования.
- •18.3. Спецификаторы классов памяти.
- •18.4. Компоновка нескольких файлов в одну программу
- •18.5. Директивы препроцессора
- •19.1 Рекурсии
- •Задача Иосифа Флавия
- •Задача о рюкзаке
- •Классическая архитектура компьютера
- •Процессор - программно-управляемое устройство
- •Регистры, назначение и характеристика
- •Xchg приемник, источник
- •23Команды сравнения:
- •25 Команды организации циклов:
- •26 Команды пересылки:
- •27 Логические команды:
- •28 Команды обработки строк
- •Префиксы повторения
- •29.1. Регистры сопроцессора
- •29.2. Команды пересылки данных
- •29.3. Арифметические команды
- •29.4. Команды сравнения чисел
- •29.5. Трансцендентные команды
- •29.6. Управляющие команды
- •30.1. Команда call
- •23.6. Внешние подпрограммы
- •23.7.Компилятор masm
5.5. Параметры функции
Все параметры в функции C передаются по значению, т. е. при вызове функции в стек заносится копия значения фактического параметра, и операторы в теле функции работают с этой копией. Поэтому значения фактических параметров, которые переданы в функцию, не изменяются. Передача параметров по значению предусматривает следующие действия:
1. При компиляции функции выделяются участки памяти для формальных параметров. 2.Формальные параметры - это внутренние объекты функции. Для параметров типа float формируются объекты типа double. Для параметров типа char, short int создаются объекты типа int. 3.Если параметром является массив, то формируется указатель на начало этого массива и он служит представлением массива-параметра в теле функции.
4. Вычисляются значения выражений, использованных в качестве фактических параметров при вызове функции. 5. Значения выражений-фактических параметров заносятся в участки памяти, выделенные для формальных параметров функции. 6. В теле функции выполняется обработка с использованием значений внутренних объектов-параметров, и результат передается в точку вызова функции как возвращаемое ею значение. 7. Никакого влияния на фактические параметры функция не оказывает.
Для того чтобы обеспечить изменение передаваемых в функцию фактических параметров, необходимо явно передать адрес изменяемого параметра. Этого можно достичь двумя способами: 1) в качестве формального параметра описать указатель на тип, с которым будем работать; 2) использовать ссылки.
5.6.A. Функция перевода числа в различные нумерации
int System10( int n) { int a = 0, r = 1; while (n >= 1) { a = a + (n % p) * r;
r = r * 10; n = n / p; }
5.6.B. Перестановка цифр у целого числа (789->978)
int Rev (int n) { int tmp,digit, n_dig; tmp = n; n_dig = 0; while (tmp > 0) { tmp = tmp / 10; n_dig++; } tmp = n / 10; digit = n % 10; int res = digit * Step(10, n_dig - 1) + tmp;
//ф-я step пишется отдельно
return res;
}
5.6.C. Поиск количества единичных бит в двоичном представлении числа.
int Count_Bit(int a)
{ int bit;
int mask = 1; int num = 0;
for ( int i = 0;i <=31;i++)
{
bit=mask & a;
if (bit == mask) num++;
mask = mask << 1;
}
return num;
}
5.6.D. Поиск совершенных чисел с использованием функций int step(int x,int n)// функция xn см пример 7.3 {int r=1; while (n != 0) { if (n % 2 == 1) r=r*x; x=x*x;
n=n / 2;} return r;
}
int Prime(int p)//функция проверки простое ли число { int flag,d; if ((p==2) ||(p==3))flag=1;//простое else{d=2; flag=1; //простое while ((d<=p/2) && (flag)) if ( !(p%d)) flag=0;//нет else ++d; } return flag;
}
void main() { int p=2,i=1,n,ch; //написать ввод n while (i<=n) // Вычисление N совершенных чисел { if (Prime(p)) { ch=step(2,p-1)*(step(2,p)-1); cout <<ch<<endl; i++; } p++; }} }