Вторник, 21.05.2024, 08:41
Приветствую Вас, Гость

БИЛЕТ 13.

1) Побитовые операции

Применимы только к целым (&,^,!,<<,>>). Используется там, где нужен доступ к аппаратуре или фрагмент сильно критичен ко времени выполнения или для упаковки данных с целью экономии памяти. Получаемый код сильно зависит от компьютера и операционной системы, поэтому должен создаваться с осторожностью и тщательно комментариться.

Операция & и. Выполняется с каждой парой соответствующих битов операндов по правилу

0&0=0     0&1=0     1&0=0     1&1=1

Операция может быть использована:

1) для опроса бита

2) для сброса битов

Операция ^- исключающая или.

0^0=1^1=0

0^1=1^0=1

Используется для:

1) Очистки a^=a

2) Для изменения состояния бита b^= не b

Побитовая или |.  Для включения бита 0|0=0   0|1=1|0=1|1=1

Операции побитового сдвига. Сдвигают операнд влево или вправо на указанное количество бит

a=b>>3

b:10101010 >> 00010101 Выталкиваемые биты теряются.

Сдвиг вправо машинно-зависим: освобождаемые слева разряды могут заполняться знаковым разрядом или нулем. Чтобы получить неоднозначный результат, используйте >> только с операндами unsigned.

>> эквивалентен целочисленному делению на 2к . Сдвиг влево 2к эквивалентен умножению на 2к , при условии, что не были вытеснены значимые единицы.

 

2) Функция scanf

Наиболее универсальной функцией, которая позволяет ввести данные с клавиатуры, является функция scanf. В общем виде инструкция вызова функции scanf для ввода значения одной переменной выглядит так:  scanf(Формат,& Переменная);

где:  Формат — это строка, которая содержит спецификатор формата, определяющий то, как должна интерпретироваться строка, введенная с клавиатуры. Наиболее часто используемыми спецификаторами являются: %d — для ввода целых, %f — для ввода дробных, %s — для ввода строк;

&переменная — это адрес переменной, значение которой вводится. Например,

При вызове функции scanf происходит следующее. Программа приостанавливает работу и ждет, пока пользователь наберет на клавиатуре строку символов и нажмет клавишу <Enter>. До нажатия <Enter> можно редактировать вводимую строку. После нажатия клавиши <Enter> функция scanf преобразует введенную строку в данные и записывает их в переменную, адрес которой указан. Преобразование выполняется в соответствии со спецификатором формата.

Следует обратить внимание, что при использовании функции scanf наиболее частой ошибкой, причем не обнаруживаемой компилятором, является отсутствие символа & перед именем переменной.

Если введенная пользователем строка не соответствует типу ожидаемых данных — например, программа ждет ввода целого числа, а пользователь ввел дробное, — то функция scanf обрабатывает только ту часть введенной строки, которая может быть преобразована в требуемые данные. Например, в программе для ввода данных о стоимости покупки используется инструкция scanf("%i%f", &kol, cena), которая предполагает, что пользователь введет в одной строке сначала количество предметов, а затем цену предмета. Если во время работы программы вместо строки 3 24.99 (три предмета по 24.99) ввести строку 24.99 3, то значение переменной kol будет равно 24, а переменной сеnа — 99.


*************************************13 - 3

Дан массив А[n]. Каждый его элемент, кроме первого, заменить суммой всех предыдущих элементов (т.н. нарастающий итог).

 

#include<conio.h>

#include<stdio.h>

int a[]={1,6,43,2,5,7,34,2};

int n=sizeof(a)/sizeof(int);

int i,j,k=n-1;

void main()

{

clrscr();

for(i=n;i>0;i--,k--)

    for (j=0;j<i-1;j++)

            a[k]+=a[j];

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

printf(" %d ",a[i]);

getch();

for(i=1,k=1;i<n;i++,k++)

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

             a[k]+=a[j];

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

printf(" %d ",a[i]);

getch();

}


*************************************13 - 4

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


#include<conio.h>

#include<stdio.h>

char str[]="You are FuCkEr!!! 234 asd2 12!@DSfS#@#sDFHd32";

int n=sizeof(str)/sizeof(char);

int i,j,kol, sum;

void main()

{

 clrscr();

 printf ("%s\n",str);

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

     {

      if ((str[i] >= 48) & (str[i] <= 57))

             {

              kol++;

              sum += str[i];  //I don't know but it + ZNACHENIE a ne 'ZNACHENIE'

              for (j = i; j < n-1; j++)

                   str[j] = str[j+1];

              n--;

              i--;

             }

      else if ((str[i] >= 65) & (str[i] <= 90))

              str[i] = str[i]+32;

     }

 str[i]='\0';

 printf ("%s\n%d\n%d",str,kol,sum);

 getch();

}