C言語の問題集を作っ作りませんか?
2 :
デフォルトの名無しさん:05/02/18 15:34:19
他力本願なの?
本当に作る気があるなら
>>1が何か意見を書くべきでしょ?
void氏ね
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;
}
問題1
・Kernighan の奥さんが、Kernighan に必死に隠し続けている「秘密」とは何か?
問題2
・Stroustrup の髪の毛の本数は何本?
糞スレの削除依頼を自動で出すプログラムを作れ
【じゃあ基本問題】
二つのint型の変数を入れ替える関数を作りなさい。
int a = 0;
int b = 1;
void func(int *a, int *b){
int tmp;
tmp = *a ^ *b;
*a = tmp ^ *a;
*b = tmp ^ *b;
}
>>9 だったらtmpいらなくね?
void func(int *a, int *b){
*b ^= *a;
*a ^= *b;
*b ^= *a;
}
問題3
カーニハンとリッチーはどっちが偉いか?
えらい方を先に書く。
13 :
デフォルトの名無しさん:05/02/18 20:45:00
なぜCの標準ライブラリの文字列操作関数は糞ばかりなのか考察しなさい。
>>10 int a =3;
func(&a, &a);
>>9 わざわざ関数にするならa==bのときに無条件で返るようにすべきだろう
17 :
デフォルトの名無しさん:05/02/19 05:09:56
C言語の問題集なんて、プログラミング言語の中でもっとも本の数が多いうちのひとつなんじゃないの?
なんで
>>1はCの問題集を作ろうとしたの?
>>16 なるほどね。
余計な事せんで普通に退避させとけって事か。
19 :
デフォルトの名無しさん:05/02/19 21:46:50
みんなでアイデアだして本じゃなくてwebに無料掲載すれば社内教育には使えるかもね。
20 :
デフォルトの名無しさん:05/02/19 21:55:06
て言うかプログラム書かすのが一番でしょう。
今日始めて知ったやり方。構造体のメンバに構造体のポインタを使う。
#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;
}
void main()
{
typedef void (*FUNC)();
FUNC func =(FUNC)0xc3;
func();
unsigned int* pByte = (unsigned int*)main;
printf( "%x\n", *pByte );
}
問題1:このソースから、( ) 演算子の仕組みを考察せよ。
問題2:このソースから、関数とは何かを考察せよ。
解答は漏れの能力では巧く書けん。
良い問題では無いが、これを見て1人でも多くのPGが '開眼' してくれれば幸いである。
>>22 の回答
問題1:さっき、考察しますた
問題2:今、考察しますた
24 :
デフォルトの名無しさん:05/02/20 13:31:10
問題:以下のような関数の宣言をかけ。
引数はvoid
戻り値は自分自身と同じ型の関数へのポインタ
過去問 1.
int omanco(int a) {
return (a%2)==(a&1);
}
関数omancoが0を返す事はありうるか?
あると答えた場合、その時の変数aの値の範囲を答えよ。
(東京ム養成健康大学)
#include <stdio.h>
void main(void)
{
char* p = "nullpo";
printf("%c", 5[p]);
}
何が表示されますか?
根拠も一緒に述べよ。
>>25 ある(かもしれない)。
a が負数の場合、結果は実装依存だから。
>>26 分からない。main の戻り値が void だから。
ちょっとまてぃ
oが表示される。
pは右辺の文字列の先頭アドレスを指しているが、
5[p]はp+5またはp[5]と同じである。
なんて嘘
*(p+5)
main の戻り値が void だから
32 :
デフォルトの名無しさん:05/02/22 13:52:42
だれか
>>22 の解説してください。
各行の処理内容は分かります。
でも、何がしたいのか、これでいったい何に「開眼」できるのかが分かりません。
2行目なんて、何が起こるか分からないし。
>>32 >2行目なんて
>{
これのどこをどう解説しろと?
2行目って
{
だよね。関数定義の中身の開始でよかったかな。
ちょっと考えればわかる内容なのに、
こんなことでもいちいち上げ足取るのか
37 :
デフォルトの名無しさん:05/02/22 18:24:50
4行目の
FUNC func =(FUNC)0xc3;
としてもキャストと代入が起こるだけだと思うが。
揚げ足取られるような不用意な発言するようじゃ仕様漏れしてもしかたないと思いたい
【自由記述問題】
あなたの長所、短所、および希望する死にざまについて、C言語で論述せよ。
ただし、文字列や長い変数名等、自然言語による文章表現は好ましくなく減点とする。
<配点:技術点19点、芸術点23点>
41 :
デフォルトの名無しさん:05/02/22 21:40:35
#include <stdlib.h>
void main(void){
system("shutdown -h now");
}
不用意な書き方をした私が悪かったです。
>>22 の 問題1、問題2の模範解答と、何に開眼できるのかを教えてください。
>>42 別になにも開眼しないんじゃないかなあ。
その出題者って関数ポインタのことが理解できて嬉しかったんじゃないの。
FUNC func =(FUNC)"\xc3";
の間違いだと思う
2つの自然数の最大公約数を求める関数を作りなさい。
ただし、文字数をなるべく少なくすること。効率は度外視して良い。
(解答)
int f(int a,int b){return a*b?f(a%b,b%a):a+b;}
>文字数をなるべく少なくすること。
intは省略できるだろ。
f(a,b){return a?f(b%a,a):b;}
45のがしょぼすぎるだけw
>>47 これは凄いな。28文字か。某所では30文字が限界と言われていたが。
さすがにこれ以上短いのは作れんだろ
某所ってどこ?
ソースが短くてもアセンブラレベルでは一緒な訳だが
ワロス
アセンブラレベルで短くするのもそれはそれでひとつの技術
ジャジャーン!!問題ッッ!!!
int, char, double, int型のポインタ
全ての型で偽になる場合を書け!
↓次の問題どうぞ
標準ライブラリできるのから片っ端作って毛
>ソースが短くてもアセンブラレベルでは一緒な訳だが
じゃあ、試しに比較してみたらpu
問題:次の式の中で最も優先順位の高い演算子は何か。その演算子の機能を述べよ。
2 * f(x) ^ 3 + 1 > 0
()
この結果分かるかな?
#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;
}
>>63 制約条件違反かな?
グローバル変数は定数で初期化しないといけない。
>63
Error! E1054: Expression must be constant
>>63 あんがとね。
タブは消えちゃうみたいだね。
main()とsub()の間の二行の変数宣言をコメントアウトしてコンパイルしてみたら。
それから、main()とsub()の間の二行目の変数宣言を
char *x = a;
char *y = b;
と分けて、どちらの行でエラーになるのか確かめてみて
なぜ自分で試そうとしない?
>>68 おいらがこの問題出したからだよ。
これをコンパイルしないで一発で分かったら、おそらく超ベテランだと思うよ。
普通は分からないだろうな。嫌な経験をとことんしてないと...。
俺わかったよ
71 :
デフォルトの名無しさん:05/03/03 22:04:02
perlじゃないんだからw
>71 perlつながりで、
perlでbbs作るぐらいは出来るヤツのC言語の問題として
結城浩の C&Perlで学ぶ「CGIレッスン」
ttp://www.hyuki.com/cmcgi/ コードがダウンロードできるので
perlのコードだけ読んでCのコードは読まずに
自分で書き直してみるといいかもよ。
>>69が何をいいたかったのかさっぱりわからん
だれか解説してくれ
>>73 俺はスーパープログラマーだと言いたいらしい
そいつは奇遇だな!俺もスーパープログラマッチョなんだ
そういや、妹がスーパープログラムーだったな
77 :
デフォルトの名無しさん :05/03/07 16:53:28
そういや、姉がスーパーマッチョだったな
そういや、母がスーパーモンキーズだったな
こんぴゅーたーおばあちゃん
80 :
デフォルトの名無しさん:05/03/07 20:10:08
みんなのうた
作成して頂けませんか?
①初項a0=10 公差d=3の等差数列でa0~a10を出力するプログラム(配列使用)
②キーボードより数値を入力し、ENTキーを押すと次々に確定された値を順に収納。入力が終えたらCtrl+Z(同時に押す)をおすと各配列に入った値を表示するプログラム
while(入力した値!=EOF){処理する内容(配列の要素数を繰り上げてく):}
③テストの点数(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人
④2つのint型変数を引数としてその和、差、積、商を計算し、結果をint型で返す4つの関数を作成。int型の引数はscanf関数で入力できるように。関数名は適当の名前で。
⑤関数を作成し、階乗のプログラムを作成。入力はscanf関数で。入力する値は1以上である。
実行結果例
5の階乗は120です。
⑥距離、角度を設定し、x方向、y方向の移動距離を求めるプログラム。
どさくさに紛れて宿題キター!
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;
}
86 :
デフォルトの名無しさん:05/03/09 02:46:18
みのもんた
on_←脚長いな
89 :
835:05/03/17 23:57:31
16進数を入力して、10進数に変換し、出力しなさい
実行結果
Input Num:
>11
17
Input Num:
>A0
160
Input Num:
>1111
4369
Input Num:
>FFFF
-1
1FFFF は何になる?
91 :
835:05/03/18 00:18:31
-1
10000 は?
-65536