Пример выполнения контрольной работы (1-й

реклама
Настоящий файл содержит пример выполнения контрольной работы по дисциплине «Основы программирования» для студентов заочной формы обучения ВПИ (филиал) ВолгГТУ по направлению 230100.62 «Информатика и вычислительная техника».
Номер задания для выполнения необходимо взять у преподавателя или в списке,
выложенном
на
сайте
ЭУМКД
по
дисциплине
по
адресу
www.volpi.ru/umkd/programming.
Контрольная работа в первом семестре предполагает программную реализацию на
языке Си 8 задач согласно полученному варианту задания. Решение каждой задачи
должно содержать схему алгоритма решения задачи, листинг программы и, опционально, снимок экрана с результатами работы программы. К контрольной работе должен
быть приложен лазерный диск с исходными текстами и скомпонованными программами решения задач. Условием зачета решения каждой задачи является успешный запуск
и верное решение задачи программы.
Кроме успешного запуска всех программ зачет по контрольной работе предполагает
ее отчет преподавателю. На отчете студент дожен ответить на вопросы преподавателя по алгоритму и программной реализации предложенных решений.
Министерство образования и науки Российской Федерации
Волжский политехнический институт (филиал) федерального государственного бюджетного образовательного учреждения высшего образования «Волгоградский государственный технический университет»
(ВПИ (филиал) ВолгГТУ)
Вечерний факультет
Факультет «_________________________________________________________»
Информатика и технология программирования
Кафедра «___________________________________________________________»
КОНТРОЛЬНАЯ РАБОТА
Основы программирования
по дисциплине «_____________________________________________________»
Решение задач с использованием различных типов данных языка Си
на тему______________________________________________________________
вариант №
____________________________________________________________________
Сергей Петрович Иванов
Студент_____________________________________________________________
ВВТ-175
Группа________________________
Оценка
(имя, отчество, фамилия)
________________________
(зачтено/незачтено)
Проверил
________________________
(подпись и дата подписания)
_____________________
(долж., инициалы и фамилия)
Нормоконтролер ______________________________
_____________________
(подпись, дата подписания)
Волжский, 2015 г.
(инициалы и фамилия)
1. По введенным с клавиатуры значениям длин сторон треугольника вычислить его площадь по
А ВС
формуле Герона: S = Р  ( Р  А)  ( Р  В)  ( Р  С ) , где Р=
;
2
Начало
Ввод А,В,С
Р=(A+B+C)/2;
S
р( р  а)( р  b)( p  c)
;
Вывод S
Конец
Рис. 2. Схема алгоритма решения задачи 2
#include <iostream>
using namespace std;
#include <math.h>
#include <conio.h>
double a, b, c, p, s;
int main()
{ cout<<”Введите длины сторон треугольника”;
cin>>a>>b>>c;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<”Площадь треугольника равна:”<<s;
getch();
}
2. С клавиатуры вводятся координаты точки M(x,y). Определить, какой из областей (I, II или III) она принадлежит
2
I
1
2
1
III
II
2
1
III
Начало
Ввод координат
точки x,y
1
x2+y2<4 && x2+y2 >=1 && y>=0
0
Вывод «1-я
область»
0
1
x2+y2<1 && && y>=0
Вывод «2-я область»
Вывод «2-я
область»
Конец
Рис. 2. Схема алгоритма решения задачи 2
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
double x,y;
cin>>x>>y;
if (x*x+y*y<4 && x*x+y*y >=1 && y>=0)
cout<<“ 1-я область”;
else
if (x*x+y*y <1 && y>=0)
cout<<“ 2-я область”;
else
cout<<“ 3-я область”;
getch();
}
3. Дана последовательность чисел. Определить количество чисел, две последних цифры которых кратны 3.
Начало
x!=0
Ввод числа x
c=x%100
n=c/10
i=c%10
x/10!=0
n%3==0
i%3==0
m++
x!=0
Искомые числа: m
Конец
Рис. 3. Блок-схема алгоритма решения задачи 3
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int x,c,n,i,m=0;
clrscr();
do
{
cout<<"Vvedite chislo: ";
cin>>x;
c=x%100;
n=c/10;
i=c%10;
if (x/10!=0)
if ((n%3==0)&&(i%3==0)) m++;
}
while(x!=0);
cout<<"Iskomye chisla: "<<m;
getch();
}
4. В массиве целых чисел из n элементов перемножить элементы, лежащие между минимальным и
максимальным.
начало
i=0; i<n
Ввод m[i]
i++
sum=0;imin=imax=0;
i=1; i<=n
m[i]<m[imin]
да
imin=i
нет
m[i]>m[imax]
да
imax=i
нет
i++
да
нет
imin<imax
k=imin
k=imax
да
нет
imin>imax
l=imin
l=imax
i=k+1; i<l
sum+=m[i]
i++
Вывод sum
начало
Рис. 4. Блок-схема алгоритма решения задачи 4
#include <iostream>
using namespace std;
int main()
{
const int n=10;
int i,k,l;
float m[n];
for(i=0;i<n;i++)
cin>>m[i];
float sum=0,t;
int imin,imax;
imin=imax=0;
for(i=l;i<n;i++)
{ if (m[i]<m[imin]) imin=i;
if (m[i]>m[imax]) imax=i;
}
k=imin<imax?imin:imax;
l=imin>imax?imin:imax;
for(i=k+1;i<l;i++)
sum+=m[i];
cout<<sum;
}
5. Подсчитать в матрице целых чисел nxn количество столбцов, содержащих нулевые элементы.
Определить, в какой строке наибольшее количество 0.
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
const int n=4;
int mas[n][n],i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>mas[i][j];
int s=0,imax,max;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if (mas[j][i]==0)
{s++;break;}
cout<<s;
max=0;
imax=0;
for(j=0;j<n;j++)
if (mas[0][j]==0) max++;
for(i=1;i<n;i++)
{ s=0;
for(j=0;j<n;j++)
if (mas[i][j]==0) s++;
if (s>max)
{max=s;
imax=i;
}
}
cout<<,imax);
getch();
}
начало
Ввод матрицы nxn
s=0
i=0; i<n
j=0; j<n
да
mas[j][i]=0
нет
s++
j++
i++
Вывод s
imax=0;max=0
j=0; j<n
да
mas[0][j]=0
max++
нет
j++
i=1; i<n
s=0
j=0; j<n
да
mas[i][j]=0
нет
s++
j++
s>max
нет
max=s; imax=i
i++
Вывод imax
начало
Рис. 5. Блок-схема алгоритма решения задачи 5
6. С клавиатуры вводятся две строки. Определить, сколько раз вторая строка входит в первую
начало
Ввод строки 1 (str)
Ввод строки 2 (str1)
bFind=1, Count=0
tmp=str
нет
bFind=1
да
tmp=strstr(str,str1)
да
нет
tmp≠0
Count++
bFind=0
tmp++
Вывод Count
конец
Рис.6. Блок-схема алгоритма решения задачи 6
#include <iostream>
using namespace std;
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char str[1000],str1[100],*tmp;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int Count=0, bFind=1;
clrscr();
puts("Введите 1-ю строку\n");
gets(str);
puts("Введите 2-ю строку\n");
gets(str1);
Count=0;
tmp=str; //указатель tmp пробегает по всем символам строки str
while(bFind)
//пока есть вхождения str2 в str
{
tmp=strstr(tmp, str1); //ищем очередное вхождение
if(tmp)
{
Count++;
tmp++;
//следующее вхождение ищем за уже найденным
}
else
bFind=0; //не найдено совпадений – завершаем цикл
}
cout<<Count;
getch();
return 0;
7. Найти все простые делители целого числа n
начало
Ввод n
i=1; i<=n
нет
n%i=0
да
flag=1
j=2; j<√i
да
i%j=0
flag=0
нет
j++
да
flag=1
нет
Вывод i
i++
начало
Рис.7. Блок-схема алгоритма решения
задачи 7
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
unsigned int i,j,n,flag;
cin>>n;
for (i=1;i<=n;i++)
if (n%i==0)
{ flag=1;
for(j=2;j<i;j++)
if (i%j==0)
{flag=0;
break;
}
if (flag) cout<<i<<'\n';
}
getch();
}
8. Найти минимум функции ax2+bx+c на интервале [-5;5] с шагом аргумента 0.1.
начало
Ввод a, b, c
fmin=a*25-b*5+c
xmin=-5;
x=-5
нет
x<=5
да
f=a*x*x+b*x+c
f<fmin
нет
да
fmin=f
xmin=x;
x+=0.1
Вывод fmin,
xmin
начало
Рис.8. Блок-схема алгоритма решения задачи 8
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{ float a,b,c,x,xmin,fmin,f;
cin>>a>>b>>c;
fmin=a*25-b*5+c;
for (x=-5;x<=5;x+=0.1)
{
f=a*x*x+b*x+c;
if (f<fmin)
{fmin=f;
xmin=x;
}
}
cout<<fmin<<"\t"<<xmin;
getch();
}
Скачать