Чтение чисел
Дано N, далее N целых чисел, N&1000
Входные данные: Целое число 0 < N < 1000. Затем N чисел, по модулю не превышающих 30000, через пробел.
Выходные данные: Входная последовательноть. Еще раз входная последовательность.
#include <stdio.h>
#define N 1000
int main() {
int a[N]; // сюда считываем и отсюда печатаем числа
int i; // номер очередного элемента в массиве
int n; // сколько чисел ожидается во входной последовательности
// считываем количество чисел в n и далее сохраняем эти n чисел в массиве a
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &a[i]);
}
// печатаем n первых элементов из массива a и переводим строку
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
// печатаем n первых элементов из массива a еще раз
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
Дано несколько целых чисел (не более 1000)
Входные данные: N целых чисел, по модулю не превышающих 30000, через пробел, 0 < N < 1000
Выходные данные: Входная последовательность. Еще раз входная последовательность.
Для хранения чисел используем массив int a[1000] (размер массива известен еще на этапе компиляции).
Для чтения последовательности чисел проверим, что возвращает функция
scanf
scanf возвращает количество правильно разобранных элементов ввода или EOF в случае конца файла.
При вызове z=scanf("%d%d", &x, &y)
Input | z | x | y | Пояснение |
12 345 | 2 | 12 | 345 | |
12 345abc | 2 | 12 | 345 | abc не будет прочитано |
abc def | 0 | ? | ? | Не получилось разобрать по формату %d символы с самого начала, "курсор" не сдвинулся, следующий %d разбираем с того же места abc... |
12 abc 345 | 1 | 12 | ? | |
конец файла | EOF | ? | ? | |
#include <stdio.h>
#define N 1000
int main() {
int a[N]; // сюда считываем и отсюда печатаем числа
int i; // номер очередного элемента в массиве
int n; // сколько элементов в массиве
// пока scanf успешно разбирает 1 формат %d (scanf возвращает 1)
for (i=0; i<N && 1==scanf("%d", &a[i]); i++) {
;
}
n = i; // прочитано чисел
// печатаем n первых элементов из массива a и переводим строку
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
// печатаем n первых элементов из массива a еще раз
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
Дано N, далее N целых чисел, чем ограничено N неизвестно.
Входные данные: Целое число 0 < N . Затем N чисел, по модулю не превышающих 30000, через пробел.
Выходные данные: Входная последовательноть. Еще раз входная последовательность.
Массив использовать нельзя, так как его предполагаемый размер неизвестен.
Будем выделять память динамически.
int * a;
int n;
scanf("%d", &n);
a = malloc (n * sizeof(int)); // выделяем n*sizeof(int) байт динамической памяти,
// адрес ее начала записываем в переменную а
// используем выделенную память
free(a); // освобождаем память
#include <stdio.h>
#include <stdlib.h>
int main() {
int * a; // выделив память, сюда считываем и отсюда печатаем числа
int i; // номер очередного элемента в массиве
int n; // сколько чисел ожидается во входной последовательности
scanf("%d", &n); // считываем количество чисел в n
a = malloc (n * sizeof(int)); // выделяем n*sizeof(int) байт динамической памяти,
// адрес ее начала записываем в переменную а
for (i=0; i<n; i++) { // считываем числа и сохраняем их в динамическом массиве а
scanf("%d", &a[i]);
}
// печатаем n первых элементов из массива a и переводим строку
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
// печатаем n первых элементов из массива a еще раз
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
free(a); // НЕ ЗАБУДЬТЕ ОСВОБОДИТЬ ПАМЯТЬ!
return 0;
}
Дано несколько целых чисел (не более 1000)
Входные данные: Несколько целых чисел, по модулю не превышающих 30000, через пробел.
Выходные данные: Входная последовательность. Еще раз входная последовательность.
Для хранения чисел использовать массив int a[1000] (размер массива НЕизвестен на этапе компиляции).
Выделим память динамически. Будем выделять памяти больше, чтобы вошел на 1 int больше.
#include <stdio.h>
#include <stdlib.h>
int main() {
int * a; // сюда считываем и отсюда печатаем числа
int i; // номер очередного элемента в массиве
int n; // сколько элементов в массиве
// пока scanf успешно разбирает 1 формат %d (scanf возвращает 1)
for (i=0; ; i++) {
a = realloc((i+1)*sizeof(int));
if (1 != scanf("%d", &a[i])
break;
}
n = i-1; // прочитано чисел, памяти выделено на 1 int больше
// печатаем n первых элементов из массива a и переводим строку
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
// печатаем n первых элементов из массива a еще раз
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
free(a); // НЕ ЗАБУДЬТЕ ОСВОБОДИТЬ ПАМЯТЬ!
return 0;
}
--
TatyanaDerbysheva - 14 Nov 2016