Пятница, 17.05.2024, 22:12
Приветствую Вас, Гость

БИЛЕТ 29.

1) Оператор return

Синтаксис: return [выражение]  

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

По общему соглашению аргумент "выражение" оператора return заключается в скобки. Однако, для языка С присутствие этих скобок необязательно.

Если в определении функции отсутствует оператор return, то управление автоматически передается на вызов функции после выполнения последнего оператора вызванной функции. При этом не определено возвращаемое вызванной функцией значение. Если от функции не требуется возврат какого-либо значения, то функция объявляется с возвращаемым значением типа void.

Пример

В данном примере функция main вызывает две функции: sq и draw. Функция sq возвращает в функцию main значение x*x, где оно присваивается y. Функция draw не возвращает значение и объявлена типом void. Попытка присвоения возвращаемого функцией draw значения вызовет появление диагностического сообщения.

   main()  

                     {  void draw(int,int);  

                          long sq(int);  

                          

                          y=sq(x);  

                          draw(x, y);  

                          …}  

 

                     long sq(x)  

                     int x;  

                     {  return (x*x);  

                     }  

  

                     void draw(x,y)  

                     int x, y;  

                     {   

                          return;  }

 

2) Функции getchar и putchar

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

Функция GETCHAR возвращает значение EOF, когда она попадает на конец файла, какой бы ввод она при этом не считывала. Стандартная библиотека полагает символическую константу EOF равной -1 (посредством #DEFINE в файле STDIO.H), но проверки следует писать в терминах EOF, а не -1, чтобы избежать зависимости от конкретного значения.

Вывод можно осуществлять с помощью функции PUTCHAR(C), помещающей символ 'с' в "стандартный ввод", который по умолчанию является терминалом. Вывод, осуществляемый функцией PRINTF, также поступает в стандартный вывод, и обращения к PUTCHAR и PRINTF могут перемежаться.

Рассмотрим, например, программу LOWER, которая преобразует прописные буквы из своего ввода в строчные:

#INCLUDE <STDIO.H>

MAIN() /* CONVERT INPUT TO LOWER CASE */

\(

 INT C;

 WHILE ((C = GETCHAR()) != EOF)

    PUTCHAR(ISUPPER(C) ? TOLOWER(C) : C);

\)

"Функции" ISUPPER и TOLOWER на самом деле являются макросами, определенными в STDIO.H . Макрос ISUPPER проверяет, является ли его аргумент буквой из верхнего регистра, и возвращает ненулевое значение, если это так, и нуль в противном случае. Макрос TOLOWER преобразует букву из верхнего регистра в ту же букву нижнего регистра. Независимо от того, как эти функции реализованы на конкретной машине, их внешнее поведение совершенно одинаково, так что использующие их программы избавлены от знания символьного набора.

    Кроме того отметим, что в стандартной библиотеке ввода/вывода "функции" GETCHAR и PUTCHAR на самом деле могут быть макросами. Это позволяет избежать накладных расходов на обращение к функции для обработки каждого символа.


*************************************29 - 3

Напишите функцию вставки подстроки в строку.


//vstavka stroki sub

char *strins(char *sub, char *s, int p)

{

            int ls = strlen(s);

  int lsub = strlen(sub);

  char *res = new char[ls+lsub+1];

  int j=0;

  int i=0;

  if (p>ls)

    p=ls;

  while (res[i] = s[i])

    i++;

  //sdvigaem elementy v rese

  for (i=ls; i>=p; i--)

    res[i+lsub] = s[i];

  //vstavlyaem sub in res

  for (i=p; j<lsub; )

    res[i++] = sub[j++];

  return res;


*************************************29 - 4

Для заданных чисел A и B (A>1) найти такое наименьшее целое  натуральное число k,  что Ak>B.


#include<stdio.h>

 #include<conio.h>

 #include<math.h>

 int A=2;

 int B=400;

 int k;

 void main()

 {

 clrscr();

 if(A>1)

   {

    for(k=1;;k++)

      if(pow(A,k)>B)

            {

             printf("%d.\n %d^%d > %d",k,A,k,B);

             break;

            }

   }

 else

    printf("A must be more than 0.");

 getch();

 }