Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Глава 10. Массивы и строки.

1.Напишите программу, в которой массивы используются для хранения имен, адресов и номеров телефонов 20 человек.

main()

{

char names[20][20], street[20][20],

city[20][20];

char state[20][3], zip[20][6],

phone[20][13], lookfor[20];

int count;

for(count=0;count<20;count++)

{

puts("Введите имя");

gets(names[count]);

puts("Введите название улицы");

gets(street[count]);

puts("Введите город");

gets(city[count]);

puts("Введите штат");

gets(state[count]);

puts("Введите индекс");

gets(zip[count]);

puts("Введите номер телефона");

gets(phone[count]);

}

}

2.Внесите в программу из упражнения 1 изменения так, чтобы иметь возможность ввода имени и последующего просмотра массива в поисках номера телефона соответствующего человека.

main()

{

char names[20][20], street[20][20],

city[20][20];

char state[20][3], zip[20][6],

phone[20][13], lookfor[20];

int count;

for(count=0;count<20;count++)

{

puts("Введите имя: ");

gets(names[count]);

puts("Введите название улицы: ");

gets(street[count]);

puts("Введите город: ");

gets(city[count]);

puts("Введите штат: ");

gets(state[count]);

puts("Введите индекс: ");

gets(zip[count]);

puts("Введите номер телефона: ");

gets(phone[count]);

}

puts("Введите имя: ");

gets(lookfor);

for(count=0; count<20;count++)

{

if(strcmp(names[count],lookfor)==0)

printf("%s %s\n", names[count],

phone[count]);

}

}

3.Объясните, почему следующая программа написана неправильно:

main()

{

int temps(31);

int index, total;

for (index = 0; index < 31; index++)

{

printf("Введите значение

температуры #%d: ", index);

scanf("%d", &temps(index));

}

high = temps(0);

low = temps(0); index = 1;

while (index < 31)

{

if (temps(index) > high)

high = temps(index);

else

low = temps(index);

index++;

}

printf("Минимальное значение

температуры равно %d\n", low);

printf("Максимальное значение

температуры равно %d\n", high);

}

Индексы всех элементов массива temps заключены в круглые скобки, вместоквадратных. Переменные high и low не определены. Переменная total определена, но не используется в программе. Конструкция if...else написана с ошибкой: если рассматриваемое значение не превышает текущее значение переменной high, это не значит, что оно непременно меньше текущего значения переменной low.

Глава 11. Струтуры и указатели.

1.Напишите программу, в которой структура используется для составления инвентарной описи. Информация включает в себя название продукта, цену, количество, имя поставщика.

struct product

{

char name[20];

float cost;

int quantity;

char vendor[20];

} item;

main()

{

puts("Введите сведения о товаре\n\n");

printf("Введите наименование:");

gets(item.name);

printf("Введите цену:");

scanf("%f", &item.cost);

printf("Введите количество единиц:");

scanf("%d", &item.quantity);

printf("Введите имя поставщика:");

gets(item.vendor);

}

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

struct product

{

char name[20];

float cost;

int quantity;

char vendor[20];

} item[20];

main()

{

int count;

for(count=0;count<20;count++)

{

puts("\nВведите сведения о товаре\n\n");

printf("Введите наименование:");

gets(item[count].name);

printf("Введите цену:");

scanf("%f", &item[count].cost);

printf("Введите количество единиц:");

scanf("%d", &item[count].quantity);

printf("Введите имя поставщика:");

gets(item[count].vendor);

}

}

3.Внесите изменения в программу из упражнения 2 так, чтобы выводить на экран общую стоимость включенных в опись товаров.

struct product

{

char name[20];

float cost;

int quantity;

char vendor[20];

} item[20];

main()

{

float total;

int count;

total=0;

for(count=0;count<20;count++)

{

puts("\nВведите сведения о товаре\n\n");

printf("Введите наименование: ");

gets(item[count].name);

printf("Введите цену: ");

scanf("%f", &item[count].cost);

printf("Введите количество единиц: ");

scanf("%d", &item[count].quantity);

printf("Введите имя поставщика: ");

gets(item[count].vendor);

total = total + (item[count].cost *

item[count].quantity);

}

printf("Общая стоимость включенных в опись \

товаров составляет %8.2f", total);

}

4.Напишите программу, в которой две переменные типа float определяются в main() как локальные, а затем используются в функции, вычисляющей квадраты обоих чисел.

main()

{

float num1, num2;

puts("Введите первое число");

scanf("%f",&num1);

puts("Введите второе число");

scanf("%f",&num2);

doubleit(&num1, &num2);

}

doubleit(dcount1, dcount2)

float *dcount1, *dcount2;

{

float sq1, sq2;

sq1 = *dcount1 * *dcount1;

sq2 = *dcount2 * *dcount2;

printf("Квадрат %f равен %f\n",*dcount1, sq1);

printf("Квадрат %f равен %f\n",*dcount2, sq2);

}

Для того чтобы вернуть значения вызывающей функции, используйте следующую программу:

main()

{

float num1, num2;

puts("Введите первое число");

scanf("%f",&num1);

puts("Введите второе число");

scanf("%f",&num2);

doubleit(&num1, &num2);

printf("Квадрат первого числа равен %f\n", num1);

printf("Квадрат второго числа равен %f", num2);

}

doubleit(dcount1, dcount2)

float *dcount1, *dcount2;

{

float sq1, sq2;

*dcount1 = *dcount1 * *dcount1;

*dcount2 = *dcount2 * *dcount2;

}

5.Объясните, почему следующая программа написана неверно:

main()

{

struct CD

{

char description[40];

char category[12];

char name[20];

float cost;

int number;

} disc;

puts("Введите сведения о диске");

printf("Введите название: ");

gets(name);

printf("Введите описание: ");

gets(description);

printf("Введите категорию: ");

gets(category);

printf("Введите цену: ");

scanf("%f", &cost);

printf("Введите номер ячейки: ");

scanf("%d", &number);

puts("Введена следующая информация о диске: ");

printf("Название: %s\n", name);

printf("Описание: %s\n", description);

printf("Категория: %s\n", category);

printf("Цена: %6.2f\n", cost);

printf("Номер п/п: %d\n", number);

}

Ко всем переменным, используемым в инструкциях ввода и вывода, обращение происходит без использования имени структурной переменной.

К переменным следует обращаться как к disc.name, disc.description и так далее.