9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
1

Принять целое число и вывести на экран в обратном порядке цифры этого числа

18.08.2015, 04:11. Показов 2435. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак. Программа принимает целое число и выводит на экран в обратном порядке цифры этого числа(например: число 1234 выводит 4, 3, 2, 1) Функция number() принимает это число, а функция table() возвращает массив цифр этого числа. Вопрос вот в чем. Для чего перед названием функции table() мы ставим знак указателя(т.е. int *table(int n))Что даёт этот указатель, зачем он нужен, почему он так необходим? Смысл его применения в данном случае или вообще? Удалил указатель. Проверил что будет. Программа как работала так и работает дальше, но компилируется со следующим warning'ом:
malloctab.c: In function ‘table’:
malloctab.c:28:1: warning: return makes integer from pointer without a cast [enabled by default]

Все же указатель перед названием функции нужен, но зачем вот в чем вопрос.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
#include<stdlib.h>
 
int number(){
float n;
        do{
        printf("Enter the integer number >0 and <100000\n"$
        scanf("%f",&n);
        }while(n<0 || n>100000 || n != (int)n);
 
return (int)n;
}
 
int *table(int n){//в данной строке, данный указатель
int p = n;
int i=0, j;
        while(p!=0){
        p=p/10;
        i++;
        }
int *tab = (int*)malloc(sizeof(int)*i);
j=i-1;
        while(n!=0){
        tab[j]=n%10;
        printf("%d, ", tab[j]);
        n=n/10;
        j--;
        }
return tab;
}
 
int main(){
int i;
 
printf("You number is %d\n",i=number());
table(i);
 
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2015, 04:11
Ответы с готовыми решениями:

Дано целое число. Вывести набор символов, содержащий цифры этого числа в обратном порядке.
&quot;Дано целое число. Вывести набор символов, содержащий цифры этого числа в обратном порядке.&quot; ...

Дано целое число. Вывести набор символов содержит цифры этого числа в обратном порядке
дано целое число. вывести набор символов содержит цифры этого числа в обратном порядке

Задано целое число. Вывести набор символов, содержащих цифры этого числа в обратном порядке
Условие: Задано целое число. Вывести набор символов, содержащих цифры этого числа в обратном...

Дано целое число. Вывести набор символов, содержащий цифры этого числа в обычном и обратном порядке
Дано целое число. Вывести набор символов , содержащий цифры этого числа в обычном и обратном...

5
Музыка нас Связала
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
18.08.2015, 10:20 2
Лучший ответ Сообщение было отмечено Aliaxandr как решение

Решение

Функция возвращает поинтер на int (int *) потому, что она аллоцировала ее в хипе (heap), а не в локальном пространстве функции.

C
1
int *tab = (int*)malloc(sizeof(int)*i);
Почему не в лок. пространстве, т.е. на стеке? Да потому, что при выходе из функции значения локальных переменных уничножаются и могут быть перезаписаны другими значениями.

Ну и да, возвращаем же tab, а это (int *).
1
601 / 364 / 67
Регистрация: 21.09.2008
Сообщений: 1,253
23.08.2015, 17:28 3
Цитата Сообщение от Fonduee Посмотреть сообщение
Функция возвращает поинтер на int (int *) потому, что она аллоцировала ее в хипе (heap), а не в локальном пространстве функции.
Транслирую на русский технический и дополняю ответ:
"Функция возвращает указатель на целое число int (int *) потому, что она разместила ее в куче (heap), а не в локальном пространстве функции (на стеке), которое разрушается при выходе из функции, если не указан модификатор static."
Не множьте сущности без необходимости в русском языке.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
35511 / 19988 / 4184
Регистрация: 12.02.2012
Сообщений: 33,154
Записей в блоге: 13
27.08.2015, 18:33 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdlib.h>
 
int rev(int n,int r)
{
    if (n==0)
       return r;
    else
       return rev(n/10,r*10+n%10);
}   
 
int main(int argc, char *argv[])
{
  int n;
  printf("n=");
  scanf("%d",&n);
  printf("r=%d\n",rev(n,0)); 
  system("PAUSE");  
  return 0;
}
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12239 / 7406 / 1736
Регистрация: 25.07.2009
Сообщений: 13,599
27.08.2015, 22:36 5
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(int argc, char ** argv) {
    int n = atoi(argv[1]);
    printf("%d", n % 10);
    if ( n > 9 ) {
        sprintf(argv[1], "%d", n / 10);
        main(argc, argv);
    }
    
    return 0;
}
Код
andrew@debppc:~/workspace/c/numbers$ gcc reverse_arg.c 
andrew@debppc:~/workspace/c/numbers$ ./a.out 12345
54321
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
35511 / 19988 / 4184
Регистрация: 12.02.2012
Сообщений: 33,154
Записей в блоге: 13
28.08.2015, 10:03 6
Занятно!
0
28.08.2015, 10:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2015, 10:03
Помогаю со студенческими работами здесь

Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа на лево).
Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа...

Дано целое число. Вывести набор символов, содержащий цифры этого числа в исходном1|обратном2 порядке
Дано целое число. Вывести набор символов, содержащий цифры этого числа в исходном1|обратном2...

Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева направо).
Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева...

Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа налево)
заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru