4919

Технология программирования на языках Си и C++

Практическая работа

Информатика, кибернетика и программирование

О языках Си и C++. В качестве базового языка программирования выбран C++, который является одним из главных инструментом в современном программировании. C++ является мощным и достаточно объемным языком, но, в то же время, у него есть досто...

Русский

2012-11-29

61.96 KB

40 чел.

Введение.

О языках Си и C++.

В качестве базового языка программирования выбран C++, который является одним из главных инструментом в современном программировании. C++ является мощным и достаточно объемным языком, но, в то же время, у него есть достоинства, которые позволяют рекомендовать его для первоначального обучения программированию. Отметим, например, последовательную реализацию в C++ концепции структурного программирования, простой и удобный ввод и вывод.

Предшественником языка C++ является язык Си, разработанный Денисом Ритчи в начале 1970-х годов Си относится к языкам среднего уровня, поскольку в нем сочетаются управляющие структуры высокого уровня и возможность манипулировать отдельными битами, байтами и адресами. Язык Си быстро завоевал популярность у программистов благодаря своей лаконичности, выразительности и эффективности. Долго время единственным руководством по языку Си была книга заслужившая почетное название «библия языка Си». В 1989г. принят стандарт языка Си Международной организацией стандартов (International Standard OrganizationISO), в 1999г. был принят новый стандарт. Если программа написана в соответствии со стандартом языка, это гарантирует, что она будет выполняться на любом компьютере и в любой среде разработки.

В 1979г. Бьярн Страуструп на основе языка Си разработал язык C++. Главным нововведением было включение в язык понятия класса, с помощью которого реализована концепция объектно-ориентированного программирования. В 1998г. принят стандарт языка C++. Язык Си является, за небольшими исключениями, подмножеством языка C++, так что программа, написанная на Си, является и программой на C++.

Синтаксис языков Си и C++ использован в новейших языках программирования Java и C# (произносится Си-шарп), которые предназначены для разработки приложений, работающих в сети Интернет. Таким образом, знакомство с языком C++ может служить базой для изучения других современных языков.

Переключатель.

Для выбора одного из многих вариантов удобно использовать оператор switch, который имеет вид:

switch(выр){

  case константа1:

     инструкция1:

  break;

  case константа2:

     инструкция2:

  break;

   case константаN:

     инструкцияN:

  break;

  default: инструкция

}

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

Задача 1(№25).

В старо-японском календаре был принят 60-летний цикл, основанный на пяти 12-летних подциклах. Подциклы обозначались названиями цвета: зелёный, красный, жёлтый, белый и чёрный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи (1984 год – год зелёной крысы – был началом очередного цикла). Напишите программу, которая вводит номер некоторого года, больший чем 1984, и печатает его название по старо-японскому календарю.

Алгоритм решения: в соответствии с оператором switch составляется эта программа.

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №25*/

#include <iostream.h>

#include <conio.h>

int main ()

{

  int year;  //Номер года

  cout <<"\nВведите номер года \n";

  cin >>year;

  cout <<"\nЭто год \n";

  int color = (year – 1984) % 60 / 12;

  int anim = (year – 1984) % 60 % 12;

  switch(color){

   case 0: cout <<"Зелёный"; break;

   case 1: cout <<"Красный"; break;

   case 2: cout <<"Жёлтый"; break;

   case 3: cout <<"Белый"; break;

   case 4: cout <<"Чёрный"; break;

}

switch(anim){

   case 0: cout <<"Крыса "; break;

   case 1: cout <<"Корова"; break;

   case 2: cout <<"Тигр"; break;

   case 3: cout <<"Заяц"; break;

   case 4: cout <<"Дракон"; break;

   case 5: cout <<"Змея"; break;

   case 6: cout <<"Лошадь"; break;

   case 7: cout <<"Овца"; break;

   case 8: cout <<"Обезьяна"; break;

   case 9: cout <<"Курица"; break;

   case 10: cout <<"Собака"; break;

   case 11: cout <<"Свинья"; break;

   }

 getch();

 return 0;

}

                Пример работы программы:

