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と関連する良く見られている質問

QB21のヒロミ

B21のヒロミってなんでテレビでなくなったんですか?

Aベストアンサー

出る必要もないからかもしれませんね

今はスポーツジムを経営して、インストラクターをやってるんでしたよね

一年ほど前に、島田紳助さんの行列の出来る~に出てましたよ

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

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

Aベストアンサー

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

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

Qb21スペシャルのヒロミについて

なぜ、一時期、ほされてたんですか?

Aベストアンサー

しくじり先生 2015年7月20日 ヒロミ
https://youtu.be/Z51ehR-eIDo

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);
}

QNOVAのレベル

NOVAのレベル

NOVAに英会話教室に通ったことがなく、留学経験もない学生さん(18歳以上)がやってきた場合、大体最初はどのレベルに振り分けられるのですか。感覚でパーセントを埋めてください。
レベル7C= %

レベル7B= %

レベル7A= %

レベル6= %

レベル5= %

レベル4= %

レベル3= %

Aベストアンサー

 %で語ることは、ほぼ不可能です。しかし、最低ランクから始まる可能性については、なんとか考えてみます。

 昔の「鬼軍曹がしごくNOVA」時代しか、最初に行うレベルチェック知らないんですが、相当に独り練習した人が(1年くらい一生懸命独学だが対人練習なし)、良くやれた感じがしても、最低ランク(最下位レベルの7に3、さらに3つあるレベルの最下位のC)からスタートすることが多かったようです。準備が足りない人も同様。
 英会話未経験だと、それ以前に頑張っていても、8割方は最低ランクからでしょうね。多分ですが、会話でどの程度やれるか、スクール側が慎重だったようです。ある条件を満たさない限り、認定レベル(資格みたいなものですね)を下げることができないからだろうと思います。上へのレベル認定は容易ですし、生徒も喜ぶのでスクール側も気にしてないようです。
 なんにせよ最下位ランクとされても、入学前の努力如何で、その後に差はあります。

 独習で準備していた人は不慣れだっただけなので、瞬く間にレベルがあがります。1レッスンでレベルアップ推薦も少なくありません。

 準備不足の人はそれなりのレベルアップしかしません。

 実地の英会話経験がある人は、それ相応というしかありません。

 現在のNOVAは、以前は生徒は生徒、「しっかり頑張らないと評価しないよ」でしたが、今は「生徒はお客さま感覚」があるようで、最初のレベルチェックも、かなり甘めのようです。以前と比べると、「この程度と言っては悪いけど、これだけしか喋れない人が、どうしてこのレベルに?」「どうして講師は、こういうことを注意したり、間違いを指摘したりしないのか?」と、古参は首をかしげているようですね。

 もしかすると、今のNOVAは客離れを恐れていて、最初のレベルチェックも、勧誘行為に含まれてしまっているかもしれません。もしそうなら、最下位ランクには認定することはなくなっていて、少なくともその一つ上が事実上の最下位ランクになってるでしょうね。
 形式上は一番下のランクは使わないけど初心者はそこだ、と「お客さま」に誤認させるためのものとなっていて、その一つ上が事実上の最下位ランク。

 そしてスタッフが「かなりできるじゃないですか! 少なくとも一から始める必要がないですよ!」と、「お客さま」を喜ばせるのでしょう。そうだとしたら、8割は最下位から一つ上が、上記の昔のような感じとなっているんでしょうね。しかし昔なら、普通程度に頑張って何年も続けたらたどり着ける最高位のレベル3、ここまで行くとペラペラだったんですが、今は喋れないレベル3がごろごろいます。現状はもっと客を甘やかすかもしれません。

 %で語ることは、ほぼ不可能です。しかし、最低ランクから始まる可能性については、なんとか考えてみます。

 昔の「鬼軍曹がしごくNOVA」時代しか、最初に行うレベルチェック知らないんですが、相当に独り練習した人が(1年くらい一生懸命独学だが対人練習なし)、良くやれた感じがしても、最低ランク(最下位レベルの7に3、さらに3つあるレベルの最下位のC)からスタートすることが多かったようです。準備が足りない人も同様。
 英会話未経験だと、それ以前に頑張っていても、8割方は最低ランクからでし...続きを読む

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)
プログラムを解読...続きを読む

Q同じ時間でゲームのレベル1から、レベル90に追いつく?

よくゲームとか、ネットゲームでレベル1とレベル90とレベルアップで差がある場合があるよね。
レベル1から2だと経験値が150なのに、90から91だと150000とかな場合。
この場合って、同じプレイ時間としていつか同じレベルになれる?
なれるけど、めちゃめちゃプレイ時間がかかる?

Aベストアンサー

同じ方法で同じ点数を1レベルの人と90レベルの人が経験値を得る場合、追いつく事はできません。同じ経験値なら90レベルまでに要した経験値の分だけ、90レベルに人が常に上になります。
ただ、レベルアップに必要な経験値が上昇して、その差が殆ど無くなることはあるかもしれません。90レベルの人があと1点でレベルアップできる時に、1レベルだった人が丁度90レベルになるといった具合に

実際になんレベルで追いつくかはゲームによって異なります。

Qc言語プログラミングでアルファベットの一覧を5,10,15,20,25文字目については大文字、それ以

c言語プログラミングでアルファベットの一覧を5,10,15,20,25文字目については大文字、それ以外は小文字で表示するプログラムを作成できる方お願いします
char x;
for(x=0;x<26;x++)
[
if(x%2==0) printf(”%c”___);
else printf(”%c”,___);
]

ここまで作ったんですけど、下線部がわかりません
あと、違っている箇所があれば教えいただける方お願いします

Aベストアンサー

No.2修正
前:    if ((pt - ss + 1) % 5 == 0) {
後:    if (!((pt - ss + 1) % 5)) {

Qポケモン 育てるなら低いレベルから育てた方がいい?

こんばんは。
ポケットモンスターダイヤモンド・パールの質問です。レベル100でのステータスはゲットした時のレベルによって異なってくるのでしょうか?(努力値等は考えずに)
例えばレベル5のピカチューと、レベル10のピカチューをそれぞれゲットして育てていくとすると、低いレベルから育てているレベル5のピカチューの方が強くなるのでしょうか?
分かる方いらっしゃいましたら御願いします。

Aベストアンサー

能力値は、レベルアップの時にランダムで加算されていく物ではなく、
レベルや性格、個体値や努力値などの計算によって算出されるので、
レベルが違っても、2匹が同じ個体値や性格、同じように入れた努力値なら、
同じように成長していくでしょう。

レベルアップ時に出てくる表示は、その時に加算された数値ではなく、
その時にどう上昇したかの目安です。
レベルアップはしなくても、努力値を変化させてパソコンに預けると、
その時点で目に見える能力値が変化している事もあります。
つまりパソコンに預けた段階でも、能力値の計算を行っているのでしょう。

個体値や性格は、そのポケモンを捕まえた時点で決定され、
以降操作はできないので、同じように育てて同じ能力値になるかどうかは、
この個体値や性格の違いになるでしょう。

ちなみに「こせい」は、高い個体値を表す表示のようなものです。
「こせい」から能力の上昇率が変化するのではなく、
高い個体値を参考に、「こせい」が表示されます。

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&Aランキング