Программирование >>  Элементы языков с и с++ 

1 ... 39 40 41 [ 42 ] 43 44 45 ... 200


строки символов и подсчета количества ненулевых битов в целом числе (листинг 7.5).

Листинг 7.5

25.срр : Defines the entry point for the console application.

tinclude stdafx.h Jinclude <stdio.h> linclude <conio.h> linclude <stdlib.h> for atoi() Idefine eof ? Idefine maxline 1000

for getchar0,putchar()

- Функция подсчета количества битов в целом числе int bitcount (unsigned int n) {

int b;

for(b=0; n != 0; n =l) if(n & 01) 01-восьмеричная единица b++; return(Ь);

-Ввод строки с клавиатуры

int getiine(char s[],int lim) (

int c,i;

for(i=0; i<lim-l && (c=getchar()) != eof && с != \n; i++) s[i]=c; s[i]=\0;

i++; для учета количества

return(i);



int gener(int (*getline)(char s[],int lim),int (*bitcount)(unsigned int n))

char s[maxline]; int lim=100;

printf( Enter any number >\n ); (*getline) (s,lim); unsigned int n=atoi(s); n=(*bitcount)(n); return(n);

-------------------------------------------------------------

int tmain() {

int n=gener(getline,bitcount);

printf( The amount of ones in the input n=%o\n ,n); getch();

return 0;

Мы уже знакомы с функциями getlineO и bitcount о (последнюю составляли, когда изучали операции сдвига - она подсчитывает в целом без знака количество единиц (ненулевых битов)).

Рассмотрим вызывающую функцию gene г (). Мы видим, что оба ее аргумента описаны как указатели на функции: первый- на функцию getlineo, второй - на bitcount (). Затем идет выполнение первой переданной в качестве аргумента функции. Чтобы заставить выполниться функцию, находящуюся по адресу, который содержится в указателе getline, надо подействовать на него операцией разыменования (по определению указателя).

Получим (*getline)(S,lim);

Функция getlineO ВЫПОЛНИТСЯ И результатом ее работы станет введенное в строку s число, которое переводится в беззнаковое п с помощью функции atoi(). После этого выполнится функция bitcount о, тоже описанная как

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



указатель. Результат ее работы и возвращается в качестве результата функции gener (). Результат расчета показан на рис 7.5.

C:\WINDOWS\system32\cmd.e)

bnter anv nunber >

T)ie amount of ones in the input n=2 1Я продолжения нажмите любую клавишу

Рис. 7.5. Результат расчета программы листинга 7.5

Структуры Объявление структур

Структуры - это такие конструкции языка С, которые объединяют в себе данные разных типов, в том числе и подструктуры (такие же структуры, но являющиеся членами главной структуры). Эти конструкции полезны тем, что во многих ситуациях позволяют группировать связанные данные таким образом, что с ними можно работать как с единым целым. Как объявляется структура, покажем на примере объявления данных некоторого человека;

struct man I

char name [80]; имя

char phone number[80]; телефон

int age; возраст ,**

int height; рост

Так задается щаблон будущего экземпляра структуры. Здесь man - имя шаблона. То, что находится в теле, ограниченном фигурными скобками, - это члены структуры-шаблона (под такое объявление компилятор память не выделяет). На основе такого шаблона создается экземпляр структуры, под который память уже вьщеляется и с которым можно работать в программе. Экземпляры структуры создаются несколькими путями:

П по шаблону man:

struct man friends[100],others;



1 ... 39 40 41 [ 42 ] 43 44 45 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика