Работа с одномерными массивами при адресации элементов обычным способом - C (СИ)
Формулировка задачи:
Ввести в память машины одномерный целочисленный массив, размером
не менее 30 элементов. Ввод осуществить с клавиатуры.
Посчитать количество всех чисел, сумма цифр которых меньше 10.
Решение задачи: «Работа с одномерными массивами при адресации элементов обычным способом»
textual
Листинг программы
int sum(int n)
{
int s=0;
for(; n; n/=10) s+=n%10;
return s;
}
void main(int argc,char* argv[])
{
int i,n,*a,less10;
do
{
printf("n>=30:");
scanf("%d",&n);
}while(n<30);
a=(int*)malloc(n*sizeof(int));
//в ручную
//for(i=0; i<n; i++)
//{
// printf("a[%d]=",i);
// scanf("%d",a+i);
//}
//автоматом
srand((unsigned)time(0));
for(i=0; i<n; i++)
{
a[i]=rand()%100;
printf("%d ",a[i]);
}
//
less10=0;
for(i=0; i<n; i++)
if(sum(a[i])<10) less10++;
printf("\n\nless than 10=%d\n",less10);
free(a);
system("pause");
}
Объяснение кода листинга программы
- Функция
sumпринимает целое числоnи возвращает сумму его цифр. - В функции
mainобъявлены переменныеi,n,aиless10. - В цикле
do-whileпользователю предлагается ввести числоnне меньше 30. - После выхода из цикла
do-whileвыделяется память под массивaразмеромnс помощью функцииmalloc. - В комментариях представлен ручной способ заполнения массива
aзначениями, который был заменен на автоматический генератор случайных чисел с помощью функцииrand(). - С помощью функции
srandинициируется генератор случайных чисел. - В цикле
forзаполняется массивaслучайными числами от 0 до 99. - Каждое сгенерированное число выводится на экран с помощью функции
printf. - Переменная
less10инициализируется нулем и используется для подсчета количества чисел в массивеa, сумма цифр которых меньше 10. - В цикле
forпроисходит проверка каждого элемента массиваaи увеличение переменнойless10, если сумма цифр числа меньше 10. - Выводится количество чисел в массиве
a, сумма цифр которых меньше 10, с помощью функцииprintf. - Выделяемая память освобождается с помощью функции
free. - Запускается программа
pause, которая приостанавливает выполнение программы до нажатия клавиши.