よくわかりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tennga
記事: 13
登録日時: 11ヶ月前

よくわかりません

#1

投稿記事 by tennga » 11ヶ月前

アルファベットの小文字を渡すと大文字に変換して返す void 型の関数を作成せよ.こ
の関数を用いて,標準入力から入力された小文字 1 文字を大文字に変換して出力するプログラム
を作成せよ.なお,アルファベットの小文字のみ入力されると仮定してよい。の問題ですが、、、

小文字を渡すと大文字に変換して返す void 型の関数を作成方法がわかりません。
よろしくお願いします。

アバター
purin52002
記事: 235
登録日時: 1年前
連絡を取る:

Re: よくわかりません

#2

投稿記事 by purin52002 » 11ヶ月前

まずvoid型の関数を作ります。関数名はここではFuncとします。あとで自分の好きな名前にしてください。

コード: 全て選択

void Func(void) {}
つぎに引数をchar型にします。引数名をcとします。あとで自分の好きな名前にしてください。

コード: 全て選択

void Func(char c) {}
つぎに関数の中身を作っていきます。
ASCIIコードはご存知ですか?知ってても知らなくてもとりあえずググります。
ASCIIコードを眺めてると、なんとなく規則性が見えてくるような、、、そうでもないような、、、

多分関数の中身を考えることがキモだと思いますのでここは自分で考えてみてください^^
オフトピック
ヒント
aのascii->97
Aのascii->65

bのascii->98
Bのascii->?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

tennga
記事: 13
登録日時: 11ヶ月前

Re: よくわかりません

#3

投稿記事 by tennga » 11ヶ月前

これもしかしてc++ですよね?
ぼくが扱っているプログラミングCなんですよ、、、

だんごさん
記事: 272
登録日時: 6年前

Re: よくわかりません

#4

投稿記事 by だんごさん » 11ヶ月前

tennga さんが書きました:これもしかしてc++ですよね?
ぼくが扱っているプログラミングCなんですよ、、、
C言語ですよ。表示形式がC++なだけです。
 Dango San

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: よくわかりません

#5

投稿記事 by みけCAT » 11ヶ月前

tennga さんが書きました:小文字を渡すと大文字に変換して返す void 型の関数を作成方法がわかりません。
確かに、データを返さないといけないのにvoid型というのはよくわかりませんね。
出題者に確認したほうがいいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

inemaru
記事: 108
登録日時: 1年前

Re: よくわかりません

#6

投稿記事 by inemaru » 11ヶ月前

void型の関数を作る条件の問題なのだとしたら、引数はポインタになりそうですね。

tennga
記事: 13
登録日時: 11ヶ月前

Re: よくわかりません

#7

投稿記事 by tennga » 11ヶ月前

ポインタですか?
どういう風に書けばいいですかね、、、

かずま

Re: よくわかりません

#8

投稿記事 by かずま » 11ヶ月前

標準入力から入力された小文字を、そのまま出力するプログラムを書いて
codeタグを付けて貼り付けてください。

main の中で、関数を呼ばずに大文字に変換して出力することはできますか?
void ではなく、変換した大文字を返却値として返す関数は書けますか?

上記に回答していただければ、ポインタを使った方法を示します。

「よくわかりません」などという不適切な件名を付けないでください。
「void型の関数で値を返す方法」などとしてほしかった。
フォーラムルールは読んでいますか?

tennga
記事: 13
登録日時: 11ヶ月前

Re: よくわかりません

#9

投稿記事 by tennga » 11ヶ月前

たぶんできないですね、、、

教えてほしいです。

すいません読んでないです、、、

超初級者
記事: 52
登録日時: 3年前

Re: よくわかりません

#10

投稿記事 by 超初級者 » 11ヶ月前

コード: 全て選択

#include <stdio.h>
#include <ctype.h>

void lowToUp(int *c)
{
    *c = toupper(*c);
}

int main(void)
{
    int c;

    printf("英小文字を入力:"), scanf("%c", &c);
    printf("%cを大文字に変換すると", c);
    lowToUp(&c);
    printf("%c\n", c);
    return 0;
}

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: よくわかりません

