分子と分母の数値を文字列形式で表す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)
-
文字列とそのアドレスへのポインタの配列を出力するCプログラム
まず、Cプログラミング言語でのポインターの配列を理解しましょう。 ポインタの配列:(文字列へ) これは、要素が文字列の基本加算へのptrsである配列です。 次のように宣言および初期化されます- char *a[ ] = {"one", "two", "three"}; ここで、a[0]は文字列「one」の基本加算へのポインタです。 a [1]は、文字列「two」の基本加算へのポインタです。 a [2]は、文字列「three」の基本加算へのポインタです。 利点 ポインタの配列の利点を以下に説明します-
-
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++