C言語の問題集を作りませんか?

このエントリーをはてなブックマークに追加
1
C言語の問題集を作っ作りませんか?
2デフォルトの名無しさん:05/02/18 15:34:19
他力本願なの?
本当に作る気があるなら>>1が何か意見を書くべきでしょ?
3デフォルトの名無しさん:05/02/18 16:52:34
void氏ね
4:05/02/18 17:15:26
作ってみました
問題は計算プログラムを作れ
ttp://ibatasan.hp.infoseek.co.jp/kei.txt
こんなかんじで。
5デフォルトの名無しさん:05/02/18 17:26:50
fgets使えとまでは言わないがせめてこうしようぜ
#include<stdio.h>
int main()
{
    int a, b;
    char Operator;
    printf("何算をしますか?");
    scanf("%c", &Operator);
    printf("数を2つ入力してください");
    scanf("%d %d", &a, &b);
    switch (Operator)
    {
    case '+':
        c =a + b;
        break;
        case '-':
        c =a - b;
        break;
    case '*':
        c = a * b;
        break;
    case '/':
        c = a / b;
        break;
    default:
        printf("計算できません");
        return 1;
    }
    printf("%d %c %d = %d", a, Operator, b, c);
    return 0;
}
6デフォルトの名無しさん:05/02/18 17:45:26
問題1
・Kernighan の奥さんが、Kernighan に必死に隠し続けている「秘密」とは何か?

問題2
・Stroustrup の髪の毛の本数は何本?
7デフォルトの名無しさん:05/02/18 17:46:10
糞スレの削除依頼を自動で出すプログラムを作れ
8デフォルトの名無しさん:05/02/18 18:42:04
【じゃあ基本問題】
二つのint型の変数を入れ替える関数を作りなさい。
9デフォルトの名無しさん:05/02/18 18:56:52
int a = 0;
int b = 1;

void func(int *a, int *b){
int tmp;
tmp = *a ^ *b;
*a = tmp ^ *a;
*b = tmp ^ *b;
}
10デフォルトの名無しさん:05/02/18 19:14:17
>>9
だったらtmpいらなくね?

void func(int *a, int *b){
*b ^= *a;
*a ^= *b;
*b ^= *a;
}
11デフォルトの名無しさん:05/02/18 19:34:17
問題3
カーニハンとリッチーはどっちが偉いか?
12デフォルトの名無しさん:05/02/18 20:12:14
えらい方を先に書く。
13デフォルトの名無しさん:05/02/18 20:45:00
なぜCの標準ライブラリの文字列操作関数は糞ばかりなのか考察しなさい。
14デフォルトの名無しさん:05/02/18 21:08:39
>>10
int a =3;
func(&a, &a);
15デフォルトの名無しさん:05/02/18 21:54:58
>>9
わざわざ関数にするならa==bのときに無条件で返るようにすべきだろう
16デフォルトの名無しさん:05/02/19 00:57:27
17デフォルトの名無しさん:05/02/19 05:09:56
C言語の問題集なんて、プログラミング言語の中でもっとも本の数が多いうちのひとつなんじゃないの?
なんで>>1はCの問題集を作ろうとしたの?
18デフォルトの名無しさん:05/02/19 10:57:46
>>16
なるほどね。
余計な事せんで普通に退避させとけって事か。
19デフォルトの名無しさん:05/02/19 21:46:50
みんなでアイデアだして本じゃなくてwebに無料掲載すれば社内教育には使えるかもね。
20デフォルトの名無しさん:05/02/19 21:55:06
て言うかプログラム書かすのが一番でしょう。

21デフォルトの名無しさん:05/02/20 00:34:46
今日始めて知ったやり方。構造体のメンバに構造体のポインタを使う。

#include <stdio.h>

typedef struct
{
int zero; int one;
}Hoge;

typedef struct
{
int two; Hoge *hoge;
}Foo;

int main(void)
{
Hoge hoge = {1000, 1001};
Foo foo = {1002, &hoge};
Hoge hoge2[2] = {{2000, 2001},{2002, 2003}};
Foo foo2 = {2004, hoge2};

printf("%d\n", foo.hoge->one);
printf("%d\n", foo2.hoge[1].one);

return 0;
}
22デフォルトの名無しさん:05/02/20 01:32:02
void main()
{
 typedef void (*FUNC)();
 FUNC func =(FUNC)0xc3;
 func();

 unsigned int* pByte = (unsigned int*)main;
 printf( "%x\n", *pByte );
}