#11

投稿記事 by みけCAT » 11ヶ月前

超初級者 さんが書きました:

コード: 全て選択

    int c;

    printf("英小文字を入力:"), scanf("%c", &c);
scanfの書式%cはchar*型のデータが対応することを要求し、int*型のデータを渡してしまうと未定義動作になります。
さらに、char型よりint型のサイズが大きい環境では、int型の一部(リトルエンディアンでは上位)のビットが初期化されないことが考えられ、よくないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

白い変人

Re: よくわかりません

#12

投稿記事 by 白い変人 » 11ヶ月前

出力の定義が「値を返却する事」のみとは言いきれませんからね。

入力されたchar型の変数に格納された小文字のデータを大文字に変換して「コンソール上に出力」する関数と考えれば、値を返却する必要が無いという意味で妥当な解釈だと思えます。

以下、回答例。

コード: 全て選択

void func(char c){
	if(c>='a' && c<='z') c='A'+c-'a';

	printf("%c",c);
}

かずま

Re: よくわかりません

#13

投稿記事 by かずま » 11ヶ月前

tennga さんが書きました:たぶんできないですね、、、
回答として不満ですが、ポインタを使った方法を示します。

コード: 全て選択

#include <stdio.h>
 
double conv(double x)
{
    return x * 1.61;
}
 
int main(void)
{
    double a, b;
    scanf("%lf", &a);
    b = conv(a);
    printf("%g\n", b);
    return 0;
}
conv は、double の値を渡すと、1.61倍の値に変換して返す関数です。
main は、conv を用いて、標準入力から入力された値を 1.61倍の値に
変換して出力するプログラムです。

通常、関数は、上の例のように返却値として値を返しますが、ポインタ
を使用すると、次の例のように引数を用いて値を返すことができます。

コード: 全て選択

#include <stdio.h>
 
void conv2(double x, double *p)
{
    *p = x * 1.61;
}
 
int main(void)
{
    double a, b;

    scanf("%lf", &a);
    conv2(a, &b);
    printf("%g\n", b);
    return 0;
}
p は「double へのポインタ」です。
&b は、変数 b のアドレスです。アドレスは「ポインタの値」です。
conv2 を呼び出すと、p は、その値を受け取るので、b を指します。
「*p =」は「b =」と同じ意味になります。

以上、理解できましたか?

かずま

Re: よくわかりません

#14

投稿記事 by かずま » 11ヶ月前

一つのポインタで、値をもらうことも返すこともできるという例です。

コード: 全て選択

#include <stdio.h>
 
double conv(double x)
{
    return x * 1.61;
}
 
int main(void)
{
    double a;

    scanf("%lf", &a);
    a = conv(a);
    printf("%g\n", a);
    return 0;
}
conv は、double の値を渡すと、1.61倍の値に変換して返す関数です。
main は、conv を用いて、標準入力から入力された値を 1.61倍の値に
変換して出力するプログラムで、変数は a だけです。

通常、関数は、上の例のように返却値として値を返しますが、ポインタ
を使用すると、次の例のように引数を用いて値を受け取ることも返す
こともできます。

コード: 全て選択

#include <stdio.h>
 
void conv1(double *p)
{
    *p *= 1.61;  // *p = *p * 1.61; でも同じ
}
 
int main(void)
{
    double a;
 
    scanf("%lf", &a);
    conv1(&a);
    printf("%g\n", a);
    return 0;
}
p は「double へのポインタ」です。
&a は、変数 a のアドレスです。アドレスは「ポインタの値」です。
conv1 を呼び出すと、p は、その値を受け取るので、a を指します。
「*p *=」は「a *=」と同じ意味になり、
「a = a * 1.61」と同じ意味になります。

小文字を大文字に変換する関数は、double * の代わりに char * の
引数を使えばよいでしょうお。

コード: 全て選択

void conv0(char *p)
{
	*p -= ' ';  // *p ^= ' '; でもよい
}
さあ、main はどう書けばよいでしょうか?

返信

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