Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Все лекции программирование

.pdf
Скачиваний:
25
Добавлен:
13.03.2016
Размер:
1.94 Mб
Скачать

Возвращаемые указатели

В качестве возвращаемого типа в C возможно использования указателя. Объявлении функции, которая возвращает указатель, тип возвращаемого указателя должен декларироваться явно. Например, нельзя объявлять возвращаемый тип как int *, если возвращается указатель типа char *! Иногда требуется, чтобы функция возвращала "универсальный" указатель, т.е. указатель, который может указывать на данные любого типа. Тогда тип результата функции следует определить как void *.

#include <stdio.h>

char *match(char c, char *s);

int main(void)

{

char s[80], *p=0, ch; printf("Enter a string \"s\": "); scanf("%s",s);

fflush(stdin);

printf("Enter a letter 'ch': "); scanf("%c",&ch); fflush(stdin);

p = match(ch, s); if(*p)

printf("%s ", p); else

printf("String \"s\" has no 'ch'."); return 0;

}

char *match(char c, char *s)

{

while(c!=*s && *s) s++; return(s);

}

Пример

c:\>Example.exe

Enter a string "s": abcdefgh Enter a letter 'ch': d

defgh

Рекурсия

В языке C функция может вызывать сама себя. В этом случае такая функция называется рекурсивной. Рекурсия – это процесс определения чего-либо на основе самого себя, из-за чего рекурсию еще называют рекурсивным определением.

#include <stdio.h>

int factr(int n); int fact(int n);

int main(void)

{

int n;

printf("Enter a number: "); scanf("%d",&n);

printf("1st method: %d\n", factr(n)); printf("2nd method: %d\n", fact(n));

return 0;

}

int factr(int n) { int answer;

if(n==1) return(1); answer = factr(n-1)*n; return(answer);

}

int factr(int n) { int t, answer; answer = 1;

for(t=1; t<=n; t++) answer=answer*(t);

return(answer);

}

Пример

c:\>Example.exe Enter a number: 10 1st method: 3628800 2nd method: 3628800

Игра

#include <stdio.h> #include <stdlib.h>

char matrix[3][3];

char check(void); void init_matrix(void);

void get_player_move(void); void get_computer_move(void); void disp_matrix(void);

int main(void) { char done;

printf("Let's begin\n"); done = ' '; init_matrix();

do { disp_matrix();

get_player_move(); done = check(); if(done!= ' ') break; get_computer_move(); done = check();

} while(done== ' ');

if(done=='X') printf("You win!\n"); else printf("You lose!\n"); disp_matrix();

return 0;

}

«Крестики-Нолики»

void init_matrix(void) { int i, j;

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

for(j=0; j<3; j++) matrix[i][j] = ' ';

}

void get_player_move(void) { int x, y;

printf("Lets enter X,Y: "); scanf("%d%*c%d", &x, &y); x--; y--;

if(matrix[x][y]!= ' '){ printf("Wrong step.\n"); get_player_move();

}

else matrix[x][y] = 'X';

}

void get_computer_move(void) { int i, j;

for(i=0; i<3; i++){ for(j=0; j<3; j++)

if(matrix[i][j]==' ') break; if(matrix[i][j]==' ') break;

}

if(i*j==9) { printf("The end.\n"); exit(0);

}

else

matrix[i][j] = 'O';

}

Игра «Крестики-Нолики»

void disp_matrix(void) { int t;

for(t=0; t<3; t++) {

printf(" %c | %c | %c ",matrix[t][0], matrix[t][1], matrix [t][2]);

if(t!=2) printf("\n---|---|---\n");

}

printf("\n");

}

char check(void) { int i;

for(i=0; i<3; i++) if(matrix[i][0]==matrix[i][1] &&

matrix[i][0]==matrix[i][2]) return matrix[i][0];

for(i=0; i<3; i++) if(matrix[0][i]==matrix[1][i] &&

matrix[0][i]==matrix[2][i]) return matrix[0][i];

if(matrix[0][0]==matrix[1][1] && matrix[1][1]==matrix[2][2])

return matrix[0][0];

if(matrix[0][2]==matrix[1][1] && matrix[1][1]==matrix[2][0])

return matrix[0][2];

return ' ';

}

Игра «Крестики-Нолики»

Лекция 9. Альтернативные типы данных

Структуры, объединения,

перечисления и декларации typedef

В языке С имеется пять способов создания пользовательских типов данных. Пользовательские типы данных можно создать с помощью:

структуры – группы переменных, имеющей одно имя и называемой агрегатным типом данных;

объединения, которое позволяет определять один и тот же участок памяти как два или более типов переменных;

битового поля, которое является специальным типом элемента структуры или объединения, позволяющим легко получать доступ к отдельным битам;

перечисления – списка поименованных целых констант;

ключевого слова typedef, которое определяет новое имя для существующего типа.

Структура

Структура – это совокупность переменных, объединенных под одним именем. С помощью структур удобно размещать в смежных полях связанные между собой элементы информации. Объявление структуры создает шаблон, который можно использовать для создания ее объектов (то есть экземпляров этой структуры). Переменные, из которых состоит структура, называются членами. (Члены структуры еще называются элементами или полями.)

Как правило, члены структуры связаны друг с другом по смыслу. Например, элемент списка рассылки, состоящий из имени и адреса логично представить в виде структуры.

Общий вид объявления структуры такой: struct тег

{ тип имя-поля; тип имя-поля; тип имя-поля;

.

.

.

} переменные-структуры;