ОСНОВЫ ПРОГРАММИРОВАНИЯ
ПРОГРАММА НА ЯЗЫКЕ С/С++
Описания данных
Операции и их приоритеты
Операторы
Программа ввода чисел и их упорядочения
Описание функции
Описание заголовка функции
Функция (процедура) – обмен значениями и её вызов
Программа с функцией (процедурой), вычисляющей минимальное значение в массиве
Программа с функцией, вычисляющей минимальное значение в массиве
Функция (процедура) сортировки слиянием
Программа вводит числа и их упорядочивает вызовом сортировки слиянием
Генерация перестановок ферзей
Вызов функции генерации перестановок ферзей
Вычисление интеграла непрерывной функции методом трапеций
Вычисление интеграла функции
Вычисление интеграла функции из массива функций
267.50K
Category: programmingprogramming

Язык Си. Базовые понятия (лекция 9)

1. ОСНОВЫ ПРОГРАММИРОВАНИЯ

Лекция 9
Язык Си. Базовые понятия
1

2. ПРОГРАММА НА ЯЗЫКЕ С/С++

- Директивы препроцессора (вставка
заголовочных файлов и др.), например:
#include <stdio.h>
- Описания глобальных типов данных
(typedef... struct ... и др.)
- Описания глобальных данных (переменных,
констант)
- Описания заголовков функций
- Описания функций
- Главная функция main или _tmain
2

3. Описания данных

Описатели типа данных: char, int, unsigned,
float, long, short, double ...
Пустой тип: void
Описание константы:
const <описатели типа> <имя> = <значение>;
Описание переменных:
<описатели типа> <имя-1>, <имя-2>, . . .<имя-n>;
- для массивов: <имя>[<размерность>]
- для указателей: *<имя>
Примеры:
const long int L[]={1,2,3,456789}; - константа,
unsigned short int a, b, c; - простые переменные,
float A[100], B[10][20]; - статические массивы,
int *p1, *p2; - ссылки (указатели).
3

4. Операции и их приоритеты

Приоритет
Операции
1
2
() [] -> .
!
~
+
++
-&
*
(<тип>)
sizeof
*
/
%
+
<<
>>
<
<=
>=
>
== !=
&
^
|
&&
||
? :
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
,
3
4
5
6
7
8
9
10
11
12
13
14
15
Порядок
исполнения















4

5. Операторы

<выражение>;
{<список операторов>}
if(<выражение>)<оператор-1>
if(<выражение>)<оператор-1> else <оператор-2>
________________________________________________________________________________________________________ ________________________________________________________________________________________________________
switch(<выражение>)
{case <константа-1>: <список операторов-1> break;
case <константа-2>: <список операторов-2> break;
. . .
case <константа-n>: <список операторов-n> break;
default: <список операторов-n+1>
}
________________________________________________________________________________________________________ ________________________________________________________________________________________________________
while(<выражение>)<оператор>
for(<выражение-1>;<выражение-2>;<выражение-3>)<оператор>
do {<список операторов>} while (<выражение>);
return <выражение>;
5

6. Программа ввода чисел и их упорядочения

#include ”stdafx.h”
/* или <stdio.h> 1*/
void main(void)
/*2*/
{int i, n, z, X[1000];
/*3*/
scanf(”%d”,&n);
/*4*/
for(i=0;i<n;i++) scanf(”%d”,&X[i]);
/*5*/
i=0;
/*6*/
while(i<n-1)
/*7*/
if(X[i]<=X[i+1]) i++;
/*8*/
else
/*9*/
{z=X[i];X[i]=X[i+1];X[i+1]=z;
/*10*/
if(i>0)i--;
/*11*/
}
/*12*/
for(i=0;i<n;i++) printf(”%8d”,X[i]); /*13*/
printf(”\n”);
/*14*/
}
/*15*/
6

7. Описание функции

<тип> <имя функции> (<тип> <имя параметра> . . .)
{<описания> <операторы> . . .}
Пример:
float sq2(float x, float y)
{float z; z=sqrt(x*x+y*y); return z;}
Пример вызова:
float t; t=sq2(4,5.5);
7

8. Описание заголовка функции

<тип> <имя функции> (<тип> <имя параметра> . . .);
Пример:
float sq2(float x, float y);
Тогда сама функция должна быть записана в
оттранслированном (объектном) файле с
расширением obj
Присоединяется к основной программе при сборке
(редактировании), когда создается исполняемый
модуль - файл с расширением exe
8

9. Функция (процедура) – обмен значениями и её вызов

#include ”stdafx.h”
void mov(int *a, int *b)
{int z=*a; *a=*b; *b=z;}
void main(void)
{int x,y;
scanf ("%d%d", &x, &y);
mov(&x,&y);
printf("x=%d y=%d\n",x,y);
}
9

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

#include ”stdafx.h”
void pmin(int *X, int n, int *r)
{int i;
/*i – локальная переменная*/
*r=X[0];
for (i=1; i<n; i++) if (*r>X[i]) *r=X[i];
}
/*конец описания процедуры*/
void main()
{int *A,n,i,min;
scanf ("%d",&n); A= new int[n];
for (i=0; i<n; i++) scanf("%d",&A[i]);
pmin(A,n,&min); /*вызов функции, как процедуры*/
printf("min=%d\n",min);
delete []A;
}
10

11. Программа с функцией, вычисляющей минимальное значение в массиве

#include ”stdafx.h”
int pmin(int *X, int n)
{int i,r;
/*i,r – локальная переменная*/
r=X[0];
for (i=1; i<n; i++) if (r>X[i]) r=X[i];
return r;
}
/*конец описания функции*/
void main()
{int *A,n,i,min;
scanf ("%d",&n); A= new int[n];
for (i=0; i<n; i++) scanf("%d",&A[i]);
min=pmin(A,n);
/*вызов функции*/
printf("min=%d\n",min);
delete [] A;
11
}

12. Функция (процедура) сортировки слиянием

void sort (int b, int e, int *A, int *B)
{if(b<e)
{int c, i1, i2, j;
int c=(b+e)/2;
sort(b,c,A,B); sort(c+1,e,A,B);
int i1=b, i2=c+1, j=b;
while (i1<=c && i2<=e)
if(A[i1]<=A[i2]) {B[j]=A[i1]; i1++; j++;}
else {B[j]=A[i2]; i2++; j++;}
while (i1<=c) {B[j]=A[i1]; i1++; j++;}
while (i2<=e) {B[j]=A[i2]; i2++; j++;}
for (j=b; j<=e; j++) A[j]=B[j];
}
}
12

13. Программа вводит числа и их упорядочивает вызовом сортировки слиянием

void main(void)
{ int n, *X, *Y, i;
scanf ("%d",&n);
X= new int[n]; Y= new int[n];
for (i=0; i<n; i++) scanf ("%d",&X[i]);
sort(0,n-1,X,Y);
for (i=0; i<n; i++) printf("%d ",X[i]);
printf("\n");
delete [] X; delete [] Y;
}
13

14. Генерация перестановок ферзей

int n,P[21],H[21],R[41],L[41];/*глобальные описания */
void queen(int k)
/*функция генерации перестановок */
{int i,j;
for(i=1;i<=n;i++)
if(H[i]==0 && R[i-k+21]==0 && L[i+k]==0)
{P[k]=i; H[i]=1; R[i-k+21]=1; L[i+k]=1;
if(k==n)
/*вывод сгенерированной перестановки*/
{for(j=1;j<=n;j++)printf("%2d ",P[j]);
printf("\n");
}
else queen(k+1);
H[i]=0; R[i-k+21]=0; L[i+k]=0;
}
14
}

15. Вызов функции генерации перестановок ферзей

void main(void)
{int i;
scanf("%d",&n);
for(i=1;i<=n;i++) H[i]=0;
for(i=2;i<=n+n;i++)
{R[i]=0; L[i]=0;}
queen (1);
}
15

16. Вычисление интеграла непрерывной функции методом трапеций

1
b a
b a
b a 1
b a
f
(
x
)
dx
(
f
(
a
)
f
(
a
)
f
(
a
2
)
...
f
(
b
)
f
(
b
))
2
n
n
n
2
n
a
b
Y
X
a
b
16

17. Вычисление интеграла функции

#include <math.h>
float Integr(float(*f)(float),float a,
float b,int n)
{int i; float d,s;
s=(f(a)+f(b))/2; d=(b-a)/n;
for(i=1;i<n;i++) s=s+f(a+i*d);
return s*d;
}
float f1(float x) {return exp(sqrt(x));}
float f2(float x) {return sqrt(exp(x));}
ПРИМЕРЫ ВЫЗОВОВ:
float y1=Integr(f1,0,1.5,10);
float y2=Integr(f2,-1.2,1.2,30);
17

18. Вычисление интеграла функции из массива функций

. . .
void main(void)
{float y, a, b; int i,n;
const float (*F[])(float)={f1,f2};
/* описание константного массива функций */
scanf("%d%f%f%d",&i,&a,&b,&n);
/*ввод входных данных */
y=Integr(F[i-1],a,b,n); /*вычисление интеграла*/
printf("%10.5f",y);
/*вывод результата */
}
18
English     Русский Rules