БИЛЕТ 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();
}