Программирование на С

Автор работы: Пользователь скрыл имя, 30 Апреля 2012 в 22:09, курсовая работа

Описание работы

За истекшие три последних десятилетия С превратился в один из наиболее важных и популярных языков программирования. Беспрецедентный рост популярности объясняется, прежде всего, тем, что этот язык программирования нравится всем пользователям. В течении последнего десятилетия многие программисты перешли с языка программирования С на более модный С++. Однако С по-прежнему остается важным языком программирования и сам по себе, и как промежуточная ступень при переходе на С++. При изучении языка С вы сами поймете, что он обладает массой достоинств.

Содержание работы

Введение………………………………………………………………………..2
1.Основные понятия………………………………………………………….3
1.1 Алгоритм……………………………………………………………….3
1.2 Типы данных…………………………………………………………...3
1.3 Постановка задачи……………………………………………………..4
1.4 Операторы……………………………………………………………...5
1.4.1 Оператор присваивания(=)……………………………………..5
1.4.2 Условный оператор(if)………………………………………….5
1.4.3 Оператор умножения(*)…………………………………..........5
1.4.4 Оператор сложения (+)………………………………………....6
1.4.5 Оператор вычитания(-)……...……………………………….....6
1.5 Функции……………………………………………………………….6
1.5.1 Функция printf()……………………………………………….6
1.5.2 Функция scanf().……………………………………………….7
1.6 Комментарии в языке С. …………………………………………....7
1.7 Блок-схема. …………………………………………………...............7
2. Линейные и разветвляющиеся вычислительные процессы…………...9
3. Циклические вычислительные процессы. …………………………….13
3.1 Циклы с заданным числом повторений(for)………………………13
3.2 Циклы с не известным числом повторений(while)………………..15
4. Массивы…………………………………………………………………..21
4.1 Одномерные массивы………………………………………………..21
4.2 Двумерные массивы…………………………………………………22
5.Массивы символов. Строки………………………………………………31
6.Структуры…………………………………………………………………34
7.Функции Fopen, fclose, getc, putc………………………………………...42
8. Функции…………………………………………………………………..46
8.1 Функции не возвращающие значение………………………………47
8.2 Функции возвращающие значение………………………………………………..47
8.3 Функции с параметрами……………………………………………..48
8.4 Формальные и фактические параметры…………………………..49
Вывод…………………………………………………………………

Файлы: 1 файл

КУРСОВОЙ.doc

— 347.50 Кб (Скачать файл)

51

 

     Содержание

Введение………………………………………………………………………..2

1.Основные понятия……………………………………………………….3

1.1 Алгоритм………………………………………………………….3

1.2 Типы данных…………………………………………………………...3

1.3 Постановка задачи……………………………………………………..4

1.4 Операторы………………………………………………………...5

1.4.1 Оператор присваивания(=)…………………………………..5

1.4.2 Условный оператор(if)……………………………………….5

1.4.3 Оператор умножения(*)………………………………..........5

1.4.4 Оператор сложения (+)……………………………………....6

1.4.5 Оператор вычитания(-)...……………………………….....6

1.5 Функции………………………………………………………….6

1.5.1 Функция printf()…………………………………………….6

1.5.2 Функция scanf().…………………………………………….7

1.6  Комментарии в языке С. ………………………………………....7

1.7 Блок-схема. ………………………………………………...............7

2. Линейные и разветвляющиеся вычислительные процессы………...9

3. Циклические вычислительные процессы. …………………………….13

3.1 Циклы с заданным числом повторений(for)……………………13

3.2 Циклы с не известным числом повторений(while)……………..15

4. Массивы………………………………………………………………..21

4.1 Одномерные массивы………………………………………………..21

4.2   Двумерные массивы…………………………………………………22

5.Массивы символов. Строки……………………………………………31

6.Структуры………………………………………………………………34

7.Функции Fopen, fclose, getc, putc………………………………………...42

8. Функции………………………………………………………………..46

8.1 Функции не возвращающие значение……………………………47

8.2 Функции возвращающие значение………………………………………………..47

8.3 Функции с параметрами…………………………………………..48

8.4 Формальные и фактические параметры…………………………..49

Вывод………………………………………………………………….........50

Введение.

За истекшие три последних десятилетия  С превратился в один из наиболее важных и популярных языков программирования. Беспрецедентный рост популярности объясняется, прежде всего, тем, что этот язык программирования нравится всем пользователям. В течении последнего десятилетия многие программисты перешли с языка программирования С на более модный С++. Однако С по-прежнему остается важным языком программирования и сам по себе, и как промежуточная ступень при переходе на С++. При изучении языка С вы сами поймете, что он обладает массой достоинств.