Введите номер года

2009

Это год Жёлтый Корова

Операторы цикла.

Операторы цикла обеспечивают возможность многократно повторять один и тот же участок программы, проводя одинаковые вычисления с различными данными. В языке C++ имеются три вида циклов.

Цикл с предусловием while

Данный цикл записывается в виде:

while(выражение)

 инструкция

Сначала вычисляется выражение. Если оно истинно (не нуль) выполняется инструкция и снова вычисляется выражение. Повторения цикла завершаются, когда выражение станет ложным (нулем).

Инструкция, выполняемая в цикле, называется телом цикла.

Так как условие повторения проверяется до выполнения тела цикла, данный цикл называю циклом с предусловием.

Тело цикла может не выполниться ни одного раза, если выражение окажется ложным при первом его вычислении.

Цикл for

Конструкция цикла for имеет вид:

for(выр1; выр2; выр3)

 инструкция

Любое из трех выражений может отсутствовать, но точку с запятой опускать нельзя. Если отсутствует выр2, то оно считается истинным. Этот цикл эквивалентен конструкции

выр1;

while(выр2){

 инструкция

 выр3;

}

Выражение выр1 вычисляется единственный раз вначале цикла. Условием повторения цикла является истинность выр2. после выполнения инструкций из тела цикла вычисляется выр3.

Цикл for можно рассматривать как цикл с параметром, обеспечивающим заданное число повторений, например, цикл

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

 …

повторяется n раз. Начальное значение для i равно 0, после каждого выполнения тела цикла i увеличивается на 1 за счет выражения i++. Таким образом, i пробегает последовательность значений: 0, 1, 2,…, n-1, n. После выхода из цикла параметра цикла i сохраняет последнее полученное значение i = n, которое можно использовать в дальнейших вычислениях.

Цикл do-while

Данный цикл записывается в виде:

do

 инструкция

while(выражение)

Сначала выполняется инструкция, затем вычисляется выражение и проверяется его значение. Если оно истинно, снова выполняется инструкция. Когда выражение становится ложным, цикл прекращает работу. Так как условие повторения цикла проверяется после выполнения тела цикла, данный цикл называется циклом с постусловием. Данный цикл целесообразно применять, когда тело цикла должно быть выполнено, по крайней мере, один раз.

Задача 2(№34).

Напишите программу, печатающую таблицу чисел Фибоначчи, номера которых не превышают заданного числа n.

Алгоритм решения: Задается число n. Цикл n раз вычисляет и выводит число Фибоначчи.

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №34*/

#include <iostream.h>

#include <conio.h>

int main ()

{

 int n;

 cout<<"\nВведите  n\n";                     // Приглашение к вводу

 cin>>n;                                                // Ввод числа

 int f, f0, f1, i=0;                  

 f0=f1=1;                                              // Присваивание нового значения

 f=f0+f1;                                              // Расчётная формула

 while (i < n){                                

f=f0+f1;

f0=f1;

f1=f;

i=i+1;

cout<<"f("<<i<<")="<<f<<"\n"; // Вывод  результатов

 }

 getch();

 return 0;

 }

                Пример работы программы:

Введите  n

10

f(1)=2

f(2)=3

f(3)=5

f(4)=8

f(5)=13

f(6)=21

f(7)=34

f(8)=55

f(9)=89

f(10)=144

Задача 3(№36).

Напишите программу, выводящую все числа Фибоначчи, значения которых не превышают некоторого числа N.

 

Алгоритм решения: Задаётся число n. Цикл вычисляет и выводит числа Фибоначчи не превышающие числа n.

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №36*/

#include <iostream.h>

#include <conio.h>

int main ()

{

 int n;

 cout<<"\nВведите  n\n";                     // Приглашение к вводу

 cin>>n;                                                // Ввод числа

 int f, f0, f1, i=1;

 f0=f1=1;

 f=f0+f1;

 while (f < n){

    f=f0+f1;

    f0=f1;

    f1=f;

    i=i+1;

    if(f < n){   

      cout<<f<<", "; // Вывод  результатов

   }

 }

getch();

return 0;

}

