Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Что вы должны были узнать. · Что такое библиотека языка Си и как ее использовать



· Что такое библиотека языка Си и как ее использовать.

· Как открывать и закрывать текстовые файлы: fopen() и fclose()

· Что такое тип FILE

· Как читать из файла и записывать в файл: getc(), putc(),

· fgets(), fputs(), fscanf(), fprintf()

· Как проверять классы символов: isdigit(), isalpha() и т. д.

· Как превращать строки в числа: atoi() и atof()

· Как осуществлять быстрый выход: ехit()

· Как распределять память: malloc(), calloc()

Вопросы и ответы.

Вопросы.

1. Что неправильно в этой программе?

main()

{

int *fp;

int k;

fp = fopen(" желе");

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

fputs(fp, " Нанетта ест желе.");

fclose(" желе");

}

2. Что будет делать следующая программа?

#include <stdio.h>

#include <ctype.h>

main(argc, argv)

int argc;

char *argv[];

{

int ch;

FILE *fp;

if ((fp = fopen(rag[1], " r")) == NULL)

exit(1);

while ((ch = getc(fp))!= EOF)

if(isdigit(ch))

putchar(ch);

fclose (fp);

}

3. Все ли правильно в выражении isalpha(c[i]), где с является массивом типа char? Что можно сказать о isalpha(c[i++])?

4. Используйте функции классификации символов для подготовки выполнения atoi().

5. Как вы могли бы распределить память для размещения массива структур?

Ответы.

1. Должна быть директива #include <stdio.h> для определения ее файлов. Следует описать указатель fp файла: FILE *fp; функция fopen() должна иметь вид: fopen ("желе", "w"), или, может быть, включать "а". Порядок аргументов в fputs() должен быть обратным. Функция fclose() требует указателя файла, а не имени файла: fclose(fp).

2. Она будет открывать файл, заданный как аргумент командной строки, и выводить на печать все цифры в файле. Программа должна проверять (но не делает этого), не аргумент ли это командной строки.

3. Первое выражение правильно, так как c[i] имеет значение типа char. Второе выражение не выводит компьютер из строя, но может давать непредсказуемый результат. Причина в том, что isalpha() является макроопределением, у которого, по всей вероятности, аргумент появляется дважды в определяющем выражении (проверка на принадлежность к регистру строчных букв, а затем — прописных букв) и это дает в результате два увеличения i. Лучше всего избегать использования оператора увеличения в аргументе макрофункции.

#include < stdio.h>

#include < ctype.h>

#define issign(c) (((c) == '-' || (c) == '+')? (1): (0))

atoi(s);

char *s;

{

int i = 0;

int n, sign;

while (isspace(s[i]))

i++; /* пропуск пустого символа */

sign = 1;

if (issign(s[i])) /* установка необязательного знака */

sign = (s[i++ ] == '+')? 1: -1;

for (n = 0; isdigit(s[i]); i++)

n = 10*n + s[i] - '0';

return(sign * n);

}

4. Предположим, что wine является именем структуры. Эти операторы, надлежащим образом расположенные в программе, будут выполнять данную работу.

struct wine *ptrwine;

char *calloc();

ptrwine = (struc wine *) calloc (100, sizeof (struct wine));





Дата публикования: 2015-01-13; Прочитано: 195 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...