Основы программирования на языке с 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основы программирования на языке с



ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С

Язык C является широко распространенным языком программирования. Он был создан в начале 70-х годов 20-го столетия в процессе разработки операционной системы UNIX, ее программное обеспечение написано на C. В связи с этим данный язык называют языком системного программирования, так как он удобен для написания операционных систем и других системных программ. Вместе с тем он является универсальным языком программирования, так как с равным успехом использовался при написании больших вычислительных программ, программ для обработки текстов и баз данных.

Элементы языка С

Комментарии

Комментарии предназначены для записи в программе пояснений к отдельным операторам или группам операторов. Комментарии могут быть однострочными и многострочными.

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

/* текст комментария */  

Пример. Однострочный комментарий к оператору ввода данных с клавиатуры:

/* Ввод исходных данных */ или

scanf(“%d%f”, &k, &p);   /* Ввод исходных данных */

Форма записи многострочного комментария:  

/* строка 1 комментария

строка N комментария */

Пример. Многострочный комментарий, содержащий сведения о программе и ее разработчиках:

/* ….Название программы….

…. Программисты ….

…. Название фирмы ….*/

 

Идентификаторы

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

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

a_f1  

В идентификаторах нельзя использовать следующие символы: .:; + / & #,..

Идентификаторы могут начинаться: с букв, с _ (подчеркивание), но не с цифр, например:

x1 alfa  size_of_memory _art - правильно 5ats - неправильно

 

Данные

Данные – это величины, с которыми в программе выполняются различные операции (арифметические, логические, ввода, вывода).

К данным относятся: константы, переменные, массивы, указатели, структуры. Рассмотрим вначале константы и переменные, а остальные виды данных – позже.

Константы

Константы – это величины, которые в процессе работы программы не изменяют своих значений. В языке С имеется несколько типов констант:

1) Целые числа – различают три вида: десятичные, восьмеричные, шестнадцатеричные.

- десятичные: используется десять цифр (0…9) и знак - (минус) для отрицательных чисел

45, -126, 1389   

- восьмеричные: используется восемь цифр (0,1,2,3,4,5,6,7), первой цифрой в числе должен быть 0

         0135→1358    024→248

- шестнадцатеричные: используется 16 символов (0…9ABCDEF), впереди числа должно быть записано 0х

        0х6A9F →6A9F 16    0х5E →5E 16     0х5792→579216

     2) Вещественные числа – предназначены для записи действительных чисел, используется 2 формы записи:

- с десятичной точкой: 251,46 → 251.46    -17,392 → -17.392

    - с порядком: m E p → m*10p, где m– мантисса, Е – основание степени 10, р – порядок (степень 10):

    23,69*10 -8 → 23.69Е-8 = 2.369Е-7 152,34*10 6 → 152,34Е6 = 1.5234Е8

    3) Символьные константы – это отдельные символы из таблицы ASCII (256 символов или 28, т.к. для кодирования символов используется 8 бит или 1 байт):

    ‘ A ‘ ‘! ‘ ‘ 5 ‘    

‘ 5 ‘ ≠ 5 т.к. ‘ 5 ‘ – символ, занимает 1 байт, а 5 – число, занимает 2 байта

      4) Строковые константы – это последовательность символов, заключенная в кавычки:

“Исходные_данные“   

В конце строки автоматически записывается служебный символ ‘\0‘ – признак конца строки. Длина строки равна количеству символов плюс служебный символ.

    1.3.2. Переменные

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

    Форма описания переменных:

    <тип> <имя1>, <имя2>, …, <имяN>;

Где тип – название типа данных, значение которого может принимать переменная;

имяI – идентификатор для обозначения переменной (имя переменной).

Типы данных переменных могут быть: стандартные, нестандартные (определяемые программистом).

Стандартные типы переменных

1. Целый тип:  

short, int – 2 байта, целый тип со знаком ±

long – 4 байта, длинный целый тип со знаком ±

    unsigned – целый тип без знака, добавка к типу

    unsigned short, unsigned int → unsigned – 2 байта, беззнаковый целый тип

    unsigned long - 4 байта, беззнаковый длинный целый тип
2. Вещественный тип:                                      точность

    float – 4 байта (нормальная длина)      6

    double – 8 байтов (двойная длина)      16 цифр

3. Символьный тип:

char может использоваться в 3 вариантах

    а) 1 символ из кодовой таблицы ACSII, занимает 1 байт; 

    б) короткие целые числа со знаком, занимающие 1 байт;

    в) unsigned char - короткие целые числа без знака, занимающие 1 байт.

Примеры описания переменных

int k, m;

long d, f, h;

unsigned n;

unsigned long v, w;     

float x, a, b;

double t, z, q; char p, s;

Инициализация переменных

При описании переменных в программе, им могут задаваться начальные значения, которые потом могут изменяться. Такое действие называется инициализацией переменных. Инициализация переменных не является обязательной и выполняется при необходимости.

Форма записи инициализации переменных:

< тип> <имя> = значение;

Например:

int k=10, m;

float x=–3.5, eps=1.0e–5, y, z;

char p=’!’, s=37, q; 

Арифметические операции

Имеется два вида арифметических операций:

1. Двухместные, в которых имеется два операнда

+ сложение  a + b

- вычитание a - b

* умножение a * b

/ деление              a / b

% остаток от целочисленного деления a % b (8%2 → 0, 10%3 → 1)

2. Одноместные, в которых имеется один операнд

++ - увеличение на 1 a++ → a=a+1

-- - уменьшение на 1 a-- → a=a-1

Арифметические выражения

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

Правила записи выражений следующие:

1. Выражение записывается в одну строку x +  → x+ 1.5/y

2. Знаки операций не переносятся 1.8*sin(x-12.1) - exp(2.9*y)

3. Выражение вычисляется слева направо с учетом приоритетов операций:

Приоритеты операций:

1. Вычисление функций  

2. *, /, %    

3. +, -

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

             (2.7*x + 1.3) / (y – 5.1)  

Вопросы для контроля

1 Из каких элементов может состоять программа?

2 Что такое комментарии, как они записываются?

3 Для чего предназначены арифметические выражения?

4 Какие из приведенных идентификаторов записано с ошибками:

 A, b12, max_x, * f1, 1_rez, 23s?

6 Что такое константы?

7 Что такое переменные?

8 Как выполняется описание данных?

9 Какие бывают стандартные типы данных?

10 Какие существуют виды арифметических операций?

11 Как записываются арифметические выражения?

12 Что нужно сделать, чтобы воспользоваться стандартными математическими функциями?

13 Сколько байтов занимает тип int?

14 Сколько байтов занимает тип float?


СТРУКТУРА С – ПРОГРАММЫ

Структура программы

Программа на языке С представляет собой текстовый файл с расширением.срр, содержащий набор строк. Последовательность программы должна соответствовать следующей структуре.

Общий вид простой программы имеет следующий вид:

 

Часть программы Пояснения
# include<...> ..... # define                             Директивы                            препроцесора
int  main()               Заголовок основной функции программы              
{ открытие программы
Описание 1; .... Описание n; описательная часть
оператор 1; ......... ......... оператор n; return 0; операторная часть
} Закрытие программы

 

Вопросы для самоконтроля

1 Из каких разделов состоит программа?

2 Какие действия выполняет директивы препроцессора?

3 Как выглядит заголовок главной функции?

4 Как отделяются операторы друг от друга?

5 Какую функцию выполняют # include?

6 Для чего выполняется описание данных?

7 Какое расширение имеет файл с текстом программы?

 


ОПЕРАТОРЫ ЯЗЫКА СИ

Операторы предназначены для выполнения в программах разных операций: арифметических, логических, ввода, вывода и других. В тексте программы один оператор отделяется от другого точной с запятой;.

3.1.Оператор присваивания

Данный оператор выполняет присвоения переменной, указанной в левой части, значение выражения, расположенного в правой части оператора.
Формы записи оператора:

Оператор присваивания имеет три формы: простой, многоместный, совмещенный.

Простой:

v=a; 

где: a-арифметическое выражение,

    v-переменная,

  = - знак присваивания

Пример:

void main() {

int present, entr;

present =exp(2,9);

entr = 20;

present = present + entr;

Многоместный - позволяет присваивать значение одного выражения сразу нескольким переменным.

k=m=i=1 v1=v2=…=124

Совмещенный - совмещает в себе две операции:

- изменение переменной на заданную величину;

- присвоение ей нового значения;

v+ =a;            v=v+a

v - =a;           v=v-a

v*=a;             v=v*a

v/=a;             v=v/a

v% =a;            v=v% a

k+=1;             k++ (k=k+1)

k-=1;             k- - (k=k-1)

 

Пример

x+=0.5; z*=2.8;

t-=y*sin(0.2*x);

3.2. Составной оператор – образуется путем заключения в фигурные скобки двух или более операторов.

{оператор 1;

оператор n;

}

 

Пример 3.1

{ f = 1/2 *3*x;  k* = f;}

 

Составные операторы могут быть вложенными. Тогда следует помнить, что закрывается первым тот оператор, который открылся последним, и последним закрывается тот, который открылся первым.

{

{

оператор 1;

оператор 2;

}

 

{

оператор 3;

оператор 4;

}

 

}

Вывод данных на дисплей.

Для вывода информации на экран используется оператор printf(…), который выглядит следующим образом:

printf (“управляющая строка”,список вывода);

Управляющая строка определяет форму вывода информации и может включать в себя поясняющий текст, форматные спецификации и символ перевода строки.

Форматные спецификации содержат знак % и символ, соответствующий типу вводимой информации:

%d – целые десятичные

%u – беззнаковое десятичное 

%c - символ 

%s – строка

%f – вещественное с десятичными знаками.

%е – вещественное с порядком

%g – короткое вещественное

%0 – восьмиричное

%x – шестнадцатиричное

\n переход на новую строку

Ввод данных с клавиатуры.

scanf(…) – структура оператора для ввода данных аналогична структуре оператора printf(…).

scanf(“управляющая строка”, список указателей);

Оператор ввода читает символы из входного потока информации и интерпретирует их согласно форматной спецификации управляющей строки.

Список ввода - список указателей, которые определяют, где будут располагаться введенные данные, поэтому перед именами переменных списка указателей ставится знак &.

Пример 3.4:  

int k;

float y;

char t;

printf(“Введите значения k, y, t \ n “);

scanf(“%d%f%c”, &k, &y, & t);

Для осуществления ввода, вывода необходимо использовать файл стандартной библиотеки stdio.h.

#include<stdio.h>

Оператор перехода.

Оператор gotoпозволяет реализовать передачу программного управления из одной точки программы в другую.

Форма записи:

goto M;

где: М– метка оператора, обозначается обычным идентификатором, между меткой и помечаемым оператором размещается двоеточие:

lab1: y = 2*x + 1.5;

..........

goto lab1;

Пример 3.5:

#include <stdio.h>

void main()

{

int number =1;

label: printf(“Число: % 2d\n”, number);

number++;

if (number<=10) goto label;

}

 

Условный оператор.

Условный оператор предназначен для проверки заданного условия и выбора выполняемых действий (операторов) в зависимости от истинности (ложности) условия. Имеется 2 формы записи условного оператора:

1.Полная форма:

 if(L) A1; else A2;

где:  

L- некоторое логическое выражение;  

A1, A2 простые или составные операторы.

Оператор работает таким образом, что если проверяемое условие истина, то выполняется оператор А1, оператор А2 пропускается и выполняется оператор, следующий за условным.

Если проверяемое условие ложь, то пропускается оператор А1, выполняется оператор А2, а затем выполняется оператор, следующий за условным, что можно проследить на блок-схеме

 


2.Сокращенная форма:

 if(L) A;

Оператор работает таким образом, что если проверяемое условие истина, то выполняется оператор А и далее выполняется оператор, следующий за условным.

Если проверяемое условие ложь, то пропускается  оператор А, и сразу выполняется оператор, следующий за условным, что можно проследить на блок-схеме

 

Обычно, операторы А1, А2, А являются составными и общая структура оператора будет выглядеть следующим образом

if(выражение)

{оператор1;

оператор n; }

else

{оператор1;

оператор n;

}

 

Условия в операторе if

В условном операторе можно записывать два вида условий:

1 - логические отношения;

2 - логические выражения.

Отношение - два арифметических выражения, связанных знаком отношения. Знаки логических отношений приведены в таблице 3.1.

Таблица 3.1 Знаки логических отношений

Знаки отношений Описание
> больше чем
>= больше или равно
< меньше чем
<= меньше или равно
== равно
!= не равно

Пример 3.6:   if(x1<=x2) t=y*sin(x1)+1.5;

 Логические выражения –два или больше логических отношений объединенных соответствующими операциями:

1. &&- логическое умножение and (и)

2. || - логическое сложение or(или)

3.! – логическое отрицание not (не).

Пример 3.7.

1.Проверить принадлежность числа х отрезку[-2;2]

                                                     

                                                       if(x>=-2 && x<=2)…

 

2.Проверить лежит ли число у за пределами отрезка [0;5] 

                      

                       if(y<0 || y>5)

                          

Логические выражения вычисляются слева направо и, если на каком-то этапе выясняется истинность (ложность) данного выражения, то вычисления прекращаются.

Пример 3.8.

x=2; y=5;

if(x>3&&y<6)…    ложь

 

ложь не выч-ся      

if(x<=4||y>=5)…     истина 

 

истина не выч-ся    

  Вложенные условные операторы.

Внутри каждого условного оператора может быть один или несколько условных операторов.

if (выражение_1) if (выражение_2) оператор_1;

               else оператор_2;

 

В сложных условных операторах else относится к ближайшему if. Если возникает необходимость в изменении такого порядка, то используют фигурные скобки, чтобы указать, к какому if принадлежит else.

if(выражение_1) {if(выражение_2) оператор_1;}

else оператор_2;

Пример 3.9. Задано три числа a, b, c. Найти значение максимального среди них.

Текст программы.

int main ()

{

float a,b,c,max;

printf("задайте значения a,b,c");

scanf("%f%f%f",&a,&b,&c);

if (a>b)max=a; else max=b;

if (c>max) max=c;

printf("\n max=%5.1f",max);

return 0;

}

Пример 3.10 Выполнить вычисления y по одной из формул, в зависимости от введенных значений чисел a, b, x.

sin(a/x),     если x≤a

y =   cos(a+b*x), если  x≥b

a+(b+x)2+√|a|, если a<x<b

Текст программы

#include<stdio.h>

#include<conio.h>

#include<math.h>

int main ()

{

float a,b,x,y;

printf("Задайте значения a,b,x");

scanf("%f%f%f",&a,&b,&x);

if (x<=a) y=sin(a/x);

if (x>=b) y=cos(a+b*x);

if (x>a&&x<b) y=a+(b+x)*(b+x)+sqrt(fabs(a));

printf("\n a=%5.1f b=%5.1f x=%5.1f y=%5.1f",a,b,x,y);

}

Пример 3.11 Выполнить вычисления y по одной из формул при различных значения х, используя оператор перехода и метку.

  √ x -x2, если х>0

y=

     x+√|x|, если х≤0

где х изменяется от –2 до +2 с шагом dx=0,1.

Определить: k-количество положительных у(y>0) и их сумму S.

 

int main()

{

int k=0;

float x=-2, y, s=0;

metka: if (x>0)  y=sqrt(x)-x*x;

           else y= x+sqrt(fabs(x));

printf(“\n %6.2f %6.2f ”, x, y);

if (y>0){

    k++;

    S+=y;

    }

x+=0.1;

if(x<=2) goto metka;

printf (“\n количество Y>0 k=%d\n”,k);

printf(“сумма Y>0 s=%6.2f”,s);

return 0;

}

Контрольные вопросы для самопроверки

1. Какие действия выполняет оператор присваивания?

2. Как выглядят простой, многоместный и совмещенный оператор присваивания?

3. Для чего используется вложенный условный оператор?

4. Как осуществляется вывод результатов на экран?

5. Как выглядит управляющая строка?

6. Какие существуют управляющие символы?

7. Как записывается формат вывода?

8. Как осуществляется ввод данных с клавиатуры?

9. Какую директиву препроцессору надо записать в начале программы, чтобы можно было использовать функции printf (...), или scanf (...)?

10. Когда используется оператор перехода goto?

11. Запишите полную форму записи условного оператора.

12. Запишите сокращенную форму записи условного оператора.

Операторы цикла.

Операторы цикла предназначены для организации многократных повторений наборов действий (циклов) в программах. Все операторы цикла работают следующим образом:

1. Переменной цикла присваивается начальное значение;

2. Для полученного значения переменной цикла выполняются, необходимые в соответствии с условием задачи, действия и преобразования;

3. Значение переменной цикла изменяется на заданный шаг;

4. Выполняется проверка на достижение переменной цикла конечного значения.

 

Приведенную последовательность действий можно отразить с помощью блок-схемы. Такая структура цикла называется цикл с постусловием.

     
1
0


Если проверка на окончание цикла выполняется в начале, то есть до выполнения тела цикла, то цикл с такой структурой называется цикл с предусловием.

 

 

Согласно указанных структур в Си различают три вида операторов цикла:

- Цикл типа while;

- Цикл типа do... while;

- Цикл типа for.

Рассмотрим каждый из операторов цикла.

3.8.1. Оператор цикла типа while.     

Структура выглядит следующим образом и реализует цикл с предусловием:

while (выражение) 

оператор;

где < выражение > - логическое выражение;

оператор - оператор или несколько операторов (тело цикла), что выполняется в цикле.

Схема работы такого цикла while: пока условие истина (true), выполняется оператор, и снова проверяется условие и т.д. Когда условие станет ошибочной (false) цикл завершает работу. Такой цикл является циклом с предусловием. Если в теле цикла необходимо выполнять набор операторов, тогда этот набор операторов надо взять в фигурные скобки и образовать составной оператор.

while (<условие>)

{

оператор_1;

.........
.........

 

оператор_n;

 }

Пример 3.13: вычислить выражение y = √ | x |- x 2

для -2 ≤ x ≤ 2 с Δx = 0.1;

определить k - количество y которые > 0;

вывести на экран значения x, y  на каждом шаге вычислений;

вывести на экран значения k – в конце программы.

Текст программы.

#include <stdio.h>

#include <math.h>

void main ()

{

float x=-2, y;

int k=0;

while (x<=2)

{

y=sqrt(fabs(x))–x*x;

printf("x=%.1f y=%.3f\n", x, y);

if(y>0) k++;

x+=0.1;

}

printf(“k=%d\n”,k);

}

 

Оператор continue

 

Оператор continue – позволяет пропустить следующую за ним группу операторов и возобновить работу цикла на следующем шаге цикла.

На практике continue записывается не самостоятельно в операторе цикла, а в составе условного оператора, истинность которого и определяет переход на следующий шаг.

Структура программы с использованием оператораcontinue

while()

{

y=...

if(y <0) continue;

...

}

Пример 3.17: Задано выражение, с помощью которого вычисляется у

  для  ряда значений х: xнач=5 xkон=-5 dx=-0.5

Найти сумму значений y.

При анализе выражения, можно заметить, что при достижении х определенного значения подкоренное выражение станет отрицательным и вычисления следует прекратить. Воспользуемся для этого оператором break

void main ()

{

 float xn=5, xk=-5, x, s=0, y,dop, xsh=-0.5, a;

 int i, n;

n=((xk-xn)/xsh)+1;

x=xn;

printf("введите значении а");

scanf(“%f”,&a);

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

{     dop=a+x;

if (dop<0) break;

y=x*x/sqrt(dop);

s=s+y;

printf("%d %5.2f %5.2f\n",i, x, y);

x=x+xsh;

}

printf("s=%5.2f\n",s); 

}

При значении а=1, результаты будут иметь вид, хотя по расчетов циклов должно быть 21.

i x y
1 5.00 10.21
2 4.50 8.63
3 4.00 7.16
4 3.50 5.77
5 3.00 4.50
6 2.50 3.34
7 2.00 2.31
8 1.50 1.42
9 1.00 0.71
10 0.50 0.20
11 0.00 0.00
12 -0.50 0.35

 

S=44.61

 

Пример 3.18: Задано выражение, с помощью которого вычисляется у

для  ряда значений х – xнач==-3.14 xkон=6.28 xsh==3.14/20

При анализе выражения, можно заметить, что поскольку значения синуса изменяется в пределах от -1 до +1, периодически подкоренное выражения будут становиться отрицательными. Эти случаи следует пропускать. Воспользуемся для этого оператором continue

void main ()

{

float xn, xk, x, y, dop, xsh;

int i=0;

xn=-3.14; xk=6.28;

xsh=3.14/20;

   

x=xn-xsh;

do

{

i=i++;

x=x+xsh;

dop=0.5-sin(x);

if (dop<=0) continue;

y=(x*x+5)/sqrt(dop);

printf("%d %5.2f %5.2f\n",i, x, y);

}

while (x<=xk);

 }

Результаты будут иметь вид. Некоторые промежуточные шаги пропущены.

 

i x y
1 -3.14 20.98
2 -2.09 8.03
3 -1.05 5.22
4 -0.00 7.07
7 3.14 21.05
8 4.19 19.28
9 5.23 27.70
10 6.28 62.65

 

Сложные (вложенные) циклы

Сложный цикл образуется, когда один цикл входит в другой цикл и т.д.

Уровень вложенности цикла – количество вложенных друг в друга циклов.

Пример 3.17 вложенного цикла:

Вычислить

f = 2,7*sin(x) + 1,3*cos(y),

где величины x и y изменяются следующим образом:      

-3 ≤ x ≤ 3 Δx = 0,1   

-4 ≤ y ≤ 4 Δy = 0,2

Рассмотрим 3 варианта реализации:

1. С использованием цикла while;

float x = -3, y;

while (x<=3)

{

y = -4;

while (y <=4)

{

f = 2.7*sin(x) + 1.3*cos(y);

printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f);

y + = 0.2;

}

x +=0.1;

  }