Пример работы программы:

Введите n

100

2,3,5,8,13,21,34,55,89,

Задача 4(№40).

Дана последовательность целых чисел. Определить количество в наиболее длинной подпоследовательности из подряд идущих нулей.

 Алгоритм решения: Во внешнем цикле вводим значение H, при этом организуем внутренний цикл. Вводим значение X, если значение X=0, то параметр цикла увеличиваем на единицу. При этом организуем счётчик значений. Затем выводим данное значение на экран.

Программа:

     /*Выполнил студент Бедункевич Андрей*/

     /*Задача №40*/

#include<iostream.h>

#include<conio.h>

int main()

{

 clrscr();                                                                          // Очистка экрана

 int n=15;                                                                       // Количество вводимых чисел

 int x;                                                                            // Вводимое число

 int i=0;                                                                        // Параметр цикла

 int knew=0;                                                               // Длина последовательности

 int kold=0;                                                               // из нулей

cout<<"\nВведите"<<n<<"целых чисел:\n";       // Приглашение к вводу

 while (i<n){

 cin>>x;                                                                // Ввод с клавиатуры

 i++;

 if(x==0){

 while(x==0 && i<n){

  knew++;

  cin>>x;

  i++;

 }

 if(i==n && x==0)

 knew++;

 if(knew>kold){

 kold=knew;

 knew=0;

 }

 }

}

cout<<"\n Наибольшее количество подряд идущих нулей равно"<<kold; // Вывод результатов

getch();

return 0;

}

Пример работы программы:

Введите 15 целых чисел:

800060460000078

Наибольшее количество подряд идущих нулей равно 5

Задача 5(№42).

Дано целое n > 0. Напечатать все простые числа из диапазона [2,n]. Простым называется число, которое не имеет делителей, кроме 1 и самого себя.

Алгоритм решения: Сначала  в 1 цикле мы исключаем все чётные числа, так как они делятся на 2. Задаём переменной del значение равное 3, которая будет делителем. Дальше проверяем все нечётные числа, если при делении числа на del остаток равен 0, то цикл завершается, иначе мы увеличиваем делитель на 2. После этого осуществляем вывод результатов на экран. Если flag=0, то печатается ".", иначе значение i.

Программа:

     /*Выполнил студент Бедункевич Андрей*/

     /*Задача №42*/

#include <iostream.h>

#include <conio.h>

int main ()

{

 int n;

 int i;

       cout<<"Введите число\n";              // Приглашение к вводу

       cin>>n;                                            // Ввод числа

 for( i = 3; i < n;i++){

   int del=3;

int flag=1;

if (i%2==0)

  flag=0;

while (del<i && flag)

  if (i % del ==0){

flag=0;

break;

  }

  else

del+=2;

if(flag==0)

     cout<<".";

else

     cout<<i<<",";                               // Вывод результатов

 }

 getch();

 return 0;

}

Пример работы программы:

Введите число

30

3,.5,.7,…11,.13,…17,.19,…23,…..29,

Задача 6(№45).

Найти все целые корни уравнения   , где b,c,d – заданные целые числа, причём d ≠ 0. Замечание. Целыми корнями могут быть только положительные и отрицательные делители коэффициента d.

Алгоритм решения:

Программа:

     /*Выполнил студент Бедункевич Андрей*/

     /*Задача №45*/

#include <conio.h>

#include <iostream.h>

#include <math.h>

int main()

{

 int b, c, d, i;

      cout<<"Введите b,c,d\n";                               // Приглашение к вводу                                                                           

 cin>>b;                                                         // Ввод чисел

 cin>>c;

 cin>>d;

for(i=1; i <= abs(d); i++){

  if(d % i == 0){

  if(i*i*i + b*i*i + c * i + d == 0)

 cout<< "Корень = " << i << "\n";

  if((-i)*(-i)*(-i) + b*(-i)*(-i) + c * (-i) + d == 0)

 cout<< "Корень= " << (-i) << "\n";

  }

}

getch();

return 0;

}