Одним, из которых  является эффективность. Для языка программирования С характерна достаточно высокая эффективность. Здесь сполна применяются возможности современных компьютеров. Программы на С получаются компактными и быстро выполняемыми. Фактически язык С обладает такими прекрасными возможностями управления, которые обычно присущи языка Ассемблера. Программы языка С можно по желанию настраивать либо на максимальное быстродействие, либо на экономное использование доступной памяти.

Язык программирования С также имеет другие достоинства и конечно же, недостатки (первых намного больше, чем вторых). Главный недостаток заключается в том, что из-за чрезмерной свободы в написании выражений в языке С, возникает большая вероятность совершить ошибки, которые довольно трудно обнаружить. Как отметил один из писателей в жанре компьютерной литературы, плата за свободу заключается в необходимости постоянно быть бдительным.

Подводя итоги, можно отметить, что язык С является одним из важнейших языков программирования, который продолжает использоваться до сих пор.


1.Основные понятия

1.1 Алгоритм.

Алгоритм- предписание определяющее процесс преобразования исходных данных в искомый и обладающее следующими свойствами:

-определённость;

-результативность;

-массовость.

   Основные части алгоритма.

1)     Ввод исходных данных;

2)     операции, реализующие преобразования исходных данных в выходные - основная часть;

3)     Вывод результатов.

Алгоритмы бывают:

-линейные;

- разветвляющиеся;

-циклические.

 

1.2 Типы данных.

Все программы работают с данными. В языке С имеется несколько разновидностей типов данных, такие как:

int целые числа, чтобы вывести на печать(на экран) переменную этого типа в функции printf() применяется формат вывода %d.

float  – вещественные числа(цифры с плавающей точкой), формат вывода %f. Кроме того, в формате вывода %f можно использовать модификатор

.n(где n=1,2,3…), который  определяет, что данные, выводимые на экран, будут содержать n знаков после запятой. Например:

printf("%.2f\n",12,654321);

На экране: 12,65

char – символьные данные , формат вывода %s.

1.3 Постановка задачи.

Рекомендуемая форма записи задачи состоит из разделов:

1)     Исходные данные:

-перечисление исходных данных и их типов;

-изображение исходных данных.

2)     Ограничения:

-ограничения на допустимые значения исходных данных.  

3)     Результаты:

-перечисление требуемых результатов, их типов. дополнительных сообщений;

-изображение результатов.

4)       Связь:

- зависимости, связывающие исходные данные и результаты.

Пример:

1)     Исходные данные:

n: целое;

А, В: массив [1..n, 1..n] вещественных;

S: строка [10].

2)     Ограничения:

1)     n>0

2)     b2-4ac ≥0

3)     строка S не содержит пустых символов (пробелов)

4)     массив z содержит нулевые элементы

3)     Результаты:

z: массив[1..n, 1..n] вещественных.


1.4 Операторы.

Операторы объединяются с помощью фигурных скобок.

Любой операторы, кроме составных заканчиваются «;».

      1.4.1 Оператор присваивания(=).

Например:

х=Е, где х – переменная (простая или с индексом),

         Е-выражение соответствующего типа.

Или х=1;            

При выполнении этого оператора значение 1 присваивается переменной х.

      1.4.2 Условный оператор(if).

Оператор if называется ещё оператором ветвления, поскольку он представляет собой пункт, при котором программа должна сделать выбор, по какому из двух путей идти дальше. Оператор имеет вид:

if(выражение) //если (условие=истинна), если(условие=ложь)

    {оператор 1}  

else                   //иначе             

  

{оператор 2}

 

Если выражение выполняется, то выполняется оператор 1. Если не выполняется, тогда выполняется оператор 2. Ветки else(иначе) может  не быть, тогда в случае, если выражение=ложь, оператор  if заканчивает свою работу и переходит к следующему оператору.

     1.4.3 Оператор умножения(*).

Например:

х=2*4;

При выполнении этого оператора число 2 умножается на 4  и полученное значение присваивается некоторой переменной х. Кроме того, этот оператор можно использовать при умножении двух переменных, т.е.:

х=8;

у=2;

р=х*у;//     в данном случае р=16

     1.4.4 Оператор сложения (+).

Например:

х=1+2;    //х=3

или:

х=5;

у=10;

р=х+у;//     в данном случае р=15

1.4.5 Оператор вычитания(-).

Например:

х=2-1;     //х=1

или:

х=9;

у=6;

р=х-у;//     в данном случае р=3

 

1.5 Функции.

     1.5.1 Функция printf().

Стандартная функция языка С, которая выводит на экран текст, заключенный в двойные кавычки.

Например:

printf(“Привет!\n”);

На экране:     Привет!

Два последних символа в кавычках \n, определяет переход на новую  строку.Так же, с помощью этой функции можно производить форматный вывод, т.е.

printf(“список форматов”, х1, х2, х3,,хn),

где х1, х2, х3,,хn- целые, вещественные, символьные, строковые или логические выражения.

Например:

double x=1.234567;

printf(“\nх=%8.4lf,x);

     1.5.2 Функция scanf().

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

Например:

printf("Введите число\n");

scanf("%d",&x);           

Переменной х присвоится целое число (так как спецификатор %d говорит о том, что вводимое число целого типа, т.е. типа int ), которое будет введено с клавиатуры.

 

1.6 Комментарии в языке С.

В языке С используются так называемые комментарии. Это делается для того, чтобы облегчить понимание вашей программы. Они могут находиться везде, даже в той же самой строке, где находится код программы.

Например:

/*Этот комментарий распространяется на несколько строк, т.е. пока не встретится следующие два символа:*/

//этот комментарий распространяется только на одну строку

 

1.7 Блок-схема.

Каждый алгоритм начинается  и заканчивается, следовательно у каждой блок-схемы есть начало и конец. Они изображаются с помощью овала:

 

Арифметические операторы в блок-схеме обозначается прямоугольником:

             

 

Логический оператор обозначаются с помощью ромба с двумя, помеченными словами «да» и «нет». Первая стрелка показывает переход в случае, когда условие, записанное в логическом операторе, удовлетворяется, вторая - когда оно не удовлетворяется.

        нет                  да              нет                  да

 

Ввод данных в блок-схеме обозначается параллелограммом.

 

 

Для того, чтобы результаты решения задачи стали известны , применяется оператор вывода, который изображается следующим образом:

 

Таким образом, блок-схема является графическим изображением вычислительного процесса.

 

 

 

 

 

 

 

 

 


2. Линейные и разветвляющиеся вычислительные процессы.

Задание 1: Написать программу для вычисления выражения p=z+2*y-x*4.

Постановка задачи:

1.      Входные данные:

x, y:целое

2.      Выходные данные:

p: целое                                 

      3.Связь:

p=z+2*y-x*4

Алгоритм:

                                                                    

                                                                   Вывод на экран

                           Ввод

 

 

 

             

                                                            

 

 

 

 

 

 

 

 

 


Программа:

#include <stdio.h>      //включить другой файл

#include <conio.h>    

main()                            //имя функции

{clrscr();    //очистка экрана от данных оставшихся от предыдущего запуска программы

int x,y,p;              //оператор объявления        

printf("Vvedite x\n");  //оператор печати

scanf("%d",&x);            //оператор ввода с клавиатуры

printf("Vvedite y\n");

scanf("%d",&y);

z=x*y;

p=z+(2*y)-(x*4);  //оператор присваивания

printf("p=%d",p);

getch();

}                     

 

Задание 2: Написать программу, которая определяет, будет ли человек через два года совершеннолетним.

Постановка задачи:

1.      Входные данные

x: целое

2.      Выходные данные

p: целое  

 

 

 

 


Алгоритм:

 

 

 

 

 

                                                   -                                      +

 

 

 

 

 

 

 

Программа:

#include <stdio.h>

#include <conio.h>

main()

{clrscr();

int x,p;

printf("Skolko vam let?\n");

scanf("%d",&x);

p=x+2;

if(p>17)

   printf("Da,vam budet %d\n",p);

else

   printf("Net,vam budet %d\n",p);

getch();

}

Задание 3: Написать программу для вычисления выражения

           -сх2, если х≤0

У=      х+с, если 0<х≤1

            х-с, если х>1

 

Алгоритм:

 

 

 

 

Программа:

#include <stdio.h>

#include <conio.h>

main()

{

 

clrscr();

int x,c,p,y,cx2;

printf("Vvedite c i x\n");

scanf("%d%d",&c,&x);

if(x<=0)

   y=-cx2;

else

     { if(x<=1)

       {y=x+c;}

       else

       { y=x-c;}

      }

 

printf("y=%d\n",y);

getch();}


3. Циклические вычислительные процессы.

        3.1 Циклы с заданным числом повторений(for).

for(выражение1, выражение2, выражение3)

      {тело цикла или операторы}

Выражение1 – установка начального значения переменных, управляющим циклом (инициализирующее выражение);

выражение2 – определяющее условие при котором цикл будет повторяться(условие повторения цикла);

выражение3 – определяет изменение переменных управляющих цикло после каждого выполнения тела цикла(выражение обновления переменной).

Обычно управляющая переменная должна быть целого типа(int).

Схема выполнения оператора for.

1)     Вычисление выражения1;

2)     Вычисление выражения2;

3)     Если значение выражения2 истина, выполняется тело цикла, вычисляется выражение3 и осуществляется переход к пункту2;

4)     Если 2-ложь, то переходит к оператору после for.

В блок-схеме оператор for обозначается следующим образом:

 

 

 

 


Задание 4: Написать программу для нахождения суммы .

