Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
ES_MO
0 / 0 / 1
Регистрация: 24.01.2015
Сообщений: 11
#1

Напечатать все нечетные числа от 150 до 20 - C (СИ)

07.02.2015, 16:04. Просмотров 1088. Ответов 20
Метки нет (Все метки)

Напечатать все нечетные числа от 150 до 20.
Как это можно реализовать без оператора If?
То есть условие в самой программе должно оставаться прежним.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
 
void main()
{
    int a;
    for (a = 150; a > 20; a--)
        
    {  
        if (a%2!=0)
        printf("%d\n",a);
    }
    system("pause");
}

http://www.cyberforum.ru/c-beginners/thread201234.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2015, 16:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Напечатать все нечетные числа от 150 до 20 (C (СИ)):

Перестроить односвязный список так, чтобы сначала стояли все нечетные числа, затем все четные
Построить линейный список из входной последовательности чисел. Перестроить его...

Создать файл целых чисел. За один просмотр файла вывести на экран сначала все четные числа, а потом все нечетные
Помогите пожалуйста написать программу. Создать файл целых чисел. За один...

Вывести на экран все нечетные числа в интервале от 20 до 35
Вывести на экран все нечетные числа, расположенные в промежутке от 20 до 35.

Удалить из натурального числа все нечетные цифры (цикл for)
Дано натуральное число. Удалить из него все нечетные цифры. Вот код: ...

Из файла F в текстовый файл скопировать все нечетные числа
прошу написать программу с помощью функций. В типизированный файл F с помощью...

20
Yan12_04
30 / 30 / 35
Регистрация: 05.11.2014
Сообщений: 117
07.02.2015, 16:17 #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
 
void main()
{
int a = 151;
for (int i = 74; i >= 0; i--)
 
{ 
    a=a-2;
printf("%d\n",a);
}
system("pause");
}
0
ES_MO
0 / 0 / 1
Регистрация: 24.01.2015
Сообщений: 11
07.02.2015, 16:28  [ТС] #3
Спасибо, но это не то
1. Она открывает числа со 149 до 1, а не до 20. Но это ладно
2. Условие конкретно изменено.
Нужно чтобы в целом это условие
Цитата Сообщение от ES_MO Посмотреть сообщение
for (a = 150; a > 20; a--)
оставалось прежним
изменение должно быть внутри и именно это не понимаю, как сделать )
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:30 #4
if конечно останеться , но как вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
 
void main()
{
    int a;
    for (a = 150; a > 20; a--)
        
    {  
        if (a & 1 != 0)
        printf("%d\n",a);
    }
    system("pause");
}
0
ES_MO
0 / 0 / 1
Регистрация: 24.01.2015
Сообщений: 11
07.02.2015, 16:33  [ТС] #5
В этом и проблема. Нужно без if )
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:36 #6
Лучший ответ Сообщение было отмечено ES_MO как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
 
void main()
{
    int a;
    for (a = 150; a > 20; a-=2)
    {
            printf("%d\n", a-1);
    }
    system("pause");
}
Не знаю сработает нет, но придеться поменять условие шага на a-=2, или можно условие оставить вообще прежним и написать так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
 
void main()
{
    int a;
    for (a = 150; a > 20; a--)
    {
            printf("%d\n", a-1);
            a--;
    }
    system("pause");
}
1
Jewbacabra
Эксперт PHP
3089 / 2676 / 1222
Регистрация: 24.04.2014
Сообщений: 8,188
07.02.2015, 16:37 #7
Лучший ответ Сообщение было отмечено ES_MO как решение

Решение

C
1
2
3
4
5
for (a = 150; a > 20; a--)
        
    {  
        printf("%d\n",--a);
    }
