C言語を組むときのレベルの指標として,初級・中級・上級にわけるとしたら
それぞれどの程度の能力が上記区分に相当するか知りたいです.
ナンセンスなことかもしれませんが,一つの目安として自分のスキルアップに
役立てたいのでご意見よろしく御願いします.

このQ&Aに関連する最新のQ&A

A 回答 (2件)

思い当たるチェックを作ってみました。


4つとも思い当たれば、その級です。初級になれなかったら初心者って事で。
★でも、なんの根拠もないので、あまり本気にしないで下さいね★

初級:
1.引数と戻り値のある関数をよく作る。
2.continue, break はどちらも使ったことがある。
3.配列はすごく便利だと思う。
4.分割コンパイルをやったことがある。

中級:
1.構造体をよく使う。
2.mallocやfreeをよく使う(別のものでもかまわない)。
3.typedefを使っている。
4.char **p; の意味がわからなかった頃が懐かしい。

上級:
1.再帰はわかりやすいと思う。
2.関数へのポインタを使ったことがある。
3.自分のプログラムとコメントは美しいと思う。
4.人からC言語に関する質問を何度もされた事がある。
    • good
    • 0

 えとですね。


 これは割と誰もが考えることなので、はっきりしてるとオモイマス(笑)

 初級 ――中級以下
 中級 ――ポインタを理解し、プログラム内で活用できる
 上級 ――他人のプログラムを解析し、デバッグできる。または、リファレンス本が1冊あればたいがいのことはできる。

 こんな感じじゃないでしょうか。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q優れたソースコードを読みたい(初級~中級)

優れたソースコードを読んでみたいんですけど、なにかいいwebサイトや書籍はないでしょうか?自分が書籍でよさそうだなあと思ったのは、「UNIXコマンドのソースコードにみる実践プログラミング手法」や「Code Reading」です。
ここいいぞ、とかこの本いいぞ、とかあればぜひ教えてほしいです。

Aベストアンサー

Ring Serverを覗けば、GNU関連のものをはじめとして、いろいろなプログラムのソースコードが見つかるはずです。

参考URL:http://www.ring.gr.jp/

Q1,1,2,3,5,8,13の合計

初心者ですみませんが、1,1,2,3,5,8,13の合計を出すプログラミングがどうしてもわかりません。どなたかご教示頂けましたら助かります。
宜しくお願いいたします。

Aベストアンサー

#include <stdio.h>

int main(void)
{
   printf("%d\n", 1+1+2+3+5+8+13);
}

Qmemcpy,memcmp,strcmp,strlen,strcat,

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char *p2 = str2;


while(n--){
*p1 = *p2;
p1++;
p2++;
}

return str1;
}
void *MyMemcmp(void *str1, void *str2)
{
char *p1 = (char*)str1;
char *p2 = (char*)str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
char *MyStrcmp(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
size_t MyStrlen(const char *str1)
{
char *p1 = (char*)str1;
size_t len = 0;

while(*p1 != NULL){
*p1++;
len++;
}

return len;
}
char *MyStrcat(char *str1, const char *str2)
{
char *p1 = str1;
char *p2 = (char*)str2;

while(*p1 != NULL){
*p1++;
}
while(*p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}

return str1;
}
char *MyStrcpy(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while( *p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}
*p1 = '\0';

return str1;
}
char *MyStrstr(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while(*p1 != *p2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;

}
char *MyStrchr(const char *str1, char str2)
{
char *p1 = (char*)str1;

while(*p1 != str2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;
}

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char...続きを読む

Aベストアンサー

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読すると

str1とstr2、それぞれの文字列の長さを比較。
→長さ等しい場合は (char *)NULL, 異なる場合は、長い方の文字列へのポインタを返す

と、strcmpとはまったく別の関数になっています。(strcmpは文字列の内容も比較し、結果を 負の整数,0,正の整数 (いずれもint型)で返します)


あと、明確な間違いというわけではないですが。
> while(*p1 != NULL){

大抵の処理系では NULL == '\0' == 0 として使えるけど、ヌルポインタとヌル文字はわけて考えた方がいいです。

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読...続きを読む

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む

Qゲームのnowloading,,,について

ゲームを作ろうとしているのですが「nowloading」の作り方がわかりません。わかる方いらしたら教えていただけないでしょうか。またこれにあった何かサイトありましたら教えてください。よろしくお願いします。

Aベストアンサー

画面に表示する方法が分れば自然と分ると思います。
それとも、「nowloading」を何らかのアニメーションしながらロードする方法を聞いてるんでしょうか?
もしアニメしながらロードする場合は、ロード処理をスレッドで行う必要があります。初心者には難しいところが多いスレッドですので、とりあえずロード処理を関数化してパラメータを1個の構造体ただけ済ますようにすると後で楽にスレッド化できます。

スレッドに関しては、スレッド、同期、mutex、クリティカスセクション等を勉強してください。
http://wisdom.sakura.ne.jp/system/winapi/win32/win143.html
http://wisdom.sakura.ne.jp/system/winapi/win32/win144.html
http://wisdom.sakura.ne.jp/system/winapi/win32/win145.html
http://wisdom.sakura.ne.jp/system/winapi/win32/win146.html
少なくともOSに関しての知識が必要になりますのでマルチプロセス/スレッドの勉強も同時に行ってくださいね。
こんな本がお勧め。
http://www.amazon.co.jp/exec/obidos/ASIN/4822228266/

画面に表示する方法が分れば自然と分ると思います。
それとも、「nowloading」を何らかのアニメーションしながらロードする方法を聞いてるんでしょうか?
もしアニメしながらロードする場合は、ロード処理をスレッドで行う必要があります。初心者には難しいところが多いスレッドですので、とりあえずロード処理を関数化してパラメータを1個の構造体ただけ済ますようにすると後で楽にスレッド化できます。

スレッドに関しては、スレッド、同期、mutex、クリティカスセクション等を勉強してください。
http:/...続きを読む


人気Q&Aランキング

おすすめ情報