Постановка задачи:

1.      Входные данные:

x, y:целое

2.      Выходные данные:

s: целое                                 

 

Алгоритм.

  

 

 

 

 

Программа:

#include <stdio.h>

#include <conio.h>

main()

{clrscr();

int x,y,s=0,n;

printf("Vvedite x\n");

scanf("%d",&x);

printf("Vvedite y\n");

scanf("%d",&y);

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

     s+=x+n;

printf("Summa=%d\n",s);

getch();

}


3.2 Циклы с не известным числом повторений(while).

while (выражение)

          {тело цикла или оператор}

Схема выполнения while.

1)     Вычисление выражения;

2)     Если ложь, то переходит на следующий оператор. Если истина, то выполняется тело while.

3)     Процесс повторяется с пункта 1.

 

Задание 5: Написать программу для нахождения суммы положительных чисел вводимых с клавиатуры (до первого отрицательного числа).

 

Постановка задачи:

1.      Входные данные:

x:целое

2.      Выходные данные:

s: целое                                 

Алгоритм:

 

 

 

 

 

 

 


Программа:

#include <stdio.h>

#include <conio.h>

main()

{clrscr();

int x=0,s=0;

printf("Vvedite x\n");

scanf("%d",&x);

while(x>-1)

      {s+=x;

       printf("Vvedite x\n");

       scanf("%d",&x);

      }

printf("Summa=%d\n",s);

getch();

}

Задание 6: Программа для проверки пароля (с использованием while).

Постановка задачи:

Входные данные:

сх: целое   

Алгоритм:

 

 

 

 

 

 

 

 


Программа:

#include <stdio.h>

#include <conio.h>

main()

{clrscr();

const int parol=21;

int par_vod;

printf("Dlia togo, 4tobi stat' 4lenom kluba vedite secretnii parol'\n");

scanf("%d",&par_vod);

  while(par_vod!=parol)

   { printf("Dlia togo, 4tobi stat' 4lenom kluba vedite secretnii parol'\n");

     scanf("%d",&par_vod);

   }

printf("Primite pozdrovleniya,vi stali 4lenom kluba!!!\n");

getch();

}

 

Задание 7: Программа для проверки пароля (с использованием do while).

Постановка задачи:

1.                  Входные данные:

сх: целое   

Алгоритм:

 

 

 

 

 


Программа:

#include <conio.h>

#include <stdio.h>

main()

{clrscr();

const int parol=21;

int par_vod;

do

   { printf("Dlia togo, 4tobi stat' 4lenom kluba, vedite secretnii parol'\n");

     scanf("%d",&par_vod);

   }

while(par_vod!=parol);

printf("Primite pozdrovleniya,vi stali 4lenom kluba!!!\n");

getch();

}

Задание 8: вычислить число П с заданной точность ε по формуле

Постановка задачи:

1.      Входные данные:

Е: вещественное

2.      Выходные данные:

Р: вещественное

 

3.      Связь:

                 


   Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                           

 

                                                       

 

 

 

 

 

 


Программа:

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <complex.h>

main()

{clrscr();

int z,k;

float P,A,s=0,E;

printf("Vvedite E\n");

scanf("%f",&E);

z=1;

k=1;

A=z*(1/(2*k-1));

while(fabs(A)>=E)

      {s+=A;

       z=-z;

       k=k+1;

       A=(z*(1/(2*k-1)));

       }

P=(4*s);

printf("PI=%fl\n",P);

getch();

}


4. Массивы.

Массив - набор данных одного и того же типа, собранных под одним именем. Каждый элемент массива имеет свой порядковый номер, который называется индексом. Соответственно каждый элемент массива определяется именем массива и порядковым номером элемента. Индекс (номер элемента) в языке Си всегда целое число.

Объявление массива.

Основная форма объявления массива размерности N:

тип <имя массива>[размер1][размер2]...[размерN];

 

4.1 Одномерные массивы

тип <имя массива>[размер];

тип - базовый тип элементов массива

размер - количество элементов одномерного массива

      Например:

Объявление массива numbers на 50 целых чисел имеет вид:

int numbers[50];

Объявление массива A на 10 вещественных чисел:

float A[10];

В языке С индексация массивов начинается с нуля. Если мы объявим массив

int B[50];

это значит, что массив содержит 50 элементов от B[0] до B[49].

Получить доступ к i-му элементу массива A можно следующим образом: A[i].

Рассмотрим на примере

int A[30];

int x;

x = A[9]; // Доступ к 10-му элементу (так как нумерация с 0)
Размер массива может задаваться только константой. Нельзя задать массив переменного размера.

 

4.2 Двумерные массивы

Двумерный массив можно рассматривать как массив одномерных массивов.

B0, B1, ..., Bi, ....,Bm-1 - это одномерные массивы размерности n.