2
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:39 #8
Jewbacabra, Хороший вариант
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
07.02.2015, 16:39 #9
Цитата Сообщение от obivan Посмотреть сообщение
Не знаю сработает нет
а зачем так сложно?
C++
1
2
for (a = 149; a > 20; a-=2)
   printf("%d\n", a);
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:40 #10
ValeryS, вообще цель не менять условие, а там я это правило нарушил, да и пишу первое что придет в голову
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
07.02.2015, 16:42 #11
Цитата Сообщение от ES_MO Посмотреть сообщение
Нужно чтобы в целом это условие
for (a = 150; a > 20; a--)
где это ???
Цитата Сообщение от ES_MO Посмотреть сообщение
Напечатать все нечетные числа от 150 до 20.
150 это разве нечетное?
ближайшее нечетное 149
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:44 #12
Цитата Сообщение от ValeryS Посмотреть сообщение
150 это разве нечетное?
ближайшее нечетное 149
Я думаю что задание заключаеться как раз в том чтобы напечатать нечетные числа, лежащие строго в диапозоне от 150 до 20
0
ES_MO
0 / 0 / 1
Регистрация: 24.01.2015
Сообщений: 11
07.02.2015, 16:45  [ТС] #13
ааа, вот это сработало ))) огромное спасибо )
не додумалась сама )
это правильно, цель - не менять основное условие: for (a = 150; a > 20;

Цитата Сообщение от obivan Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <windows.h>
void main()
{
* * int a;
* * for (a = 150; a > 20; a-=2)
* * {
* * * * * * printf("%d\n", a-1);
* * }
* * system("pause");
}
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 16:47 #14
Цитата Сообщение от ES_MO Посмотреть сообщение
это правильно, цель - не менять основное условие: for (a = 150; a > 20;
Ну вам там еще отправили пару вариантов лучше чем этот у Jewbacabra, самый лучший на мой взгляд
0
ES_MO
0 / 0 / 1
Регистрация: 24.01.2015
Сообщений: 11
07.02.2015, 16:51  [ТС] #15
Да да, я уже просмотрела все. Просто Ваш первый был )
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
07.02.2015, 17:11 #16
Цитата Сообщение от obivan Посмотреть сообщение
Я думаю что задание заключаеться как раз в том чтобы напечатать нечетные числа, лежащие строго в диапозоне от 150 до 20
ну и ??? ближайшее 149, лежит в диапазоне
могу вот так
любой диапазон
C
1
2
3
4
5
6
int max,min;
int i;
scanf("%d %d",&min,&max);
 
for(i=max-(max%2==0);i>min-(min%2!=0);i-=2)
  printf("%d ",i);
могу так
C
1
2
3
4
5
6
7
int max,min;
int i;
scanf("%d %d",&min,&max);
 
for(i=max ;i%2==0;i--)
for(i;i>min-(min%2!=0);i-=2) 
 printf("%d ",i);
конкретно для данных цифр
C
1
2
3
for(i=150;i%2==0;i--);
for(;i>20;i-=2) 
 printf("%d ",i);
Добавлено через 15 минут
а можно вообще вот так
заменить if циклом
C
1
2
3
4
5
6
for(i=150;i>20;i--)
{
  while(i%2==0)
       i--;
 printf("%d ",i);
}
тоже с for
C
1
2
3
4
5
for(i=150;i>20;i--)
{
  for(;i%2==0;i--);
 printf("%d ",i);
}
можно switch
C
1
2
3
4
5
6
7
8
9
10
for(i=150;i>20;i--)
{
  switch(i%2)
  {
    case 1: 
     printf("%d ",i);
     break;
   default:
   } 
}

Цитата Сообщение от ES_MO Посмотреть сообщение
Как это можно реализовать без оператора If?
может это на знание оператора ?(тернарный оператор)?

C
1
2
3
4
   for (i= 150; i > 20; i--)
        {  
        i%2==0?continue: printf("%d\n",i);
         }
1
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
07.02.2015, 18:03 #17
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и ??? ближайшее 149, лежит в диапазоне
могу вот так
любой диапазон
Ну это понятно, что можно и так и сяк, но к чему такие сложности Почти уверен что тот вопрос был на защиту лабараторной и нужно было показать как справиться без if-ов, switch и циклы думаю тоже нельзя было бы добавлять, могу согласиться что не очень четко поставлена задача и из-за этого есть много вариантов решения, но все же автор получил то что хотел, а все остальное это крайности
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
07.02.2015, 18:22 #18
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void) {
    int i;
    
    for ( i = 150; i > 20; --i )
        ( i & 1 && printf("%d\n", i) );
    
    return 0;
}
2
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
07.02.2015, 18:27 #19
Ну можно написать такое извращение:
C++
1
2
3
4
switch (a%2)
{
 case 1: printf("%d\n",a);
}
. Вот только к принтеру то принтф всё равно не достучится.
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
07.02.2015, 19:17 #20
Цитата Сообщение от obivan Посмотреть сообщение
но все же автор получил то что хотел,
кроме автора еще кучу народу прочтет, может возьмет что то для себя
у easybudda, оригинальное решение, жаль я не додумался, кто не знает тонкостей, не поймет
0
07.02.2015, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2015, 19:17
Привет! Вот еще темы с решениями:

Вывести все нечетные числа из последовательности, сохраняя их порядок
Дана последовательность натуральных чисел (одно число в строке), завершающаяся...

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

Записать в файл g все четные числа файла f, а в файл h-все нечетные.
Дан файл f, компоненты которого являются целыми числами. Записать в файл g все...

Вывести все нечетные числа из последовательности натуральных чисел, сохраняя их порядок
6. Дана последовательность натуральных чисел (одно число в строке),...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru