Примеры программ к Лабораторной работе N6. "Умножение матриц"
/* array2d.c -- функции для двумерных массивов */
#include <stdio.h>
#define ROWS 3
#define COLS 4
void sum_rows(int ar[][COLS], int rows);
void sum_cols(int [][COLS], int); // можно опустить имена
int sum2d(int (*ar)[COLS], int rows); // другой вид синтаксиса
int main (void)
{
int junk[ROWS][COLS] = {
{2, 4, 6, 8},
{3, 5, 7, 9},
{12, 10, 8, 6}
};
sum_rows(junk, ROWS);
sum_cols(junk, ROWS);
printf("Cyммa всех элементов = %d\n", sum2d(junk, ROWS));
return 0;
}
void sum_rows(int ar[][COLS], int rows)
{
int r;
int c;
int tot;
for (r = 0; r < rows; r++)
{
tot = 0;
for (c = 0; c < COLS; c++)
tot += ar[r][c];
printf("cтpoкa %d: сумма = %d\n", r, tot);
}
}
void sum_cols(int ar[][COLS], int rows)
{
int r;
int c;
int tot;
for (c = 0; c < COLS; c++)
{
tot = 0;
for (r = 0; r < rows; r++)
tot += ar[r][c];
printf("cтoлбeц %d: сумма = %d\n", c, tot);
}
}
int sum2d(int ar[][COLS], int rows)
{
int r;
int c;
int tot = 0;
for (r = 0; r < rows; r++)
for (c = 0; c < COLS; c++)
tot += ar[r][c];
return tot;
}
/* lesser.c -- из двух зол она выбирает меньшую */
#include <stdio.h>
int imin (int, int);
int main (void)
{
int evil1, evil2;
printf("Bвeдитe два целых числа (или q для завершения программы):\n");
while (scanf("%d %d", &evil1, &evil2) == 2)
{
printf("Меньшим из двух чисел %d и %d является %d.\n", evil1, evil2, imin(evil1, evil2));
printf("Bвeдитe два целых числа (или q для завершения программы):\n");
}
printf("Пpoгpaммa завершена.\n");
return 0;
}
int imin(int n, int m)
{
int min;
if (n < m)
min = n;
else
min = m;
return min;
}
/* lethead2.c */
#include <stdio.h>
#include <string.h> /* для функции strlen() */
#define NAME "GIGATНINK, INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Megapolis, CA 94904"
#define WIDTH 40
#define SPACE ' '
void show_n_char(char ch, int num);
int main (void)
{
int spaces;
show_n_char('*', WIDTH); /* использование констант в качестве аргументов */
putchar ('\n');
show_n_char(SPACE, 12); /* использование констант в качестве аргументов */
printf("%s\n", NAME);
spaces = (WIDTH - strlen(ADDRESS)) / 2; /* Пусть программа вычислит, сколько пробелов пропустить */
show_n_char(SPACE, spaces); /* использование переменной в качестве аргумента */
printf("%s\n", ADDRESS);
show_n_char(SPACE, (WIDTH - strlen(PLACE)) / 2); /* выражение в качестве аргумента */
printf("%s\n", PLACE);
show_n_char('*', WIDTH);
putchar('\n');
return 0;
}
/* определение функции show_n_char() */
void show_n_char(char ch, int num)
{
int count;
for (count = 1; count <= num; count++)
putchar(ch);
}
/* sum_arr2.c - суммирует элементы массива */
#include <stdio.h>
#define SIZE 10
int sump(int * start, int * end);
int main (void)
{
int marbles[SIZE] = {20, 10, 5, 39, 4, 16, 19, 26, 31, 20};
long answer;
answer = sump(marbles, marbles + SIZE);
printf("Oбщee количество элементов marbles равно %ld.\n", answer);
return 0;
}
/* использование арифметики указателей */
int sump(int * start, int * end)
{
int total = 0;
while (start < end)
{
total += *start;
start++;
}
return total;
}
/* sumarr1.c - сумма элементов массива */
/* используйте спецификаторы %u или %lu, если спецификатор %zd не работает */
#include <stdio.h>
#define SIZE 10
int sum(int ar[], int n);
int main(void)
{
int marbles[SIZE] = {20, 10, 5, 39, 4, 16, 19, 26, 31, 20};
long answer;
answer = sum(marbles, SIZE);
printf("Общая сумма элементов массива marbles равна %ld.\n", answer);
printf( "Oбъeм памяти, отведенной под массив marbles, составляет %zd байт.\n", sizeof marbles);
return 0;
}
int sum(int ar[], int n) // каков размер массива?
{
int i;
int total = 0;
for(i = 0; i < n; i++)
total += ar[i];
printf("Paзмep переменной ar составляет %zd байт.\n", sizeof ar);
return total;
}
/* swap3.c -- использование указателей для обмена значениями переменных */
#include <stdio.h>
void interchange(int * u, int * v );
int main(void)
{
int x = 5, y = 10;
printf("Первоначально x = %d и y = %d.\n", x, y);
interchange(&x, &y); /* передача адресов в функцию */
printf("Teпepь x = %d и y = %d.\n", x, y);
return 0;
}
void interchange(int * u, int * v )
{
int temp;
temp = *u; /* переменная temp получает значение, на которое указывает u */
*u = *v;
*v = temp;
}
/* zippo1.c - информация о массиве zippo */
#include <stdio.h>
int main (void)
{
int zippo[4][2] = {{2, 4}, {6, 8}, {1, 3}, {5, 7}};
printf(" zippo = %p, zippo + 1 = %p\n", zippo, zippo + 1);
printf("zippo[0] = %p, zippo[0] + 1 = %p\n", zippo[0], zippo[0] + 1);
printf(" *zippo = %p, *zippo + 1 = %p\n", *zippo, *zippo + 1);
printf("zippo[0][0] = %d\n", zippo[0][0]);
printf(" *zippo[0] = %d\n", *zippo[0]);
printf(" **zippo = %d\n", **zippo);
printf("zippo[2][1] = %d\n", zippo[2][1]);
printf("*(*(zippo + 2) + 1) = %d\n", *(*(zippo + 2) + 1 ));
return 0;
}
/* zippo2.c - получение информации о массиве zippo с помощью переменной типа указатель */
#include <stdio.h>
int main (void)
{
int zippo[4][2] = {{2, 4}, {6, 8}, {1, 3}, {5, 7}};
int (*pz)[2];
pz = zippo;
printf(" pz = %p, pz + 1 = %p\n", pz, pz + 1);
printf("pz[0] = %p, pz[0] + 1 = %p\n", pz[0], pz[0] + 1);
printf(" *pz = %p, *pz + 1 = %p\n", *pz, *pz + 1);
printf("pz[0][0] = %d\n", pz[0][0]);
printf(" *pz[0] = %d\n", *pz[0]);
printf(" **pz = %d\n", **pz);
printf("pz[2][1] = %d\n", pz[2][1]);
printf("*(*(pz + 2) + 1) = %d\n", *(*(pz + 2) + 1));
return 0;
}