問題1:このソースから、( ) 演算子の仕組みを考察せよ。
問題2:このソースから、関数とは何かを考察せよ。

解答は漏れの能力では巧く書けん。
良い問題では無いが、これを見て1人でも多くのPGが '開眼' してくれれば幸いである。
23デフォルトの名無しさん:05/02/20 11:38:55
>>22 の回答
問題1:さっき、考察しますた
問題2:今、考察しますた
24デフォルトの名無しさん:05/02/20 13:31:10
問題:以下のような関数の宣言をかけ。

引数はvoid
戻り値は自分自身と同じ型の関数へのポインタ
25デフォルトの名無しさん:05/02/20 14:03:01
過去問 1.
int omanco(int a) {
 return (a%2)==(a&1);
}

関数omancoが0を返す事はありうるか?
あると答えた場合、その時の変数aの値の範囲を答えよ。
(東京ム養成健康大学)
26デフォルトの名無しさん:05/02/20 14:25:38
#include <stdio.h>

void main(void)
{
  char* p = "nullpo";
  
  printf("%c", 5[p]);
}

何が表示されますか?
根拠も一緒に述べよ。
27デフォルトの名無しさん:05/02/20 14:35:05
>>25
ある(かもしれない)。
a が負数の場合、結果は実装依存だから。

>>26
分からない。main の戻り値が void だから。
28デフォルトの名無しさん:05/02/20 17:18:58
ちょっとまてぃ
29デフォルトの名無しさん:05/02/20 22:18:44
oが表示される。
pは右辺の文字列の先頭アドレスを指しているが、
5[p]はp+5またはp[5]と同じである。

なんて嘘
30デフォルトの名無しさん:05/02/20 22:48:25
*(p+5)
31デフォルトの名無しさん:05/02/21 07:02:34
main の戻り値が void だから
32デフォルトの名無しさん:05/02/22 13:52:42
だれか >>22 の解説してください。

各行の処理内容は分かります。
でも、何がしたいのか、これでいったい何に「開眼」できるのかが分かりません。
2行目なんて、何が起こるか分からないし。
33デフォルトの名無しさん:05/02/22 15:36:22
>>32
>2行目なんて

>{
これのどこをどう解説しろと?
34デフォルトの名無しさん:05/02/22 17:45:22
2行目って

{

だよね。関数定義の中身の開始でよかったかな。
3532じゃないけど:05/02/22 18:01:41
ちょっと考えればわかる内容なのに、
こんなことでもいちいち上げ足取るのか
36デフォルトの名無しさん:05/02/22 18:04:11
>>34
「複文の開始」だな。
37デフォルトの名無しさん:05/02/22 18:24:50
4行目の
 FUNC func =(FUNC)0xc3;
としてもキャストと代入が起こるだけだと思うが。
38デフォルトの名無しさん:05/02/22 19:54:48
揚げ足取られるような不用意な発言するようじゃ仕様漏れしてもしかたないと思いたい
39デフォルトの名無しさん:05/02/22 20:33:52
【自由記述問題】
あなたの長所、短所、および希望する死にざまについて、C言語で論述せよ。
ただし、文字列や長い変数名等、自然言語による文章表現は好ましくなく減点とする。
<配点:技術点19点、芸術点23点>
40デフォルトの名無しさん:05/02/22 20:52:54
>>39
は一点
41デフォルトの名無しさん:05/02/22 21:40:35
#include <stdlib.h>

void main(void){
system("shutdown -h now");
}
4232:05/02/22 22:39:33
不用意な書き方をした私が悪かったです。

>>22 の 問題1、問題2の模範解答と、何に開眼できるのかを教えてください。
43デフォルトの名無しさん:05/02/23 02:29:49
>>42
別になにも開眼しないんじゃないかなあ。
その出題者って関数ポインタのことが理解できて嬉しかったんじゃないの。
44デフォルトの名無しさん:05/02/23 04:25:55
FUNC func =(FUNC)"\xc3";
の間違いだと思う
45デフォルトの名無しさん:05/02/23 04:59:20
2つの自然数の最大公約数を求める関数を作りなさい。
ただし、文字数をなるべく少なくすること。効率は度外視して良い。

(解答)
int f(int a,int b){return a*b?f(a%b,b%a):a+b;}
46デフォルトの名無しさん:05/02/23 07:37:54
>文字数をなるべく少なくすること。
intは省略できるだろ。
47デフォルトの名無しさん:05/02/23 08:51:01
f(a,b){return a?f(b%a,a):b;}
48デフォルトの名無しさん:05/02/23 14:11:02
>>47
すげー
49デフォルトの名無しさん:05/02/23 16:14:37
45のがしょぼすぎるだけw
50デフォルトの名無しさん:05/02/23 18:59:08
>>47
これは凄いな。28文字か。某所では30文字が限界と言われていたが。
さすがにこれ以上短いのは作れんだろ
51デフォルトの名無しさん:05/02/23 19:10:48
某所ってどこ?
52デフォルトの名無しさん:05/02/23 22:20:55
ソースが短くてもアセンブラレベルでは一緒な訳だが
53デフォルトの名無しさん:05/02/23 22:59:22
ワロス
54デフォルトの名無しさん:05/02/23 23:10:03
アセンブラレベルで短くするのもそれはそれでひとつの技術
55デフォルトの名無しさん:05/02/23 23:24:03
ジャジャーン!!問題ッッ!!!

int, char, double, int型のポインタ
全ての型で偽になる場合を書け!
56デフォルトの名無しさん:05/02/24 00:11:45
>>55
ありがとう。期待通りになりました。
57デフォルトの名無しさん:05/02/24 00:54:53
↓次の問題どうぞ
58デフォルトの名無しさん:05/02/24 01:10:49
標準ライブラリできるのから片っ端作って毛
59デフォルトの名無しさん:05/02/24 02:00:51
>ソースが短くてもアセンブラレベルでは一緒な訳だが
じゃあ、試しに比較してみたらpu
60デフォルトの名無しさん:05/02/24 22:39:39
問題:次の式の中で最も優先順位の高い演算子は何か。その演算子の機能を述べよ。

2 * f(x) ^ 3 + 1 > 0
61デフォルトの名無しさん:05/02/25 01:49:16
()
62デフォルトの名無しさん:05/03/02 13:23:50
この結果分かるかな?

#include<stdio.h>

staticvoidsub(void);

intmain()
{
chara[] = "abc", *b = "def";
char*x = a, *y = b;

printf("%s : %s\n", x, y);
sub();
return 0;
}

chara[]= "ghi", *b = "jkl";
char*x = a, *y = b;

voidsub()
{
chara[] = "mno", *b = "pqr";
char*x = a, *y = b;

printf("%s : %s\n", x, y);
return;
}

63デフォルトの名無しさん:05/03/02 18:21:32
#include <stdio.h>

static void sub(void);

int main()
{
    char a[] = "abc", *b = "def";
    char *x = a, *y = b;

    printf("%s : %s\n", x, y);
    sub();
    return 0;
}

char a[]= "ghi", *b = "jkl";
char *x = a, *y = b;

void sub()
{
    char a[] = "mno", *b = "pqr";
    char *x = a, *y = b;

    printf("%s : %s\n", x, y);
    return;
}
64デフォルトの名無しさん:05/03/02 18:35:13
>>63
制約条件違反かな?
グローバル変数は定数で初期化しないといけない。
65デフォルトの名無しさん:05/03/02 19:17:06
>63
Error! E1054: Expression must be constant
66デフォルトの名無しさん:05/03/02 22:20:17
>>63
あんがとね。
タブは消えちゃうみたいだね。

main()とsub()の間の二行の変数宣言をコメントアウトしてコンパイルしてみたら。
67デフォルトの名無しさん:05/03/02 22:33:22
それから、main()とsub()の間の二行目の変数宣言を

char *x = a;
char *y = b;

と分けて、どちらの行でエラーになるのか確かめてみて
68デフォルトの名無しさん:05/03/02 23:19:01
なぜ自分で試そうとしない?
6962,66,67:05/03/02 23:22:46
>>68
おいらがこの問題出したからだよ。
これをコンパイルしないで一発で分かったら、おそらく超ベテランだと思うよ。
普通は分からないだろうな。嫌な経験をとことんしてないと...。
70デフォルトの名無しさん:05/03/03 20:37:30
俺わかったよ
71デフォルトの名無しさん:05/03/03 22:04:02
perlじゃないんだからw
72デフォルトの名無しさん:05/03/03 23:09:02
>71 perlつながりで、
perlでbbs作るぐらいは出来るヤツのC言語の問題として
結城浩の C&Perlで学ぶ「CGIレッスン」 ttp://www.hyuki.com/cmcgi/

コードがダウンロードできるので
perlのコードだけ読んでCのコードは読まずに
自分で書き直してみるといいかもよ。
73デフォルトの名無しさん:05/03/03 23:42:30
>>69が何をいいたかったのかさっぱりわからん
だれか解説してくれ
74デフォルトの名無しさん:05/03/05 13:36:21
>>73
俺はスーパープログラマーだと言いたいらしい
75デフォルトの名無しさん:05/03/07 09:20:40
そいつは奇遇だな!俺もスーパープログラマッチョなんだ
76デフォルトの名無しさん:05/03/07 09:43:53
そういや、妹がスーパープログラムーだったな
77デフォルトの名無しさん :05/03/07 16:53:28
そういや、姉がスーパーマッチョだったな
78デフォルトの名無しさん:05/03/07 17:14:37
そういや、母がスーパーモンキーズだったな
79デフォルトの名無しさん:05/03/07 19:28:39
こんぴゅーたーおばあちゃん
80デフォルトの名無しさん:05/03/07 20:10:08
みんなのうた
81デフォルトの名無しさん:05/03/08 01:11:08
作成して頂けませんか?
@初項a0=10 公差d=3の等差数列でa0〜a10を出力するプログラム(配列使用)
Aキーボードより数値を入力し、ENTキーを押すと次々に確定された値を順に収納。入力が終えたらCtrl+Z(同時に押す)をおすと各配列に入った値を表示するプログラム
 while(入力した値!=EOF){処理する内容(配列の要素数を繰り上げてく):}
Bテストの点数(100点満点)を入力。各レベル(11段階)の人数を把握し出力するプログラム。数値入力の終了はCtrl+Zを押し、結果を出力するプログラム。
 実行結果例
     0点以上 10点未満 = 1人
    10点以上 20点未満 = 2人
    20点以上 30点未満 = 3人
    30点以上 40点未満 = 4人
    40点以上 50点未満 = 5人
    50点以上 60点未満 = 6人
    60点以上 70点未満 = 5人
    70点以上 80点未満 = 4人
    80点以上 90点未満 = 3人
    90点以上 100点未満= 2人
    100点        = 1人
C2つのint型変数を引数としてその和、差、積、商を計算し、結果をint型で返す4つの関数を作成。int型の引数はscanf関数で入力できるように。関数名は適当の名前で。
D関数を作成し、階乗のプログラムを作成。入力はscanf関数で。入力する値は1以上である。
   実行結果例
    5の階乗は120です。
E距離、角度を設定し、x方向、y方向の移動距離を求めるプログラム。
82デフォルトの名無しさん:05/03/08 09:09:43
どさくさに紛れて宿題キター!
83デフォルトの名無しさん:05/03/08 18:02:44
>>81
(1)

#include<stdio.h>

//初項
#define A0 10
//公差
#define D 3
//第n項まで
#define N 10

int main(void)
{
    int a0,d,i;
    int pg[N];

    a0=A0;d=D;

    for(i=0;i<N;i++){
        printf("a[%d]=%d\n",i,a0+(i*d));
    }
    return 0;
}
84デフォルトの名無しさん:05/03/08 22:39:41
念のため言っておくが、 >>81 は マルチ
85デフォルトの名無しさん:05/03/08 22:52:59
>>83
配列、宣言してるだけで使ってないぞ(w
86デフォルトの名無しさん:05/03/09 02:46:18
みのもんた
8783:05/03/09 05:25:36
>>85
確かにw
on_
88デフォルトの名無しさん:05/03/11 16:02:23
on_←脚長いな
89835:05/03/17 23:57:31
16進数を入力して、10進数に変換し、出力しなさい

実行結果


Input Num:
>11
17
Input Num:
>A0
160
Input Num:
>1111
4369
Input Num:
>FFFF
-1
90デフォルトの名無しさん:05/03/18 00:15:54
1FFFF は何になる?
91835:05/03/18 00:18:31
−1
92デフォルトの名無しさん:05/03/18 00:23:11
10000 は?
93デフォルトの名無しさん
-65536