ページ 1 / 1
短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 12:59
by きらりん
こんにちは。
今回C言語の最初の方からポインターあたりまでを総復習したいなと思ったのですが、本当の初心者向けのサイトだと退屈っていうのもあってどこか良いサイトないかなーって思って探してみたのですが、条件が条件だけに見つかりませんでした。
というのも、この度、プログラマーのアルバイトに申し込んでみて今度筆記試験があるのです。聞いた話では、Cのポインターまでを理解していて30ステップ程のプログラムを1本書くという試験らしいので基礎を知っているだけだとどうしても力不足な気がしています。ですから問題レベルそのものはまったくわからないです。
ここはどうかな?っていうサイトがあったら是非教えて頂ける嬉しく思います。
アヤフヤな文章ですみません;
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:07
by たいちう
> 聞いた話では、Cのポインターまでを理解していて30ステップ程のプログラムを
> 1本書くという試験らしいので基礎を知っているだけだとどうしても力不足な気がしています。
基礎を知っていれば、その程度の試験は問題ないはず。
力不足だと思うならば、基礎ができていないのでしょう。
仕事としてプログラムを作るつもりならば、短期間とか退屈とか言わずに、
しっかりと基礎を身に着けることをお勧めします。ていうか身に着けてください。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:10
by Haru
ある程度、理解していて、復習をしたいという事であれば、
練習問題等をやってみた方が退屈もしないし良いのではないでしょうか?
わからないときに、「本当の初心者向けのサイト」で復習をする。
という形が一番良いのではないでしょうか?
http://www.geocities.jp/kenji_y0328/crenshu/index.html
#内容は読んでないでないので知らないです^^; すいません。。。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:12
by きらりん
>>基礎を知っていれば、その程度の試験は問題ないはず。
>>力不足だと思うならば、基礎ができていないのでしょう。
その発想はありませんでした・・・。今までC言語自体を勉強するというよりゲームを作っていく中で覚えてきたので確かに基礎ができてるかって言われるとできてないのかもしれません。
>>仕事としてプログラムを作るつもりならば、短期間とか退屈とか言わずに、
>>しっかりと基礎を身に着けることをお勧めします。ていうか身に着けてください。
すみません;;身に付けますorz
一応C独習だけは所持しているのですが、これだけでも十分でしょうか?
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:15
by きらりん
>>Haruさん
サイトアドレス有難うございます^^
面白そうなのでこのサイトを一通りやってみようと思います。
こういった問題は解いたことないので苦戦しそうです><
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:17
by Mikan
サイトでは無いのですが、今月の日経ソフトウエアという雑誌の
特別付録がC言語でプログラミングの基礎を学ぼう!というのでした。
一度見てみてはいかがでしょう?
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 13:21
by きらりん
>>Mikanさん
中身を見てよさげだったら購入してみます^^
有難うございます。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 14:44
by Dixq (管理人)
もし、解説サイトの問題が退屈なら、
ここで、常連の方に問題を出題してもらうというのはどうでしょう?
復習がしたいなら、参考書を読み返せばいいと思いますが、
ある程度わかっていたら、演習のほうが大事なきがします。
また、プログラムって人によって書き方色々ですし、自分が書いたソースコードが厳密にあってるかは案外解らない事が多いと思います。
私も先日指摘されるまで
i = (++i)%3;
のような書き方が間違いであること知りませんでした・・・。
書いたコードを人に見てもらうことも良い経験になるかと思います。
見てもらうと思うと張り切れるかもしれませんしね。
それに「○○についての知識が足りないよ」と指摘受ければそこを重点的に復習すればよいこともわかるかもしれません。
ではさしあたり・・・
「4つの整数を入力し、その4つの整数の共通する最大公約数を求めて表示するプログラムを書きなさい」
という問題はどうでしょう?
丁度30行位で書けそうです。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 15:44
by きらりん
>>管理人さん
問題有難うございます^^
最大公約数の問題は解いたことあったんですけど、出し方忘れてて苦労しましたorz
一応動いたんですけど調べるに調べにくかったので万能に動くかどうかはちょっとわかりません。
自分が動かしたうちではちゃんと動いてたように見えました。
//=============================================================================
#include <stdio.h>
int main(void);
/* 最大公約数を求める関数 */
int maxmax(int x,int y){
int temp;
while( x % y != 0){
temp = x % y;
x = y;
y = temp;
}
return y;
}
int main(void){
int n1,n2,n3,n4,max;
printf( "整数1:" );
scanf( "%d", &n1 );
printf( "整数2:" );
scanf( "%d", &n2 );
printf( "整数3:" );
scanf( "%d", &n3 );
printf( "整数4:" );
scanf( "%d", &n4 );
max = maxmax(n1,n2);
max = maxmax(n3,max);
max = maxmax(n4,max);
printf( "四つの整数の最大公約数は%d\n", max );
return 0;
}
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 16:06
by Dixq (管理人)
お疲れ様です。
正確に入力を行えば正常に表示されているようです。
ただ、マイナスを入力したり、文字を入力したりすると誤作動しますね。
後、scanf,printfが連続している部分や、maxmaxを呼んでいる部分などはループでまとめられそうです。
余力があれば「エラー処理、可読性の向上、効率化の向上」この辺をしっかり行っていったらよいと思います。
まぁ今回の場合は、練習問題を沢山行った方がいいかもしれませんので、とりあえず保留でもいいかもしれません。
これくらいの問題が難なく解けるようでしたら、C言語プログラミング検定1級の問題を解いてみてはどうでしょう?
難易度的にはそこまで難しくはありません。めっちゃめんどくさいんですけどね・・。
http://www.sikaku.gr.jp/js/side3/scon04.html
めんどくさい問題ですけど、やってみると、今まで足りなかった経験が補われるかもしれません。
もし継続して問題解きたい場合は以下どうぞ
問題1.アルファベットの「Q」をprintfで「*」とスペースを書くことによって描け
問題2.任意の人数ほど、身長、体重を入力し、入力し終わったらそのデータをグラフで表現するプログラムをかけ
例:
学生1の身長と体重を入力して下さい。
178,60
学生2の身長と体重を入力して下さい。
162,52
...
(中略)
身長の分布グラフ
191~ :*
181~190:***
171~180:******
161~170:****
~160:**
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 17:12
by kazuoni
例題っぽくて、楽しいものはライフゲームですかね^^;
ついちょっと前に作ったんですけどww
なんだか動きが目に見えて楽しくプログラミングできた記憶があります。
これが復習につながるかどうかわからないですけど。。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 17:13
by lbfuvab
組んでみました。
#include<stdio.h>
int GCV2(int x,int y); //原型宣言
int GCV(int x,int y){ //GCV2を呼び出す為だけの関数
if(x>y)
return GCV2(x,y);
else
return GCV2(y,x);
}
int GCV2(int x,int y){
if(y==0)
return x;
else
return GCV2(y,x%y);
}
int main(){
int n[4],i,max;
for(i=0;i<4;i++){
while(1){
printf("非負の整数%d:",i+1);
scanf("%d",&n);
if(n>0)
break;
puts("入力エラー");
}
}
max=n[0];
for(i=1;i<4;i++)
max=GCV(n,max);
printf("最大公約数は%d\n",max);
return 0;
}
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 19:07
by きらりん
>>管理人さま
プログラム検定というものがあるのですか。ちょっと目を通してみようと思います^^
問題有難うございます。
問題1の方はちょっとprintf連打して無理やりAAみたいに書く方法しか思いつかなかったのでスルーしたので
問題2の方を解いてみました。あまりエラー処理に対応できてないですorz
桁数えさせる必要があったので、問題に縛り形式でやってみました。
#include <stdio.h>
int main(void);
#define MAX 10
#define star 5
void gra(int x){
int i;
for(i=0;i<x;i++)
printf("*");
}
int main(void){
double player[MAX];
int sintyo[sta[/url] = {0,0,0,0};
/* 191~ :[0],
181~190:[1],
171~180:[2],
161~170:[3],
~160:[4]
*/
int taiju[sta[/url] = {0};
/* 81~ :[0],
71~80:[1],
61~70:[2],
51~60:[3],
~50:[4]
*/
int i;
for(i = 0; i < MAX ; i++ ){
do{
printf("学生%dの身長と体重を入力してください\n(身長は100以上999以下,体重は10以上 99以下まで)\n(例 身長160 体重60の場合・・・ 160.60):",i);
scanf("%lf", &player);
}while(player<0);
if(191<=(int)(player)){ ++sintyo[0]; }
else if(181<=(int)(player)){ ++sintyo[1]; }
else if(171<=(int)(player)){ ++sintyo[2]; }
else if(161<=(int)(player)){ ++sintyo[3]; }
else { ++sintyo[4]; }
if(81 <= 100*(player-(int)(player))) { ++taiju[0]; }
else if(71 <= 100*(player-(int)(player))) { ++taiju[1]; }
else if(61 <= 100*(player[i]-(int)(player[i]))) { ++taiju[2]; }
else if(51 <= 100*(player[i]-(int)(player[i]))) { ++taiju[3]; }
else { ++taiju[4]; }
}
printf("身長の分布グラフ\n");
printf("191~ :"); gra(sintyo[0]);
printf("\n181~190:"); gra(sintyo[1]);
printf("\n171~180:"); gra(sintyo[2]);
printf("\n161~170:"); gra(sintyo[3]);
printf("\n ~160:"); gra(sintyo[4]);
printf("\n\n体重の分布グラフ\n");
printf("81~ :"); gra(taiju[0]);
printf("\n71~80:"); gra(taiju[1]);
printf("\n61~70:"); gra(taiju[2]);
printf("\n51~60:"); gra(taiju[3]);
printf("\n ~50:"); gra(taiju[4]);
printf("\n");
return 0;
}
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月02日(月) 19:13
by きらりん
>>kazuoniさん
ライフゲームですか・・・ちょっとぐぐってみたのですが難しそうで時間もかかりそうなので今回はスルーしようかと思います。でもなんか楽しそうですね・・・w
>>lbfuvabさん
エラー処理の参考になりました^^有難うございます。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月03日(火) 15:30
by Dixq (管理人)
遅くなりました・・。
お疲れ様です。
結果確認してみました。
(中略)
学生2の身長と体重を入力してください
身長は100以上999以下,体重は10以上 99以下まで)
例 身長160 体重60の場合・・・ 160.60):200.120
(中略)
学生9の身長と体重を入力してください
身長は100以上999以下,体重は10以上 99以下まで)
例 身長160 体重60の場合・・・ 160.60):190.90
体重の分布グラフ
81~ :*
71~80:**
61~70:**
51~60:**
~50:***
体重81以上のデータを2回入力しているのに、1人分しか表示されていない場合などがありました。
しかし珍しいデータの入力の仕方をしますね^^;
double型はのちにintと比較したい場合、不都合が起きる場合があるのできちんとint2つの変数に入れたほうがよさそうです。
というのも、こんなことがあるからです。
#include <stdio.h>
int main(void){
double a = 190.66;
int b = 190;
a = (a - b) * 100;
printf("%.13f",a);
return 0;
}
実行結果
65.9999999999997
後、なるべくループで、処理できるところはループで処理したいですね。
何度も似たようなif文を書くのは出来るだけ避けたいところです。
なお、コードはプレタグをつかって投稿して下さい。このままだと見にくいので。
Re:短期間でC言語の復習しやすいサイトについて
Posted: 2009年2月04日(水) 15:21
by きらりん
>>管理人様
こんなことになるのですか・・・w
これからは注意します。
if文のところ確かにループにできますね。。。気づきませんでした;
プレタブ仕様になおしました。醜くてすみませんorz
現在Haruさんの出してくれたサイトの問題を解いていってます。
後ろのほうになるとわからないものが多くて良い勉強になっています。
とりあえずはこのサイトの方はクリアしてみようかと思います。