A[m] - одномерный массив размера m из одномерных массивов Bi[n]. Таким образом двумерный массив можно рассматривать как матрицу или таблицу с m строками и n столбцами.


Например, для A[4][3] таблица будет выглядеть следующим образом

A[0][0]

A[0][1]

A[0][2]

A[1][0]

A[1][1]

A[1][2]

A[2][0]

A[2][1]

A[2][2]

A[3][0]

A[3][1]

A[3][2]

Число строк m = 4, число столбцов n = 3.

Первый индекс в двумерном массиве - это номер строки, второй - это номер столбца. Если вы хотите получить значение элемента массива, который находится в 6 строке и 3 столбце, то вы должны написать x = A[5][2] (индексация начинается с 0).

Рассмотрим пример программы, которая ограничивает значения элементов массива. После ввода массива начинается его обработка. Каждый элемент массива проверяется на условие array[i][j] > MAX. Если значение элемента массива больше MAX, то оно принимается равным MAX. Таким образом мы анализируем входные данные и исправляем их в соответствии с условием. Далее программа выводит на экран исправленный массив.

#include <stdio.h>

// определение констант

#define M 3

#define N 3

#define MAX 100 // наше ограничение

void main(void)

{

int array[M][N]; // Объявление двумерного массива

int i, j;

// Ввод массива

for(i=0;i<M;i++) // цикл по строкам

{

for(j=0;j<N;j++) // цикл по элементам строки

{

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

printf(" A[%d][%d]=", i, j);

scanf("%d",&array[i][j]);

}

printf("\n");

}// Обработка массива

for(i=0;i<M;i++) // цикл по строкам

{

for(j=0;j<N;j++) // цикл по элементам строки

{

// Проверка на условие

if(array[i][j] > MAX) array[i][j] = MAX;

}

}

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

for(i=0;i<M;i++) // цикл по строкам

{

for(j=0;j<N;j++) // цикл по элементам строки

{

// Вывод значения элемента массива

printf(" A[%d][%d] = %4d", i, j, array[i][j]);

}

printf("\n");

}

} // Конец функции main()

 

Задание 9: Написать программу, которая  вводила бы  массив с клавиатуры и выводила его на экран.

Постановка задачи:

1.      Входные данные:

А[5]: целые

2.      Выходные данные:

А[5]: целые

 

 

 


Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа:

#include <stdio.h>

#include <conio.h>

#define N 5 // Определение константы

main(void)