Пример работы программы:

Введите b,c,d

-6 11 -6

Корень = 1

Корень = 2

Корень = 3

Массивы.

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

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

Одномерные массивы

Объявление массива отличается от объявления простой переменной указанием вслед за именем массива количества его элементов в квадратных скобках, например,

double x[100];

Здесь x – это имя массива из 100 элементов типа double. Так как нумерация элементов массива начинается с нуля, то первый элемент массива есть x[0], последний – x[99], не существует элемента x[100]. Массивы в языке C++ имеют всегда конкретную размерность, нельзя определять массивы переменной длины. Массив может состоять из элементов любых типов.

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

int days[] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Если размер массива не указан, то длину массива вычисляет компилятор по списку инициализации. Для приведенного примера это 12.

Если количество инициализаторов меньше заданной длины массива, оставшиеся элементы будут нулевыми. Задание слишком большого числа инициализаторов является ошибкой.

Оператор sizeof, примененный к массиву даст размер массива в байтах. Например, для days выражение sizeof(days) = 24, так как массив состоит из 12 элементов типа int, а размер int равен 2 байта.

Над массивами в целом нельзя выполнять какие-либо действия (присваивать, складывать т.п.), работать можно только с отдельными элементами.

Двумерные массивы

Двумерные массивы встречаются гораздо чаще, чем массивы с большим числом измерений. Двумерный массив рассматривается как одномерный, элементами которого являются массивы. Память под многомерные массивы отводится построчно, то есть сначала размещаются первые n элементов, затем вторые и т.д.

Задача 7(№62).

В матрице 4*4 найдите значения максимального и минимального элемента и их разность.

Алгоритм решения: Предположим, что максимальный и минимальный элементы равны [0][0] элементу. Далее в цикле сравниваем каждый элемент матрицы с максимальным и минимальным и, если необходимо, присваиваем min и max новое значение.

Программа:

/*Выполнил студен Бедункевич Андрей*/

/*Задача №62*/

#include<iostream.h>

#include<conio.h>

int main()

{

 clrscr();

 int i,j;

 int min,max,razn;

 int m[4][4];

 for(i=0; i < 4; i++){

for(j=0;j<4;j++){

  cout<<"Введите ["<<i+1<<"]["<<j+1<<"]элемент матрицы";// Ввод матрицы

  cin>>m[i][j];

}

 }

 max=m[0][0];

 min=m[0][0];

 for (i=0;i < 4; i++){

for (j=0; j < 4; j++ ){                                    // Поиск максимального

 if (m[i][j] > max)                                        // и минимального

 max=m[i][j];                                              // элементов матрицы

 if (m[i][j] < min){

 min=m[i][j];

 }

 }

 }

 razn=max-min;                                                  // Подсчёт разницы

 cout<<"Дана матрица:\n";                              // Вывод результатов

 for(i=0;i < 4; i++){

cout << m[i][0] << "\t" << m[i][1] << "\t"

   << m[i][2] << "\t" << m[i][3] <<"\n";

 }

 cout<<"Максимальный элемент массива = "<<max<<"\n";

 cout<<"Минимальный элемент массива = "<<min<<"\n";

 cout<<"Их разность = "<<max-min<<"\n";

 getch();

 return 0;

}

Пример работы программы:

Дана матрица:

20 36 31 89

83 12 3   14

73 16 23 79

51 92 37 23

Максимальный элемент массива = 92

Минимальный элемент массива = 3

Их разность = 89

Функции.

Термином функции в языке С++ называют подпрограммы. Виде функций оформляются вычисления, преобразования, другие действия, которые затем могут быть выполнены неоднократно с различными аргументами.

Определение функции

Определение любой функции имеет вид:

тип – результата имя – функции(объявления аргументов)

{

    объявления и инструкции

}

Отдельные части определения могут отсутствовать, например, следующая функция ничего не делает:

