• 締切済み

次のプログラムが作れません…

メイン関数で整数型配列a[0]~a[3]にキーボードから入力された値を代入し、その要素の絶対値を代入し、a[0]~a[3]の結果を表示するプログラムです。 ただし、条件が付いていて配列の要素の絶対値を計算する関数"void abs ( int a[]);"を作成して使用することとなっています。 実行結果が以下のようになるらしいのですが… ./px2-2 input a number -> 4 input a number -> -9 input a number -> 7 input a number -> -8 a[0] = 4 a[1] = 9 a[2] = 7 a[3] = 8 よろしくお願いします。

みんなの回答

  • undeatta
  • ベストアンサー率0% (0/1)
回答No.3

何故困っているのか分かりません 「プログラムが作れない」と一口に言っていますが、その原因は様々です そもそもどのようにプログラムを書いていいか分からないのか、書いている途中で何か分からないことがあって詰まってしまっているのか、書き終わったがコンパイルエラー等の問題が発生して詰まっているのか、プログラムが完成したが期待した動作をしてくれないのか、などなど 全部「プログラムが作れない」という状態ですが、その時に必要なアドバイスは違いますよね というわけで、おそらくココで詰まっているのでは無いか、という部分を私が適当に予想して回答します 見当違いの回答だと思うのであれば、何故プログラムが作れないのかを明記してください おそらく絶対値を求める関数abs()の戻り値の型がvoidなのが関係しているのではないでしょうか そうであれば、C言語のポインタと配列についてよくよく調べてみる事をオススメします 以上

  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.2

どこがわからないのでしょうか? ユーザ関数の作り方? abs()関数の処理の書き方? 配列の使い方? 途中まで作成したソースを載せたほうが回答を得やすいと思います。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

abs()関数のなかで、if文で0未満(マイナス)か判断をして0未満であれば0からその引数の値を引いて、配列に格納し直してあげれば良いと思いますが。

