Similar presentations:
Язык Си. Базовые понятия (лекция 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. Вычисление интеграла непрерывной функции методом трапеций
1b 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
programming