Направления программирования. История создания языка Си. Особенности языка, страница 19

Пример:

Дан текст. Слова в тексте разделяются пробелами. Найти все слова в которых доля букв ‘a’ и ‘b’ –максимальна. В словах оканчивающихся на “ing” заменить на “ed”.

Доля a: количество а в слове делим на количество букв в слове.

#include<stdio.h>

#include<string.h>

#include<alloc.h>

#define max 2000   //максимальная длина текста

#define max_l 20   //максимальная длина слова

#define max_k 30   //максимальное количество слов

void main(void)

{

char *text;

int leng;// длинна введенного текста

char mas_sl[max_k][max_l];

float kol[max_k];//доля букв а и b в каждом слове

char *str1="ing";

char *str2="ed";

int i,j=0,k=0;

float maxim;

text=(char*)malloc(max*sizeof(char));

clrscr();

gets(text);

leng=strlen(text);

for(i=0;i<leng;i++)//выделение слов текста

{if(text[i]!=' ')

mas_sl[k][j++]=text[i];

else{mas_sl[k][j]='\0';

k++;j=0;}

}

mas_sl[k][j]='\0';//для последнего слова

k++;

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

{j=0;kol[i]=0;

while(mas_sl[i][j]!='\0')

{if(mas_sl[i][j]=='a'||mas_sl[i][j]=='b')

kol[i]+=1;

j++;}

kol[i]/=j;

}

maxim=kol[0];

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

if(kol[i]>maxim)maxim=kol[i];

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

if(kol[i]==maxim)puts(mas_sl[i]);

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

{if(strcmp(str1,mas_sl[i]+(strlen(mas_sl[i])-3))==0)

{strcpy(mas_sl[i]+(strlen(mas_sl[i])-3),str2);

puts(mas_sl[i]);}

}

}

п.12.Функции.

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

Функция – это набор объявлений и операторов, реализующая логически завершенную часть алгоритма. Количество функций в программе не ограничивается. Все функции в языке Си являются глобальными, поэтому запрещается определять одну функцию внутри другой.

п.12.1.Объявление функции.(прототип функции)

Объявление функции задает тип возвращаемого значения, имя и список параметров функции, определенный где-то в другом месте программы. При вызове функции до ее определения выдается определение.

Синтаксис объявления:

[<тип возвращаемого значения>]<имя функции>([<список параметров>]);

Если тип возвращаемого значения опущен - предполагается тип  int. Если функция значений не возвращает, следует объявлять ее типом void.Функция может возвращать значения любых типов, кроме массивов и функций, но указатели на эти объекты она  возвращать может.

char * f ();  // функция возвращает указатель на char.

Список параметров может отсутствовать, но круглые скобки обязательны. Если функция значений не принимает, в списке параметров следует указывать void.

<Список параметров> - это последовательность конструкций следующего вида : <тип><имя аргумента>, разделенных запятой.

Пример:  float function (float a, float b, int c)

Имена формальных параметров в определении функции не обязательно должны совпадать с именами параметров, указанных в ее объявлении. Основное назначение этих имен – это повышение наглядности программ.

 Замечание: Все функции языка Си (Си++) являются глобальными, т.е. запрещено объявлять одну функцию внутри другой.

п.12.2.Определение функции (описание).

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

Синтаксис:   [<тип возвращаемого значения>] <имя функции> ([<список формальных параметров>])

<тело функции>

Область действия идентификаторов, указанных в списке формальных параметров – тело функции.

Тело функции – это составной оператор или блок.

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

Формальные параметры.

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