1-1 Алгоритмические языки
.rtf
АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И
ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ - 1
Контрольная работа 1
Задание 1.
В первой программе сделать вывод чисел в столбик:
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main() //главная программа, точка входа в программу
{
int i; //объявление индекса
for(i=0; i<5; i++) //организация цикла
{ //вывод элементов массива на экран
printf("%d ",vector[i]); //с помощью функции printf
} //перевод строки
printf("\n");
}
Решение.
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main() //главная программа, точка входа в программу
{
int i; //объявление индекса
for(i=0; i<5; i++) //организация цикла
{ //вывод элементов массива на экран
printf("%d\n",vector[i]); //с помощью функции printf
} //перевод строки
printf("\n");
return 0;
}
Задание 2
Во второй программе найти минимальное значение:
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main()
{
int i;
int max=vector[0]; //вначале переменной мах присвоить начальное значение
for(i=1; i<5; i++) //цикл для просмотра остальных элементов массива
{
if(max<vector[i]) max=vector[i]; //выбрать большее значение, чем чем то которое хранится в max
}
printf("max = %d\n",max); //после цикла вывести максимальное значение
}
Решение.
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main()
{
int i;
int min=vector[0]; //вначале переменной мах присвоить начальное значение
for(i=1; i<5; i++) //цикл для просмотра остальных элементов массива
{
if(min>vector[i]) min=vector[i]; //выбрать большее значение, чем чем то которое хранится в max
}
printf("min = %d\n",min); //после цикла вывести максимальное значение
}
Задание 3.
В третьей программе осуществить сортровку по убыванию:
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main()
{
int i;
int key=1; //переменная показывающая что массив еще не отсортирован
int tmp; //временная переменная для хранения промежутлчных данных
while(key) //цикл пока массив не отсортирован
{
key=0;
for(i=0; i<4; i++) //цикл для просмотра соседних элементов массива
{
if(vector[i]>vector[i+1]) //поменять местами если условие сортировки не выполнены
{
tmp=vector[i];
vector[i]=vector[i+1];
vector[i+1]=tmp;
key=1; //массив еще не отсортирован
}
}
}
for(i=0; i<5; i++) //вывести массив на экран
printf("%d ",vector[i]);
printf("\n");
}
Решение.
#include <stdio.h>
int vector[5] = { 2,45,34,8,15 }; //объявление массива и присвоение ему значений
int main()
{
int i;
int key=1; //переменная показывающая что массив еще не отсортирован
int tmp; //временная переменная для хранения промежуточных данных
while(key) //цикл пока массив не отсортирован
{
key=0;
for(i=0; i<4; i++) //цикл для просмотра соседних элементов массива
{
if(vector[i]<vector[i+1]) //поменять местами если условие сортировки не выполнены
{
tmp=vector[i];
vector[i]=vector[i+1];
vector[i+1]=tmp;
key=1; //массив еще не отсортирован
}
}
}
for(i=0; i<5; i++) //вывести массив на экран
printf("%d ",vector[i]);
printf("\n");
return 0;
Задание 4.
В четвертой программе попытаться изменить типы переменных, так чтобы можно было подсчить Fibbo(100):
#include <stdio.h>
#define NUMBER int
NUMBER Fibbo(int n)
{
NUMBER i1, i2, f;
int j;
if(n<2) return 1;
i1=1;
i2=1;
for(j=2; j<n; j++)
{
f=i1+i2;
i1=i2;
i2=f;
}
return f;
}
Решение.
#include <stdio.h>;
#define NUMBER unsigned long
NUMBER Fibbo(int n)
{
NUMBER f,i1,i2;
int j;
if(n<2) return 1;
i1=1;
i2=1;
for(j=2; j<n; j++)
{
f=i1+i2;
i1=i2;
i2=f;
}
return f;
}
Задание 5.
В пятой программе оформить задачу как функцию:
#include <stdio.h>
int mes[12]={0, 31, 59, 90, 120, 151, 181, //всмогательный массив колиства дней
212, 243, 273, 304, 334 }; //от начала до текущего месяца
main()
{
int d,m,g; //начальная дата (день, месяц, год)
int d2,m2,g2; //конечная дата (день, месяц, год)
int c;
c=mes[m-1]-d2+365*(g2-g1)+mes[m2-1]+d2; //подсчет коичества дней между двумя датами
if(!g%4) if(m<3) c++; //учет високосности для начальной даты
if(!g2%4) if(m>2) c++; //учет високостности для крнечной даты
c=c+(g2-g)/4; //учет високосности для годов попавших в интервал
printf("%d",c); //между двумя датами
}
Решение.
#include <stdio.h>
int f(const int d, const int m, const int g,
const int d2, const int m2, const int g2)
{
int mes[12]={0, 31, 59, 90, 120, 151, 181, //всмогательный массив колиства дней
212, 243, 273, 304, 334 }; //от начала до текущего месяца
int c;
c=mes[m-1]-d+365*(g2-g)+mes[m2-1]+d2; //подсчет коичества дней между двумя датами
if(!(g%4)) if(m<3) c++; //учет високосности для начальной даты
if (g!=g2) if(!(g2%4)) if(m2>2) c++; //учет високостности для крнечной даты
c=c+(g2-g)/4; //учет високосности для годов попавших в интервал
return c; //между двумя датами
}
int main()
{
clrscr();
textmode(3);
printf("01.01.2000 - 01.01.2001 = %d \n",f(1,1,2000,1,1,2001));
printf("01.01.2001 - 01.01.2002 = %d \n",f(1,1,2001,1,1,2002));
return 0;
}