{

int A[N]; // Объявление массива размера N

int i;

printf("Введите массив из %d чисел:\n", N);

// Заполнение массива

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

{

printf("A[%d]=",i);

scanf("%d",&A[i]);

}

printf("Введеный массив:\n");

// Вывод массива

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

printf("A[%d]=%d\n",i,A[i]);

getch();

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Задание 10: Написать программу для нахождения максимума в прямоугольной матрице.

 

Постановка задачи:

1.      Входные данные:

r, l: целые

t[N][N]: вещественные

 

2.      Выходные данные:

max:  вещественное

 

 

Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа:

#include <stdio.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 100

float t[N][N];//VVODIMIE MATRICI

main()

{

float          p,max;

int  f,k,i,j,r,l,h,//indexi

error;

       do

{  clrscr();


printf("Vvedite kol-vo strok matrici t\n");

error=0;

scanf("%d",&r);

if (r<=1||r>N)

   {

    printf("Oshibka pri vvode,povtorite vvod poriadka matrici\n");

    getch();

    error=1;

   }

}

while(error);

do

{  clrscr();

printf("Vvedite kol-vo stolbcov matrici t\n");

error=0;

scanf("%d",&l);

if (l<=1||l>N)

   {

    printf("Oshibka pri vvode,povtorite vvod poriadka matrici\n");

    getch();

    error=1;

   }

}

while(error);

  printf("Vvedite elementi matrici t:\n");

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

       for(j=0;j<l;j++)

      {

       printf("\nt[%d][%d]=",i,j);

       scanf("%f",&p);

       t[i][j]=p;

      }

max=t[0][0];

f=0;

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

     {for(j=0;j<l;j++)

             { if(t[i][j]>max)

                  { max=t[i][j];

                     h=i;

                     k=j;

                     f=1;

                   }

              else

               f=0;

             }

       }

if(f>0)

      printf("\nmax=t[%d][%d]=%fl",h,k,max);

else

  printf("\nmax=t[0][0]=%d",max);

getch();}


5. Массивы символов. Строки.

Строки в С реализуются с помощью одномерных массивов символов. Строка представляется как символьный массив типа char, заканчивающийся нулевым байтом. Нулевой байт или управляющий символ '\0' - признак конца строки. Многие строковые функции С требуют для нормальной работы нулевой байт в конце строки. Поэтому при описании массива символов следует учитывать место для нулевого байта. Так, если ваша строка должна содержать N символов, то вы должны зарезервировать память для N+1 символа.

Например, объявление:

char str[11];

предполагает, что строка содержит 10 символов, а последний байт зарезервирован под нулевой байт.

Хотя в языке С нет строкового типа, язык допускает строковые константы. Строковая константа - это список литер заключенных в двойные кавычки.

Например,

"Это строковая константа" или "Привет мир!" - это всё строковые константы.

В конец строковой константы не обязательно ставить символ '\0' - это сделает компилятор, и строка "Привет мир!" в памяти будет выглядеть так:

П

р

и

в

е

т

 

м

и

р

!

\0

Задание 11: Написать программу для ввода строки с клавиатуры имени, и вывода его на экран.

Постановка задачи:

1.      Входные данные:

r, l: целые

t[N][N]: вещественные

2.      Выходные данные:

max:  вещественное

Алгоритм:

 

 

 

 

 

 

 

 

Программа:

#include <stdio.h>

#define N 30

main()

{

char str[N]; // Объявление массива

printf("Привет, как тебя зовут?\n");

gets(str); // Ввод строки

printf("Прекрасное имя, %s",str);

}

Функция gets(), как и функция scanf() ставит в конец строки нулевой байт.

Символьные массивы могут инициализироваться как обычный массив:

char str[15]={'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!'};

а могут как строка символов:

char str[15]="Hello world!";

В последнем случае в конец строковой константы компилятор поставит символ '\0'.


Некоторые функции для работы с текстом:

strcat- объединяет исходную строку src и результирующую строку dest, присоединяя  dest к концу src. Возвращает dest.

char *strcat(char *dest, const char *src);

strchr- искать в строке символ.

char * strchr (const char *s,int c);

Ищет в строке s первый символ с, начиная с начала строки.

strrchr- искать в строке символ.

char * strchr (const char *s,int c);

Ищет в строке s первый символ с, начиная с конца строки.

strdup-копировать строку.

char *strdup(const char *s);

strlen- считает длину строки.

int strlen (const char *s);

strlwr- преобразовать в строке большие буквы на маленькие.

char *strlwr (char *s);

strupr- преобразовать в строке маленькие буквы на большие.

char *strupr (char *s);

strrev-изменить порядок  символов в строке на обратный.

char *strrev (char *s);


6. Структуры.

Структура-это совокупность логически связанных переменных, возможно, различных типов, сгруппированных под одним именем для удобства дальнейшей обработки.

  Элементы структуры обозначаются идентификаторами, с которыми можно связывать описатели типов. В результате структуру можно рассматривать как единое целое и осуществлять при необходимости выбор составляющих ее элементов.

  Для образования структуры присваиваются имена каждому из включаемых элементов и структуре в целом. Затем посредством специального описания задают иерархию, порядок следования и типы элементов, включаемых в структуру.

Например:

tab_nom - табельный номер;
fio - фамилия, имя, отчество;
pol - пол;
summa - зарплата;

Все эти понятия можно объединить в такую, например, структуру:

struct anketa
{
int tab_nom;
char fio[30];
char data[10];
int pol;
char adres[40];
float summa;
};

  Эта запись называется описанием структуры. Она начинается с ключевого слова struct и состоит из заключенного в фигурные скобки списка описаний.

Описание struct {....} p1, p2, p3; синтаксически аналогично int p1, p2, p3; в том смысле, что каждый из операторов описывает p1, p2, p3 как переменные соответствующего типа. Например, используя указание выше описание anketa, можно с помощью строки

                      struct anketa a0, a1 ,a2;

описать структурные переменные a0, a1, a2. Любая переменная a0, a1, a2 содержит в строго определенном порядке элементы tab_nom, fio, data, pol, adres, summa. 

 Структуры можно инициировать, помещая следом за определением список начальных значений элементов:

                  struct anketa a0={ 1024, "Макагон В.М", "10.01.1943",0 , "Одесса, Варневская, 23/99", 175.00};

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

a0.data="10.01.43";

a1.summa=0.0;
 

Задание 12: Написать программу для создания структуры и вывода её на экран.

Постановка задачи:

1.      Входные данные:

z l, z2: типа struct zap

2.      Выходные данные:

z l, z2: типа struct zap


Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

main()

{clrscr();

      struct zap//vvodimaya tablica

              {char imia;

              int  god,

                    mes,

                    den;

              };

struct zap z1,z2;

char i;

int r;

printf("\n vvedite imia\n");

scanf("%s",&i);

z1.imia=i;

printf("\n vvedite god rojdeniya\n");

scanf("%d",&r);

z1.god=r;

printf("\n vvedite mesiac rojdeniya \n");

scanf("%d",&r);

z1.mes=r;

printf("\n vvedite den' rojdeniya \n");

scanf("%d",&r);

z1.den=r;

printf("\n vvedite imia\n");

scanf("%s",&i);

z2.imia=i;

printf("\n vvedite god rojdeniya\n");

scanf("%d",&r);

z2.god=r;

printf("\n vvedite mesiac rojdeniya \n");

scanf("%d",&r);

z2.mes=r;

printf("\n vvedite den’ rojdeniya \n");

scanf("%d",&r);

z2.den=r;

printf("imia     god       mesaic       den’  \n");

printf("%s    %d       %d        %d        \n",z1.imia,

                                                                                        z1.god,

                                                                                        z1.mes,

                                                                                        z1.den);

printf("%s    %d       %d        %d        \n",z2.imia,

                                                                                        z2.god,

                                                                                        z2.mes,

                                                                                        z2.den);

getch();

}

 

В приведенном выше примере, мы создавали две переменные типа структуры, т.е. две записи в анкете, а затем последовательно выводили их  на экран. Это не очень удобно. Именно поэтому, удобнее будет создать одномерный массив типа структуры, каждый элемент которого будет новой записью в анкете. Рассмотрим реализацию примера с массивом:

 

Задание 13

Постановка задачи:

1.      Входные данные:

z l, z2: типа struct zap

2.      Выходные данные:

z l, z2: типа struct zap

 


Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Программа:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 5

main()

{clrscr();

      struct zap//vvodimaya tablica

              {char imia;

              int  god,

                    mes,

                    den;

              };

struct zap z[N];

char im;

char s[50];

int r,r1,r2,i,n=0;

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

      {printf("\n vvedite imia\n");

      scanf("%s",&im);

z[i].imia=im;

printf("\n vvedite god rojdeniya\n");

scanf("%d",&r);

z[i].god=r;

printf("\n vvedite mesiac rojdeniya \n");

scanf("%d",&r);

z[i].mes=r;

printf("\n vvedite den' rojdeniya \n");

scanf("%d",&r);

z[i].den=r;

      }

printf("imia     god       mesaic       den’  \n");

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

     { printf("%s    %d       %d        %d     \n",z[i].imia,z[i].god,z[i].mes,z[i].den);

       }

getch();}

7. Функции Fopen, fclose, getc, putc.

Прежде чем читать или записывать иформацию в файл, надо открыть его с помощью стандартной библиотечной функции fopen. Программа, использующая эту функцию, должна включать во время компиляции системный файл stdio.h, в котором определен новый тип данных - FILE.

   В программе нужно описывать ссылки на файлы и выглядит это, например, так: FILE *fu; Здесь fu означает указатель наFILE, а fopen выдает ссылку на этот файл. Функция fopen имеет следующий заголовок:

    FILE *fopen(char *fname, char type);

Обращение к fopen в программе делается так: fu=fopen(fname, type); Строка символов fname содержит имя файла, который надо открыть; type- тоже строка символов, заключенная в кавычки и указывающая, как бует использоваться файл: "r"-чтение, "w" - запись, "r+" - чтение с дозаписью, "a" -дозапись. Функция fopen возвращает указатель, с помощью которого мы в дальнейшем будем обращаться к этому файлу. Примеры:

FILE *uin, *uout;
uin=fopen("MAK1","r");
uout=fopen("MAK2","w");

   Файл с именем MAK1 открывается для чтения и далее идентифицируется как uin; файл MAK2 открывается для записи и связывается с идентификатором uout.

 


Задание 14: Написать программу которая считывала бы файл с именем filein.txt  и выводила его на экран.

//filein.txt

strana  1937 1950 1955

sssr    100  377  819

sha     100  227  323

angliya 100  159  213

frn     100  100  226

italiya 100  131  200

 

 

Постановка задачи:

1.      Входные данные:

filein.txt 

2.      Выходные данные:

t1[N] : массив типа struct mh1


Алгоритм:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Программа:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#define N 6

struct mh1

{char name[20];

   int g37,g50,g55;

};

int j,i,min,it,t11,t22,t3;

struct mh1 t1[N];

main()

{clrscr();

FILE *filein;

filein=fopen("1.txt","r");

if (filein==NULL)

   {printf("Fail 1.txt ne otkrit\n");

     exit(-1);    }

i=0;

while(fscanf(filein,"%s  %d %d %d",t1[i].name,&t11,&t22,&t3)!=EOF)

{ t1[i].g37=t11;

t1[i].g50=t22;

t1[i].g55=t3;

printf("%s  %d   %d   %d\n",t1[i].name,t1[i].g37,t1[i].g50,t1[i].g55);

getch();

i++;

}

fclose(filein);}
8. Функции.

Функция - это самостоятельная единица программы, созданная для решения конкретной задачи. Функциями удобно пользоваться, например, если необходимо обработать один и тот же код программы. Как и переменные, функции надо объявлять. Функцию необходимо объявить до её использования.
    Каждая функция языка С имеет имя и список аргументов (формальных параметров).
Функции могут возвращать значение. Это значение может быть использовано далее в программе. Так как  функция может вернуть какое-нибудь значение, то обязательно нужно указать тип данных возвращаемого значения. Если тип не указан, то по умолчанию предполагается, что функция возвращает целое значение (типа int). После имени функции принято ставить круглые скобки (это касается вызова функции её объявления и описания). В этих скобках перечисляются параметры функции, если они есть.


Форма описания функции имеет вид:
тип <имя функции>(список параметров)
{
тело функции
}

Объявление функции имеет вид:

тип <имя функции>(список параметров);

Вызов функции делается следующим образом:

<имя функции>(параметры);

или

<переменная>=<имя функции>(параметры);

При вызове функции так же ставиться точка с запятой.
8.1 Функции не возвращающие значение.

Задание 15: Написать программу с использованием функции, которая печатает строку "Вы вызвали функцию" на экран.

Программа:

#include<stdio.h>

#include<conio.h>

void function1(void);      // Объявление функции

main()            

{

      function1();              //  Вызов функции

}

/* Описание функции  */

void function1(void)           // Заголовок функции

{                                      // Начало тела функции

  printf("Vi vizvali funkciu\n");

  getch();

}                                      //  Конец тела функции


Обратите внимание ещё на то, что тип возвращаемого значения у нашей функции void (пусто). Это значит, что функция не будет возвращать никакого значения.

 

8.2 Функции возвращающие значение.

Задание 16: Написать программу с двумя функциями. Но  для одной функции мы укажем тип возвращаемого значения – int, а другая ничего возвращать не будет.

 


Программа:

#include <stdio.h>        
int x;                                 // Объявляем глобальную переменную х

void function1(void);      // Объявляем функцию function1()

int function2();           // function2() будет возвращать значение типа int
main()
{x = 10; 

printf("До вызова функции function2() x равно %d\n", x);
        function1();               // Вызываем функцию function1()
        x = function2();          // Вызываем функцию function2()
        printf("После вызова функции function2() x равно %d\n", x);

        getch();
}
/* Описание наших функций */
void function1(void)
{
        printf("Сделан вызов первой функции\n");
}
int function2(void)
{        int y;                             
        y = x + 10;                     

        return y;                         // Возвращаем значение y
}
После строки  #include <stdio.h> мы объявляем глобальную переменную x. Так как x  - глобальная переменная, то она будет видна всем функция нашей программы т.е. этой переменной могут пользоваться все функции.
 

8.3 Функции с параметрами.

Функции языка С могут иметь параметры. Эти параметры передаются в функцию и там обрабатываются. 

Форма описания функции:
тип <имя функции>(список параметров)
{
        тело функции
}
В списке параметров для каждого параметра должен быть указан тип. 
Пример правильного списка параметров:
        function(int x, char a, float z)

Задание 17: Написать программу с двумя функциями, одна из которых будет возвращать квадрат значения x, а другая будет выводить значение переменной z типа float на экран. 

Программа:

#include <stdio.h>

#include<conio.h>

int kvadrat(int x);

void viv_znach(float z);      

main()

{clrscr();

int x = 10;

float y=9.9;

printf("do vizova funkcii kvadrat x= %d\n", x);

x = kvadrat(x);          // Вызываем функцию kvadrat(int x)     

printf("posle  vizova funkcii kvadrat x= %d\n", x);

viv_znach(y);

getch();

}

/* Описание наших функций */

int kvadrat(int x)

       {

     x = x * x;        

     return x;

        }

void viv_znach(float z)     

{

     printf("Z=%f", z);     

}

 

8.4 Формальные и фактические параметры

Формальные параметры - это параметры которые мы объявляем в заголовке функции при описании.

Фактические параметры - это параметры которые мы подставляем при вызове функции.

void myfunc(int x);         // Объявление функции
void main(void)


{
    int a;
    a=5;
    myfunc(a);                // a- фактический параметр
}// Описание функции
void myfunc(int x)          // x - формальный параметр
{
    x = x + 10;
    printf("Вывод x = %d",x);
}


Вывод.

В данной курсовой работе были рассмотрены  следующие разделы языка программирования С:

- основные понятия;

- линейные и разветвляющиеся вычислительные процессы;

- циклические вычислительные процессы;

- массивы;

- массивы символов;

- структуры;

- работа с файлами;

- функции.

Рассмотрев эти разделы мы убедились, в том что язык программирования С – это мощный и компактный язык программирования. Он популярен, поскольку предоставляет в распоряжение программиста полезные инструменты программирования, обеспечивает хорошее управление аппаратными средствами.

 

 

 

 

 

 

 

Информация о работе Программирование на С