無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
xft

無題

#1

投稿記事 by xft » 14年前

急いでいます。
C言語で以下の課題(2つ)のプログラムのソースがわからないもで教えてください。 また(1)は自身でソースを作成したが、エラーがでたうまくいきません。(2)は途中までできてその後のソースがわかりません。
(terapadとcygwinをしようします。)

(1)1文字を入力して、下のデータのうちaのときAmerica以下japanまで、bのときBritain以下japanまで、cのときCanada以下japanまで、dのときDenmark以下japanまで、それ以外のときjapanと表示するプログラムをつくれ。ただし、switch~case文を用いる。
※以下に作成したソースとエラーをしめします。

#include <stdio.h>
main()
{
int a.b.c.d.e;
printf("文字=");scanf("%d",&c);
switch (c) {
case 'a':printf("America\nBritain\nCanada\nDenmark\njapan\n");
break;
case 'b':printf("Britain\nCanada\nDenmark\njapan\n");
break;
case 'c':printf("Canada\nDenmark\njapan\n");
break;
case 'd':printf("Denmark\njapan\n");
break;
default:printf("japan\n");
}
(エラー)
$ gcc 5ek.c
5ek.c: In function `main':
5ek.c:4: error: syntax error before '.' token
5ek.c:5: error: `c' undeclared (first use in this function)
5ek.c:5: error: (Each undeclared identifier is reported only once
5ek.c:5: error: for each function it appears in.)
5ek.c:16: error: parse error at end of input





(2)以下のような連立方程式がある
ax+by=c
dx+ey=f

a,b,c,d,e,fの値を入力したら、x、yを求めるプログラムを作成せよ。

※とちゅうまで作成したプログラムです。
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c,d,e,f,x,y;
printf("連立一次方程式の計算\n");
printf("a * x + b * y= c\n");
printf("d * x + e * y= f\n");

printf("a=");scanf("%f",&a);
printf("b=");scanf("%f",&b);
printf("c=");scanf("%f",&c);
printf("d=");scanf("%f",&d);
printf("e=");scanf("%f",&e);
printf("f=");scanf("%f",&f);

みけCAT

Re:無題

#2

投稿記事 by みけCAT » 14年前

とりあえず(1)についてだけ
>5ek.c:4: error: syntax error before '.' token
複数の変数を一度に宣言するときは.ではなく,で区切ります。
int a.b.c.d.e;

int a,b,c,d,e;
に変えてください。

みけCAT

Re:無題

#3

投稿記事 by みけCAT » 14年前

追加
>5ek.c:16: error: parse error at end of input
最後に}が抜けています。

みけCAT

Re:無題

#4

投稿記事 by みけCAT » 14年前

(2)について
普通に連立方程式を解くときと同じように考えます。
a * x + b * y= c・・・(1)
d * x + e * y= f・・・(2)
(1)よりy=-a/b*x+c/bを(2)に代入して
d*x+e*(-a/b*x+c/b)=f
(d-e*a/b)*x=f-e*c/b
x=(f-e*c/b)/(d-e*a/b)
これを(1)に代入して
a*(f-e*c/b)/(d-e*a/b)+b*y=c
y=(c-a*(f-e*c/b)/(d-e*a/b))/b
ただし、ゼロ除算に気をつけてください。

もぐりん

Re:無題

#5

投稿記事 by もぐりん » 14年前

(1)について、

皆さんの指摘を修正しても、おそらく期待通りの動きにはならないでしょう。
私が試してみたところ、a, b, c, d, eのどれかを1文字入力しても
すべてdefaultが実行されます。
その理由は自分で調べてください。
そうすることで型(char, int, short, long, floatなど)について理解できると思います。

ゆーずぃ

Re:無題

#6

投稿記事 by ゆーずぃ » 14年前

>もぐりんさん

データの内aの時ということは、データがaにあたる時とも取れますから、きっと自分の環境でaに当たる文字を文字コード表とにらめっこして数値を入れろということなのかもしれませんよw
私の環境ではaにあたる97を入力すれば上手くいくようですw

まぁ課題ということなので一応解答を。提出までに見るかもわからないので、需要があるかは分かりませんがw
因みに連立一次方程式は公式丸写しなので間違っていたら公式に文句を言って下さいw

--------------------1つ目---------------------
#include <stdio.h>

int main(void){

    char input;
    puts("a~dのいずれかを入力して下さい");
    scanf("%c",&input);

    switch(input){
        case 'a' : puts("America");
        case 'b' : puts("Britain");
        case 'c' : puts("Canada");
        case 'd' : puts("Denmark");
        default: puts("japan");
    }
    while(getchar()!='\n');//バッファクリア
    getchar();
    return 0;
}
--------------------2つ目---------------------
#include <stdio.h>

int main(void){

    enum {A,B,C,D,E,F};
    int i, div, cal[6];

    puts("ax + by = c");
    puts("dx + ey = f");
    puts("上記の連立一次方程式の計算を行います。\n");
    for(i=0; i < 6; i++){
        printf("%cの値を入力して下さい。(整数値)",'a'+i);
        scanf("%d",&cal);
        while(getchar() != '\n');
    }

    if((div = cal[A]*cal[E] - cal[D]*cal ) == 0 ){
        puts("0除算になる為処理を中止します。");
        return -1;
    }
    printf("x = %d\n",(cal[C]*cal[E] - cal[F]*cal) / div);
    printf("y = %d\n",(cal[A]*cal[F] - cal[D]*cal[C]) / div);
    puts("Enterで終了します");
    getchar();
    return 0;
}

さかまき

Re:無題

#7

投稿記事 by さかまき » 14年前

break文を使ってもOKになったんだから、xftさんの努力(コピペ)を尊重して
switch文のところは↓のままでよいのでは?

switch (c) {
case 'a':printf("America\nBritain\nCanada\nDenmark\njapan\n");
break;
case 'b':printf("Britain\nCanada\nDenmark\njapan\n");
break;
case 'c':printf("Canada\nDenmark\njapan\n");
break;
case 'd':printf("Denmark\njapan\n");
break;
default:printf("japan\n");
}

Dixq (管理人)

Re:無題

#8

投稿記事 by Dixq (管理人) » 14年前

良く見ると似たようなトピックが3つあるんですね;
同じ内容の話は同じトピックにまとめるか、リンクを貼ってもらえると有難いです。

(1)の問題はbreakを使わないようにという事だったかと思いますが、問題の制約は変わっているのでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る