2. С использованием цикла do while;

float x = -3, y;

do

{  

y = -4;

do

{

f = 2.7*sin(x) + 1.3*cos(y);

printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f);

y+ = 0.2;

}

while (y <=4)

 

x+=0.1;

}

while (x<=3)

 

3. С использованием цикла for.

 

float x, y;

for (x=-3; x<=3; x+=0.1)

for (y=-4; y<=4; y+=0.2)

{

f=2.7*sin(x)+1.3*cos(y);

printf(“x=%.1 y=%.1f f=%.3f\n”, x, y, f);

}

Контрольные вопросы для самопроверки

1. Для чего используется оператор переключения switch?

2. Форма записи оператора переключения switch.

3. Когда срабатывает ветвь default?

4. Для чего предназначены операторы цикла?

5. Как  работают операторы цикла?

6. Как выглядит структура цикла с постусловием?

7. Схема работы цикла do... whileс постусловием.

8. Как выглядит структура цикла  с предусловием?

9. Схема работы  цикла while с предусловием.

10. Схема работы  цикла for.

11. Назначение оператора break.  

12. Назначение оператора continue.

13. Как используется вложенный оператор цикла?


 

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

4.4.1 Описание многомерных массивов.

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

a11 a12 a13 ... a1m
a21 a22 a23 ... a2m
a31 a32 a33 ... a3m
         
