暇な人がエレガントにC/C++の宿題片づけます 33代目
プログラムの宿題を作るプログラムを作って下さい。
>>799 エイトクイーン昔やったんだけど。
暗算(?)で出来ちゃったよ。
マス書いてクイーン置いてってら出来た。
>>801 一番効率の悪い置き方したらいくつくらいなんだろう?
>>801 一番ゆかいな置き方したらいくつくらいなんだろう?
>>778-779 せっかく提出するならこのぐらい。
int fact(int n){retrurn n?n*fact(n-1):1}
809 :
デフォルトの名無しさん:04/11/12 23:21:41
適当な要素数の整数型の 1 次元配列を初期化し、全要素の合計を求めて表示するプログラムを教えてください。
ターミネータを用いる方法と、sizeofを用いる方法の両方をお願いします。
大原ゆきさんに犯されたい
#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;
}
>>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
>>814 なんでstaticにしてんのかな?
変数が自動的に0に初期化されるから?
int main() {
usingterminator(); usingsizeof();
usingterminator(); usingsizeof();
}
を実行するとどうなる?
return 0;
忘れてた… orz
問
文字列を入力として受け付けて、その文字列中にabcという文字列が含まれていればyesを、
含まれていなければnoを出力せよ。ただし、文字列ライブラリは使ってはならない。
実行例
・ugabcftと入力 → yes
・abcと入力 → yes
・iunhabと入力 → yes
と、問題を出されました。
誰か解いて下さい。月曜夜までに。
・iunhabと入力 → no
orz
strstrで速攻完了
すま、ライブラリ使っちゃいけんのね
strstrのソースを提出すれば
>>820 ありがとうございます。
えっと、ちょこっとレスされてて何なんですど、結局
strstrっていうのは文字列ライブラリに入るんですか?
何か #include <string.h> が文字列ライブラリだー、
みたいな説明受けたんですが。
もうよくワカンネ('A`)
>>825 文字列を検索するコードを自分で書くのが目的だから
string.hにあるstrstrを使うなってこと。
>>820のはそれを自作してあるから別に
関数名にstrstrが含まれてるからって関係ない。
828 :
デフォルトの名無しさん:04/11/13 21:37:15
C言語です。お願いします。
正整数nを入力するとn以下の正の偶数を計算するプログラムをwhile文とfor文
を用いたものをそれぞれつくれ。
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;
}
}
}
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;
}
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);
・・・偶数かすまん
>>828 偶数を計算って
全部表示させろってこと?
合計ってこと?
834 :
デフォルトの名無しさん:04/11/13 21:56:40
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;
}
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)
って同じ意味ですか?
if(x&1)x--; と if(x%2!=0)x--;ね。
学校じゃ後者の書き方しかしないだろうから一応。
if(x%2) x--; でも同じ意味になりますわな
学校でも x & 0x1 くらいすると思うが
841 :
デフォルトの名無しさん:04/11/13 22:17:15
なるほど。あとwhile文の継続条件がxというのはxが0になったら
継続しなくなるということですか?
>>841 そうだ。C では整数型が論理型の役目もする。
843 :
デフォルトの名無しさん:04/11/13 22:23:06
はぁ〜。勉強になりました。ありがとうございました。
>>829-830 お疲れ様です。ありがとうございます。
一つ注文といっては何ですが、このプログラムを
#include <stdio.h>
int main(void)
の2行から始めるように書き換える事って出来ますか?
出来るけどmainの中が長たらしくて
分かりにくくなるぞ。
エレガントな宿題まだー?
>>845 それでも良いのでお願いします。
これが今習ってるスタイルなので。
>>838 きょうび学校でも分岐は減らす方針で教えた方がいいのでは?
x-=(x%2);
x-=(x&1);
>>836 エレガントってほどでもないけど・・・
for(sum=0,i=0; i<x; sum+=i,i+=2){}
だんだん読みにくくなっててってねぇか?
x/=2;