void dummy(){}

Тип результата функции void означает, что функция ничего не возвращает.

Вычисления в функции завершаются при достижении последней закрывающейся фигурной скобки } или при выполнении инструкции return. Когда функция завершает работу, управление предаётся в вызывающую программу той функции, которая следует за вызовом функции.

Если функция завершается инструкцией

return выр;

то вычисляется выражение выр и его значение передаётся в вызывающую программу в точку вызова функции. Значение, возвращаемое функцией, может быть использовано вызывающей программой или проигнорировано.

Функции могут возвращать значения любых типов. Например, следующая функция возвращает логическое значение true (истина), если её аргумент а больше b, иначе значением функции будет false (ложь).

bool greater(int a, int b)

{

  return a>b;

}

Задача 8(№79).

Пусть имеется упорядоченный по возрастанию массив x. Напишите функцию, возрастающую номер элемента массива, имеющего заданное значение y или -1, если такого элемента нет. Используйте метод двоичного(бинарного) поиска: y сравнивается со средним элементом массива; если числа равны, поиск завершается, если y меньше среднего элемента, то у надо искать в левой половине, а иначе – в правой; к выбранной половине применяется тот же алгоритм.

Алгоритм решения: программа сперва просит ввести размер массива, после этого она выводит на экран массив из случайных чисел, сортирует его методом последовательного сравнения соседних элементов. Далее выводится упорядоченный по возрастанию массив и пользователю предлагается ввести число. После ввода числа мы ищём его в массиве методом бинарного поиска. Первоначально левой границе задаём значение равное 0, а правой границе массива значение n-1, где n - размер массива введённый пользователем. После этого открываем цикл while, с предусловием: цикл будет выполняться пока левая граница будет меньше или равна правой. В цикле мы сперва находим средний элемент путём нахождения среднего арифметического между его правой и левой границей. После чего проверяются 3 условия:
1: если искомое число меньше среднего элемента, то средний элемент становиться новой левой границей
2: если искомое число больше среднего элемента, то средний элемент становиться новой правой границей
3: если искомый элемент равен среднему элементу, значит он найден и мы возвращаем его значение
Если же в цикле элемент не был найден, то функция возвращает значение равное -1

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №79*/

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

//объявление массива и его размера

 extern int x[];

 extern const int SIZEARR;

//объявление функций

 void get_array(int[],int n); //заполнение массива

 void bubble_sort(int[],int n); //сортировка по возрастанию

 void prn_array(int[], int n); //Печать массива

//функция бинарного поиска:

 int bin_search(int x[], int y,int n)

 {

int l=0, r=n-1, m;

while (l<=r){ //пока левая граница меньше правой

  m=(r+l)/2; //находим средний элемент

  if (y<x[m]) {  //если искомое число меньше среднего элемента

 r=m-1; //средний элемент становиться правой границей

}

else if (y>x[m]) { //если искомое число больше среднего элемента

l=m+1; //средний элемент становиться левой границей

}

else

return m; //возвращаем номер искомого элемента

}

return -1; //или -1 если такового нет

 }

  int main()

 {

int n,y,k,m;

cout <<"\nВведите размер массива <"<<SIZEARR<<":";

cin >>n;  //ввод размера массива

if(n>SIZEARR || n<=0){ //если размер массива <0 или больше 100 программа завершает работу

  exit(1);

}

get_array(x,n); //использование функции заполнения массива

cout <<"Исходный массив: \n";

prn_array(x,n); //использование функции вывода массива

bubble_sort(x,n); //его сортировка

 cout <<"\nОтсортированный массив: \n";

 prn_array(x,n); //и вывод на экран

cout <<"\nВведите элемент: ";

cin >>y; //Приглашение к вводу элемента

m=bin_search(x,y,n); //значению m присваивается значение функции поиска

if (m==-1) { //если такого элемента в массиве нет

 cout <<"Такого элемента нет"; //выводится сообщение

 getch();

return 0; //программа завершается

}

else   //в противном случае печатаем номер элемента

 cout <<"Такой элемент имеется, его номер: "<<m;

getch();

return 0;

 }

 //Определение функций:

 //get_array: заполняет массив случайными числами

 void get_array(int x[], int n)

 {

 int i;

 randomize(); //инициализация генератора случайных чисел

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

x[i]=rand(); //ранд генерирует случайное число

 }

