- •Мiнiстерство аграрної політики україни миколаївський державний аграрний університет методичні вказівки
- •Миколаїв –2003
- •Введение
- •1. Понятие переменной
- •2. Арифметические операции
- •3. Логические операции
- •4. Основные операторы (ключевые слова)
- •4.1 Арифметические операторы.
- •4.2 Оператор условия if.
- •4.3. Оператор цикла for.
- •4.4. Оператор безусловного перехода goto.
- •4.5. Оператор цикла while.
- •If(условие)
- •4.6. Ключевые слова break и continue.
- •5. Основные правила составления программ.
- •5.1. Подключение необходимых библиотек языка Си.
- •5.2. Ключевое слово main().
- •Void main ()
- •5.3. Описание переменных.
- •5.4. Реализация основных математических функции в языке Си.
- •6. Массивы
- •6.1. Описание массивов.
- •6.2. Конструкция #define для объявления размерности массивов.
- •Void main()
- •6.3. Инициализация массивов при объявлении.
- •7. Функция printf().
- •7.1. Вывод на экран заданного текста.
- •7.2. Вывод на экран значений переменных.
- •8. Примеры программ.
- •8.1. Печать координат вектора превышающих заданный порог.
- •8.2. Умножение двух прямоугольных матриц.
- •Void main()
- •8.3. Разложение числа на простые множители.
- •Void main()
- •8.4. Решение физической задачи.
- •Void main()
- •9. Работа с компилятором языка си
- •9.1. Подготовка к запуску компилятора.
- •9.2. Набор текста программы и его редактирование.
- •9.3. Компиляция и отладка программы.
- •9.4. Запуск программы на исполнение.
- •10. Ввод информации в программу с экрана
- •10.1. Функция scanf().
- •Int day, year;
- •10.2. Примеры программ, использующих ввод данных с экрана. Ввод вектора с экрана.
- •Void main()
- •Ввод даты с экрана.
- •Void main()
- •Доработка программы решения физической задачи из раздела 8.4.
- •Void main()
- •11. Управление работой программы с клавиатуры.
- •11.1. Предпочтительные функции для работы с клавиатурой.
- •11.2. Программа печати кода нажатой клавиши.
- •Void main()
- •12. Создание пользовательских функций.
- •12.1. Общие правила написания пользовательских функций.
- •12.2. Пример использования пользовательских функций.
- •Void main()
- •13. Представление о графических функциях языка с.
- •13.1. Подготовка графического режима.
- •Initgraph(&graphdriver, &graphmode," ");
- •13.2. Наиболее употребляемые графические функции.
- •13.3. Примеры программ использующих графический режим. Разноцветные концентрические кольца.
- •Void main()
- •Initgraph(&graphdriver,&graphmode," ");
- •Управления движением курсора.
- •Void cursor(int dh,int iocur,int jocur,int incur,int jncur);
- •Void main()
- •Initgraph(&graphdriver,&graphmode," ");
- •Void cursor(int dh, int iocur,int jocur,int incur,int jncur)
- •14. Упражнения для самостоятельной работы.
- •15. Задачи для самостоятельного составления программ
- •15.1. Не сложные задачи.
- •15.2. Задачи средней сложности.
- •15.3. Задачи повышенной сложности.
- •16. Разбиение материала на модули
- •Список литературы
Управления движением курсора.
#include<graphics.h>
#include<conio.h>
#include<bios.h>
#define LEFT 19200 /* коды клавиш стрелок */
#define RIGHT 19712
#define TOP 18432
#define BOTTOM 20480
#define ESC 283
// Прототип функции:
Void cursor(int dh,int iocur,int jocur,int incur,int jncur);
Void main()
{ int k;
int Width=640; // ширина экрана
int Height=480; // высота экрана
int N=25; // количество вертикальных и горизонтальных линий
int dh=Height/(N-1)-1; // размер клетки
int iocur,jocur,incur,jncur; // старые и новые координаты курсора
int bios=0;
int graphdriver=DETECT,graphmode;
Initgraph(&graphdriver,&graphmode," ");
setgraphmode(VGAHI);
setviewport(0,0,Width-1,Height-1,0);
setbkcolor(LIGHTBLUE);
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
// Разлиновка экрана:
for(k=0;k < N;k++)
{ line(0,dh*k,dh*(N-1),dh*k);
line(dh*k,0,dh*k,dh*(N-1));
}
iocur=jocur=incur=jncur=12;
cursor(dh,iocur,jocur,incur,jncur);
// Вывод инструкции на экран:
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
setcolor(YELLOW);
outtextxy(dh*N,10, "Для управления");
outtextxy(dh*N,35, "курсором");
outtextxy(dh*N,60, "используйте");
outtextxy(dh*N,85, "клавиши-стрелки");
// Обработка нажатых клавиш:
while(bios != ESC)
if(kbhit() != 0)
{ bios=bioskey(0);
if(bios == LEFT && iocur > 1)
incur=iocur-1;
if(bios == RIGHT && iocur < N-1)
incur=iocur+1;
if(bios == TOP && jocur > 1)
jncur=jocur-1;
if(bios == BOTTOM && jocur < N-1)
jncur=jocur+1;
cursor(dh,iocur,jocur,incur,jncur);
iocur=incur;
jocur=jncur;
}
closegraph();
}
// Функция для перемещения курсора:
Void cursor(int dh, int iocur,int jocur,int incur,int jncur)
{
// Стирание курсора на старом месте:
setfillstyle(SOLID_FILL, LIGHTBLUE);
floodfill(dh*iocur-2,dh*jocur-2, WHITE);
// Рисование курсора на новом месте:
setfillstyle(SOLID_FILL, LIGHTRED);
floodfill(dh*incur-2,dh*jncur-2, WHITE);
}
Программа разлиновывает экран по горизонтали и вертикали и позволяет перемещать курсор по образовавшимся клеткам. Кроме графических функций использован материал раздела 11 по управлению программой с клавиатуры и материал раздела 12 по созданию пользовательских функций.
14. Упражнения для самостоятельной работы.
Расписать по тактам выполнение следующих фрагментов программ:
1.
int i,s1=0,s2=0;
for(i=1; i < 6; i++)
{ s1+=i*i; s2+=i;}
s1/=s2;
2.
int i,im;
float x[7]={3,-1,7,8,9,3,-5};
float xm;
xm=x[0]; im=0;
for(i=1; i < 7; i++)
if(x[i] > xm)
{ xm=x[i]; im=i;}
3.
#define N 6
int i;
int a[N]={-3,-2,-1,0,3,4};
for(i=0;i < N; i+=2)
if(a[i] >= 0)
a[i]=-3;
else
a[i]=3;
4.
int i=0, a=0, b=1;
while(i <= 5)
{ a+=2; b*=a; i+=2;}
5.
int i;
int a[7]={3,2,7,8,2,9,2};
for(i=6; i >= 0; i--)
if(a[i] == 2)
a[i]=5;
else
a[i]=0;
6.
int i,j;
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=0; i<3; i++)
for(j=2; j >= 0; j--)
a[i][j]=-a[j][i];
7.
int I=0,j;
while(i < 1)
for(j=0;j < i+1;j++)
i=j%5+1;
8.
int i,j;
int a[5]={4,1,3,1,4};
for(i=0; i < 5; i++)
{ for(j=0; j < a[i]; j++)
printf("#");
printf("\n");
}
9.
int i=0,k;
int a[6]={7,5,3,4,2,8};
while(1)
{ k=a[i+1]%a[i];
i++;
if(k == 0)
goto END;
else
printf(" k=%d,",k);
}
END: printf("\nEND\n");
10.
int k=0,i=0;
int a[6]={2,4,5,0,7,8};
while(k == 0)
{ if(a[i] != 0)
a[i]=1/a[i];
else
k=1;
i++;
}
11.
#define N 6
int i;
char s1[N]="ифраиа";
char s2[N]=".ктмон";
static int s[2*N+1];
for(i=0; i < N; i++)
{ s[2*i]=s1[i];
s[2*i+1]=s2[N-i-1];
}
printf("%s\n",s);
12.
int i,j;
int a[3][3];
for(i=0; i < 3; i++)
for(j=0; j < 3; j++)
a[i][j]=i*i+j;
13.
int i,j;
int a[3][3];
for(i=2; i >= 0; i--)
for(j=0; j < 3; j++)
a[j][i]=(i+1)*j;
14.
int i;
int a[5]={1,4,7,9,10};
int b[5]={3,4,7,10,10};
for(i=0; i < 5; i++)
{ printf("%d=%d ",a[i],b[i]);
if(a[i]==b[i])
printf("- правильно\n");
else
printf("- не правильно\n");
}
15.
int i,j;
for(i=1;i < 5;i++)
{ for(j=1;j < 5;j++)
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
16.
int i;
char s1[16]="еинавошияяашгошп";
static char s2[17];
char c;
for(i=15;i >=0;i--)
{ c=s1[i];
if(c == 'ш')
c='р';
if(c == 'я')
c='м';
s2[15-i]=c;
}
printf("%s\n",s2);
17.
char c;
char ch[8]="тнедутс";
int i;
for(i=0;i < 3;i++)
{ c=ch[6-i];
ch[6-i]=ch[i];
ch[i]=c;
}
printf("%s",ch);
18.
char ch[8]="меммия";
int i;
for(i=0;i < 6;i++)
if(ch[i] == 'м')
ch[i]='c';
printf("%s",ch);
19.
char ch[3][4]={"пью","тер","ком"};
static char chn[10];
int i,j;
for(i=0;i < 3;i++)
for(j=0;j < 3;j++)
chn[3*i+j]=ch[(3*i*i-7*i+4)/2][j];
printf("%s\n",chn);
20.
int i, a0=12;
int a[6]={2,7,9,15,12,13};
for(i=0;i < 6 && a[i] != a0; i++);
Пример выполнения задания ( № 5):
1-ый шаг: i=6, 6 >= 0 - верно, a[6]=2 == 2 - верно, a[6]=5,
a={3,2,7,8,2,9,5}, i=6-1=5.
2-ой шаг: 5 >= 0 - верно, a[5]=9 == 2 - не верно, a[5]=0,
a={3,2,7,8,2,0,5}, i=5-1=4.
3-ий шаг: 4 >= 0 - верно, a[4]=2 == 2 - верно, a[4]=5,
a={3,2,7,8,5,0,5}, i=4-1=3.
4-ый шаг: 3 >= 0 - верно, a[3]=8 == 2 - не верно, a[3]=0,
a={3,2,7,0,5,0,5}, i=3-1=2.
5-ый шаг: 2 >= 0 - верно, a[2]=7 == 2 - не верно, a[2]=0,
a={3,2,0,0,5,0,5}, i=2-1=1.
6-ой шаг: 1 >= 0 - верно, a[1]=2 == 2 - верно, a[1]=5,
a={3,5,0,0,5,0,5}, i=1-1=0.
7-ой шаг: 0 >= 0 - верно, a[0]=3 == 2 - не верно, a[0]=0,
a={0,5,0,0,5,0,5}, i=0-1=-1.
8-ой шаг: -1 >= 0 - не верно, конец цикла.