Турбо С: руководство пользователя. Часть 1

Турбо С: руководство пользователя. Часть 1 - Стр. 53

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 1
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Стр. 57
Стр. 58
Стр. 59
Стр. 60
Стр. 61
Стр. 62
Стр. 63
Стр. 64
Стр. 65
Стр. 66
Стр. 67
Стр. 68
Стр. 69
Все страницы
          Обратите внимание, что мы использовали массив символов (char          
     name  [30];),  вместо указателя на символ (char *name;).  Почему?          
     Причиной этого служит тот факт,  что объявление массива на  самом          
     деле резервирует память для хранения его элементов,  а при объяв-          
     лении ссылки этого не происходит.  Если бы мы использовали объяв-          
     ление char *name,  тогда нам бы пришлось явным образом резервиро-          
     вать память для хранения переменной *name.                                 
                                                                                
                                                                                
          Использование gets и getch для ввода                                  
          ------------------------------------                                  
                                                                                
          Использование scanf, однако, порождает другую проблему. Сно-          

                         - 435,436 -
                                                                                
     ва выполните программу, но теперь введите ваше имя и фамилию. За-          
     метьте, что программа использует в своем ответе только имя. Поче-          
     му?  Потому,  что введенный вами после имени пробел сигнализирует          
     scanf о конце вводимой строки.                                             
                                                                                
          Возможны два способа решения  этой  проблемы.  Вот первый из          
     них:                                                                       
                                                                                
          #include                                                     
                                                                                
          main ()                                                               
          {                                                                     
            float a,b,ratio;                                                    
                                                                                
            printf("Введите два числа: ");                                      

                         - 439,440 -
                                                                                
            scanf("%f %f",&a,&b);                                               
            if (b == 0.0)                                                       
        printf("Отношение не определено\n");                                    
            else {                                                              
        ratio= a / b;                                                           
        printf("Отношение = %f \n",ratio);                                      
            }                                                                   
          }                                                                     
                                                                                
          Оператор, находящийся в двух следующих за  оператором  scanf          
     строках,  известен  как условный оператор if.  Вы можете понимать          
     его так:"Если значение выражения (b == 0.0) истинно,  сразу  выз-          
     вать printf.  Если значение выражения ложно,  присвоить a/b пере-          
     менной ratio, затем вызвать printf."                                       
                                                                                
          Теперь, если вы введете 0 в качестве  второго  значения,  то          
     ваша программа напечатает сообщение                                        
                                                                                
          Отношение не определено                                               
                                                                                
     и будет ожидать от вас нажатия любой клавиши для возврата в Турбо          
     Си. Если второе значение - ненулевое,  то программа  вычисляет  и          
                                                                                
     печатает ratio,  а затем ожидает нажатия клавиши - и все это бла-          
     годаря магии оператора if.                                                 
                                                                                
                                                                                
                                                                                
          Логические операции                                                   
     -----------------------------------------------------------------          
                                                                                
          Имеется также три логические операции: И (&&), ИЛИ (||) и НЕ          
     (!).  Их не следует путать с описанными выше битовыми  операциями          
     (&,|,~).  Логические  операции  работают с логическими значениями          
     (истина или ложь) и позволяют составлять логические выражения.             
                                                                                
          Как же их отличать от соответствующих битовых операций?               
                                                                                
         - Эти логические операторы всегда дают в  результате значение          
     либо 0 (ложь), либо 1 (истина), в то время как поразрядные опера-          
     торы выполняются путем последовательной обработки  цепочки  битов          
     до тех пор, пока не станет ясен результат.                                 
                                                                                
         - Логические  операторы  && и !!  известны как операторы типа          
     "short circuit".  Выполнение операторов такого типа  прекращается          

                         - 441,442 -
                                                                                
     как только становится ясно, будет ли результат иметь значение ис-          
     тина или ложь. Предположим, что вы имеете выражение вида:                  
                                                                                
               exp1 && exp2                                                     
                                                                                
          Если exp1 - ложь,  значит и все выражение ложь.  Таким обра-          
     зом, exp2 никогда не будет вычисляться. Аналогично, если мы имеем          
     выражение вида                                                             
                                                                                
               exp1 !! exp2                                                     
                                                                                
     то exp2 никогда не будет вычисляться, если exp1 верно.                     
                                                                                
                                                                                
                                                                                
          Дополнительные сведения о выражениях.                                 
     -----------------------------------------------------------------          
                                                                                
          Прежде чем  перейти к обсуждению операторов цикла,  мы дадим          
     некоторые комментарии к использованию выражений. Такие выражения,          
     как (b == 0.0) и (a <= q*r) довольно привлекательны по своей кра-          
     соте.  Однако Си допускает написание более сложных  и  запутанных          
                                                                                
     конструкций, чем эти.                                                      
                                                                                
                                                                                
                                                                                
          Операторы присваивания.                                               
     -----------------------------------------------------------------          
                                                                                
          Любой оператор присваивания,  заключенный в круглые  скобки,          
     является выражением с определенным значением,  которое получается          
     в реэультате этого присваивания.                                           
                                                                                
          Например, выражение (sum = 5+3) имеет  значение  8,  поэтому          
     выражение  ((sum = 5+3) <= 10) будет всегда иметь значение "исти-          
     на" (т.к. 8 <= 10). Более экзотичен следующий пример:                      
                                                                                
       if ((ch=getch()) == 'q')                                                 
           puts("До свидания! Программа завершена.\n");