Решение задач на Си

Автор работы: Пользователь скрыл имя, 22 Января 2012 в 09:23, контрольная работа

Описание

Цель данной работы научиться элементарным операциям программирования и решения задач различного характера на Си. Для релизации этих целей необходимо научиться работать с операторами условия if и операторами цикла while, for, научиться составлять алгоритмы решения задач и реализовывать их на Си, научиться работать с функуциями ввода и вывода данных на Си. Также при решении задач поставленных в этой работе можно увидеть насколько краткие программы, написанные на языке Си.

Содержание

ВВЕДЕНИЕ 3
1 Задача №1 4
2 Задача № 2 6
3 Задача № 3 8
ЗАКЛЮЧЕНИЕ 16
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 17

Работа состоит из  1 файл

Контрольная работа.docx

— 58.65 Кб (Скачать документ)

Университет Российской академии образования

Новомосковский  филиал 

Факультет информационных технологий

Кафедра прикладной математики и информатики 
 
 
 

КОНТРОЛЬНАЯ РАБОТА

По дисциплине «Языки программирования и методы трансляции » 

Решение задач на Си 
 
 
 
 
 

Студент                                        

Группа 

Преподователь 

Зиборов В.С. 

МИ-10 

д.т.н Силин В.В. 
 
 
 

Новомосковск 2012 г.

Оглавление

ВВЕДЕНИЕ 3

1 Задача №1 4

2 Задача № 2 6

3 Задача № 3 8

ЗАКЛЮЧЕНИЕ 16

СПИСОК  ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 17 
 

 

 
ВВЕДЕНИЕ

 

     Несмотря  на то что язык Си называют языком системного программирования, так как он удобен для написания операционных систем, он с равным успехом используется при написании больших вычислительных программ, программ для обработки текстов и баз данных. Одним из преимуществ языка Си явлется его краткость при написании программ. Предметом данной работы будут три программы на языке Си:вычислительная, сортировки, поиск данных в соответсии с заданным условием. Цель данной работы научиться элементарным операциям программирования и решения задач различного характера на Си. Для релизации этих целей необходимо научиться работать с операторами условия if и операторами цикла while, for, научиться составлять алгоритмы решения задач и реализовывать их на Си, научиться работать с функуциями ввода и вывода данных на Си. Также при решении задач поставленных в этой работе можно увидеть насколько краткие программы, написанные на языке Си.   

 

 
1 Задача №1

     Запрограммировать решение квадратного уравнения, учесть все варианты решения в  том числе и комплексные числа.

     Пусть квадратное уравнение задано в виде:

     ax2+bx+c=0.

     Далее вычислим его дискриминант по формуле:

     Д=b*b-4*a*c.

     Если  дискриминант отрицательный, то выводим комплексное число.

     Если  дискриминант положительный, то выводим  вещественное число.

     Внизу приводится текст программы:

     #include <iostream>

     #include <windows.h>

     #include <time.h>

     #include <math.h>

     using namespace std;

     //Программа  вычисления корней квадратного  уравнения

     int main()

     {

      float a, b, c, d, x1, x2, ix;

      char str[50];

      //Ввод коэффициентов a, b, c

      CharToOem("aх*x+b*x+c=0 \n",str);

      printf (str);

      CharToOem("Введите коэффициенты a,b,c\n",str);

      printf (str);

      CharToOem("a=",str);

      printf (str);

      scanf("%f", &a);

      CharToOem("\nb=",str);

      printf (str);

      scanf("%f", &b);

       CharToOem("\nc=",str);

      printf (str);

      scanf("%f", &c);

       //Вычисление дискриминанта d

      d=b*b-4*a*c;

       if (d<0)

        {x1=-b/(2*a);

         ix=sqrt(fabs(d))/(2*a);

         //Вывод комплексного числа

          CharToOem("\n x1=%f+i%f \n", str);

          printf(str,x1,ix);

           CharToOem("\n x2=%f-i%f \n", str);

          printf(str,x1,ix);

        }

        else

        {

         x1=(-b-sqrt(d))/(2*a);

         x2=(-b+sqrt(d))/(2*a);

         //Вывод абсолютного значения числа х

         CharToOem("\n x1=%f  x2=%f \n", str);

         printf(str,x1,x2);

        }

      srand(time(NULL));  //вместо  randomize()

       system("PAUSE");

      return 0;  

     }

     Результат программы приводится ниже:

     aх*x+b*x+c=0

     Введите коэффициенты a,b,c

     a=1 

     b=1 

     c=1 

      x1=-0.500000+i0.866025 

      x2=-0.500000-i0.866025

     Для продолжения нажмите любую клавишу . . .

 
