課題のわからない所の質問

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

課題のわからない所の質問

#1

投稿記事 by 大学生 » 15年前

http://www.dotup.org/uploda/www.dotup.org1017832.jpg
において質問です。
#include<stdio.h>
int main(void)
{
char *str;

int s,i;

double t;

str="abcdefghijklmnopqrstuvwxyz";





printf("整数を入力せよ\n");

scanf("%d",&s);

printf("入力した整数は%d\n\n",s);

if(s>27)
{

printf("error\n");

}









else {

for(i=1;i<27;i++)
{

t=i%s;
if(t==0)
{
printf("入力した値%dで1から26を順に割るとき\nあまりが0になる数字は%d\n",s,i);
}



}


printf("ああああああああ\n");





while( *str !='\0')
{


if (*str=='3' )
{
printf("@");
str++;
}


printf("%c",*str);
str++;
}





}
return 0;
}


というプログラムをつくりました。置換するアルファベットの番号をどうやって文字になおすのですか?

Poco

Re:課題のわからない所の質問

#2

投稿記事 by Poco » 15年前

> 置換するアルファベットの番号をどうやって文字になおすのですか?
こんなことする必要ないです。
今何文字目の処理を行っているかを記録しておき、それが入力された数字の倍数になっているか
判定して、出力する文字をアルバベットか、@にすれば良いだけです。

へろりくしょん

Re:課題のわからない所の質問

#3

投稿記事 by へろりくしょん » 15年前

もう一息ですね。

n倍数の文字を@に置き換えるのですから、判定するのは文字では無く、何番目の文字であるかです。

それよりも、インデントはそろえた方が見やすいですよ。
#include<stdio.h>

int main(void)
{
    char *str;
    int s,i;
    double t;

    str = "abcdefghijklmnopqrstuvwxyz";

    printf("整数を入力せよ\n");
    scanf("%d", &s);

    printf("入力した整数は%d\n\n", s);

    if(s > 27){
        printf("error\n");
    }else{
        for(i = 1; i < 27; i++){
            t = i % s;
            if(t == 0){
                printf("入力した値%dで1から26を順に割るとき\nあまりが0になる数字は%d\n", s, i);
            }
        }

        printf("ああああああああ\n");

        while(*str != '\0'){
            if(*str == '3'){
                printf("@");
                str++;
            }

            printf("%c", *str);
            str++;
        }
    }

    return 0;
}

box

Re:課題のわからない所の質問

#4

投稿記事 by box » 15年前

余分な空白行が多いため、間延びして見えます。
また、字下げを全く意識していないため、全体的に見づらいです。
ご自分でも、何がどうなっているかわかりづらくないですか?

大学生

Re:課題のわからない所の質問

#5

投稿記事 by 大学生 » 15年前

修正してみました。
1文字ずつ置換してみました。

多少、見やすいようにしてみました。
これでいいですか?

#include<stdio.h>
int main(void)
{
char *str;

int s,i;

double t;

str="abcdefghijklmnopqrstuvwxyz";

printf("整数を入力せよ\n");

scanf("%d",&s);

printf("入力した整数は%d\n\n",s);

if(s>27)
{
printf("error\n");
}
else{
t=1%s;
if(t==0)
{
        if (*str=='a' )
      {
printf("@");
str++;
}
}
else if(t!=0)
{
if (*str=='a' )
{
printf("a");
str++;
}
}


t=2%s;
if(t==0)
{
if (*str=='b' )
{
printf("@");
str++;
}
}
else if(t!=0)
{
if (*str=='b' )
{
printf("b");
str++;
}
}



t=3%s;
if(t==0)
{
if (*str=='c' )
{
printf("@");
str++;
}
}
else if(t!=0)
{
if (*str=='c' )
{
printf("c");
str++;
}
}
return 0;
}

メッセージが長いとエラーがでるので、以下4から26までつづけます。

へろりくしょん

Re:課題のわからない所の質問

#6

投稿記事 by へろりくしょん » 15年前

>多少、見やすいようにしてみました。
>これでいいですか?

やっぱりインデントがそろってません。


> t=1%s;
変数 t は double 型ですね。
たとえば 5/3は、1と余り2なわけですから、2は整数です。
ですから、t も int 型で問題ありません。

後は概ねそれで問題ないと思いますよ。

ただ、aは1文字目、bは2文字目って決まってますから、わざわざ文字で判定せずとも、ループで回してあげたら楽になると思います。


ぶっちゃけこんな感じです。
#include <stdio.h>

int main(void)
{
    char *str = "abcdefghijklmnopqrstuvwxyz";
    int i, n;

    scanf("%d", &n);

    printf("after:  ");
    for(i = 0; i < 26; i++){
        printf("%c", (i + 1) % n ? str : '@');
    }
    printf("\nbefore: %s\n", str);

    return 0;
}


動作確認はしてません。

スペースの入り方がなんかおかしかったのでちょっと修正しました。 画像

大学生

Re:課題のわからない所の質問

#7

投稿記事 by 大学生 » 15年前

発展のサンプルをコンパイルして実行すると
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
vwxyz
wxyz
xyz
yz
z

この実行結果がよくわからないので解説を頼みます。

box

Re:課題のわからない所の質問

#8

投稿記事 by box » 15年前

str = "abcdefghijklmnopqrstuvwxyz";(初期状態)
では、ポインター変数strは'a'の位置を指しています。
printfで出力すると、abcdefghijklmnopqrstuvwxyz と出力します。

str++; で、指す位置を1個進めると、'b'の位置を指します。
printfで出力すると、bcdefghijklmnopqrstuvwxyz と出力します。

str++; で、指す位置を1個進めると、'c'の位置を指します。
printfで出力すると、cdefghijklmnopqrstuvwxyz と出力します。

(途中省略)

str++; で、指す位置を1個進めると、'z'の位置を指します。
printfで出力すると、z と出力します。

str++; で、指す位置を1個進めると、'z'の次にある'\0'の位置を指します。
ここで、while文の継続条件を満たさなくなります。

大学生

Re:課題のわからない所の質問

#9

投稿記事 by 大学生 » 15年前

strは'a'を指定すると\0までの文字が出力され
そしてstrで'b'を指定したときはaを飛ばして\0まで
文字が出力されるのですね。

みなさま、ありがとうございました。

閉鎖

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