やってみてくださ
任意の数値を2つ入力し、合計を返り値として返す関数int re_sum、
返り値を待たないで合計を求める関数void no_re_sumを作成せよ。
if switch for while do-while 配列 をなるべく使う。
>#8さん
>Daynamic変数とStatic変数の違いを認識させようというもの
dynamic変数とは、何のことでしょうか?
malloc()などで領域を動的に確保することはもちろんありますが、
それをdynamic変数とは呼ばないのです。
#8さんが理解していらっしゃるdynamic変数とstatic変数の違いとは、何でしょうか?
> void noSum(int *n, int *m) {
> sSum = n + m;
> }
ポインタ同士の加算は出来ません。
> 問題の意図はDaynamic変数とStatic変数の違いを認識させようというもの。
そうなの?
ポインタの使い方の練習問題かと思ってた。
zwiさんへ、このプログラムでどうやればif文、for文、while文を使えというの絶対に無理。下にも書いておいたけれど、問題の意図はDaynamic変数とStatic変数の違いを認識させようというもの。この出題者のほかの質問を見てみれば一目瞭然だけど、すべての問題にそのif switch for while do-while 配列をなるべく使うと書いてあるでしょ。これ定型文ですよ。
1108435さん、その答えは分かり易す過ぎると思う。
>if switch for while do-while 配列 をなるべく使う。
と言っているのでもっと捻らないと・・・。
こんな程度にループなんざ使えるか!
static int sSum;
int re_sum(int *n, int *m);
void no_sum(int *n, int *m);
void main(void) {
int n, m, dSum;
scanf("%d%d",&n,&m);
dSum = re_sum( &n, &m);
no_sum(&n, &m);
printf("\n動的計算結果=%d", dSum);
printf("\n静的計算結果=%d", sSUM);
}
int re_sum(int *n, int *m) {
int iSum;
iSum = n + m;
return iSum;
}
void noSum(int *n, int *m) {
sSum = n + m;
}
メイン関数をループさせると結果がどんどん変わってくるということを教えたかったんじゃないかな。
void no_re_sum(int *n)
{
static int mode= 0;
static sum = 0;
switch( mode ) {
case 0:
case 1:
sum += *n;
break;
case 2:
*n = sum;
break;
}
mode++;
}
int main(void)
{
int n;
int sum;
printf( "input a?" );
scanf( "%d", &n );
no_re_sum(&n);
printf( "input b?" );
scanf( "%d", &n );
no_re_sum(&n);
no_re_sum(&sum);
printf( "sum=%d\n", sum);
return 0;
}
Wernerさんお疲れ様です。
私も無理やりswitch入れてみました。
> 任意の数値
ということは、一般的には複素数ですね。しかも、「任意」とのことですので、表現範囲の制限を設けることができません。
しかし、re_sumの返却値の型はintになっています。
どういうことか補足してください。
re_sumだけ。結構がんばった(`・ω・´)
#include<stdio.h>
int re_sum(int a, int b){
int temp[2];
if(a=(temp[0]=a) == a){
switch(a){
case 1:
for(temp[1]=b; a; a++){
while((temp[1]-=-*temp) || temp){
do{
return a[temp];
}while(a+b);
}
}
break;
}
}
return 0;
}
int main(){
printf("%d + %d = %d\n", 123, 456, re_sum(123, 456));
printf("%d + %d = %d\n", 123, 0, re_sum(123, 0));
printf("%d + %d = %d\n", 0, 456, re_sum(0, 456));
printf("%d + %d = %d\n", -100, 345, re_sum(-100, 345));
printf("%d + %d = %d\n", 123, -100, re_sum(123, 100));
return 0;
}
- 最新から表示
- |
- 回答順に表示













