Void main();
template<class a>
void sort (int n, a*X)
{
a z;
for (int i=0; i<n; i++)
{
intimin=I;
for (int j=i+1; j<n; j++)
if (X[j]<X[imin]) imin=j;
z=X[i];
X[imin]=z;
}
}
Void main()
{
constint n=15;
int B[n];
for (int i=0; i<n; i++)
cin>>B[i];
sort(n,B);
for (int i=0; i<n; i++)
cout<<B[i]<<”_”;
cout<<endl;
double *C;
int m;
cout<<”Vvedi m->”;
cin>>m;
c=new double [m];
for (int i=0; i<n; i++)
cin>>C[i];
sort(m,C);
for (int i=0; i<n; i++)
cout<<C[i]<<”_”;
cin.get();
delete [] C;
}
7)Передача информации в функцию main и возврат значений из неё.
Основной метод передачи информации в функцию mainсостоит в использовании командной строки операционной системы.
типmain (intargc, char *argv[], char* envp[])
типmain (intargc, char **argv, char **envp)
тип :voidили int
argcопределяет количество аргументов командной строки всегда не равно нулю.
argvуказатель на массив слов командной строки.
envpуказатель на массив слов описывающий параметры окружающей строки.
В качестве аргументов командной строки целесообразно передавать имена файлов, имена функций, текст задающий режимы работы программы, числа, значения. Существует 3 способа использования main:
1)функция не имеет типа и аргумента в этом случае нет доступа к аргументам командной строки.
2)когда функция имеет 2 аргумента (argcи argv) в этом случае функция имеет доступ ко всем аргументам командной строки.
3)присутствует 3 аргумента в этом случае кроме слов командной строки функция имеет доступ к параметрам окружающей среды.
Разделителями слов командной строки является пробел, если необходимо переслать сообщение из нескольких слов как один аргумент, то необходимо взять их все в кавычки.
void main (intargc, char * argv[])
{
if (argc!=2)
puts(“Zabilinabratimya”);
elseprintf(“\n Privet Lunatiki, %s!”, argv[1]);
}
void main (intargc, char *argv[], char* envp[])
{
printf(“\n kol-voarg-tov kom stroke =%d”,argc);
printf(“\n Arg-tskomstr: \n”);
for (int i=0; i<argc; i++)
printf(‘\n %s”, argv[i]);
printf(“\n Parametrisredi: \n”);
for (int i=0; envp[i]; i++)
printf(“\n %s”, envp[i]);
}
void main (intargc, char *argv[], char* envp[])
{
printf(“\n kol-voarg-tov kom stroke =%d”,argc);
printf(“\n Arg-tskomstr: \n”);
while (*argv)
cout<<*argv++<<endl;
printf(“\n Parametrisredi: \n”);
while (*envp)
cout<<*envp++<<endl;
}
Возврат значений из функции main()
Функция main() может возвращать значения которые передаются в ОС, оно может быть равно 0 или не = 0. Это значение размещается в одном байте, если программа успешно отработала, то возвращаемое значение будет равно 0 иначе любое другое значение, что значит неверное завершение программы.
Под строкой в Cпонимают последовательность символов оканчивающихся нулём ‘\0’. Различают строку константу последовательность символов взятых в кавычку, и еще переменную строку
charимя[kol-vosimvolov+1];
charS[100];
Можно использовать указатели char *S;
В этом случае необходимо выделить памяти под строку или связать указатель с существующей строкой описанной обычным образом.
При описании строк можно сделать инициализацию.
char S[]=”Привет”;
char S[7]={‘P’,’R’,’I’,’V’,’E’,’T’}
Действия над строками, копирование, изменение, вставка, удаление.
Все действия и другие реализуются с помощью личных функций, которые реализуют действия как с одномерными массивами и при помощи внешних библиотек (например<string.h>или <mem.h>)
Для ввода, вывода можно использовать функцию gets(s);
Для вывода puts(s);
Определение количества символов в строке.
int Len(char *S)
{
int k=0;
while (S[k]) k++;
return K;
}
void deli (char *S, int i)
{
for (int k=i; i<Len(s); K++)
S[k]=S[k+1];
}
Удаление подстроки начиная с i-й позиции удалить Kсимволов.
voiddelik(char *S, int i, int k)
{
for (int p=0; p<k; p++)
for (int j=i; j<Len(s); k++)
s[j]=S[j+1];
}
Сравнение 2-х строк
intsrav(char *S1, char *S2)
{
if (Len(s1)!=Len(s2))\
return 1;
for (int i=0; i<Len(s1); i++)
if (S1[i]!=S2[i]) return 1;
elsereturn 0;
}
void copy(char *s1, char *s2)
{
int n=len(s2);
for (int i=0; i<n; i++)
s1[i]=s2[i];
s1[i]=’\0’;
}
Разделение текста на слова
intrazb (char *T, char *MS[])
{
int ns, i,ks;
i=0; ns=0; ks=0;
while (T[i]!=’\0’)
{
if (T[i]==’_’)
{
MS[KS][i-ns]=”\0’;
KS++;
ns=i+1;
}
else {MS[KS][i-ns]=T[i];
i++;
}
MS[KS][i-ns]=’\0’;
return KS+1;
}
Объединение массива слов в текст (строку).
Подсоединение строки s1 к s2
voidsumstr(char *s1, char *s2)
{
}
Дан текст. Удалить слова начинающиеся с той же буквы, что и слово максимальной длинны
Пользовательские функции находятся в файле BSTR.cpp
#include <stdio.h>
#include “BSTR.cpp”
voidmain()
{
char *T=new char [150];
char **MS=new char *[80];
for (int i=0; i<80; i++)
MS[i]=new char [50];
puts(“\n vveditekst\n”);
gets(T);
//развить Tна массив слов MS
int KC=razb(T,MS);
//ищем слово максимальной длинны и его первую букву
intmaxdl=0; char b1;
for (int i=0; i<KC;i++)
if (Len(MS[i])>maxdl)
{
maxdl=Len(MS[i]);
b1=MS[i][0];
}
//удалениеслова
for (int i=0; i<KS; i++)
if (MS[i][0]==b1)
MS[i][0]=’\0’;
//объединить слова в текст
char*rez= new char[150];
rez[0]=’\0’;
for (i=0; i<KC; i++) sumstr(rez,MS[i]);
puts(rez);
}
Функции находящиеся в модуле <string.h>
1)strlen(s); - длина строки
2)strcpy(s1,s2) – копированиеs2->s1
3)strcmp(s1,s2) – сравнение 2-х строки, если s1 совпадает с s2то результат функции = 0
если s1<s2то результат меньше нуля
если s1>s2то результат больше нуля
4)strcat(s1,s2) – строка s2 подсоединяется к строке s1
5)strtok(s,”строка разделителей”); разбиение текста на слова
char *t;
t=strtok(s,” “);
while (t!=NULL);
{
t=strtok(NULL,” “);
i++;
}
Типы данных определенные пользователем:
1)структуры(struct)
Структура объединяет данные разных типов в одно целое.
Различают описание структуры – шаблон и структурную переменную.
Переменная имеет память, а шаблон имеет описание структуры.
Начинается со слова struct [имя] {тип1 : имя11, имя12, …; тип2 : имя21, имя22, …, тип n : имя n1, имя n2…},
где тип 1,2 , n– один из типов языка C, либо массив, либо структура. Шаблон может быть без имени. В этом случае он должен быть только один.
struct student
{
char FIO[30];
int God;
charadres[20];
long step;
}A, B;
Описание структурной переменной может быть задано при описании шаблона
struct student A,B;
Для того, чтобы не указывать слово structпри описании структурной переменной необхоимо определить шаблон структуры в typedif
typedef
struct student
{
char FIO[30];
int God;
charadres[20];
long step;
} students;
Обращение к структурной переменной имя_структурной_переменной.имя_поля
A.GOD
A.FIO
Если описан массив структур C[i].GODC[i].STEP
2)модификации структур (а)битовые поля, б) объединения)
3)перечисления(enum)
4)задание нового имени существующему типу данных
С помощью оператора typedifзадаётся новое имя существующему типу
typedif float real;