暇な人がエレガントにC/C++の宿題片づけます 33代目

このエントリーをはてなブックマークに追加
802デフォルトの名無しさん:04/11/12 21:15:31
プログラムの宿題を作るプログラムを作って下さい。
803デフォルトの名無しさん:04/11/12 21:16:30
>>799
エイトクイーン昔やったんだけど。
暗算(?)で出来ちゃったよ。
マス書いてクイーン置いてってら出来た。
804デフォルトの名無しさん:04/11/12 21:18:45
>>801
一番効率の悪い置き方したらいくつくらいなんだろう?
805デフォルトの名無しさん:04/11/12 21:20:20
>>804
4
806デフォルトの名無しさん:04/11/12 21:21:16
>>801
一番ゆかいな置き方したらいくつくらいなんだろう?
807デフォルトの名無しさん:04/11/12 21:37:36
>>806
256
808デフォルトの名無しさん:04/11/12 22:56:23
>>778-779
せっかく提出するならこのぐらい。
int fact(int n){retrurn n?n*fact(n-1):1}
809デフォルトの名無しさん:04/11/12 23:21:41
適当な要素数の整数型の 1 次元配列を初期化し、全要素の合計を求めて表示するプログラムを教えてください。
ターミネータを用いる方法と、sizeofを用いる方法の両方をお願いします。
810デフォルトの名無しさん:04/11/12 23:26:05
>>809
関数内関数の本領発揮だ!
811デフォルトの名無しさん:04/11/12 23:31:06
大原ゆきさんに犯されたい
812デフォルトの名無しさん:04/11/12 23:38:49
#include <stdio.h>
int main(void){
int s[] ={1,23,6,38,14,6,3,54,44,3};
int i, n, sum= 0;
n = sizeof(s) / sizeof(int);
for (i = 0; i < n;i++)
sum += s[i];
printf("sum = %d\n", sum);
return 0;
}
813デフォルトの名無しさん:04/11/12 23:41:28
>>809
普通にやるとターミネータ(もしくは番兵、sentinel)の個数がsizeof()に含まれてしまうが・・・
その辺はどうなっとるの?
814デフォルトの名無しさん:04/11/12 23:43:34
>>809
usingterminator() {
    static int x[] = { 1, 2, -1 }, i, sum;
    for (i = 0; x[i] != -1; i++) sum += x[i];
    printf("sum= %d\n", sum);
}

usingsizeof() {
    static int x[] = { 1, 2 }, i, sum;
    for (i = 0; i < sizeof(x) / sizeof(x[0]); i++) sum += x[i];
    printf("sum= %d\n", sum);
}

main() { usingterminator(); usingsizeof(); }
815デフォルトの名無しさん:04/11/12 23:49:27
>>810-814
ありがとうございます。
816不明なデバイスさん:04/11/13 02:30:33
>>814
なんでstaticにしてんのかな?
変数が自動的に0に初期化されるから?
int main() {
usingterminator(); usingsizeof();
usingterminator(); usingsizeof();
}
を実行するとどうなる?
817816:04/11/13 02:33:11
return 0;
忘れてた… orz
818デフォルトの名無しさん:04/11/13 18:56:09

文字列を入力として受け付けて、その文字列中にabcという文字列が含まれていればyesを、
含まれていなければnoを出力せよ。ただし、文字列ライブラリは使ってはならない。

実行例
 ・ugabcftと入力 → yes
 ・abcと入力   → yes
 ・iunhabと入力 → yes

と、問題を出されました。
誰か解いて下さい。月曜夜までに。
819818:04/11/13 19:08:56
・iunhabと入力 → no

orz
820デフォルトの名無しさん:04/11/13 19:24:51
821デフォルトの名無しさん:04/11/13 19:25:35
strstrで速攻完了
822デフォルトの名無しさん:04/11/13 19:26:11
すま、ライブラリ使っちゃいけんのね
823デフォルトの名無しさん:04/11/13 19:47:21
>>820
スレタイトルをお読みください。
824デフォルトの名無しさん:04/11/13 20:06:06
strstrのソースを提出すれば
825818:04/11/13 21:08:20
>>820
ありがとうございます。

えっと、ちょこっとレスされてて何なんですど、結局
strstrっていうのは文字列ライブラリに入るんですか?
何か #include <string.h> が文字列ライブラリだー、
みたいな説明受けたんですが。