関連するQ&A

  • 次のプログラムが作れません…

    キーボードから与えられた整数iに対して、iの階乗(i!)を求める関数"fact"を作成するというものなのですが… メイン関数は次のように与えられています。 #include<stdio.h> int fact(int); int main(void){ int in, i; printf("Input a number:"); scanf("%d",&in); for (i=1; i<=in; i++){ printf(" %d %d\n",i , fact(i) ); } return 0; } よろしくお願いします。

  • このプログラムにアドバイスをください

    問題が  ・100個の要素を持った一次元配列をmain()関数内で宣言 ・一次元配列と要素数を引数として持つ関数seisei() ・関数seisei()は乱数を使い渡された配列を0~99の整数で初期化する。 ・一次元配列、要素数そして変数のポインタを引数としてもつ関数goukei() ・関数goukei()は渡された配列に格納された数値の合計を計算し、渡された変数のポインタにその合計値を代入する。 と問題があり、下記のようにプログラムを作ったんですが、どうしてもコンパイルできません。どなたかご指摘よろしくお願いします。 #include <stdio.h> #include <time.h> void seisei(int *,int); void goukei(int *, int, int*); int i, *sum; int main() { int a[100],sum; seisei(a,100); goukei(a,100,&sum); printf("sum:%d\n",&sum); return 0; } void seisei(int *a[i], int n) { srand(time(NULL)); for(i = 0; i <= n; i++){ *a[i] = rand() % 100; } } void goukei(int *a[i],int n,int *sum) { *sum = 0; for(i = 0; i <= n; i++){ *sum += *a[i]; } }

  • 次のプログラムが作れません…

    次のプログラムが作れません… キーボードから文字列と一つの検索文字を入力します。 この時、入力した文字列の中にある、検索文字の個数を表示するプログラムなのですが… 条件が以下のようにあります。 プログラムの関数の定義部分以外は、以下にあげるものを変更せずそのまま使用すること。 #include<stdio.h> int search_letter(char *str, char letter); int main(void){ int cnt; char in[100]; cahr ch; printf("Input a string: "); gets(in); printf("Input a letter: "); scanf("%c", &ch); cnt = search_letter( in, ch ); printf("The number of letter '%c' is %d\n", ch, cnt); return 0; } プログラム中に出てくる関数「search_letter」は、第一引数で与えた文字列へのポインタで示される文字列の中から、第二引数で与えられた文字の個数を計算する関数です。 このプログラムでは大文字、小文字を区別して処理します。 出力結果は以下と同じようにしなければなりません。 ./pz1-2 Input a string: Mousukkari akidesune Input a letter: o The number of letter 'o' is 1 *"./pz1-2"と"Mousukkari akidesune"はキーボードから入力した文字です。 よろしくお願いします。

  • 配列v2を逆順にしてv1に格納するプログラム

    こんにちは。  下記は関数 intary_rcpy を使用して、配列 v2 の要素の順序を逆にして配列 v1 に格納するプログラムです。 関数の中で v1[0] = v2[4] v1[1] = v2[3] .... と代入して、要素の順序をひっくり返そうと考えています。 想定している実行結果は 5, 4, 3, 2, 1 ですが、 実際の実行結果は 0, 5, 5, 5 となってしまいました。 関数部以外の問題のようにも思うのですが、どう間違っているのか ご指摘いただける点がありましたら、お願いいたします。 ========================================= #include <stdio.h> void intary_rcpy(int v1[], const int v2[], int no) { int i; for(i = 0; i < no; i++) v1[i] = v2[no - 1]; no--; return(v1); } int main(void) { #define NUMBER 5 int i; int v1[] = {}; int v2[] = {1,2,3,4,5}; intary_rcpy(v1, v2, NUMBER); for(i = 0; i < (NUMBER - 1); i++) printf(" %d \n", v1[i]); return 0; } ========================================= 以上。

  • プログラムがわかりません

    C言語の本を読んでいるんですが、詰まってしまいました。プログラム自体は単純なのですが #include<stdio.h> void hello(void) { fprintf(stderr,"hello!\n"); } void func(void) { void *buf[10]; static int i; for(i=0;i<10;i++) { buf[i] = hello; } } int main(void) { int buf[100]; func(); return 0; } のスタックオーバーフローのプログラムです。 1. 要素100のint型配列を宣言 2. 関数funcの呼び出し 3. void *buf[10]; まずここでがわかりません。なぜポインタが   でてきたのか?またbufの要素数は100では? 4. buf[i] = hello; のループ    これもわかりません。配列に関数を代入しているのでしょうか?     5.  fprintf(stderr,"hello!\n"); これもまたわかりません。    fprintfの最初の引数は出力先ですが、なぜ標準エラー出力なの   でしょうか? 時間のあるかた解説お願いします。

  • C言語 動的確保とポインタ参照について

    以下のようなプログラムについて質問させて頂きます. main文で宣言されているaに配列を動的確保したいのですが,funcの関数内でaにアクセスする方法が分かりません.*(a[i])かな,とは思ったのですが上手く動作しませんでした. func実行後のmain文からはaの要素にアクセス出来るので,確保自体は成功していると思うのですが,如何でしょうか・・・? 宜しくお願いします. void func(int **a) {  *a = new int[32]; for(int cnt=0; cnt<32; cnt++) { /* aの配列の要素に値を代入したい(a[i] = i のように) */ } } int main(void) { int *a = NULL; func(&a); }

  • プログラムの組み方が分かりません。

    ある課題で以下の問題が出題されました。 >>>> 2つのint型変数x,yにキーボードから値を入力し、その大小を判定する関数funcを作成せよ。この課題では、大きいと判定された数が代入された変数のアドレスがmain関数に戻されるものとする。 ============ #include<stdio.h> int *func(int *a,int *b) { /* 2つの値の大小判定を行い、アドレスを返す */ } main(void) { int x, y, *z; /* 変数 x,yにキーボードからデータを入力する */ /* 関数funcの呼び出し */ /* 変数zを用いて値の出力を行う */ } ============ <<<< 2行目の*funcというように、関数の頭に*が付くプログラムは初めてで、 どういう意味かもさっぱりわかりません。 それも含め、この問題はどういう風解けばいいのか、教えてください。 お願いします。

  • プログラムを上手く動かすには…

    #include<stdio.h> #include<stdlib.h> double sumf(int n,double *ds); int main(){ double a,b; double df=0.7 int n; double *ds; double *z; int size; printf("Input two numbers -> "); scanf("%lf%lf",&a,&b); printf("n"); size = sizeof(*ds)*(1+(int)((b z = ds = (double*)malloc(size); n = 0; while(a<=b){ *z = a; a += df; printf("%.1f",*z++); n++; } printf("n"); printf("n"); printf"sumf = %.1fn",sumf(n,ds)); return 0; } double sumf(int n,double *ds){ double sum = 0; while(n){ sum += *ds; n--; } return sum; } 入力された二つの実数a,b(a<b)をもとに、aからbまで0.7ずつ増加する数値の配列を作り、その配列の合計を求める関数sumfを作りなさい。ただし、配列を作る、配列の合計を求める箇所はポインタを使うこと。 【ヒント】 ・プログラムの構成 mainで配列要素の作成、配列の表示、関数sumf呼出し、sumの表示。 関数sumfで配列の合計を求めreturnで合計値を返す。 ・引数の考慮点 実数の配列だけでなく配列の要素数も引数として渡す必要がある。 宜しくお願いします。 どこが違うのでしょうか?

  • C言語の配列のコピーについて質問です。

    intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。 (1)配列aを配列bに「先頭から順番に」コピーする関数を作成する (2)配列aを配列bに「後ろから順番に」コピーする関数を作成する ただし、配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。 [ヒント] (1)関数宣言の例 void array_copy(コピー元の配列, コピー先の配列, 配列の要素数) [実行結果の例] (1)先頭から順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 1 a[1]: 2 b[1]: 2 a[2]: 3 b[2]: 3 a[3]: 4 b[3]: 4 (2)後ろから順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 4 a[1]: 2 b[1]: 3 a[2]: 3 b[2]: 2 a[3]: 4 b[3]: 1 #include <stdio.h> void array_copy() から始めて int main(void) { とプログラムを作成したいのですが教えてください。

  • C言語プログラム

    こんな課題が出たのですが、さっぱりわかりません。 誰か解る人がいたら教えてほしいです。 1 3+5+7+…+nと奇数の和を求め、和が100を越えたときのnの値を求めて表示するプログラムをdo~whileを使って作成しなさい。 2  キーボードから3つの数を読み込み、最大値を求める処理を繰り返し行うプログラムを、do~whileを使って作成しなさい。繰り返しの終了は、計算のあとで、'S'(1文字)が入力されるまでとし、それ以外の文字では、処理を続行すること。 3  整数型1次元配列kに整数123,456,789をそれぞれ代入し、その内容を表示するプログラムを作成しなさい。 4  文字型1次元配列strに'u'を、'n'、'i'、'x'それぞれ代入し、その内容を文字列として出力するプログラムを作成しなさい。 5  要素数50の整数型1次元配列mの要素すべてに、その添字に対応した0~49の数値を代入し、その内容を表示するプログラムを作成しなさい。 3は #include <stdio.h> main() { int k[3]; k[0] = 123; k[1] = 456; k[2] = 789; printf("%d\n%d\n%d", k[0], k[1], k[2]); return 0; } と解いてみたんですが、やっぱ間違えてますよね?