Прочитайте улучшенную версию этого урока "Цикл со счётчиком for".
В новой версии:
- Ещё более доступное объяснение
- Дополнительные материалы
- Задачи с автоматической проверкой решения
Вот и подошло время очередного занятия. Одно занятие было мной пропущено, из-за важных дел, я хотел его восстановить в течении недели, но навалились другие проблемы и мне не удалось этого сделать. Уж извините, всё предусмотреть невозможно. Сегодняшнее занятие будет посвящено новой управляющей конструкции. Сам того не подозревая, подбираю практические задачи для прошлого урока, я очень выгодно выбрал задачу с коровами, и дело вот в чем. Обычно, когда происходит изучение языка программирования не сразу понятно зачем и что нужно. И бывает достаточно сложно привести хороший пример. Можно конечно просто словами сказать, для чего предназначена та или иная конструкция. Но человеку гораздо понятнее, когда он сам увидел, и так сказать "пощупал", "поковырял" какой-то механизм. Еще Конфуций говорил "То, что я слышал, я забываю. То, что видел, я помню. То, что я делал сам, я понимаю". Теперь вернемся к нашей задаче с коровами. Естественно мне надо было её как-то проверять. Нужно было ввести все значения от 0 до 99 и посмотреть какой результат программа выдает. Всё это можно было-бы сделать вручную, но это крайне не продуктивно.Представьте, сколько времени уйдет, чтобы проверить одну программу. Вот именно здесь мне и пригодилась циклическая конструкция. Циклическая конструкция предназначена для того, чтобы выполнять какую-то последовательность действий несколько раз. В нашем случае для того чтобы 100 раз запустить одну и ту же программу с разными входными данными. Надеюсь общее назначение циклов и польза от их применения вы осознали, теперь можно приступить непосредственно к изучению.
Циклическая конструкция for. (Цикл for)
В языке Си несколько циклических конструкций. Сегодня мы познакомимся с одной из них, а именно циклом for. Его ещё называют цикл со счетчиком. Он чаще всего используется, когда нужно повторить заданное действие известное число раз.
Сначала посмотрим на формат цикла for. Он выглядит следующим образом:
Листинг 7.1:
for (инициализация счетчика; условие; изменение счетчика)
оператор;
Теперь опишем словесно как работает эта инструкция. Цикл for состоит как бы из двух частей: заголовка (первая строка) и тела цикла (вторая строка).
Сначала разберемся с заголовком. После слова for, в скобках, записаны три выражения.
- Первое выражение - инициализация счетчика.
Мы должны завести переменную-счетчик и присвоить ей начальное значение.Например:
Листинг 7.2.
for (i=0;...;...)
или
for (j=13;...;...)
- Второе выражение - условие.
Здесь записано условие при котором будет выполняться тело цикла. Т.е. цикл будет работать пока условие истинно. Например:
Листинг 7.3.
for (i=0; i<10; ...)
или
for (d=-100; d<=0; ...)
- Третье выражение - изменение счетчика.
Здесь записывается как изменяется переменная-счетчик после каждого выполнения тела цикла. Например:
Листинг 7.4.
for (i=0; i<10; i++)
или
for (d=-100; d<=0; d+10)
Теперь немного поговорим о теле цикла. Тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else, применяется составной оператор {...}.
Опишем работу цикла for словами и потом перейдем к рассмотрению практических примеров.
- Когда программа встречает слово for она понимает что перед ней цикл.
- Сначала определяется переменная счетчик (выражение 1).
- Проверяется условие выполнение цикла (выражение 2)
- Если условие ложно, то программа выходит из цикл for и продолжает свое выполнение. Т.е. если в самом начале условие будет ложно, то тело цикла не выполнится ни одного раза.
- Если условие истинно, то начинает выполняться тело цикла.
- После того как тело цикла выполнится, программа возвращается к заголовку и выполняет изменение значение переменной-счетчика (выражение 3).
- После этого возвращаемся к пункту два, и все действия повторяются до тех пор, пока условие не станет ложным.
Для лучшего понимаю работы циклической конструкции for разберем сначала простейший пример, а потом вернемся к нашей задачке с коровами.
Пусть нам надо посчитать сумму 10 чисел введенных пользователем с клавиатуры.
Такая программа будет выглядеть следующим образом:
Листинг 7.5.
#include <stdio.h>
int main(void){
int i,summ=0, temp=0;
for (i=0;i<10;i++){
printf("\nVvedite
chislo: ");
scanf("%d",&temp);
summ+=temp;
}
printf("Summa vvedennih chisel
= %d\n",summ);
return(0);
}
Теперь распишем по пунктам как работает наша программа.
Начнем с 4 строки, всё остальное вам уже должно быть ясно после ознакомления с предыдущими уроками.
- Переменная i счетчик и ей присваивается значение 0.
- Проверяется условие i<10. Оно истинно, значит выполняется тело цикла: выводится надпись, пользователь вводит число и оно прибавляется к переменной summ. Тело цикла заканчивается программа возвращается к заголовку.
- Программа выполняет выражение i++, изменяет значение переменной счетчика, в нашем случае увеличивает i на единицу. Теперь i = 1.
- Снова проверяется условие, i<10. Оно опять истинно. Снова выполняется тело цикла и происходит изменение переменной счетчика. И процесс повторяется.
- Потом, через несколько шагов значение i после изменения выражения счетчика становится равным 10. Проверяется условие. Оно ложно. Программа выходит из цикла и продолжает свое выполнение. В нашем случае выводит на экран значение переменной summ.
На рисунке представлен результат работы этой программы:
![]() |
Припер работы программы с циклом for. |
Ну а теперь напишем программу для проверки задания с коровами.
Изначально имеется программа (код юзера Dispose, с моими небольшими изменениями):
Листинг 7.6
Нам нужно проверить эту программу. Смотрим что количество коров задается в переменной n. Именно её и возьмем в качестве переменной счетчика. начальное значение у нас 0 конечное 99 . С каждым шагом значение изменяется на 1 Значит заголовок будет выглядеть следующим образом:
Листинг 7.7
for(n=0,n<=99,n++)
Теперь из исходной программы удалим строчки, где просится ввести число n и строку, где введенное число считывается в переменную n. Также добавим туда наш заголовок и возьмем оставшуюся часть программы в фигурные скобки. Получим следующий код:
Листинг 7.8.
Если теперь запустить нашу полученную программу то можно посмотреть, какое окончание прибавляет программа к какому количеству коров.
Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы.И опять же советую вам использовать в теле цикла составной оператор.
На этом на сегодня всё.
Резюме урока:
Листинг 7.6
#include <stdio.h>
int main(void)
{
int n,b;
printf("Vvedite chislo ot 1 do 100: ");
scanf("%d", &n);
if(n>=11&&n<=14)
{
printf("Na lugu pasetsya %d korov \n", n);
}
else
{
b=n%10;
if(b==1) printf("Na lugu pasetsya %d korova \n", n);
if(b>=2&&b<=4) printf("Na lugu pasetsya %d
korovy \n", n);
if(b>=5&&b<=9) printf("Na lugu pasetsya %d
korov \n", n);
if(b==0) printf("Na lugu pasetsya %d korov \n", n);
}
return(0);
}Нам нужно проверить эту программу. Смотрим что количество коров задается в переменной n. Именно её и возьмем в качестве переменной счетчика. начальное значение у нас 0 конечное 99 . С каждым шагом значение изменяется на 1 Значит заголовок будет выглядеть следующим образом:
Листинг 7.7
for(n=0,n<=99,n++)
Теперь из исходной программы удалим строчки, где просится ввести число n и строку, где введенное число считывается в переменную n. Также добавим туда наш заголовок и возьмем оставшуюся часть программы в фигурные скобки. Получим следующий код:
Листинг 7.8.
#include <stdio.h>
int main(void)
{
int n,b;
for(n=0;n<=99;n++)
{
if(n>=11&&n<=14)
{
printf("Na lugu pasetsya %d korov
\n", n);
}
else
{
b=n%10;
if(b==1)
printf("Na lugu pasetsya %d korova
\n", n);
if(b>=2&&b<=4) printf("Na
lugu pasetsya %d korovy \n", n);
if(b>=5&&b<=9) printf("Na
lugu pasetsya %d korov \n", n);
if(b==0)
printf("Na lugu pasetsya %d korov
\n", n);
}
}
return(0);
}
Если теперь запустить нашу полученную программу то можно посмотреть, какое окончание прибавляет программа к какому количеству коров.
![]() |
Иллюстрация работы программы листинг 7.8 |
Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы.И опять же советую вам использовать в теле цикла составной оператор.
На этом на сегодня всё.
Резюме урока:
- Посмотрели на примерах для чего используются в программировании циклы.
- Изучили циклическую конструкцию for.
Задания для практической работы:
- На вход поступает четыре целых числа a,b,c,d. Выведите все числа на отрезке от a до b, дающие остаток c при делении на d.
- На вход программе подается число N. Напишите программу, для вычисления произведения всех чисел от 1 до N (N! N-факториал). По условию N не больше 10.
- На вход программе подается два числа.Первое сумма двух неизвестных чисел х и у, а второе произведение х и у. По двум введенным числам, найти х и у. х и у не превосходят 1000.
- На вход программе подается одно положительное число N, которое по не превосходит 10000. Написать программу которая выводит одно единственное число равное сумме чисел от 1 до N.
Видимо для for сложно какое либо задание придумать...
ОтветитьУдалитьСуета, мой милый друг, суета.=) Всё будет, обязательно.
УдалитьДобрый день!
ОтветитьУдалить"Напоследок хочу заметить что тело цикла может содержать в себе другие циклы, т.е. могут быть вложенные циклы."
процитировал Ваши выкдадки. А если без вложенных циклов не обойтись?
Нам задали вот такую задачу: надо построить равнобедренный треугольник из символов *.число строк вводит пользователь.я не прошу написать программу, а просто схематически объяснить синтаксис построения 3-х составного for.
Задание №4:
ОтветитьУдалить#include
int main(void)
{
int N=0, summa=0,i=0;
printf("Vvedite chislo: ");
scanf("%i", &N);
if ((N<10000) && (N>-10000))
{
for (i=0; i<=N; i=i+1)
{
summa+=i;
}
printf("Summa ravna: %i\n", summa);
}
else
{
if (N>10000)
{printf("Chislo bolshe 10000\n");}
if (N<-10000)
{printf("Chislo menshe -10000\n");}
}
return(0);
}
Правда с некоторыми модификациями :)
Владимир.
ОтветитьУдалитьЗдравствуйте. Решение 1 задачи.
#include
int main()
{
int a,b,c,d,i;
printf("Vvedite chetyre chisla\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
if(ab){
for(i=a;i>b;i--)
if(i%d==c) printf("%d\n",i);
}
return 0;
}
Код такой же но программа не работает, почему??????????
Удалитьтакой код и не будет работать, в условии if написана чушь ведь. наверное не все символы вставились.
УдалитьZadanije N2
ОтветитьУдалить#include (stdio.h)
int main(void)
{
int a, c, n, f;
printf("Vvedite celoje chislo do 10:");
scanf("%d", &a);
if (a==0)
{
printf("%d!=1\n", a);
}
else
{
c=a;
f=a;
if (a<=10)
{
for (n=1;n<a;n++)
f=f*(c=c-1);
printf("Faktorial chisla %d!= %d\n", a, f);
}
else
printf("Chislo dolzno bitj ne boljshe 10!!!\n");
}
return(0);
}
Zadanije N3
ОтветитьУдалить#include (stdio.h)
int main(void)
{
int x, y, a, b;
printf("Vvedite 2 chisla: \n");
scanf("%d %d", &a, &b);
{
for (x=1;x<=1000;x++)
{
for (y=1;y<=1000;y++)
{
if ((a==x+y) && (b==x*y))
{
printf("x=%d y=%d\n", x, y);
}
}
}
}
return(0);
}
//Первая задача
ОтветитьУдалить#include;
int main(void)
{
int a,b,c,d,p,i;
//float i;
printf("Vvedite chetyre chisla: \n");
scanf("%d%d%d%d",&a,&b,&c,&d);
for(i=a;i<=b;i++)
{
p=i%d;
if((p==c)&&(i>d)) printf("%d\n",i);
}
return(0);
}
//Вторая задача
ОтветитьУдалить#include;
int main(void)
{
int N,i,p=1;
printf("Vvedite chislo N ot 1 do 10: \n");
scanf("%d",&N);
for(i=1;i<=N;i++)
{
p=p*i;
}
printf("\n%d\n",p);
return(0);
}
//Третья задача
ОтветитьУдалить#include
#include
int main(void)
{
int c1,c2,x,y;
printf("Vvedite dva chisla cherez probel:\n");
scanf("%d%d",&c1,&c2);
for(x=1;x<=c2;x++)
{
for(y=1;y<=c2;y++)
{
if(((x*y)==c2)&&((x+y)==c1))
{
printf("X=%d Y=%d\n",x,y);
return(0);
}
}
}
printf("Net otveta\n");
return(0);
}
//Четвертая задача
ОтветитьУдалить#include
int main(void)
{
int N,i,s=0;
printf("Vvedite chislo N v intervale ot -10000 do 10000:\n");
scanf("%d",&N);
if(N<0)
{
N*=(-1);
for(i=1;i<=N;i++)
{
s=s+i;
}
s=s-1;
printf("Summa=%d\n",-s);
}
else
{
for(i=1;i<=N;i++)
{
s=s+i;
}
printf("Summa=%d\n",s);
}
return(0);
}
Задание №2
ОтветитьУдалить#include
int main()
{
int n, x, xfact=1;
printf("Vvedite tseloye chislo x<=10\n");
scanf("%d", &x);
for(n=1; n<=x; n++)
{
xfact*=n;
}
printf("x!=%d\n", xfact);
}
#include
ОтветитьУдалитьint main()
{
Задание №4
int n, N, Nsumm=0;
printf("Vvedite tseloye chislo N<=10000\n");
scanf("%d", &N);
for(n=1; n<=N; n++)
{
Nsumm+=n;
}
printf("Summa chisel ot 1 do N %d\n", Nsumm);
}
Задание №3
ОтветитьУдалитьВариант 1
#include
#include
int main()
{
float a, b, x, y;
printf("Vvedite dva chisla a(summa), b(proizvedeniye)\n");
scanf("%f%f", &a,&b);
if((a*a)<(4*b))
printf("takih x,y net\n");
else
{
x=0.5*(a+sqrt(a*a-4*b));
y=0.5*(a-sqrt(a*a-4*b));
printf("%f %f\n", x, y);
}
}
Вариант 2
#include
int main()
{
float a, b, x, y;
printf("Vvedite dva chisla a(summa), b(proizvedeniye)\n");
scanf("%f%f", &a,&b);
for(x=1;x<=1000;x++)
{
y=a-x;
if(y==(b/x))
{
printf("%f %f\n", x, y); break;
}
}
}
Но второй вариант выдаёт только те решения, когда одно из чисел целое...
Что такое summ и temp? и в каком уроке про них рассказывалось?
ОтветитьУдалитьЭто просто названия переменных. Переменные можно называть так, как тебе удобно. Для компа нет разницы что переменная "а", что "summ".
УдалитьБольшое спасибо, все очень нравится, читаю и занимаюсь с удовольствием) Автор молодца!
ОтветитьУдалитьСпасибо, мне приятно. )
Удалить#include
ОтветитьУдалитьint main()
{
int N,i,summ=0;
printf("vvedite chislo N<10000\n");
scanf("%d",&N);
if(N<10000)
{
for(i=1;i<=N;i++)
summ+=i;
printf("summa chisel ot 1 do %d ravna %d\n",N,summ);
}
else
printf("Error");
return 0;
}
Хорошо! )
УдалитьЗадание 1
ОтветитьУдалить#include
int main()
{
int a,b,c,d,i,e;
printf("vvedite 4 chisla cherez probel\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
if (d==0) printf ("error");
else
{
if (a>b)
{
i=b;
b=a;
a=i;
}
for(i=a;i<=b;i++)
{
e=i;
e%=d;
if (e==c) printf (" %d ",i);
}
printf ("\n");
}
return(0);
}
вроде работает...
У меня почему-то часто пишет предупреждение :warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.Когда меняешь scanf на scanf_s предупреждений нет.В чем сдесь дело?
Заранее спасибо!
Ну функция scanf считается устаревшей типа и небезопасной.Поэтому компилятор предлагает вам её улучшенный аналог. Не обращайте внимания, на данном этапе это не важно.)
УдалитьЗадание 2
ОтветитьУдалить#include
int main()
{
int a,b=1,i;
printf("vvedite celoe chislo N ne bolee 10 \n");
scanf("%d",&a);
if ((a>10)||(a<0)) printf ("error\n");
else
{
for(i=1;i<=a;i++)
{
b*=i;
}
printf ("N!=%d\n",b);
}
return(0);
}
Да, правильно.
УдалитьЗадание 3
ОтветитьУдалить#include
#include
int main()
{
float a,b,d,x,y;
printf("vvedite dva chisla cherez probel \n");
scanf("%f %f",&a,&b);
if ((a>2000) ||( b>1000000)) printf (" error\n");
else
{
d=(a*a)-(4*b);//D уравн х*х - a*x +b=0
if (d<0)
printf("no solution\n");
else
{
x=(a+sqrt(d))/2;
y=a-x;
printf("X=%f\tY=%f\n", x,y);
}
}
return(0);
}
тока у меня сдесь циклов не случилось....
Хорошо, мне нравится. Особенно трюк с вычитанием из а. )))
Удалитьзадание 4
ОтветитьУдалить#include
int main()//summa
{
int a,b,c=0;
printf("vvedite natural'noe chislo N < 10000 \n");
scanf("%d",&a);
if ((a>10000)||(a<1)) printf ("error\n");
else
{
for (b=1;b<=a;b++)
{
c+=b;
}
printf("%d\n",c);
}
Как же вы не заметили арифметическую прогрессию тут? ))) А так все в порядке. ))
Удалить#include "stdio.h"
ОтветитьУдалитьint main()
{
int a,b,x,y,i;
scanf("%i %i",&a,&b);
for (i=1; i<=a; i++)
{
x=i;
y=a-x;
if (x*y==b) printf("%i %i\n",x,y);
}
return(0);
}
3-я задача
УдалитьА можете изменить программу так, чтобы числа выводились только один раз?
УдалитьИ кстати, для пары -4 0 программа не работает. Это плохо. Стоит подумать и исправить это.
УдалитьЗадание 1:
ОтветитьУдалить#include"stdio.h>"
#include"iostream"
int main()
{
setlocale(LC_ALL,"RUS");
int a,b,c,d,e,f;
printf("Введите число - начало ряда:\n");
scanf("%d",&a);
printf("Введите число - конец ряда:\n");
scanf("%d",&b);
printf("Введите число - делитель:\n");
scanf("%d",&c);
printf("Введите число - искомый остаток от деления числа из ряда:\n");
scanf("%d",&d);
for (e=a;e<=b;e++)
{
f=e%c;
if ((f==d)&&(e>d))
printf("Остаток от деления %d на %d равен %d\n",e,c,d);
}
system("pause");
return (0);
}
Если хотите, чтобы я проверял код, соблюдайте пожалуйста формат ввода и вывода. =))
УдалитьЗадание 2:
ОтветитьУдалить#include"stdio.h>"
#include"iostream"
int main()
{
setlocale(LC_ALL,"RUS");
int a,b,c,d,e,f;
printf("Введите число - начало ряда:\n");
scanf("%d",&a);
printf("Введите число - конец ряда:\n");
scanf("%d",&b);
printf("Введите число - делитель:\n");
scanf("%d",&c);
printf("Введите число - искомый остаток от деления числа из ряда:\n");
scanf("%d",&d);
for (e=a;e<=b;e++)
{
f=e%c;
if ((f==d)&&(e>d))
printf("Остаток от деления %d на %d равен %d\n",e,c,d);
}
system("pause");
return (0);
}
Не то :)
УдалитьЗадание 2:
#include"stdio.h>"
#include"iostream"
int main()
{
setlocale(LC_ALL,"RUS");
int nN,a,summ=1,fak;
printf("Введите число от 1 до 10:\n");
scanf("%d",&nN);
if ((nN<1)||(nN>10))
{
printf("Неверное число\n");
system("pause");
return(0);
}
else
for (a=1;a<=nN;a++)
{
summ=summ*a;
}
printf("Факториал числа %d=%d\n",nN,summ);
system("pause");
return(0);
}
С факториалом верно, только много всего лишнего.
УдалитьИ вот еще. Если ыы хотите использовать переменную a в цикле, так и объявляйте её прямо там. Так как она объявлена у вас, она создается и занимает память все время работы программы. Тут это не критично, но все равно, лучше сразу привыкать к хорошему. )
Переделал код юзера "обморк" добавив цикл и отрицательные числа, они ведь тоже могут быть введены. Получилось не рационально зато работает.
ОтветитьУдалить#include "stdio.h"
#include "math.h"
int main ()
{
float x, y, b;
float a, D;
printf ("\t Vvedite chisla a b chtoby a=x+y, b=x*y \n");
scanf ("%f %f", &a, &b);
D=pow( a, 2)-4*b;
for(x=-999; x<1000; x++)
{
for(y=-999; y<1000; y++)
{
if ((x==(a+sqrt(D))/2) && (y==a-x))
{
printf ("\t ili \n\t x=%.0f \n", x);
printf ("\t y=%.0f \n" ,y);
}//if+
if ((x==(a-sqrt(D))/2) && (y==a-x))
{
printf ("\t x=%.0f \n", x);
printf ("\t y=%.0f \n" ,y);
}//if -
}//for y
}//for x
}//main
Думаю Вы намудрили. Код обморока, был основан на применении теоремы Виета. Он работал и для отрицательных чисел. Или я что-то не заметил, тогда приведите пример, когда его программа не работает. =))
УдалитьПервое задание:
ОтветитьУдалить#include "stdio.h"
int main ()
{
int a, b, c, d, x, y, z, n_c_ne_ravno_y=2;
printf ("\t vvedite 4 celih chisla \n");
scanf ("%i %i %i %i", &a, &b, &c, &d);
for (x=a; x<=b; x++)
{
y=x%d;
if (c==y)
{
n_c_ne_ravno_y=1;
printf ("%i \n", x);
}
}
if (n_c_ne_ravno_y != 1) printf ("\t malenikii orezok a b.\n") ;
return (0);
}
Замучился выводить " malenikii orezok a b." Вроде работает правильно.
Хорошо. Только не нужно было это выводить. Если таких чисел нет, по каким либо причинам, то программа должна просто завершить работу. )
УдалитьДобрый день.
ОтветитьУдалить7-2
int main()//summa
{
int a,b,c=0;
printf("vvedite natural'noe chislo N < 10000 \n");
scanf("%d",&a);
if ((a>10000)||(a<1)) printf ("error\n");
else
{
for (b=1;b<=a;b++)
{
c+=b;
}
printf("%d\n",c);
}
7-3
int main()
{
int a,b,i,j;
printf("Vvedite dva celih chisla\n");
scanf("%d %d", &a, &b);
for (i=1;i<b;i++)
for (j=1;j<b;j++)
{
if ((a==i+j)&&(b==i*j))
printf("\n%d %d\n",i,j);
}
return 0;
}
7-4
int main()
{
int N,i,b=0;
printf("vvedite chislo N ot 1 do 1000\n");
scanf("%d",&N);
for (i=0;i<=N;i++)
{
b+=i;
}
printf("%d",b);
return 0;
}
7-2 не понял что это.
Удалить7-3 не правильно. =) Например: ввожу 2 1 ответ 1 1, а ваша программа ничего не выводит.
7-4 Делаете один лишний шаг - первый. прибавляете нуль.=) А так хорошо.
И еще вопрос, почему вы не используете объявление переменной-счетчика внутри цикла, а объявляете её в самом начале?
7-2 вот правильная
Удалитьint main()
{
int a, i, proiz=1;
printf("Vvedite chislo ot 1 do 10\n");
scanf("%d",&a);
if ((a<1) || (a>10)) printf("ERROR\n");
else
for(i=1;i<=a;i++)
{
proiz*=i;
printf("Factorial vachego chisla raven %d\n", proiz);
}
return (0);
}
7-3 исправил
int main()
{
int a,b,i,j;
printf("Vvedite dva celih chisla\n");
scanf("%d %d", &a, &b);
for (i=0;i<=b;i++)
for (j=0;j<=b;j++)
{
if ((a==i+j)&&(b==i*j))
printf("\n%d %d\n",i,j);
}
return 0;
}
А по поводу объявления переменной-счетчика не понял, Надо перед for ee объявлять?
7-2 хорошо
Удалить7-3 правильно, но не оптимально. Можно сделать попроще. Сейчас вы перебираете b*b вариантов, подумайте как можно сократить это число используя тот факт, что сумма чисел должна давать a.
Про цикл.
Ошибки тут нет, но так уже не программируют. Переменную можно объявить и инициализировать прямо внутри цикла.Пример по ссылке: http://pastebin.ru/tM8rrpVE
Задание №1
ОтветитьУдалить#include
int main(void)
{
int a,b,c,d,ost,i;
printf("Vvedite chisla a,b,c,d cherez probel:");
scanf("%i %i %i %i",&a,&b,&c,&d);
printf("Proverka %i %i %i %i",a,b,c,d);
for(i=a;i<=b;i++)
{
ost=i%d;
if(ost == c) printf("\n%i chislo s ostatkom %i",i,ost);
}
return 0;
}
Vvedite chisla a,b,c,d cherez probel:1 10 2 3
УдалитьProverka 1 10 2 3
2 chislo s ostatkom 2
5 chislo s ostatkom 2
8 chislo s ostatkom 2
Это вот результат работы вашей программы. А я хочу, чтобы экран выглядел вот так
1 10 2 3
2 5 8
Это называется формат выходных данных. =)) А так, все хорошо.
Не понял, а как у Eugene Fessplay, программа без работает? Попробовал у меня только с ней работает.
ОтветитьУдалитьstdio.h почему-то не вывелась
УдалитьКак у Eugene программа работает без stdio.h. Пробовал без нее не пашит
УдалитьПочитайте F.A.Q
УдалитьЗадача 1
ОтветитьУдалить#include
int main(void)
{
int a, b, c, d;
printf("Vvedite 4 celih chisla cherez probel, primer 5 9 151 10\n");
scanf("%i %i %i %i", &a, &b, &c, &d);
for(a; a<=b; a++) {
if (c==a%d)
printf("%i\n", a);
}
return (0);
}
Да, все верно.
УдалитьЗадача 2
ОтветитьУдалить#include
int main(void)
{
int a, b=1, c;
printf("Vvedite chislo ot 1 do 10\n");
scanf("%i", &a);
if (a<=0||a>10)
printf("ERROR\n");
else {
if (a==1)
printf("%i!=%i\n", a, a);
else {
for(c=1; c<=a; c++) {
b*=c;
printf("%i!=%i\n", a, b);
}
}
}
return (0);
}
Задание 1:
ОтветитьУдалить#include
int main(){
int a, b, c, d, N;
printf ("Задача найти число от a до b при деление на d даёт c результат\na=");
scanf ("%d",&a);
printf ("b=");
scanf ("%d",&b);
printf ("d=");
scanf ("%d",&d);
printf ("c=");
scanf ("%d",&c);
for (a;a<=b;a++){
N=a/d;
if (N==c){
printf ("Возможно при a=%d\n",a);}}
return 0;}
Как-то не так работает эта программа. ввожу 1 10 1 2
УдалитьХочу получить 1 3 5 7 9
Но ваша программа делает что-то другое. И соблюдайте пожалуйста формат ввода и вывода.
Задание 3:
ОтветитьУдалить#include
int main(){
float a;
int b, x, y;
printf ("Задача:найти x и y\nx и y должны быть целыми числами\nx*y:");
scanf ("%f", &a);
printf("x+y:");
scanf ("%d", &b);
if (a>=1000000 || b>=2000){
printf("Ошибка:x*y > 10^6 или x+y >2000 ");}
else {
for(x=1;x<=b;x++){
y=b-x;
if(x*y==a){
printf("X=%d Y=%d\n", x, y);}}}
return 0;}
int a,b,c,d,i,x;
ОтветитьУдалитьprintf ("Vvedite 4 chisla: ",a,b,c,d);
scanf ("%d %d %d %d",&a,&b,&c,&d);
for(i=a; i<=b; i++);
{
x=i%d;
if (x==c) printf (" %d ",x);
}
}
getch();
Задание 1 почему-то не работает так, как надо :с
Мой комментарий.
ОтветитьУдалитьЗадание 2
Удалить#include
int main()
{
int a,i,y=1;
scanf("%d",&a);
for(i=1;i<=a;i++)
y=i*y;
printf("%d\n",y);
}
про коров не совсем верно показывает с циклом for
ОтветитьУдалитьВ чем проблема?
УдалитьЗадание 3
ОтветитьУдалить#include
#include
int main(void)
{
float c, b, d, x, y;
printf("Vvedite summu chisel x i y\n");
scanf("%f", &b);
printf("Vvedite proizvedrnie chisel x i y\n");
scanf("%f", &c);
if((b>1000)||(c>1000))
{
printf("CHISLA MENSHE 1000!!!!!!\n");
}
else
{
d=b*b-4*c;
x=((b+sqrt(d))/2);
y=((b-sqrt(d))/2);
printf("Pervoe chislo ravno %f\nVtoroe chislo ravno %f\n", x, y);
}
return(0);
}
Библиотеки stdio.h и math.h не отобразились(((
УдалитьЗадание 4
ОтветитьУдалить#include
int main (void)
{
unsigned int N, i, sum=0;
printf("Vvedite chislo ot 1 do 10 000\n");
scanf("%d", &N);
if(N<=10000)
{
for(i=0;i<=N;i++)
{
sum+=i;
}
printf("Summa chisel ot 1 do %d ravna %d\n", N, sum);
}
else
printf("error\n");
return(0);
}
Задание 4 (так тоже можно или только с помощью for?)
ОтветитьУдалить#include
int main (void)
{
int d,n,n1,summ;
scanf("%d",&n);
d=1;
n1=1;
summ=((2*n1+d*(n-1))/2)*n;
printf("summa chisrl =%d",summ);
return(0);
}
Здравствуйте. Просмотрите пожалуйста код заданий. Вроде все работает, но т.к. благодаря цыклу, нашел сразу же в своей прошлой задаче про коров ошибку, думаю что и в этих мог где-то накосячить.
ОтветитьУдалитьЗадание 1
int main (void)
{
int a,b,c,d,e,n;
scanf ("%d %d %d %d", &a,&b,&c,&d);
for (n=a;n<=b;n++)
{
e=n%d;
if (e==c)
{
printf ("%d\n",n);
}
}
return(0);
}
Задание 2
int main (void)
{
int n,i,m=1;
scanf ("%d",&n);
for (i=1;i<=n;i++)
{
m=m*i;
}
printf("%d!=%d\n",n,m);
return (0);
}
Задание 3
int main (void)
{
float a,b;
float y1,y2,x1,x2,d;
scanf ("%f %f", &a,&b);
// y*y-a*y+b=0 умножил изначальное ур-ние на -1 что бы убрать минус перед у*у
d=a*a-4*1*b;
if (d>0)
{
y1=((-a+sqrt(d))/2)*(-1);
y2=((-a-sqrt(d))/2)*(-1);
x1=a-y1;
x2=a-y2;
printf ("x=%f\ny=%f\n", x1,y1);
}
else
{
if (d==0)
{
y1=-a/2;
x1=a-y1;
printf("x=%f\ny=%f", x1,y1);
}
else
printf ("reshenie nevozmogno\n");
}
return (0);
}
Задание 4
int main (void)
{
int a,n,x=0;
scanf("%d", &a);
for (n=1;n<=a;n++)
{
x+=n;
}
printf("%d\n", x);
return(0);
}
#include
ОтветитьУдалить#include
int main(void){
int n,a,b,c,d,x;
printf("Vvedite 4 chisla \n");
scanf("%d %d %d %d", &a, &b , &c, &d);
for(n=a;n<=b;n++){
x=n%d;
if(x==c){
printf("%d \n", n);
}
else{
printf("");
}
}
return(0);
}
1 задание
ОтветитьУдалить#include
#include
int main (void)
{
int a,b,c,d,i;
printf("Vvedite 4etire celih chisla cherez probel: \n");
scanf("%d%d%d%d",&a,&b,&c,&d);
if(d==0)printf("EROR\n");
i=c*d;
if(i>=a&&i<=b)printf("i=%d YES\n",i);
for(i=d;i>=a&&i<=b;i++)
{
if(c=(i/d))printf("%d\n",i);
}
return(0);
}
Вроде работает...
2 задание
ОтветитьУдалить#include
int main ()
{
int n,p,i=1;
printf("Vvedite chislo N ot 1 do 10:\n");
scanf("%d",&n);
if((n>10)||(n<0))printf("ERROR\n");
for(p=1;p<=n;p++)
{
i*=p;
if(p>10)printf("ERROR\n");
}
printf("%d\n",i);
return(0);
}
Что то я совсем не понял этот цикл for. Вот к примеру как я понял первое задание. Дано четыре числа a,b,c,d. Как я понимаю A и B это отрезок a начало отрезка b - конец. D делитель, C - результат. Получается я в вожу a и b, например 1 и 20, d к примеру 2, значит программа должна выводить все остатки от деления на отрезке от 1 до 20, там к примеру 3/2=1, 7/2=1. Значит с шагом изменяется только a так как в цикле я задал а++. Следовательно b только задает ограничение отрезка. А C должно получаться в следствии а%d, где а изменяется на единицу. Я уже и блок-схему нарисовал, но как кодом начинаю выражать, так у меня С везде нулю равно при любых значениях. Задачи в комментах смотреть не хочу, так как хочется самому допереть. Посоветуйте что нибудь.
ОтветитьУдалитьДоброго времени суток!!! Начну с того что я не правильно понял 1 задание. Подумал, что надо выводить все остатки от деления, а не числа дающие остаток. Листинг прилагаю:
Удалить# include ;
int main (void) {
int a, b, c, d, i;
printf ("\nVvedite A, B, C, D\n");
scanf ("%d %d %d %d",&a, &b, &c, &d);
for (i=a;i<=b;i++) {
if (i%d==c) {
{printf("C:%d\t", i);}}
}
return (0); }
Все вроде как надо работает. Проверял на отрезке от 1 до 5 и от 1 до 20. Но все равно испытываю сложности при написании кода, вроде бы и понимаю как и что должно делаться, но как в программе выразить иногда не представляю.
В третьем задании Х и У надо искать и по сумме и по произведению. Или отдельно найти Х, У для суммы и для произведения?
ОтветитьУдалитьприлагаю листинг нахождения суммы Х и У, написал ради эксперимента.
Удалить# include ;
int main (void) {
int a, x, y, i;
printf ("\nVvedie A=");
scanf ("%d", a);
if ((x<1000) && (y<1000))
{
for (i=1;i<a;i++)
{
x=a-i; // naxodim znachenie X
y=a-x; // naxodim znachenie Y
if (a==(x+y)) // proveryem, esli X+Y ravno znacheniu A
{ printf ("X=%d Y=%d\n", x, y);} // esli znachenie sovpalo to vivodim X i Y
}
}
return (0); }
Правда при выполнении программа ни чего не выводит, не знаю почему, но вроде бы мысль так правильная правильная.
Работает даже при отрицательных
ОтветитьУдалить//Практика
#include
#include
int main()
{
int a, b ,c ,d, i;
float x;
printf("Vvedite chislo A, nachalo promegutka & chislo B konec\n");
scanf("%d\n",&a);
printf("Vvedite chislo C, ostatok pri delenii na D\n");
scanf("%d\n",&b);
printf("Vvedite chislo D\n");
scanf("%d\n",&c);
printf("Posle nagmite lubuu klavishu i ENTER\n");
scanf("%d\n",&d);
if (a>b)
{
for (i=b; i<=a; i++)
{
x=i%d;
x=fabs(x);
if (x==c)
{
printf("Chislo =%d\n",i);
}
else
{
}
}
}
else
{
for (i=a; i<=b; i++)
{
x=i%d;
x=fabs(x);
if (c==x)
{
printf("Chislo =%d\n",i);
}
else
{
}
}
}
return(0);
}
Этот комментарий был удален автором.
ОтветитьУдалить// Квест
ОтветитьУдалить#include
int main()
{
int i,N,z=1;
printf("Vvedite chislo factorial cotorogo hotite naiti, N<11\n");
scanf("%d\n",&N);
if (N<11)
{
for (i=1;i<N+1;i++)
{
z*=i;
}
}
else
{
printf("Yslovie ne vipolneno\n");
return(0);
}
printf("Factorial N=%d\n",z);
return(0);
}
/*Задание 4*/
ОтветитьУдалить#include
int main(){
float N, s=0;
printf ("N="); scanf ("%f", &N);
for (int i=1; i<=N; i++) {
s=s+i;
}
printf ("S=%0.0f \n", s);
return 0;
}
у вас в статье небольшая описка:
ОтветитьУдалитьfor (d=-100; d<=0; d+10)
надо:
for (d=-100; d<=0; d+=10)