もうよくワカンネ('A`)
826デフォルトの名無しさん:04/11/13 21:14:54
>>825
文字列を検索するコードを自分で書くのが目的だから
string.hにあるstrstrを使うなってこと。
>>820のはそれを自作してあるから別に
関数名にstrstrが含まれてるからって関係ない。
827デフォルトの名無しさん:04/11/13 21:26:41
>>826
あー、なるほどー。
説明どうもです。
828デフォルトの名無しさん:04/11/13 21:37:15
C言語です。お願いします。
正整数nを入力するとn以下の正の偶数を計算するプログラムをwhile文とfor文
を用いたものをそれぞれつくれ。

829829:04/11/13 21:39:37
define EOF -1
int mojishirabe(char ss[], char str[])
{
int i, j=0, k;
for(;;){
i=0;
while(ss[i] != str[j] && ss[i] != '\0'){
i++;
}
if(ss[i] == '\0'){
return 0;
}
while(ss[i] == str[j] && str[j] != '\0'){
i++;
j++;
}
if(str[j] == '\0'){
return 1;
}
}
}
830829続き:04/11/13 21:40:19
int main(void)
{
int i, j, k;
char ss[80], str[80;
printf("入力される文字列中に"abc"が含まれているか判定します。\n");
printf("判定対称文字列を入力してください。\n");
printf("->");gets(ss);
if(mojishirabe(ss, "abc"){
printf("yes\n");
}else{
printf("no\n");
}
return 0;
}
831デフォルトの名無しさん:04/11/13 21:42:31
int i;
int n;
scanf("%d",n);
#ifdef WHILE_VER
i = 0;
while(++i <= n)
#else
for(i=1;i<=n;++i)
#endif
printf("%d\n",i);
832831:04/11/13 21:43:37
・・・偶数かすまん
833デフォルトの名無しさん:04/11/13 21:51:05
>>828
偶数を計算って
全部表示させろってこと?
合計ってこと?
834デフォルトの名無しさん:04/11/13 21:56:40
>>833
合計です。よろしくお願いします。
835デフォルトの名無しさん:04/11/13 21:59:04
while
#include <stdio.h>

int main(void)
{
int sum = 0, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
while(x){
sum += x;
x -= 2;
}
printf("sum = %d", sum);
return 0;
}
836デフォルトの名無しさん:04/11/13 22:05:56
for
#include <stdio.h>

int main(void)
{
int sum, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(sum = 0; x; x-=2){
sum += x;
}
printf("sum = %d", sum);
return 0;
}

xの値を変えたくなかったら
int main(void)
{
int sum = 0, x, i;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(i = x; i > 0; i-=2){
sum += i;
}
printf("sum = %d", sum);
return 0;
}
837デフォルトの名無しさん:04/11/13 22:08:44
if(x&1)x--; と if(x%2!=0)

って同じ意味ですか?
838デフォルトの名無しさん:04/11/13 22:11:39
if(x&1)x--; と if(x%2!=0)x--;ね。
学校じゃ後者の書き方しかしないだろうから一応。
839デフォルトの名無しさん:04/11/13 22:15:25
if(x%2) x--; でも同じ意味になりますわな
840デフォルトの名無しさん:04/11/13 22:16:18
学校でも x & 0x1 くらいすると思うが
841デフォルトの名無しさん:04/11/13 22:17:15
なるほど。あとwhile文の継続条件がxというのはxが0になったら
継続しなくなるということですか?

842デフォルトの名無しさん:04/11/13 22:20:28
>>841
そうだ。C では整数型が論理型の役目もする。
843デフォルトの名無しさん:04/11/13 22:23:06
はぁ〜。勉強になりました。ありがとうございました。
844818:04/11/13 22:53:01
>>829-830
お疲れ様です。ありがとうございます。

一つ注文といっては何ですが、このプログラムを
#include <stdio.h>
int main(void)
の2行から始めるように書き換える事って出来ますか?
845デフォルトの名無しさん:04/11/13 23:04:05
出来るけどmainの中が長たらしくて
分かりにくくなるぞ。
846デフォルトの名無しさん:04/11/13 23:10:47
エレガントな宿題まだー?
847818:04/11/13 23:12:53
>>845
それでも良いのでお願いします。
これが今習ってるスタイルなので。
848デフォルトの名無しさん:04/11/14 00:18:23
>>838
きょうび学校でも分岐は減らす方針で教えた方がいいのでは?
x-=(x%2);
x-=(x&1);
849デフォルトの名無しさん:04/11/14 00:21:25
>>836
エレガントってほどでもないけど・・・
for(sum=0,i=0; i<x; sum+=i,i+=2){}
850デフォルトの名無しさん:04/11/14 00:31:16
だんだん読みにくくなっててってねぇか?
851デフォルトの名無しさん
x/=2;