アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の問題が解けません。
わかる方、教えていただけないでしょうか?

・問題
int型の変数i,j,k,m,n,double型の変数a,bに,下に示す式の結果を代入し結果を

i = ...
a = ...
j = ...
b = ...
k = ...
m = ...
n = ...

と出力せよ(int型の変数は%d,double型の変数は%lfで変換すること)。プログラムコードの下にコメントとして,各演算結果がそのようになる理由を書き入れて提出せよ。とくにk,m,nに対応する式は,ある特定の意味を持っている。それぞれどのような意味を持つ式であるかということに言及すること。

i = 11/17*8 + 27/13;
a = 11/17*8 + 27/13;
j = 11.0/17*8 + 27/13;
b = 11.0/17*8 + 27/13;
k = 281 - 281/47*47;
m = 263.0/47+0.5;
n = 293.0/47+0.5; 

A 回答 (5件)

// Test1.cpp : コンソール アプリケーションのエントリ ポイントを定義します。


//
#include "stdio.h"


int main(int argc, char* argv[])
{
int i, j, k, m, n;
double a, b;


i = 11 / 17 * 8 + 27 / 13;
printf("i = %d\n", i);
// 11 / 17 は除数・被除数とも整数であるから
// 整数の範囲で計算が行われ、答えは0である
// 27 / 13も同様に答えは2である
// 従って, 11 / 17 * 8 + 27 / 13の式の値は2である
// 2がそのままintに代入されiは2となる

a = 11 / 17 * 8 + 27 / 13;
printf("a = %lf\n", a);
// 11 / 17 は0である
// 27 / 13も同様に答えは2である
// どちらも理由はiの場合を参照のこと
// 従って, 11 / 17 * 8 + 27 / 13の式の値は2である
// 2がdoubleに代入されaの値は2.0となる


j = 11.0 / 17 * 8 + 27 / 13;
printf("j = %d\n", j);
// 11 / 17 は除数・被除数の片方が浮動小数点なので
// 浮動小数点で計算が行われ、答えは0.647...である
// 0.647.... * 8 の場合も乗数・被乗数の片方が浮動小数点であるから
// 浮動小数点演算が行われる。5.176...となる
// 27 / 13の答えは2である(理由はaの場合を参照のこと)
// 従って, 11 / 17 * 8 + 27 / 13の式の値は7.176...である
// 7.176...が整数に代入される際小数点以下は切り捨てられ
// jの値は7となる


b = 11.0 / 17 * 8 + 27 / 13;
printf("b = %lf\n", b);
// 11.0 / 17 * 8は5.176...である
// (理由はjの場合を参照のこと)
// 27 / 13の答えは2である(理由はaの場合を参照のこと)
// 従って, 11 / 17 * 8 + 27 / 13の式の値は7.176...である
// 7.176...がそのままdoubleに代入される

k = 281 - 281 / 47 * 47;
printf("k = %d\n", k);
// 281 / 47は5となる
// 除数・被除数とも整数であるためである
// 5 * 47は235である
// よってkの値は46である

m = 263.0 / 47 + 0.5;
printf("m = %d\n", m);
// 263.0 / 47 は5.59....である
// これに0.5を加えるので263.0 / 47 + 0.5は6.09...となる
// mはintなので小数点以下が切り捨てられ6が代入される
// 5.59をいわゆる"四捨五入"した結果になっている
// 0.5を加えてから切り捨てる技法は"四捨五入"の算法として
// 良く用いられる
// これは、一般によく知られた"四捨五入"の定義に一致するが
// いわゆるJIS丸めとは異なることに注意を払う必要がある


n = 293.0 / 47 + 0.5;
// 293.0 / 47 は6.23....である
// これに0.5を加えるので293.0 / 47 + 0.5は6.79...となる
// nはintなので小数点以下が切り捨てられ6が代入される
// 6.23を四捨五入している


return 0;
}
    • good
    • 0

> 下に示す式の結果を代入し



「式」とは、

> i = 11/17*8 + 27/13;

等の代入式のことでしょうか? だとすると、これをどこに代入するのでしょうか?
ちなみに、副作用完了点の間で同じ変数を複数回更新しようとした場合の動作は未定義ですので、

i = (i = 11/17*8 + 27/13);

とはできません。

temp = (i = 11/17*8 + 27/13);
i = temp;

なら可能です。

> double型の変数は%lfで変換すること

ということはC99ですね?

> 出力せよ

どこに出力するのでしょうか?

> k,m,nに対応する式は

対応するとは?
    • good
    • 0

>とくにk,m,nに対応する式は,ある特定の意味を持っている。



kの場合に対する言及が抜け落ちてしましたね。
No.3さん、補足どうも有難う御座いました。
    • good
    • 0

ついでなので、おまけでこっちも。



k の「特定の意味」は、「剰余」になって
いるということです。
    • good
    • 0

他の「課題」の関連からすると、



int i;
i = 11/17*8 + 27/13;
printf("i = %d", i);

のようなことをしろって意味だと思うけど、「課題」製作者の意図がはっきりとわからないから、
ここで聞くよりも「課題」製作者にはっきりと「わからない」と言って説明してもらうべきだと思う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!