Варіант №2
1. 1, 3, 4, 7.
2. 2 - int, 3 - double, 46 - int.
3. -3, long.
4. #define Diff (a, b) ((a)-(b)) .
5. p - це покажчик на покажчик на масив, який має 10 значень типу int.
6. int *(*a[5][10])(int x)
7. Операції відношення порівнюють між собою два значення. До операцій відношення належать операції :
> - більше;
< - менше;
== - рівне;
!= - не рівне;
>= - більше рівне;
<= - менше рівне.
Результатом порівняння є значення істини (не 0) або не істини (0).
8. int sum = 0;
for (i = 0; i < 30; i++)
{
if (a[i] < 0)
{
sum += a[i];
}
}
9.
#include <stdio.h>
int main ( )
{
int i, j, n = 20;
int a[n][n];
int min = a[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 1; i < n ; i++)
{
for (j = 0; j < i; j++)
{
if (a[i][j] < min)
{
min = a[i][j];
}
}
}
printf("%d", min);
return 0;
}
Варіант №3
1. 2, 3, 6, 7.
2. 1 - double, 2 - int, 5 - unsigned int
3. 9, long.
4. #define Mul(a, b) ((a)*(b))
5. p - це масив з 10 покажчиків на покажчик типу int.
6. double (**a[15][10])()
7. Операції адресації тісно пов'язані з поняттям покажчика. Покажчик - це змінна, яка призначена для збереження адреси об'єкта деякого типу. Синтаксис : [<специфікація типу>] *<описувач>; . Специфікація типу задає тип змінної, на яку посилається покажчик, а символ '*' визначає саму змінну як покажчик. Приклад застосування покажчика : дамо покажчику ім'я p, то можемо записати вираз
p = &abc; // присвоєння адреси abc змінній p
де &abc - константа типу покажчик, адреса змінної abc, а p - змінна типу покажчик. В такому випадку p вказує на abc. Якщо в змінній p міститься посилання на змінну abc, тоді для доступу до значення цієї змінної можна скористатися операціїє "непрямої адресації":
val = *p; // визначення значення на яке вказує p
Отже, останні два оператори стають еквівалентні виразу
val = abc;
8. int kol = 0;
for (i = 0; i < 20; i++)
{
if (a[i] == 0)
kol++;
}
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 10;
int a[n][n];
int min = a[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[i][j] < min)
{
min = a[i][j];
}
}
}
printf("%d", min);
return 0;
}
Варіант №8
1. 1, 3, 4, 6.
2. 1 - int, 3 - char, 6 - double
3. 5, long.
4. #define Mul(a, b, c) ((a)*(b)*(c))
5. Покажчик на масив з 10 масивів, кожен з яких має 20 значень типу double.
6. int (**(*)[5])()
7 Порозрядні операції виконуються тільки над операндами цілих типів. До них належать:
~ (інверсія);
<< (зсув вліво)
>> (зсув вправо);
& (порозрядне І);
^ (побітове АБО з виключенням);
| (порозрядне АБО).
Використання порозрядних операцій дає змогу оперувати окремими бітами даних, перевіряти або змінювати їх значення. Порозрядні операції виконуються окремо над кожною парою бітів, що записані в однакових за номером розрядах двох операндів, які вступають в порозрядну операцію. Результат порозрядного І буде нульовим, якщо хоча б один з бітів 0. Якщо обидва біти рівні 1, то результат дорівнює не нуль. Результат побітового АБО з виключенням буде нульовим, якщо обидва біта будуть рівні, у всіх інших випадках результат дорівнює не нуль. Результат порозрядного АБО буде нульовим, якщо обидва біта будуть рівні 0, у всіх інших випадках результат дорівнює не нулю.
8. double prod = 1;
for (i = 0; i < 10; i++)
{
if (a[i] != 0)
prod *= a[i];
}
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 30;
int a[n][n];
int max = a[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 1; i < n; i++)
{
for (j = n - 1; j < n; j++)
{
if (a[i][j] > max)
{
max = a[i][j];
}
}
}
printf("%d", max);
return 0;
}
Варіант №10
1. 2, 3, 6, 8.
2. 3 – double, 4 - int, 5 - char.
3. 0 , int
4. #define SqDiff (a ,b) (((a)*(a)) - ((b)*(b)))
5. p - це покажчик на функцію з аргументом типу int, яка повертає покажчик на масив з 10 масивів, кожен з яких має 15 значень типу float.
6. int *(*(*p)[5][10])(int x)
7. Умовна операція - єдина тернарна операція, тобто вона має 3 операнди. Синтаксис : <операнд 1>?<операнд 2>:<операнд 3>; . Операнд 1 являє собою ціле, плаваюче значення або покажчик. В умовній операції спочатку обчислюється операнд 1 і порівнюється з нулем. Якщо значення - не нуль, то обчислюється операнд 2 і він є результатом. Якщо ж операнд - нуль, то обчислюється операнд 3 і він є результатом.
8. int cnt = 0, sum = 0;
for (i = 0; i < 30; i++)
{
if (a[i] < 0)
{
cnt ++;
sum += a[i];
}
}
arm = sum/cnt;
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 20;
int a[n][n];
double sum = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 1; i < n ; i++)
{
for (j = 0; j < i; j++)
{
if (a[i][j] > 0)
{
sum += a[i][j];
}
}
}
printf(“ %d", sum);
return 0;
}
Варіант №12
1. 3, 4, 8.
2. 1 - unsigned long, 6 - int.
3. 0, int.
4. #define DiffSq(a, b) ((a)*(a) - (2)*(a)*(b) + (b)*(b))
5. p - покажчик на функцію з покажчиком типу double, яка повертає покажчик на масив з 7 масивів, кожен з яких має 9значень типу int.
6. int *(*(**a)[5])()
7. Пріоритет операцій – черговість виконання операцій у виразі, за умови, що у виразі немає явної вказівки порядку проходження виконання операцій (за допомогою круглих дужок). Якщо операції мають однаковий пріоритет, то черговість виконання таких операцій визначається відповідно до властивості асоціативності. Асоціативність – напрямок виконання операцій у разі, якщо операції мають однаковий пріоритет. Побічний ефект виражається в неявному зміні значення змінної в процесі обчислення виразу. Всі операції присвоювання можуть викликати побічний ефект. Виклик функції, в якій змінюється значення будь-якої зовнішньої змінної, або шляхом явного привласнення, або через покажчик, також має побічний ефект.
8. double kol = 0;
for (i = 0; i < 10; i++)
{
if (a[i] < (-5))
kol++;
}
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 30;
int a[n][n];
int sum = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 1; i < n; i++)
{
for (j = n - 1; j < n; j++)
{
if (a[i][j] > 0)
{
sum += a[i][j];
}
}
}
printf("%d", sum);
return 0;
}
Варіант №15
1. 1, 2, 5, 7.
2. 1 - unsigned long, 2- char, 3 - int.
3. 1, int
4. x = 20 + y || yz
5. Покажчик на функцію з аргументом типу int, яка повертає покажчик на масив з 20 масивів, кожен з яких містить 5 значень типу double.
6. double (**(*)[15][10])(int x)
7. Для скороченою записи виразів в мові програмування С є спеціальні операції, які називаються операціями присвоювання. С існує п'ять операцій привласнення, не рахуючи основну операцію присвоювання: =.
+= операція присвоювання-складання;
-= операція присвоювання-віднімання;
*= операція присвоювання-множення;
/= операція присвоювання-ділення;
%= операція присвоювання-залишку від ділення;
При операціїї присвоювання-складання та присвоювання-віднімання результат зберігається у змінній, над якою виконується дія. При присвоювання-множення та присвоювання-ділення резульат дії присвоюється змінній, над якою виконується дія.
При присвоювання-залишку від ділення залишок зберігається в змінній.
8.
int sum = 0;
for (i = 0; i < 20; i++)
{
if (i%2 == 0)
sum += a[i];
}
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 10;
int a[n][n];
int prod = 1;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[i][j] > 0)
{
prod *= a[i][j];
}
else prod = 0;
}
}
printf("%d", prod);
return 0;
}
Варіант №17
1. 2, 3, 6, 7.
2. 2 - int; 3 - double, 5 - long.
3. -3, long
4. #define Add(a, b) ((a)+(b))
5. p - покажчик на масив з 10 покажчиків типу int.
6. int *(*a[5][10])( )
7. L-вираз - вираз, який посилається на комірку пам'ті і тому має зміст у лівій частині. До L-виразів належать :
1) Ідентифікатори цілого, плаваючого, перелічуваного типів,покажчиків, структур та об'єднань.
2) Індексні вирази за винятком тих, значення яких має тип масив.
3) Вирази вибору елемента, якщо елементом є L-вираз.
4) Вирази непрямої адресації.
5) L-вираз у дужках
6) Вираз перетворення типу змінної, якщо розмір результата не перевищує розмір початкового.
Перелічувані L-вирази також називають модифікованими L-виразами. Крім того існують немодифіковані L-вирази. Їх адреса може бути отримана, але використовуватися в лівій частині бінарної операції присвоєння вони не можуть. До них відносяться ідентифікатори масивів, функцій, а також змінних, оголошених з модифікатором const.
8. double sum = 0;
for (i = 0; i < 40; i++)
{
if (a[i] > 0)
{
sum += a[i];
}
}
9.
#include <stdio.h>
int main (void)
{
int i, j, n = 40;
int a[n][n];
int min = a[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf ("%d", & a[i][j]);
}
}
for (i =0; i < n - 1; i++)
{
for(j = i + 1; j < n; j++)
{
if (a[i][j] < min)
{
min = a[i][j];
}
}
}
printf("%d", min);
return 0;
}