Нужно чтобы при вводе числа 0 программа завершала работу - C (СИ)

  1. Привет всем.Это моя первая тема У меня такая проблема,задание я сделал но вот не до конца.Нужно чтобы при вводе числа 0 программа завершала работу,я понимаю что надо использовать оператор break,но не понимаю где его тут использовать для переменной M.Подскажите пожалуйста куда подставить break ?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> #include <conio.h> main() { int j,N,M,S; printf("Enter number M\n"); scanf("%d",&M); N=4; { while(N<=M) { S=1;j=2;    while(j<=N/2)        { if(N%j==0) S=S+j; j=j+1; if(M==0)break; }        if(N==S)          printf("%d- perfect number\n",N);          N=N+2; } getch(); return 0; }


textual

Код к задаче: «Нужно чтобы при вводе числа 0 программа завершала работу - C (СИ)»

#include <stdio.h>
#include <conio.h>
main()
{
int j,N,M,S;
printf("Enter number M\n");
scanf("%d",&M);
N=4;
if(M!=0)
{
while(N<=M)
{ S=1;j=2;
   while(j<=N/2)
       {
if(N%j==0) S=S+j;
j=j+1;
break;
}
       if(N==S)
         printf("%d- perfect number\n",N);
         N=N+2;
}
}
else
{
printf("равно нулю");
}
getch();
return 0;
}

СДЕЛАЙТЕ РЕПОСТ

10   голосов, оценка 4.000 из 5



Похожие ответы
  1. Пытаюсь сделать простейший стек, программа сегфолтится при попытке обратиться к функции pop().C1 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 #include #define MAX 100   char *myStack[MAX]; int top = 0;   void push(char*); const char* pop(void);   int main(int argc, char **argv) {     push("fff");     printf("%s\n", pop());     return 0; }   void push(char *str) {     if (top < MAX)         myStack[top++] = str; }   const char* pop(void) {     if (top >= 0)         return myStack[top--];     return 0; }Где я ошибаюсь?

  1. Написать программу вывода элементов одномерного массива при наличии чисел заглушек и с правильным порядком индексации C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include     int main(){     int a[10] = {-1, 7, 1, 3, 1, -1, 4, -1, 6, 5 };   int  i = 0;               for(i = 0; i < sizeof(a)/ sizeof(*a); ++i)            if (a[i] != -1 )    printf ("a[%d]= %d\n", i, a[i]);    return 0; }Помогите вывести правильную индексацию массива

  1. Есть проблема если я беру "с=0" и в цикле пишу условие "с!=100", то у меня нормально отображается квадрат из звездочек, а если начинаю считать от 1 (с=1), тогда у меня в первой строке последней звездочки нет и она переносится после десятой строки, хотя этого быть не должно. Скажите, что не так в коде, расположенном в комментариях.C1 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 40 #include   main (void) {     int c=0, t;         while(c!=100)     {         c=c+1;         t=c%10;         printf("*");         if(t==0)         {             printf("\n");         }     }     printf("\n");     return 0; } /* ???? #include   main (void) {     int c=1, t;         while(c!=101)     {         c=c+1;         t=c%10;         printf("*");         if(t==0)         {             printf("\n");         }     }     printf("\n");     return 0; } */

  1. Буду благодарен, если кто-то объяснит, как работает данная программа построчно (отлично будет, если написать комментарии к каждой строке (кроме самых очевидных)), либо напишет программу попроще. Задача была следующая: напишите функцию expand(s1,s2), которая бы разворачивала сокращенную запись наподобие a-z в строке s1 в полный список abc...xyz в строке s2. Учитывайте буквы в любом регистре, цифры, а также записи вида a-b-c, a-z0-9 и -a-z. Сделайте так, чтобы знаки - в начале и в конце строки воспринимались буквально, а не как символы развертывания. Спасибо.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void expand(char s1[], char s2[]) {     int i, j, k;     k = 0;     for (i = 0; s1[i] != '\0'; i++)         if (s1[i] == '-')             if (i == 0 || s1[i+1] == '\0')                 s2[k++] = '-';             else                 for (j = s1[i-1]; j <= s1[i+1]; j++)                     s2[k++] = j;     s2[k] = '\0'; }   int main(void) {     char s1[] = "-a-z0-9d-f-";     char s2[128] = "";     expand(s1, s2);     printf("s1=%s\ns2=%s\n", s1, s2);     return 0; } }

  1. C1 2 3 4 5 6 7 8 #include #define STOP * int main() { char ch; while ((ch=getchar())!=STOP) putchar (ch); }

  1. У меня есть две структуры, с одинаковым кол-вом полей, но поля разного типа:C1 2 3 4 5 6 7 8 9 10 11 12 13 struct hat {     char s1[20], s2[20], s3[20] ; } shapka;   typedef struct monopolies {     char name[40];     int year;     float capital;   }monopolies; monopolies monopoly; //создаю тут структуру типа monopoliesЕсть функция для обработки "шапки": ( если что, это считывание шапки таблицы из файла, но это не важно)C1 2 3 4 5 6 7 8 9 10 11 void Read_Shapka_File(FILE *f, struct hat *shapka) //как вы видите, отдаю в ф-ию указатель на структуру типа hat {     if (fscanf(f, "%s%s%s", shapka->s1, shapka->s2, shapka->s3)!=EOF)     {         printf("%-20s %15s %20s\n\n", shapka->s1, shapka->s2, shapka->s3);     }     else     {         exit(ERROR_READING_FILE);     } }...И совершенно другая, отдельная ф-ия, в которую я отдаю указатель на вторую структуру.C1 void Job1_Two_Files(char* putInp, monopolies *monopoly)В этой ф-ии я вызываю ф-ию Read_Shapka_File, но отдаю ей указатель на другую структуру, не ту, что положено:C1 Read_Shapka_File(inp, monopoly);. Мало того что компилятор не ругается, но программа работает и выводит-таки эту "шапку". КАК??? Если это из-за указателей в обеих ф-иях, это не объясняет, почему нет конфликта типов. Скидываю программу, постарался удалить все, что не относится к данной проблеме

  1. Создать программу, которая будет запрашивать у пользователя длины сторон треугольника. После этого программа должна вывести на экран периметр треугольника, площадь и углы, для которых нужно разработать функции. Площадь треугольника можно найти по формуле Герона. Углы можно найти по соотношению сторон. При выполнении программы все приглашения на ввод данных, а также все выводимые данные должны иметь четкое объяснение на экране.C1 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 40 41 42 43 44 45 46 47 48 49 50 51 52 #include #include #include   double SemiPerimeter(double a, double b, double c) {         double sPerimeter = (a + b + c) / 2;         return sPerimeter; }   double Square(double a, double b, double c, double SemiPerimeter) { double Square_Geron = sqrt(SemiPerimeter*(SemiPerimeter - a)*(SemiPerimeter - b)*(SemiPerimeter - c));         return Square_Geron; }   double AngleA(double a, double b, double c) {         double Angle_CosA = cos((a*a - b*b + c*c) / 2*(b*c));         return Angle_CosA; }   double AngleB(double a, double b, double c) {         double Angle_CosB = cos((a*a - b*b + c*c) / 2 * (a*c));         return Angle_CosB; } double AngleC(double a, double b, double c) {         double Angle_CosC = cos((a*a - b*b + c*c) / 2 * (a*b));         return Angle_CosC; }   main() {         SetConsoleCP(1251);         SetConsoleOutputCP(1251);             double Square_of_triangle, a, b, c;         double CosA, CosB, CosC;           printf("Введите сторону a: ");         scanf_s("%lf", &a);         printf("Введите сторону b: ");         scanf_s("%lf", &b);         printf("Введите сторону c: ");         scanf_s("%lf", &c);             Square_of_triangle = Square(a, b, c, SemiPerimeter(a, b, c));         printf("\tПлоща треугольника за формулою Герона: %f\n\n", Square_of_triangle);         CosA = AngleA(a, b, c);         printf("Кyт a равняется:  %f\n", CosA);         CosB = AngleB(a, b, c);         printf("Кyт b равняется:  %f\n", CosB);         CosC = AngleC(a, b, c);         printf("Кyт c равняется: %f\n", CosC);  }Проблема заключается в следующем, программа не правильно высчитывает углы, получается что углы не равны 180градусам. Подскажите что поменять в программе. Во-вторых, как можно оптимизировать, что бы не повторять одни и те же действия 3 раза. Зарание СПАСИБО!

  1. Нужна помощ в разработке программы по перекодировке текстовых файлов из кодового набора кои-8 в кодовый набор ср1251 по таблице, заданной в текстовом файле. Имя файла таблицы вместе с именем файлов исходного текста и результата его перекодировки должно передаваться программе через аргументы командной строки её вызова. Данные в таблице перекодировки должны быть представлены в системе счисления по основанию 8. Дело в том что я не могу понять как это представить в восьмеричной системе счисления

  1. Нужно чтобы программа вставляла в текст пробелы. но вместо них она у меня вставляет $. пробовал и через putchar(" ") и putchar("\t") - одно и тоже. как правильно выводить пробел на си?

  1. Вот программа, я не пониvаю как работает она с файлом. я запускаю ее, она как будто закончила работу и ничего не выводит. файл 123 находится на диске D. Может я что-то не так делаю? помогите пожалуйста разобратьсяC++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include int main() { FILE *f;   char txt[20][10];   int j=0,i;   f=fopen("D:\123.txt","r");   fgets(txt[i],80,f);   while (feof(f))          {          for (j=0; j