1

次の質問があります。

コンピュータは、給与計算や買掛金アプリケーションなどの小切手作成システムで頻繁に使用されます。週ごとの給与小切手が (誤って) 100 万ドルを超える金額で印刷されたという話が多数出回っています。人的ミスや機械の故障により、コンピュータ化された小切手発行システムによって奇妙な金額が印刷されます。もちろん、システム設計者は、誤ったチェックが発行されるのを防ぐために、システムに制御を組み込むためにあらゆる努力を払っています。もう 1 つの深刻な問題は、小切手を不正に換金しようとする人物による意図的な小切手の金額の変更です。金額が改ざんされるのを防ぐために、ほとんどのコンピューター化された小切手作成システムでは、小切手保護と呼ばれる手法が採用されています。

コンピューターによる印刷用に設計された小切手には、コンピューターが金額を印刷できる固定数のスペースが含まれています。給料に 9 つの空白が含まれているとします。コンピューターは、毎週の給料の金額を印刷する必要があります。金額が大きい場合、9 つのスペースすべてが埋まります。

例えば:

11,230.60 (check amount)
---------
123456789 (position numbers)

一方、金額が $1000 未満の場合は、通常、いくつかのスペースが空白のままになります。たとえば、次のようになります。

99.87
---------
123456789

4 つの空白が含まれます。小切手が空白で印刷されている場合、誰かが小切手の金額を変更するのは簡単です。小切手が改ざんされるのを防ぐために、多くの小切手作成システムでは、次のように先頭にアスタリスクを挿入して金額を保護しています。

****99.87
---------
123456789

小切手に印刷する金額を入力し、必要に応じて先頭にアスタリスクを付けて、小切手で保護された形式で金額を印刷するプログラムを作成してください。金額を印刷するために 9 つのスペースが利用可能であると仮定します。

私は誰かにコードを書くように頼んでいるわけではありません。出発点が必要なだけです。これらすべてのさまざまな関数の膨大なリストがあります。文字列処理ライブラリから使用できる関数を誰かお勧めできますか?

4

3 に答える 3

2

宿題はしませんが、次の関数を確認することをお勧めします。

sprintf - フォーマットされた出力。

ヒント: 左側の出力を 0 で埋めます

strspn / strcspn - 文字セットに含まれる/含まれない文字のスパンを数える

ヒント: 余分なゼロを置き換えます。

memset - メモリ領域をバイト値で埋める

Cで文字と「文字列」を使用してポインター演算を行う方法を知っていると思います。そうでない場合は、勉強してください。また、Unicode ではなく ASCII を想定しています。ユニコードの場合は、Cでの方法を教えてください:-)

于 2012-04-27T04:38:14.770 に答える
2

印刷する桁数と、桁の前に付けるアスタリスクの数との関係を考えてみてください。この場合は 9 になります。したがって、出力する数字列の長さを取得すると、最初に出力するアスタリスクの数を決定できます。

于 2012-04-27T04:39:11.777 に答える
0
  1. itoaを使用して amt を変換し、長さを見つける

  2. 9(最大桁数)から長さを引くと、印刷されるアスタリスクの数が得られます

  3. アスタリスクの数を出力してから、Amt を出力します。


int amt,count;
char s[10];
printf("Enter Amt");
scanf("%d",&amt);

/* Store Amount as String */
itoa(amt,s,10);

/* Calculate Count  */
count=9-strlen(s);

/* Print asterisks */
for(int i=0;i<count;i++)
printf("*");

/* Print Amount */
printf("%d",amt);
于 2012-04-27T04:50:32.833 に答える