|
Программирование >> Элементы языков с и с++
строки символов и подсчета количества ненулевых битов в целом числе (листинг 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;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |