scanf ("%d %d %d",&worker1,&worker2,&worker3);

printf("Введите стоимость 1 кг. яблок \n");

scantf("%f",&cost);

for(;;) {

printf("В. номер бригады и количество собранных яблок\n");

scanf("%d %d",&num,&w);

switch (num) {

case 1:

weight1 += w;

break;

case 2:

weight2 += w;

break;

case 3:

weight3 += w;

break;

default:

printf("Вы неверно ввели номер бригады\n");

}

printf("Для окончания нажмите клавишу q\n");

ch = getche();

if (ch == 'q')

break;

}

printf("Собрано яблок \n");

printf("1 б-й = %d, 2 б-й = %d, 3 б-й = %d\n”, weight1,weight2,weight3);

printf("Всего за день собрано %d яблок\n ",weight1+weight2+ weight3);

printf("Заработок в 1-й бригаде=%f\n", (float)weight1*cost/worker1);

printf("Заработок в 2-й бригаде=%f\n", (float)weight2*cost/worker2);

printf("Заработок в 3-й бригаде=%f\n", (float)weight3*cost/worker3);

}

9.  МАССИВЫ

Одномерные массивы

Массив - это набор переменных, расположенных последовательно в памяти, имеющих одно имя и отличающихся друг от друга числовым признаком.

float mas [20]; - объявляет массив mas, состоящий из 20 членов или элементов. 1 элемент mas [0], последний mas [19].

mas [5] = 32.54; присваивание значения элементу массива

float y = mas[5];

Массивы могут быть образованы из данных любого типа. Одномерные массивы называются вектором, двумерные – матрицей.

 

НЕ нашли? Не то? Что вы ищете?

4б 4б 4б

Обращение к элементу массива осуществляется с помощью индекса. Индекс изменяются от 0 до n-1, где n размерность массива.

Для работы с массивами часто используются циклы.

#include <stdio. h>

void main (void) {

int i, a[10];

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

scanf (" %d",&a[i]); //ввод с клавиатуры

printf ("Вывести следующие результаты \n");

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

printf (" %5d", a[i]); // вывод на экран.

}

9.1.1.  Стандартные алгоритмы работы с одномерными массивами

//Пример: Нахождения max (min) числа в массиве.

#include <stdio. h>

void main (void) {

int i, num, a[10];

for (num=a[0], i=1; i<10; i++)

if (num<a[i])

num=a[i];

printf("Max число в массиве %d\n",num);

}

//Пример: Сортировка по возрастанию методом отбора

#include <stdio. h>

void main (void) {

int i, j, num, k, flag, a[10];

for (i=0; i<9; ++i) {

num=a[i]; k=i; flag=0;

for (j=i+1; j<10; ++j){

if (a[j]<num) { // ищем min, его индекс.

num=a[j];

k=j;

flag=1;

}

}

if(flag==1){

a[k]=a[i];

a[i]=num;

}

}

}

//Пример: Сортировка по возрастанию методом «Пузырька»

#include <stdio. h>

void main (void) {

int i, j, a[10], num;

for (i=1; i<10; i++)

for (j=8; j>=i; --j)

if (a[j-1]<a[j]) { // ищем min, его индекс.

num=a[j-1];

a[j-1]=a[j];

a[j]=num;

}

}

//Пример: поиск заданного значения

#include <stdio. h>

void main (void) {

int i, k=0, num=10, a[10];

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

if(a[i]==num)

printf(«%d»,i);

}

9.1.2.  Инициализация одномерных массивов

Для хранения данных часто используются массивы. Их можно инициализировать.

int days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Если данных меньше, чем 12, то остальные будут инициализированы 0, если массив глобальный, иначе значения неопределенны. Можно не задавать количество элементов в массиве. Оно будет определяться автоматически.

int days []={31, 28, 31, 30, 31, 30, 31, 31, 30, 31};

void main (void){

int i;

for (i=0; i<sizeof days/(sizeof(unt)); i++)

printf("Месяц %d имеет %d дней\n",i+1, i++);

}

Многомерные массивы

Определяются в программе также как и одномерные с указанием размерности каждого индекса в квадратных скобках.

float rain[5][12];

Количество выделяемой памяти рассчитывается как 4*5*12 байт.

Каждый индекс изменяется от 0 до n-1. В памяти все элементы располагаются последовательно, но индексы меняются следующим образом:

 

//Пример программы ввода кол-ва осадков помесячно за 5 лет и расчета среднего за каждый год и за 5 лет

void main(void){

int i, j;

float mas[5][12], sumyear, sum=0;

for (i=0; i<5; i++){

printf("Ввести кол-во осадков за %d год помесячно\n", i+1);

sumyear=0;

for (j=0; j<12; j++){

scanf ("%f",&mas[i][j]);

sumyear+=mas[i][j];

}

sum+=sumyear/12;

printf(Ср. за %d год = %.2f\n”,sumyear/12);

}

printf(Ср. за 5 лет = %.2f\n”,sum/5);

}

9.1.3.  Инициализация многомерных массивов

1. Инициализируем как одномерный массив.

float rain[2][3]={10.2, 8.1, 6.8, 9.2, 7.8, 4.4};

2. Инициализируем каждую строку.

float rain[2][3]={{10.2, 8.1, 6.8},

{9.2, 7.8, 4.4}};

3. Можно инициализировать в строке не все элементы, а только первые указанные.

int array[2][3]={{2, 8},

{9}};

4. Можно не задавать количество строк. Оно будет определяться автоматически по заданным инициализаторам.

int mas[][3]={{10, 8},

{9, 7, 4}};

9.1.4.  Стандартные алгоритмы работы с двумерными массивами

К стандартным алгоритмам работы с двумерными массивами (матрицами) относятся:

1.  Сложение (вычитание) двух матриц;

2.  Умножение матрицы на скаляр;

3.  Умножение матрицы на вектор;

4.  Умножение матрицы на матрицу;

5.  Транспонирование матрицы;

6.  Вставка (удаление) строк и столбцов матрицы;

7.  Вычисление обратной матрицы.

8.  Перестановка строк и столбцов.

Пример 1. Сложение двух матриц.

void main(void){

int i, j;

float mas1[3][4], mas2[3][4];

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

for (j=0; j<4; j++){

mas1[i][j]+=mas2[i][j];

printf(mas1[%d][%d]=%.2f\n”, i, j, mas1[i][j]);

}

}

Пример 2. Умножение матрицы на вектор

void main(void){

int i, j;

float mas1[3][4], vec[4], var, mas2[3];

for (i=0; i<3; i++) {

var = 0;

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

var += mas1[i][j] * vec[j];

mas2[i] = var;

printf(mas2[%d] = %.2f\n”, i, mas2[i]);

}

}

Пример 3. Умножение матрицы на матрицу

void main(void){

int i, j, k;

float mas1[3][4], var, mas2[4][5], mas3[3][5];

for (i=0; i<3; i++) {

for (j=0; j<5; j++) {

var = 0;

for (k=0; k<4; k++)

var += mas1[i][k] * mas2[k][j];

mas3[i][j] = var;

printf(mas3[%d][%d] = %.2f\n”, i, j, mas3[i][j]);

}

}

}

Пример 4. Вставить строку

void main(void){

int i, j;

float mas1[4][4], var=1, vec[4];

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

for (j=3; j<var; j--)

mas1[j][i] = mas1[j-1][i]; //сдвиг строк

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

mas1[var][i] = vec[i];

}

10.  ФУНКЦИИ

Функция – это фрагмент программы со своим именем, к которому можно обратиться для выполнения необходимых действий.

Функция содержит как данные, так и операции над этими данными. Если для объекта имя ссылается на область памяти, где он хранится, то и имя функции ссылается на начало кода этой функции. Функции в Си играют ту же роль что и функции, программы, процедуры в других языках.

-  они освобождают от повторного программирования, если конкретную задачу нужно решать в программе несколько раз.

-  повышают уровень модульности программы, облегчают её чтение, внесение изменений, коррекцию ошибок.

-  cозданные функции можно использовать и в других программах.

Функции бывают библиотечные и пользовательские. Для использования библиотечных функций нужно указать заголовочный файл, в которых они объявлены (директива #include).

Cоздание и использование пользовательских функций

Весь принцип программирования на Си основан на понятии функции. Выполнение программы начинается с команд, содержащихся в функции main(), затем из неё вызываются другие функции: printf, scanf(), getchar(), putchar(). Это библиотечные функции языка Си.

Как же создать свои функции?

void main (void){

float list[50];

read list (list); // ввод набора чисел

sort list (list); // сортировка

average (list); // поиск среднего

bargaph (list); // печать графика

}

До определенного момента функция рассматривается как "чёрный ящик", пока не нужно писать программу, реализующую данную функцию.

Нужно знать как определить функцию и как к ней обратиться. Различают 3 момента работы с функцией:

1.  Объявление функции или прототип функции.

2.  Вызов функции.

3.  Определение функции.

//Задача. Напечатать титульный бланк организации.

#inсlude <stdio. h>

void starbar (void); //объявление функции

void main (void) {

starbar (); // вызов функции

printf ("ПГУ");

printf ("им. ");

printf ("25 октября, 200");

starbar(); - вызов функции

}

void starbar (void) { //определение функции

int count;

for (count=1; count<=65; count++)

putchar ('*');

putchar ('\n');

}

При написании функции starbar() используются те же правила, что и при создании main(): имя, фигурные скобки.

Объявление функции должно быть обязательно, если функция определена ниже ее вызова. Объявлять можно в начале модуля в заголовке программы, тогда функция доступна в любой другой функции, или в функции, где она вызывается, тогда область ее видимости ограничена этой функцией.

Определять функцию можно в любом месте программы. Единственное ограничение – нельзя определить функцию внутри определения другой функции.

Параметры функции

Вернёмся к рассмотренной задаче. Пусть функция starbar() печатает любой символ, указанный в вызывающей программе. Он передается в функцию как аргумент.

#inсlude <stdio. h>

void starbar (char); // объявление функции

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12