2 Задача № 2

     Задан массив целых чисел размерностью не менее 20. Отсортировать элементы этого массива по возрастанию методом «пузырька».

     Метод очень прост и состоит в  следующем: берется пара рядом стоящих  элементов, и если элемент с меньшим  индексом оказывается больше элемента с большим индексом, то мы меняем их местами. Эти действия продолжаем, пока есть такие пары. Легко понять, что когда таких пар не останется, то данные будут отсортированными. Для упрощения поиска таких пар  данные просматриваются по порядку  от начала до конца. Из этого следует, что за такой просмотр находится максимум, который помещается в конец массива, а потому следующий раз достаточно просматривать уже меньшее количество элементов. Максимальный элемент как бы всплывает вверх, отсюда и название алгоритма. Так как каждый раз на свое место становится по крайней мере один элемент, то не потребуется более N проходов, где N - количество элементов.

     Внизу приводится текст программы:

     #include <iostream>

     #include <windows.h>

     #include <time.h>

     using namespace std;

     int main()

     {

      char str[100];

      int a[25],p,i,j,n;

       CharToOem("Введите количество элементов в массиве не менее 20 и не больше 25 n=",str);

      printf (str);

      // Ввод количества элементов в  массиве

      scanf("%d",&n);

      CharToOem("Исходный массив\n",str);

       printf(str);

       // Организация цикла для вывода  массива на экран

      for (i=0;i<n;i++)

       {

       // Генерация случайного числа  для элемента массива

        a[i]=0+rand()%99;

        // Вывод элемента массива на  экран

        printf("%d  ",a[i]);

       }

        printf("\n");

        // Организация циклов сортировки

       for (i=0;i<n;i++)

        for (j=0;j<n-i;j++)

           if (a[j]>a[j+1])

           {

             p=a[j];

             a[j]=a[j+1];

             a[j+1]=p;

             }

        CharToOem("Отсортированный массив\n",str);

       printf(str);

       // Вывод отсортированного массива  на экран

        for (i=0;i<n;i++)

            printf("%d  ",a[i]);

      srand(time(NULL));  //вместо  randomize()

       system("PAUSE");

      return 0;  

     }

     Результат работы программы приведён ниже:

     Введите количество элементов в массиве  не менее 20 и не больше 25 n=23

     Исходный  массив

     41  53  97  67  62  82  93  54  34  11  62  29  16  96  61  95  25  62  75  90

     18  51  41

     Отсортированный массив

     11  16  18  25  29  34  41  41  51  53  54  61  62  62  62  67  75  82  90  93

     95  96  97  Для продолжения нажмите  любую клавишу . . . 
 

 

     

     3 Задача № 3

     Для чисел в диапазоне от 1 до 32000 найти все простые числа такие, что сумма цифр двух последовательных простых чисел кратна 7. Выдать число таких пар.

     Необходимо  организовать массив, где каждый элемент  будет представлять сумму цифр простого числа в диапазоне от 1 до 32000. Сумму цифр каждого простого числа находим по следующему алгоритму. Для этого получаем остаток от деления числа на 10, затем делим число на 10, получаем опять остаток от деления и прибавляем его к предыдущему слагаемому и так далее, пока число не обратится в ноль. Формат числа обязательно должен быть целым. Сравниваем сумму цифр двух соседних простых чисел и если она кратна 7 то выводим эти числа на экран. При этом считаем количество таких пар.

     Внизу приводится текст программы:

     #include <iostream>

     #include <windows.h>

     #include <time.h>

     #include <math.h>

     using namespace std;

     int main()

     {

      int Sum [32001],i,n,k;

      char str[100];

         //Ввод нулевых начальных значений

          Sum[0]=0;

          k=0;

          //Организация массива для перебора  простых чисел от 1 до 32000

          for (i=1; i<32001;i++)

          {

          //Ввод нулевого значения, до начала  вычислений элемент суммы должен  быть равен нулю        

            Sum[i]=0;

          // Организация цикла для вычисления  суммы цифр простого числа  

            for (n=i;n!=0;n=n/10)

             Sum[i]=Sum[i]+n%10;

             // Постановка условия при котором эти цифры будут выводиться на экран

             if((Sum[i-1]+Sum[i])%7==0)

            {

            // Вывод на экран пары чисел  удовлетворяющих заданному условию                          

              printf ("%5d %5d; ",i-1,i);

            // Счётчик считающий количество последовательных пар цифр удовлетворяющих заданному условию  

              k=k+1;

            }

          }

          // Вывод на экран числа пар  простых последовательных чисел  кратных 7 в диапазоне от 1 до 32000                             

      CharToOem("\nЧисло пар простых последовательных  чисел кратных 7 в диапазоне  от 1 до 32000 равно=%d",str);

       printf (str,k);

      printf ("\n");

      srand(time(NULL));  //вместо  randomize()

       system("PAUSE");

      return 0;  

     }

     Результат программы приводится ниже:

    3     4;    12    13;    21    22;    28    29;    29    30;    30    31;    37    38;    46    47;    55    56;    64    65;

Информация о работе Решение задач на Си