Методические указания для выполнения лабораторных работ и курсовой работы содержание
Вид материала | Методические указания |
- Методические указания по выполнению курсовых работ для студентов заочной формы обучения, 300.18kb.
- Рабочая программа, методические указания по выполнению курсовой работы, темы курсовых, 1694.43kb.
- Методические указания по выполнению курсовой работы Составитель Виничук, 2013.82kb.
- Методические указания для выполнения курсовой работы по дисциплине «Макроэкономика», 976.03kb.
- Методические указания к выполнению лабораторных работ по дисциплине «Интеллектуальные, 653.36kb.
- Методические указания для выполнения курсовой работы по дисциплине: «Метрология, стандартизация, 170.43kb.
- Методические указания для выполнения курсовой работы по дисциплине «Теория принятия, 547.84kb.
- Методические указания для ее выполнения по дисциплине «финансы» 2008-2009 уч. Год (для, 247.31kb.
- Методические указания по содержанию и организации выполнения курсовой работы по дисциплине, 1445.93kb.
- Петроченко Любовь Викторовна Учебно методические указания, 199.16kb.
3Лабораторная работа № 2. Условные операторы
1. Цель работы
Целью работы является изучение форматов условных операторов и отработка приемов и навыков их использования в программах на языке «С».
2. Операции
Присваивание, как, например, в выражении ratio=a/b или ch=getch(), является одной из основных операций. В языке Си присваивание обозначается одним знаком равенства /=/; значение с правой стороны присваивается переменой с левой стороны.
Присвоения можно связывать таким образом: sum=a=b. В таком случае вычисление производится справа налево, т.е. значение b будет присвоено переменной, а затем будет присвоено переменной sum, при этом все три переменные получат одно и то же значение (первоначальное значение переменой b). Следует отметить, что оператор присваивания существенно отличается от знака "=", применяемого в математике. Например, в математике выражение а=а+5: не имеет смысла, тогда как в программе это означает, что прежнее значение "а" увеличивается на 5.
Унарные и бинарные операции
Язык Си поддерживает стандартный набор бинарных арифметических операций:
- умножение /*/
- деление (/)
- взятие остатка (%)
- сложение (+)
- вычитание (-)
Турбо-Си поддерживает операцию унарного минуса (a+(-b)), которая выполняет дополнение до двух, а также, в качестве расширения по стандарту ANSI, операцию унарного плюса: (a+(+b)).
Операторы инкремента /++/ и декремента /--/
В языке Си имеются также некоторые специфические унарные и бинарные операторы. Наиболее широко известны из них операторы инкремента /++/ и декремента /--/. При помощи одного такого оператора можно добавить единицу к любому значению или вычесть из любого значения единицу. Сложение или вычитание могут производиться в середине выражения, кроме того, можно определить, будут ли они выполняться до или после вычисления всего выражения. Рассмотрим две следующие строки программы:
sum = a + b ++;
sum = a + ++b;
Первая строка производит следующие действия: складываются значения переменных а и b, результат вычисления присваивается переменной sum, затем переменная b увеличивается на единицу.
Вторая строка делает следующее: значение b увеличивается на единицу, а складывается с b, результат сложения присваивается переменной sum.
Эти операторы значительно расширяют возможности языка, но перед их использованием необходимо убедиться, что вы полностью понимаете их действие. Отредактируйте программу SUM.C так, как показано в нижеследующем примере, а затем попытайтесь угадать результат ее работы дотого, как вы ее запустите.
Побитовые операторы
В языке Си имеются следующие операторы для работы на битовом уровне:
- сдвиг влево (<<)
- сдвиг вправо (>>)
- И (&)
- ИЛИ (I)
- исключающее ИЛИ ()
- НЕ (~)
Эти операторы позволяют выполнять действия низкого уровня над различными значениями. Результаты их выполнения показаны на примере следующей программы, которую следует набрать и запустить.
#include
#include
#include
#include
void main()
{char n1=31,n2=15,n3=63;
n1=n1&4;
n2=(n2|128)>>4;
n3=(n331)<<1;
printf("n1= %04x n2= %04x n3= %04x ",n1,n2,n3);
}
Постарайтесь определить результаты, которые должна вывести эта программа, прежде чем вы ее запустите. Обратите внимание на использование спецификаторов размера поля для выравнивания выводимой информации: спецификатор %04X говорит о том, что мы хотим распечатать ведущие нули, что поле печати имеет ширину 4 разряда и выводимый результат распечатывается в шестнадцатеричном виде /основание 16/.
Составные операторы
Язык Си позволяет использовать сокращенную запись выражений со многими операторами. Все описанные выше операторы /унарные, бинарные, инкремента и декремента/ могут быть скомбинированы с оператором присваивания. Практически любое выражение вида:
<переменная>=<переменная><оператор><выражение>;
может быть заменено на следующее: <переменная><оператор>=<выражение>;
Адресные операторы
Язык Си поддерживает два адресных оператора: оператор взятия адреса & и косвенный оператор *.
Оператор & возвращает адрес переменной: если sum есть переменная типа int, тогда &sum есть адрес /ячейка памяти/ этой переменной. Таким образом, если msg есть ссылка на переменную типа char, тогда *msg есть символ, на который указывает msg. Напечатайте следующую программу и изучите полученные результаты:
Первая строка выводит два значения: значение переменой sum /8/ и адрес этой переменной, присвоенный ей компилятором. Вторая строка также выводит два значения: символ, на который указывает msg/H/ и значение переменной, которое является адресом этого символа /этот адрес также присвоен компилятором/.
Условные операторы
До сих пор мы ничего не говорили об операторах отношения и о логических операторах. Кроме того, имеются некоторые непростые моменты, обсуждение которых мы отложили до описания условных выражений, которые могут принимать значение true или false, т.е. истина или ложь.
Операторы отношения
Операторы отношения позволяют сравнивать два значения, результат операции зависит от того, истинно или ложно сравнение. Если сравнение ложно, значение результата равно нулю, если истинно, значение равно единице. Список операторов отношения языка Си:
> больше чем
>= больше или равно
< меньше чем
<= меньше или равно
== равно
!= не равно
Зачем необходимо знать, истинна какая-либо величина или ложна? Запустите программу, которая приведена ниже, и посмотрите, что получится, если в качестве второго значения вы введете ноль.
#include
#include
#include
#include
void main()
{int n1,n2,n3 ;
scanf("%d,%d",&n1,&n2);//ввод двух переменных целого типа
n3=n2/n1;
printf("%d результат = ",n3); //вывод результата деления
}
Программа напечатает сообщение об ошибке Divide by zero /Деление на ноль/ и остановится. Теперь проделайте в ней нижеследующие изменения и запустите ее снова:
#include
#include
#include
#include
void main()
{int n1,n2,n3 ;
scanf("%d,%d",&n1,&n2);//ввод двух переменных целого типа
if(n2==0){
printf("отношение неопределено ");
getch(); // программа ждет ввода любого символа
}
else {
n3=n1/n2;
printf("%d результат = ",n3); //вывод результата деления
getch(); // программа ждет ввода любого символа
}
}
Оператор, находящийся на двух следующих за вызовом функции scanf строках называется условным оператором if. Он читается следующим образом: "Если значение выражения n2==0 истинно, немедленно вызвать функцию printf. Если значение этого выражения ложно, присвоить переменой n3 значение выражения n1/n2, за тем вызвать функцию printf."
Если вы напечатаете ноль в качестве второго значения, вводимого в программу, она напечатает сообщение: "отношение неопределенно", дождется, пока вы не нажмете какую-либо клавишу и вернется в Турбо-Си. Если же второе значение не равно нулю, программа печатает частное от деления двух чисел, ждет нажатия клавиши и возвращается в Турбо-Си - и все при помощи условного оператора if.
Логические операторы
Имеется три логических оператора: И /&&/, ИЛИ /\\/ и НЕ /!/. Их необходимо отличать от описанных выше побитовых операторов /&,I,~/. Логические операторы работают с логическими значениями /true и false/, позволяя составлять выражения отношения.
Чем они отличаются от соответствующих побитовых операторов?
- Логические операторы дают результат или равный 1 /истина/ или 0 /ложь/, тогда как побитовые операторы производят соответствующие действия над каждым битом;
- Логические операторы && и || являются "короткозамкнутыми". Предположим, имеется выражение: expI&& exp2. Если exp1 ложно, тогда ехр2 вычисляться не будет. Точно также имея выражение ехр1 || exp2, мы не вычислим exp2, если exp1 истинно.
Дополнительные сведения о выражениях
Прежде чем мы перейдем к циклам, скажем еще несколько слов о выражениях. Выражения типа (а == 0.0) и (а <= c*p) достаточно прозрачны. Однако язык Си позволяет писать куда более загадочные вещи. Мы не будем изощряться в загадочности, но приведем, все же, некоторые примеры.
Оператор присваивания
Любой оператор присваивания, заключенный в скобки, есть выражение, имеющее значение, равное присваиваемому.
Например, выражение (sum=5+3) имеет значение 8, поэтому выражение ((sum=5+3) <=10) всегда будет давать значение true, т.к. 8<=10. Следующий пример более экзотичен:
#include
#include
#include
#include
void main()
{char ch;
_begin:
if(((ch=getch()) == 'g`){
printf(""Quitting, huh?");
getch(); // программа ждет ввода любого символа
}
else {
printf Good move ");
getch(); // программа ждет ввода любого символа
goto _begin; // отправляемся на метку _begin;
}
}
Вы догадались, что здесь происходит? Когда программа встречает выражение ((ch=getch()) == 'g`), она останавливается, ждет пока вы не нажмете любую клавишу, присваивает символ, соответствующий этой клавише, переменной ch и затем сравнивает этот символ с буквой g.
Если они совпадают, тогда на экране появляется сообщение "Quitting, huh?" /Выходим, а?/, в противном случае распечатывается сообщение "Good move ..." /Попробуем еще .../.
Оператор "запятая"
Оператор "запятая" может использоваться для помещения сложного выражения в круглые скобки. Выражения будут вычисляться слева направо, все выражение примет значение последнего вычисленного выражения. Например, если имеются две переменные oldch и ch, обе типа char, тогда выражение
(oldch=ch, ch=getch())
производит следующие действия: значение переменной ch присваивается переменной oldch, затем принимается символ с клавиатуры, и он присваивается переменной ch, затем все выражение принимает значение переменной ch. Например:
Оператор if
Обратите внимание на оператор if в предыдущем примере. Оператор If имеет следующий формат:
if(значение)
выражение1;
else
выражение2;
где значением может быть любое выражение, которое принимает целое значение или может быть преобразовано к целому значению. Если это значение не равно нулю /т.е. истинно/, тогда выполняется выражение1, в противном случае выполняется выражение2.
Два замечания по поводу оператора if-else.
Во-первых, вторая часть оператора /else выражение2/ является необязательной; ниже приведен пример такого оператора if:
if (значение)
выражение1;
В данном случае выражение1 выполняется тогда и только тогда, когда значение не равно нулю. Если значение равно нулю, тогда выражение1 пропускается и программа продолжает свое выполнение.
Во-вторых, иногда, если конкретное выражение истинно или ложно, бывает нужно выполнить не одно действие, а несколько. Для этого используется составной оператор. Составной оператор состоит из левой фигурной скобки /{/, нескольких выражений, каждое из которых заканчивается точкой с запятой /;/ и правой фигурной скобки /}/. (см. предыдущие программы)
Вы могли также заметить, что тело вашей программы /функция main/ представляет собой составной оператор.
3.Варианты заданий
_______________________________________________________________________________
1.
--Ввести переменные х, у, z (x - целое, у - вещественное, z-вещественное).
Если х<0, то z=(x+5)*y; y=(z-3)*x; z=y/z;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________.
2.
--Ввести переменные х, у, z (x-целое, у - вещественное, z - вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*z;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
3.
--Ввести переменные х, у, z (x-целое, у - вещественное, z-вещественное).
Если х<-5, то z=(x-5)*y; y=(z+23)*x;
если -5=
если x>10, то z=x*x+y*y-x*y;.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
.
_______________________________________________________________________________
4.
--Ввести переменные х, у, z (x-целое, у - целое, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+33)/x; z=y*x;
если 0=
если x>10, то z=x*x+y*y-y/x:.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
5.
--Ввести переменные х, у, z (x-целое, у-вещественное, z- целое).
Eсли х<0, то z=(x-5)*y; y=(z-63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
6.
--Ввести переменные х, у, z (x-целое, у - вещественное, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y-z;.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
7.
--Ввести переменные х, у, z (x-целое, у-вещественное, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+3)/x; z=y/x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________8.
--Ввести переменные х, у, z (x-целое, у - целое, z-вещественное).
Если х<0, то z=(x-5)/y; y=(z+63)*x; z=y/x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
9.
--Ввести переменные х, у, z (x - целое, у - вещественное, z - целое).
Если х<0, то z=(x-5)*y; y=(z+63)*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
10.
--Ввести переменные х, у, z (x-целое, у-вещественное, z-вещественное).
Eсли х<0, то z=(x-8)*y; y=(z+43)/x;
если 0=
если x>10, то z=x*x+y*y. z=y*x;
Вывести у и z.
-- Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
11..
--Ввести переменные х, у, z (x-целое, у - целое, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
12.
--Ввести переменные х, у, z (x-целое, у-вещественное, z- целое).
Eсли х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
13.
--Ввести переменные х, у, z (x-целое, у-вещественное, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y-z.
Вывести у и z.
--Решить ту же задачу, используя оператор switch_.
_______________________________________________________________________________
14.
--Ввести переменные х, у, z (x-целое, у - целое, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x;
если 0=
если x>10, то z=x*x+y*y=z/y.
Вывести у и z.
-- Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
15.
--Ввести переменные х, у, z (x-целое, у- целое, z-вещественное).
Eсли х<0, то z=(x-5)*y; y=(z+6)/x; z=y*x;
если 0=
если x>10, то z=x*x+y*y ; y=(z+63)*x; .
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
16..
--Ввести переменные х, у, z (x-целое, у-вещественное, z- целое).
Eсли х<0, то z=(x-5)*y; z=y*x;
если 0=
если x>10, то z=x*x+y*y. y=(z+63)*x;
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
17.
--Ввести переменные х, у, z (x-целое, у-вещественное, z-вещественное).
Если х<0, то z=(x-7)/y; y=(z+51)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y. y=(z+63)*x;
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
18.
- --Ввести переменные х, у, z (x-целое, у- целое, z-вещественное).
Eсли х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
--Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
19.
- --Ввести переменные х,у,z(x-целое,у-вещественное,z- целое).
Eсли х<0, то z=(x-5)*y; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
-- Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
20.
- --Ввести переменные х, у, z(x-целое, у-вещественное, z-вещественное).
Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
-- Решить ту же задачу, используя оператор switch
_______________________________________________________________________________
21.
- --Ввести переменные х, у, z(x-целое, у - целое, z-вещественное).
Если х<0, то z=(x-5)*y; z=y*x;
если 0=
если x>10, то z=x*x+y*y.
Вывести у и z.
-- Решить ту же задачу, используя оператор switch
______________________________________________________________________________