Çàäà÷à 1. Ñèììåòðè÷íî ïåðåâåðíóòü (îòîáðàçèòü) ìàññèâ
1 2 3 4 5 | 6 7 8 9 10 → 10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 → 9 8 7 6 5 4 3 2 1
Óñëîâèå: íå èñïîëüçîâàòü äîïîëíèòåëüíûå ìàññèâû
Çàäà÷à 2. Îáìåíÿòü çíà÷åíèÿ äâóõ ïåðåìåííûõ, íå èñïîëüçóÿ äîïîëíèòåëüíûõ ïåðåìåííûõ
x = 1 → x = 2
y = 2 → y = 1
x := x + y (= x0 + y0)
y := x – y (= x0)
x := x – y (= y0)
Íà Ñ:
int x, y;
printf(“Input x and y\n”);
scanf(“%d%d”, &x, &y);
x += y;
y = x – y;
x -= y;
Ðåçóëüòàò ðàáîòû ïðîãðàììû:
Çàäà÷à 3. Îáìåíÿòü çíà÷åíèÿ äâóõ ïåðåìåííûõ ñ èñïîëüçîâàíèåì äîïîëíèòåëüíûõ ïåðåìåííûõ
int x, y, buf;
buf = x; x = y; y = buf;
Ðåøåíèå çàäà÷è 1:
Àäðåñ ïåðåìåííîé èçâëåêàåòñÿ ïðè ïîìîùè îïåðàòîðà &, èçâëå÷ü ñîäåðæèìîå ïî àäðåñó — ïðè ïîìîùè îïåðàòîðà *
int x = 1, y, *px; /* * èñïîëüçóåòñÿ äëÿ óêàçàíèÿ òîãî, ÷òî px èìååò òèï «àäðåñ öåëîãî» */
px = &x;
y = *px; /* * - îïåðàöèÿ èçâëå÷åíèÿ ñîäåðæèìîãî ïî àäðåñó; y ïðèñâîèòñÿ ñîäåðæèìîå ïàìÿòè ïî àäðåñó px, òî åñòü çíà÷åíèå x */
(Âûðîæäåííàÿ ñèòóàöèÿ, òî åñòü ìîæíî ïðîñòî «y = x”. Äàëåå áóäóò ðàññìîòðåíû ïîëåçíûå ïðèìåíåíèÿ *)
int x, y, *px;
px = &x; /* px óêàçûâàåò íà ÿ÷åéêó ñ 1 */
x = 2; /* px óêàçûâàåò íà ÿ÷åéêó ñ 2 */
y = *px; /* y ñòàíåò ðàâíûì 2 */
Àäðåñ ìàññèâà — àäðåñ ïåðâîãî ýëåìåíòà.
int array[100];
int *parray1 = &array[0], *parray2 = array; /* èìÿ ìàññèâà — ýòî òîæå åãî àäðåñ */
*parray1 = 0; /* ïðèñâîèëè 0 ïåðâîìó ýëåìåíòó ìàññèâà array, òî åñòü ìàññèâ array ïîìåíÿëñÿ */
parray1 = 0; /* ïðèñâîèëè 0 ïåðåìåííîé parray1, òî åñòü îíà ñòàëà óêàçûâàòü íà ÿ÷åéêó ñ àäðåñîì 0, à ìàññèâ array íå ïîìåíÿëñÿ */
Åñëè ïàðàìåòð ôóíêöèè — àäðåñ ìàññèâà, òî åãî ìîæíî îïèñàòü äâóìÿ ðàçíûìè ñïîñîáàìè:
void mirror(double *arr, int arr_size);
void mirror(double arr[], int arr_size);
(äåêëàðàöèÿ ôóíêöèè)
void mirror(double arr[], int arr_size) { /* void – îçíà÷àåò, ÷òî ôóíêöèÿ íå âûðàáàòûâàåò íèêàêîãî çíà÷åíèÿ */
double buf;
int i;
for (i = 0; i < arr_size / 2; i++) {
buf = arr[i];
arr[i] = arr[arr_size – 1 – i];
arr[arr_size – 1 – i] = buf;
}
}
#include <stdio.h>
void mirror(double *array, int size); /* ïåðâûé àðãóìåíò — àäðåñ */
void mirror(double *array, int size) {
double buffer;
int i;
for (i = 0; i < size/2; i++) {
/* îáìåíèâàåì çíà÷åíèÿ äâóõ ýëåìåíòîâ ìàññèâà: i-ãî è ñèììåòðè÷íîãî åìó */
buffer = array[i];
array[i] = array[size – 1 – i]; /* size – 1 – èíäåêñ ïîñëåäíåãî ýëåìåíòà */
array[size – 1 – i] = buffer;
}
}
int main(void) {
double array[100];
int i;
for (i = 0; i < 100; i++) {
array[i] = i;
}
mirror(array, 100);
for (i = 0; i < 100; i++) {
printf("%lf ", array[i]);
}
printf("\n");
return 0;
}
Çàäà÷à 4. Ñäâèíóòü ìàññèâ öèêëè÷åñêè íà 1 ýëåìåíò âëåâî
1 2 3 4 5 6 7 8 9 10 → 2 3 4 5 6 7 8 9 10 1
2 2 3 4 5 6 7 8 9 10
2 3 3 4 5 6 7 8 9 10
2 3 4 4 5 6 7 8 9 10
...
2 3 4 5 6 7 8 9 10 10
2 3 4 5 6 7 8 9 10 1
1) 1 ñîõðàíÿåì â áóôåðå
2) Âñå îñòàëüíûå ýëåìåíòû äâèãàåì âëåâî. Âîïðîñ: cêîëüêî ðàç äâèãàåì? Îòâåò: ðàçìåð ìàññèâà - 1
3) 1 èç áóôåðà çàïèñûâàåì íà ïîñëåäíåå ìåñòî
void shift(double *array, int size); /* shift – ñäâèã
void shift(double *array, int size) {
double buffer;
int i;
buffer = array[0];
for (i = 0; i < size – 1; i++) {
array[i] = array[i + 1];
}
array[size - 1] = buffer;
}
double *array;
array[i] – âåùåñòâåííîå ÷èñëî, êîòîðîå íàõîäèòñÿ â i-îì ýëåìåíòå ìàññèâà ñ àäðåñîì array.
Çäåñü àäðåñ âåùåñòâåííîãî èñïîëüçóåòñÿ êàê àäðåñ ìàññèâà, òî åñòü ìû çíàåì, ÷òî array – ýòî àäðåñ ìàññèâà.