an1 an2 an3 ... anm

Int main()

{

float a[10][9], s;

int i,j;

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

{

printf("\n");

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

{

 a[i][j]=-5+0.001*rand();

 printf("%6.1f",a[i][j]);

}

}

s=0;

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

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

if(a[i][j]<0) s=s+a[i][j];

printf("\n сумма= %6.2f",s);

return 0;

 }

 

Пример 4.5. Задан массив A размером 10х9. Найти суммы положительных элементов в каждой строке. Результат - одномерный массив.

 

Текст програми

void main()

{

float a[10][9], s[10];

int i,j;

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

 {

 printf("\n");

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

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

printf("\n");

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

{

s[i]=0;

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

if(a[i][j]>0) s[i]=s[i]+a[i][j];

}

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

printf(" %5.0f",s[i]);

  }

 

Приклад 4.6. В матрице размером 8х8 найти значение и положение максимального элемента, лежащего выше главной диагонали

 

 

 

 


 Текст програми

void main()

{

float a[8][8],max;

int i,j,nstr,nstb;

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

 {

 printf("\n");

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

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

max=-1000;

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

{

for(j=i+1; j<9; j++)

if(a[i][j]>max){max=a[i][j];nstr=i; nstb=j;}

}

  

printf("%d %d %5.1f",nstr, nstb, max);

  }

 

Контрольные вопросы для самопроверки

1. Как осуществляется описание двумерных массивов?

2.  Как осуществляется запись элементов двумерных массивов?

3.  Запишите фрагмент программы, который одновременно формирует матрицу с помощью функций формирования случайных чисел и выводит ее значение на экран для ввода элементов массива.

4.  Запишите фрагмент программы, который вычисляет сумму элементов матрицы.

5.  Запишите фрагмент программы, который находит минимальный элемент в матрице.

6. Запишите фрагмент программы, который находит минимальный элемент в каждой строке двумерного массива.


МЕТОДЫ СОРТИРОВОК

Упорядоченным (отсортированным) называется массив, значения элементов которого отвечают следующему условию:

a 1 ≤ a 2 ≤ a 3... ≤ ai ≤ ai +1... ≤ an -1 ≤ an      (по возрастанию)

или

a 1 ≥ a 2 ≥ a 3... ≥ ai ≥ ai +1... ≥ an -1 ≥ an           (по убыванию)

Существует целый ряд методов, позволяющих отсортировать имеющийся массив.

Сортировка выбором.

Найти элемент массива, имеющий наименьшее значение в исходном массиве. Переставить его с первым элементом.

Затем проделать то же самое, начав со второго элемента, затем с третьего  и т.д.

5 23 7 12 3 56 2 15 34 9

min =2  

 

5 23 17 12 3 56 2 15 34 9

2 23 17 12 3 56 5 15 34 9

 


2 23 17 12 3 56 5 15 34 9

min =3  

 

2 23 17 12 3 56 5 15 34 9

2 3 17 12 23 56 5 15 34 9

2 3 17 12 23 56 5 15 34 9

min =5  

 

2 3 17 12 23 56 5 15 34 9

2 3 5 12 23 56 17 15 34 9

2 3 5 12 23 56 17 15 34 9

min =9  

 

2 3 5 12 23 56 17 15 34 9

2 3 5 9 23 56 17 15 34 12

 

Алгоритм выглядит следующим образом

 

 


Сортировка обменами.

Последовательно сравниваются два соседних элемента. Если а ii +1. никаких действий не предпринимается. Если а ii +1. меняются местами а i и а i +1. В результате одного прохода вдоль массива самый большой элемент окажется на последнем месте. Возобновляется просмотр с начала уменьшая на единицу количество просматриваемых элементов.

Так до тех пор, когда элементы будут упорядочены

5 23 7 12 3 56 2 15

5 7 23 12 3 56 2 15
5 7 12 23 3 56 2 15

5 7 12 3 23 56 2 15

5 7 12 3 23 2 56 15
5 7 12 3 23 2 15 56

Алгоритм выглядит следующим образом

 

Текст программы

Void main ()

{

float a[30],dop;

int n,i,k, f=1;

 

n=10;

printf("\n исходный массив\n ");

 

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

{

a[i]=0.001*rand();

printf("%5.1f",a[i]);

}

while(f==1)

{

f=0;

for (i=0;i<n-1;i++)

if (a[i]>a[i+1]) {dop=a[i];

            a[i]=a[i+1];

            a[i+1]=dop;

            f=1;

                }

 

}

printf("\n отсортированный массив\n ");

   

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

 printf("%5.1f",a[i]);

}

ФУНКЦИИ

 

Функция - это часть программы, описывающая выполнение заданного набора действий. В языке С любая программа - это функция с именем main(). Функций могут быть стандартными или разработаны программистом. Стандартные функции - это готовые к использованию функции, например sin(x), cos (x), scanf(...), printf(...) и другие. Они размещены в библиотеках языка С. Для их использования необходимо сначала подключить соответствующий заголовочный файл с помощью директивы препроцессора #include, а затем вызвать необходимую стандартную функцию, указав ее имя и задав значения аргументов. Функции, составленные программистом это новые, дополнительные функции. Эти функции разрабатываются, когда структура программы достаточно сложная, когда необходимо несколько раз выполнить одинаковый набор действий для различных величин и т.п.

Для использования функций в программе необходимо:

1. Описать функцию.



Поделиться:


Последнее изменение этой страницы: 2021-04-04; просмотров: 80; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.76.213 (0.623 с.)