//prn_array: вывод массива

 void prn_array(int x[], int n)

 {

int i;

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

  cout <<x[i]<<",";

 }

//bubble_sort: сортировка массива методом пузырька

 void bubble_sort(int x[],int n)

 {

int i,j,tmp;

for (i=n-1; i >0; i--) //i задаёт верхнюю границу

  for(j=0;j<i;j++) //цикл сравнений соседних элементов

 if(x[j]>x[j+1]){ //если нет порядка,

 tmp=x[j];  //перестановка

 x[j]=x[j+1]; //местами

 x[j+1]=tmp; //соседних элементов

 }

 }

 //определение внешних переменных

 const int SIZEARR=100;

 int x[SIZEARR];

Задача 9(№85).

                 Пусть дана матрица А порядка n и n-мерный вектор B. Напишите функцию, заменяющую заданный столбец матрицы A на вектор B

Алгоритм решения: После инициализации переменных пользователю предлагается ввести размер матрицы и вектора. После этого ему предлагается ввести непосредственно матрицу и вектор указанного размера, а затем номер столбца, который он хочет заменить. Далее выполняется функция замены. Функция состоит из двух циклов. Один цикл осуществляет перебор строк матрицы. Второй цикл (внутренний) осуществляет перебор элементов строки матрицы. Если во внутреннем цикле встретился элемент с номером введённого пользователем столбца, тогда этот элемент заменяется соответствующим элементом из массива (вектора) b.

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №85*/

#include <iostream.h>

#include <conio.h>

void matvec(int[100][100], int [100], int n, int m);//Объявление функции

int main()

{

//Объявление массивов и переменных

 int A[100][100];

 int B[100];

 int n, m, i, j,v,h;

 //Приглашения для ввода параметров

 cout <<"Введите размерность: \n";

 cin >>n;

 if (n<2){

   cout <<”Слишком малая размерность”;

   getch();

   return 1;

 }

 cout <<"Введите матрицу "<<n<<" ранга: \n";

 for (i = 0; i < n; i++) {

   for (j = 0; j < n; j++) {

  cin >>A[i][j];

   }

 }

 cout <<"Введите "<<n<<"-мерный вектор: \n";

 for (v = 0; v < n; v++) {

cin>>B[v];

 }

 cout <<"Введите столбец:\n";

 cin >>m;

 matvec(A,B,n,m);//выполнение функции

 getch();

 return 0;

}

//Определение функции

void matvec(int A[100][100], int B[100], int n, int m){

 int i,j;

 //перебор элементов матрицы

 for (i = 0; i <n; i++) {

     for (j=0; j < n; j++) {

         if (j==m-1) { //если встретился столбец с введённым

                       //в приглашении номером

         A[i][j]=B[i]; //заменяем элемент матрицы элементом вектора

         }

     }

 }

 //Печать преобразованной матрицы

 for (i = 0; i < n; i++) {

   cout <<endl;

   for (j = 0; j <n; j++) {

       cout <<A[i][j]<<" ";

   }

  }

}

Строки символов.

Понятие строки

Строки символов широко используются в программировании, так как общение пользователя с программой ведется, в основном, с помощью текстовых сообщений, состоящих из отдельных строк. Строка в языках Си и C++ это массив символов, ограниченный признаком конца строки, которым служит символ \0’ с нулевым кодом, например, массив s, определенный инструкцией

char *s[100];

может содержать строку длиной от 0 до 99 символов, так как из 100 символов, выделенных под массив, один занимает признак конца строки \0’. Данный символ может занимать любую позицию в массиве, поэтому строки могут иметь переменную длину. Если s[0]=\0’, то массив s содержит строку нулевой длины, иначе говоря, пустую строку.

Средства работы со строкам

Для вывода строк можно использовать оператор <<.

При вводе с помощью оператора >> в строку будут включены все символы до первого пробела, поэтому для ввода строк, содержащих любые символы лучше использовать функцию getline(char s[], int n), которая читает из входного потока не более  1 символа. Чтение символов прекращается при поступлении символа новой строки ’\n’ или достижении конца файла. Прочитанный символ новой строки ’\n’ не включается в s.

Существует довольно обширная библиотека функций для работы со строками. Их прототипы помещены в заголовочном файле string.h. Отметим некоторые их этих функций. В описаниях используется обозначение size_t для типа unsigned int. Данное обозначение вводится инструкцией

typedef unsigned int size_t;

которая имеется в стандартных заголовочных файлах. Оператор typedef вводит новое названия для типа данных. Тип size_t используется для величин, которые не могут быть отрицательными, например, для размеров объектов.

size_t strlen(const char s[]);

возвращает длину строки s. Завершающий символ ’\0’ не учитывается.

char *strcpy(char *dest, const char *src);

копирует строку src в строку dest, возвращает указатель на копию dest.

int strcmp(const char *s1, const char*s2);

посимвольно сравнивает строки s1 и s2, причем сравниваются коды символов. Возвращается значение <0, если первый несовпадающий символ s1 имеет код меньше чем код соответствующего символа s2, значение >0, если первый несовпадающий символ s1 имеет больший код, чем символ s2 и 0 при полном совпадении строк.

Задача 10(№112).

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

          Алгоритм решения: Копируем строку s строку tmp. Затем переставляем k последних символов строки s в её начало. Далее берём из строки tmp n-k первых символов и ставим их в конец строки s.

Программа:

/*Выполнил студент Бедункевич Андрей*/

/*Задача №112*/

#include <iostream.h>

#include <conio.h>

#include <string.h>

int main ()

{

 clrscr();

 int k,i,j,n;

 const int MAX=50;

 char s[MAX];

 char tmp[MAX];

 cout<<"Введите строку s:\n";

 cin.getline(s,MAX);

 cout<<"Введите k:\n";

 cin>>k;

 n=strlen(s);

 strcpy(tmp,s);

 for (i=n-k,j=0; i < n,j < k; i++,j++){

s[j]=s[i];

 }

 for (i = 0,j=k; i < n-k,j<n; i++,j++){

s[j]=tmp[i];

 }

 cout<<"\nОбработанная строка:\n "<<s;

 getch();

 return 0;

}

Пример работы программы:

Введите строку:

cтрока

Введите k:

3

Обработанная строка:

окастр

Макросы.

Макросом или макроопределением называется идентификатор, связанный директивой #define с лексемой или последовательностью лексем. Определение макроса имеет вид:

#define МАКРОС ЗНАЧЕНИЕ

Здесь МАКРОС – это имя макроса. В имени макроса пробелы не допускаются. Препроцессор заменяет всякое вхождение макроса в тест программы значением, связанным с ним директивой #define, всюду от точки его определение в программе до конца файла. Если макрос входит в состав символьной или строковой константы, то замена не производится.

Список используемой литературы.

1. Тарасов В.Л. Программирование на С++

Н. Новгород: Издательство ННГУ,2006.


 

А также другие работы, которые могут Вас заинтересовать

85047. Классификация чрезвычайных ситуаций техногенного характера 30.34 KB
  Классификация чрезвычайных ситуаций техногенного характера Цель урока. Познакомить учащихся с чрезвычайными ситуациями техногенного характера и основными причинами их возникновения; дать общее представление о классификации чрезвычайных ситуаций техногенного характера. Изучаемые вопросы Причины возникновения чрезвычайных ситуаций техногенного характера. Объекты экономики возникновение на которых производственных аварий может привести к чрезвычайным ситуациям техногенного характера.
