Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

分子と分母の数値を文字列形式で表すCプログラム


問題

動的メモリ割り当てを使用して、実行時にユーザーが指定した2つの整数から小数部を検索し、分子と分母を文字列形式で表します。

解決策

分子と分母を文字列形式で表すための解決策は次のとおりです-

例-

  • 入力 以下に示します-
Numerator1 = 3
Denominator2 = 2

numerator2 = 4
denominator2 = 7
  • 出力 次のとおりです-
Fractional part1: 1.5
Fractional part2: 0.(571428)

以下は、分子と分母を文字列形式で表すためのCプログラムです。 −

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
char* fractionToDecimal(int numerator, int denominator) {
   char *p;
   int psz, n, *dec, dsz, x;
   long long num, den, k, f;
   int i, repeat_at;
   int neg = 0;
   psz = dsz = 100; n = x = 0;
   p = malloc(psz * sizeof(char));
   //assert(p);
   neg = ((numerator > 0 && denominator < 0) ||
   (numerator < 0 && denominator > 0)) ? 1 : 0;
   num = numerator;
   den = denominator;
   num = (num < 0) ? -num : num;
   den = (den < 0) ? -den : den;
   k = num / den;
   f = num % den;
   if (neg && (k || f)) p[n ++] = '-';
      n += sprintf(&p[n], "%lld", k);
   if (!f) {
      p[n] = 0;
      return p;
   }
   p[n ++] = '.';
   dec = malloc(dsz * sizeof(int));
   repeat_at = -1;
   if (f < 0) f = -f;
   while (f) {
      for (i = 0; i < x; i += 2) {
         if (dec[i] == f) {
            repeat_at = i;
            goto done;
         }
      }
      if (x + 1 >= dsz) {
         dsz *= 2;
         dec = realloc(dec, dsz * sizeof(int));
      }
      dec[x ++] = f;
      f *= 10;
      k = f / den;
      dec[x ++] = k;
      f = f % den;
   }
   done:
   for (i = 0; i < x; i += 2) {
      if (n + 3 > psz) {
         psz *= 2;
         p = realloc(p, psz * sizeof(char));
      }
      if (repeat_at == i) {
         p[n ++] = '(';
      }
      p[n ++] = '0' + dec[i + 1];
   }
   if (repeat_at != -1) p[n ++] = ')';
      p[n ++] = 0;
   free(dec);
   return p;
}
int main(void){
   int n,d;
   printf("enter numerator1 and denominator1:");
   scanf("%d%d",&n,&d);
   printf("n = %d, d = %d ", n, d);
   printf("\nFractional part1: %s \n",fractionToDecimal(n, d));
   printf("enter numerator2 and denominator2:");
   scanf("%d%d",&n,&d);
   printf("\nn = %d, d = %d ", n, d);
   printf("\nFractional part2: %s\n ",fractionToDecimal(n, d));
   return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます-

enter numerator1 and denominator1:4 5
n = 4, d = 5
Fractional part1: 0.8
enter numerator2 and denominator2:5 9

n = 5, d = 9
Fractional part2: 0.(5)

  1. 文字列とそのアドレスへのポインタの配列を出力するCプログラム

    まず、Cプログラミング言語でのポインターの配列を理解しましょう。 ポインタの配列:(文字列へ) これは、要素が文字列の基本加算へのptrsである配列です。 次のように宣言および初期化されます- char *a[ ] = {"one", "two", "three"}; ここで、a[0]は文字列「one」の基本加算へのポインタです。 a [1]は、文字列「two」の基本加算へのポインタです。 a [2]は、文字列「three」の基本加算へのポインタです。 利点 ポインタの配列の利点を以下に説明します-

  2. Cプログラムで奇数の長さの文字列を「X」形式で印刷します。

    文字列プログラムで指定された場合、文字列を「X」形式で出力する必要があります。参考までに、下の画像を参照してください。 ここでは、1つの変数を使用して左から右( i)に印刷し、他の変数を使用して右から左( j)に印刷し、他の変数kを使用してスペース計算に使用できます。 以下は、与えられたアルゴリズムのC++実装です。 アルゴリズム START Step 1 ->Declare Function void print(string str, int len)    Loop For int i = 0 and i < len and i++