Оператор безусловного перехода goto — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Оператор безусловного перехода goto

2019-09-26 846
Оператор безусловного перехода goto 0.00 из 5.00 0 оценок
Заказать работу

Оператор безусловного перехода goto имеет формат:

goto <метка>;

В теле той же функции должна присутствовать ровно одна конструкция вида:

<метка>: <оператор>;

Оператор goto передает управление на помеченный меткой оператор. Рассмотрим пример использования оператора goto:

static void Main()

{     

float x;

metka: Console.WriteLine("x="); //оператор, помеченный меткой

x = float.Parse(Console.ReadLine());

if (x!=0) Console.WriteLine("y({0})={1}", x, 1 / x);

else

{

Console.WriteLine("функция не определена");

goto metka; // передача управление метке

}          

}

Следует учитывать, что использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях, например, в операторе switch.

Оператор выхода break

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

Ранее применяли оператор break для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.

Оператор перехода к следующей итерации цикла continue

Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации (повторение тела цикла). Рассмотрим оператор continue на примере.

static void Main()

{

Console.WriteLine("n=");           

int n = int.Parse(Console.ReadLine());

for (int i = 1; i <= n; i++)

{

if (i % 2 == 0) continue;

Console.Write(" " + i);

}

}

Задания на лабораторную работу.

1. Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На границе" в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе.

Пример:

1. using System; namespace Hello { class Program { static void Main() { Console.Write("x=");            float x = float.Parse(Console.ReadLine()); Console.Write("y="); float y = float.Parse(Console.ReadLine()); if (x * x + y * y < 9 && y > 0)   Console.WriteLine("внутри"); else if (x * x + y * y > 9 || y < 0)   Console.WriteLine("вне");   else Console.WriteLine("на границе"); } } }    

Области задаются графически следующим образом:

2. 3. 4.  
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
17. 18. 19. 20.

Составить программу.

При решении данных задач возможно использовать оператор switch или вложенные операторы if.

2. Дан порядковый номер дня недели, вывести на экран его название.

Пример:

using System;

namespace Hello

{

class Program

{

static void Main()

{

Console.Write("n=");           

byte n = byte.Parse(Console.ReadLine());

switch (n)

{

   case 1: Console.WriteLine("понедельник"); break;

   case 2: Console.WriteLine("вторник"); break;

   case 3: Console.WriteLine("среда"); break;

   case 4: Console.WriteLine("четверг"); break;

   case 5: Console.WriteLine("пятница"); break;

   case 6: Console.WriteLine("суббота"); break;

   case 7: Console.WriteLine("воскресенье"); break;

   default: Console.WriteLine("ВЫ ОШИБЛИСЬ"); break;

}

}

}

}

1. Дан порядковый номер месяца, вывести на экран количество месяцев оставшихся до конца года.

2. Дан порядковый номер дня месяца, вывести на экран количество дней оставшихся до конца месяца.

3. Дан номер масти m (1 <= m <= 4), определить название масти. Масти нумеруются: "пики" - 1, "трефы" - 2, "бубны" - 3, "червы" - 4.

4. Дан номер карты k (6 <= k <= 14), определить достоинство карты. Достоинства определяются по следующему правилу: "туз" - 14, "король" - 13, "дама" - 12, "валет" - 11, "десятка" - 10, , "шестерка" - 6.

5. Дан номер масти m (1 <= m <= 4) и номер достоинства карты k (6 <= k <= 14). Определить полное название соответствующей карты в виде "дама пик", "шестерка бубен" и т.д.

6. С 1 января 1990 года по некоторый день прошло n дней, определить название текущего месяца.

7. С 1 января 1990 года по некоторый день прошло m месяцев, определить название текущего месяца.

8. С некоторой даты по настоящий день прошло m месяцев, определить название месяца неизвестной даты.

9. С некоторой даты по настоящий день прошло m месяцев, найти неизвестную дату.

10. С некоторой даты по настоящий день прошло n дней, найти неизвестную дату.

11. С 1 января 1990 года по некоторый день прошло m месяцев и n дней, определить название текущего месяца.

12. Дано расписание приемных часов врача. Вывести на экран приемные часы врача в заданный день недели (расписание придумать самостоятельно).

13. Проведен тест, оцениваемый в целочисленный баллах от нуля до ста. Вывести на экран оценку тестируемого в зависимости от набранного количества баллов: от 90 до 100 - "отлично", от 70 до 89 - "хорошо", от 50 до 69 - "удовлетворительно", менее 50 - "неудовлетворительно".

14. Дан год. Вывести на экран название животного, символизирующего заданный год по восточному календарю.

15. Дан возраст человека мужского пола в годах. Вывести на экран возрастную категорию: до года - "младенец", от года до 11лет - "ребенок", от 12 до 15 лет - "подросток", от 16 до 25 лет - "юноша", от 26 до 70 лет - "мужчина", более 70 лет - "старик".

16. Дан пол человека: м - мужчина, ж - женщина. Вывести на экран возможные мужские и женские имена в зависимости от введенного пола.

17. Дан признак транспортного средства: a - автомобиль, в - велосипед, м - мотоцикл, с - самолет, п - поезд. Вывести на экран максимальную скорость транспортного средства в зависимости от введенного признака.

18. Дан номер телевизионного канала. Вывести на экран наиболее популярные программы заданного канала.

19. Дан признак геометрической фигуры на плоскости: к - круг, п - прямоугольник, т - треугольник. Вывести на экран периметр и площадь заданной фигуры (данные, необходимые для расчетов, запросить у пользователя).

3. Вывести на экран:

целые числа 1, 3, 5,..., 21 в строчку через пробел:

Пример:

using System;

namespace Hello

{

class Program

{     

static void Main()

{

Console.Write("n=");           

byte n = byte.Parse(Console.ReadLine());

Console.Write("while: ");

int i = 1;          

while (i <= n)

{

Console.Write(" " + i);

 i += 2;

 }

Console.Write("do while: ");

i = 1;

do

{

Console.Write(" " + i);

i += 2;

}

while (i <= n);

Console.Write("For: ");

for (i = 1; i<=n; i+=2)

{

   Console.Write(" " + i);

}

}

}

}

1. целые числа 10, 12, 14,..., 60 в обратном порядке в столбик;

числа следующим образом: 10 10.4 11 11.4 ... 25 25.4 числа следующим образом: 25 25.5 24.8 26 26.5 25.8 ... 35 35.5 34.8

2. таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, 3,..., 10 фунтов (1 фунтов = 453г);

3. таблицу перевода 5, 10, 15,..., 120 долларов США в рубли по текущему курсу (значение курса вводится с клавиатуры);

4. таблицу стоимости для 10, 20, 30,..., 100 штук товара, при условии, что одна штука товара стоит х руб (значение х водится с клавиатуры);

5. таблицу перевода расстояний в дюймах в сантиметры для значений 2, 4, 6,..., 12 дюймов (1 дюйм = 25.4 мм);

6. кубы всех целых чисел из диапазона от А до В (А<=В) в обратном порядке;

7. все целые числа из диапазона от А до В (А<=В), оканчивающиеся на цифру Х;

8. все целые числа из диапазона от А до В (А<=В), оканчивающиеся на цифру Х или У;

9. все целые числа из диапазона от А до В (А<=В), оканчивающиеся на любую четную цифру;

10. только положительные целые числа из диапазона от А до В (А<=В);

11. все целые числа из диапазона от А до В, кратные трем (А<=В);

12. все четные числа из диапазона от А до В, кратные трем (А<=В);

13. только отрицательные четные числа из диапазона от А до В (А<=В);

14. все двухзначные числа, в записи которых все цифры разные;

15. все двухзначные числа, в которых старшая цифра отличается от младшей не больше чем на 1;

16. все трехзначные числа, которые начинаются и заканчиваются на одну и ту же цифру;

17. все трехзначные числа, в которых хотя бы две цифры повторяются.

18. Вывести на экран числа следующим образом:

Пример:

1) 1 1 1 1 1 1
  2 2 2 2 2 2
  3 3 3 3 3 3
  4 4 4 4 4 4
             

using System;

namespace Hello

{

class Program

{

static void Main()

{

for (int i = 1; i<=4; ++i, Console.WriteLine())

{

   for(int j=1; j<=6; ++j)

   Console.Write(" " + i);

}

}

}

}

 

2)

1 2 3 10

3)

-10 -9 -8 12
1 2 3 10 -10 -9 -8 12
1 2 3 10 -10 -9 -8 12
1 2 3 10 -10 -9 -8 12
          -10 -9 -8 12
   

4)

41 42 43 50

5)

5        

6)

1 1 1 1 1  
51 52 53 60 5 5       1 1 1 1    
61 62 63 70 5 5 5     1 1 1      
        5 5 5 5   1 1        
71 72 73 80 5 5 5 5 5 1          
                             

7)

1        

8)

6 6 6 6 6

9)

7          
2 2       7 7 7 7   6 6        
3 3 3     8 8 8     5 5 5      
4 4 4 4   9 9       4 4 4 4    
5 5 5 5 5 10         3 3 3 3 3  
                             

10)

8 8 8 8 8

11)

1        

12)

1          
7 7 7 7   1 2       2 1        
6 6 6     1 2 3     3 2 1      
5 5       1 2 3 4   4 3 2 1    
4         1 2 3 4 5 5 4 3 2 1  
                             

13)

0 1 2 3 4

14)

4 3 2 1 0

15)

1          
0 1 2 3   3 2 1 0   0          
0 1 2     2 1 0     2 2        
0 1       1 0       0 0        
0         0         3 3 3      
                    0 0 0      
                    4 4 4 4    
                    0 0 0 0    
                    5 5 5 5 5  
                    0 0 0 0 0 0
   

16)

8        

17)

1        

18)

9          
7         6         4          
7 7       2 2       8 8        
6 6       7 7       3 3        
6 6 6     3 3 3     7 7 7      
5 5 5     8 8 8     2 2 2 2    
5 5 5 5   4 4 4 4   6 6 6 6 6  
4 4 4 4   9 9 9 9   1 1 1 1 1  
   

19)

3        

20)

2 2 2 2 2
0         3 4 5 6 7
2 3       2 2 2 2  
9 0       2 3 4 5  
2 2 3     2 2 2    
8 9 0     1 2 3    
2 2 2 3   2 2      
7 8 9 0   0 1      
2 2 2 2 3 2        
6 7 8 9 0 -1        

 


 

Контрольные вопросы.

1. Задана программа

static void Main()
{
Console.Write("x= ");
float x = float.Parse(Console.ReadLine());
Console.Write("y=");
float y = float.Parse(Console.ReadLine());
if (x < y) Console.WriteLine("min= "+x);
else Console.WriteLine("min= "+y);
}
Измените программу так, чтобы вычислялось наибольшее значение из х и у.

2.  Дана мишень.

Составить программу подсчета количество баллов после выстрела по данной мишени.

3. Задана программа

static void Main()

{

Console.Write("N= ");

int n=int.Parse(Console.ReadLine());

int i = 1;

do

Console.Write(" " + i++);

//выводим i на экран, затем увеличиваем его на 1

while (i <= n); //пока i меньше или равно n

}

Измените программу так, чтобы числа выводились в обратном порядке;

4. Задана программа из п.3

Измените программу так, чтобы выводились только четные числа.

5. Задана программа

static void Main()

{

Console.Write("N= ");

int n=int.Parse(Console.ReadLine());

for (int i=1; i<=n;) //блок модификации пустой    

Console.Write(" " + i++);

}

Измените программу так, чтобы: числа выводились в обратном порядке;

6. Задана программа из п.5

Измените программу так, чтобы: выводились квадраты чисел.

7. Программа выводит числа следующим образом

2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2

static void Main()

{

for (int i = 1; i <= 4; ++i, Console.WriteLine()) //1

for (int j=1; j<=5; ++j)

Console.Write(" " + 2);

}

Измените программу так, чтобы таблица содержала n и m столбцов (значения n и m вводятся с клавиатуры).

 


 


Лабораторная работа 5.
C#. Введение в методы

Теоретические сведения.

Методы: основные понятия

Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс. Например, стандартный класс Math содержит методы, которые позволяют вычислять значения математических функций.

Синтаксис метода:

[атрибуты] [спецификторы] тип_возвращаемого_результата имя_метода ([список_параметров])

{

тело_метода;

return значение

}

где:

· Атрибуты и спецификторы являются необязательными элементами синтаксиса описания метода. На данном этапе атрибуты нами использоваться не будут, а из всех спецификаторов мы в обязательном порядке будем использовать спецификатор static, который позволит обращаться к методу класса без создания его экземпляра.

· Тип_возвращаемого_результата определяет тип значения, возвращаемого методом. Это может быть любой тип, включая типы классов, создаваемые программистом. Если метод не возвращает никакого значения, необходимо указать тип void (в этом случае в теле метода отсутсвует оператор return).

· Имя_метода – идентификатор, заданный программистом с учетом требований, накладываемыми на идентификаторы в С#, отличный от тех, которые уже использованы для других элементов программы в пределах текущей области видимости.

· Список_параметров представляет собой последовательность пар, состоящих из типа данных и идентификатора, разделенных запятыми. Параметры — это переменные или константы, которые получают значения, передаваемые методу при вызове. Если метод не имеет параметров, то список_параметров остается пустым.

· Значение определяет значение, возвращаемое методом. Тип значения должен соответствовать типу_возвращаемого_результата или приводится к нему.

Пример метода:

class Program

{

static void Func()   //дополнительный метод

{

   Console.Write("x= ");

   double x=double.Parse(Console.ReadLine());

   double y = 1 / x;

   Console.WriteLine("y({0})={1}", x,y);

}

static void Main()  //точка входа в программу

{

   Func();   //первый вызов метода Func

   Func();   //второй вызов метода Func

  }

}

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

Изменим исходный пример так, чтобы в него передавалось значение х, а сам метод возвращал значение y.

class Program

{

static double Func(double x) //дополнительный метод

{

  return 1 / x; //Возвращаемое значение

}

static void Main()   //точка входа в программу

{

  Console.Write("a=");

  double a=double.Parse(Console.ReadLine());

  Console.Write("b=");

  double b=double.Parse(Console.ReadLine());

  for (double x = a; x <= b; x += 0.5)

   {

      double y = Func(x); //вызов метода Func

      Console.WriteLine("y({0:f1})={1:f2}", x, y);

   }

}

В данном примере метод Func содержит параметр х, тип которого double. Для того, чтобы метод Func возвращал в вызывающий его метод Main значение выражения 1/x (тип которого double), перед именем метода указывается тип возвращаемого значения – double, а в теле метода используется оператор передачи управления – return. Оператор returnзавершает выполнение метода и передает управление в точку его вызова.

Другой пример:

class Program

{

   static int Func(int x, int y) //строка 1

   {

       return (x>y)? x:y;

   }

   static void Main()

   {

       Console.Write("a=");

       int a = int.Parse(Console.ReadLine());

       Console.Write("b=");

       int b = int.Parse(Console.ReadLine());

       Console.Write("c=");

       int c = int.Parse(Console.ReadLine());

       int max = Func(Func(a, b), c); //строка 2 - вызовы метода Func

       Console.WriteLine("max({0}, {1}, {2})={3}", a, b, c, max);    

   }

}

В данном примере метод Func имеет два целочисленных параметра – x, y, а в качестве результата метод возвращает наибольшее из них. На этапе описания метода (строка 1) указываются формальные параметры, на этапе вызова (строка 2) в метод передаются фактические параметры, которые по количеству и по типу совпадают с формальными параметрами. Если количество фактических и формальных параметров будет различным, то компилятор выдаст соответствующее сообщение об ошибке. Если параметры будут отличаться типами, то компилятор попытается выполнить неявное преобразование типов. Если неявное преобразование невозможно, то также будет сгенерирована ошибка.

Обратите внимание на то, что при вызове метода Func использовалось вложение одного вызова в другой.

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

Типы параметров

В С# для обмена предусмотрены следующие типы параметров: параметры-значения, параметры-ссылки, выходные параметры, параметры-массивы.

При передаче параметра по значению метод получает копии параметров, и операторы метода работают с этими копиями. Доступа к исходным значениям параметров у метода нет, а, следовательно, нет и возможности их изменить.

Все примеры, рассмотренные ранее, использовали передачу данных по значению.

Пример:

class Program

{

static void Func(int x)

{

   x += 10; // изменили значение параметра

   Console.WriteLine("In Func: " + x);

}

static void Main()

{

    int a=10;

    Console.WriteLine("In Main: "+ a);

    Func(a);

   Console.WriteLine("In Main: " + a);

}

}

Результат работы программы:

In Main: 10         

In Func: 20

In Main: 10

В данном примере значение формального параметра х было изменено в методе Func, но эти изменения не отразились на фактическом параметре а метода Main.

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

class Program

{

static void Func(int x, ref int y)

{

  x += 10; y += 10; //изменение параметров

  Console.WriteLine("In Func: {0}, {1}", x, y);

}

static void Main()

{

   int a=10, b=10; // строка 1

   Console.WriteLine("In Main: {0}, {1}", a, b);

   Func(a, ref b);

   Console.WriteLine("In Main: {0}, {1}", a, b);

}

}

Результат работы программы:

In Main: 10 10       

In Func: 20 20

In Main: 10 20

В данном примере в методе Func были изменены значения формальных параметров х и y. Эти изменения не отразились на фактическом параметре а, т.к. он передавался по значению, но значение b было изменено, т.к. он передавался по ссылке.

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

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

class Program

{

static void Func(int x, out int y)

{

  x += 10; y = 10; // определение значения выходного параметра y

  Console.WriteLine("In Func: {0}, {1}", x, y);

}

static void Main()

{

   int a=10, b;

   Console.WriteLine("In Main: {0}", a);

   Func(a, out b);

   Console.WriteLine("In Main: {0}, {1}", a, b);

}

}

Результат работы программы:

In Main: 10         

In Func: 20 10

In Main: 10 10

В данном примере в методе Func формальный параметр y и соответствующий ему фактический параметр b метода Main были помечены спецификатором out. Поэтому значение b до вызова метода Func можно было не определять, но изменение параметра y отразились на изменении значения параметра b.


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.222 с.