85048. Аварии на радиационно опасных объектах и их возможные последствия. Обеспечение радиационной безопасности населения 32.01 KB
  Аварии на радиационно опасных объектах и их возможные последствия. Обеспечение радиационной безопасности населения. Познакомить учащихся с понятиями радиационно опасный объект ионизирующее излучение радиоактивное загрязнение окружающей среды. Дать общее представление о последствиях аварий на радиационно опасных объектах и о влиянии ионизирующего излучения на организм человека.
85049. Аварии на химически опасных объектах Тамбовской области и их возможные последствия. Обеспечение химической защиты населения 33.32 KB
  Обеспечение химической защиты населения. Познакомить учащихся с общими мероприятиями проводимыми в стране и в регионе для защиты населения от химических аварий. Обобщить знания о средствах индивидуальной защиты и их защитных свойствах. Средства индивидуальной защиты и их защитные свойства.
85050. Гражданская оборона как составная часть национальной безопасности и обороноспособности страны 29.5 KB
  Сформировать у учащихся общее представление о гражданской обороне как составной части общегосударственной системы мероприятий по защите населения страны от опасностей мирного и военного времени. Познакомить с системой руководства гражданской обороной и основными правами и обязанностями граждан в области гражданской обороны. Изучаемые вопросы Предназначение и задачи гражданской обороны. Руководство гражданской обороной.
85051. МЧС России — федеральный орган управления в области защиты населения и территорий от чрезвычайных ситуаций 30.22 KB
  МЧС России федеральный орган управления в области защиты населения и территорий от чрезвычайных ситуаций Цель урока. Познакомить учащихся с МЧС России: предназначением структурой и основными задачами МЧС. Показать роль МЧС России в обеспечении защиты населения от чрезвычайных ситуаций. Изучаемые вопросы МЧС России его предназначение и структура.
85052. Мониторинг и прогнозирование чрезвычайных ситуаций 28.65 KB
  Мониторинг и прогнозирование чрезвычайных ситуаций Цель урока. Познакомить учащихся с мониторингом и прогнозированием чрезвычайных ситуаций как составной частью общей системы мер противодействия чрезвычайным ситуациям направленных на снижение риска возникновения чрезвычайных ситуаций и смягчение их последствий. Изучаемые вопросы Мониторинг чрезвычайных ситуаций и его предназначение. Основные методы прогнозирования чрезвычайных ситуаций.
85053. Инженерная защита населения и территорий от чрезвычайных ситуаций 29.7 KB
  Инженерная защита населения и территорий от чрезвычайных ситуаций Цель урока. Познакомить учащихся с комплексом мероприятий касающихся инженерной защиты населения и территорий от чрезвычайных ситуаций. Изучаемые вопросы Инженернотехнические мероприятия по защите населения и территорий от чрезвычайных ситуаций. Отметить что высокую эффективность в защите населения территорий и населенных пунктов имеют инженернотехнические мероприятия по защите от неблагоприятных и опасных природных явлений и процессов предусматривающие возведение и...
85054. Оповещение населения о чрезвычайных ситуациях и эвакуация 31.19 KB
  Оповещение населения о чрезвычайных ситуациях и эвакуация Цель урока. Обобщить знания учащихся о системе оповещения населения страны о чрезвычайных ситуациях познакомить их с основными направлениями совершенствования системы оповещения населения о чрезвычайных ситуациях. Изучаемые вопросы Система централизованного оповещения населения о чрезвычайных ситуациях. Локальная система оповещения населения о чрезвычайных ситуациях.
85055. Аварийно-спасательные и другие неотложные работы в очагах поражения 30.84 KB
  Аварийноспасательные и другие неотложные работы в очагах поражения Цель урока. Познакомить учащихся с основным содержанием аварийноспасательных и других неотложных работ АС ДНР обратить внимание на предназначение аварийноспасательных и неотложных работ познакомить учащихся с основными видами обеспечения АС ДНР. Изучаемые вопросы Аварийноспасательные работы и их предназначение. Основные виды обеспечения аварийноспасательных и других неотложных работ.