これからの季節に親子でハイキング! >>

大学生です。初歩的なc言語を学ぶ講義があるのですが、訳あって受けられなくなったので、独学でいこうかなと思っています。

初心者の大学生が1年程度受ける講義の内容は、独学でも難しいですか?

独学経験者、プログラミングに詳しい方の意見を伺いたいです。

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

A 回答 (4件)

それは大丈夫でしょう。


最初はC言語入門的な書籍から入ってもいいし、真髄を学びたければカーニハン&リッチーの定番から読むのもいいし、プライマーから入ってもいいし。

ただ、コードを書くだけではダメなので、構造化プログラミングとか、コンパイラとか、ゆくゆくはオブジェクト指向とかに入っていかないといけません。
    • good
    • 0

>大学生が1年程度受ける講義の内容は、独学でも難しいですか?


自動車教習での仮免練習ぐらいの難しさ。
上手い人はどんどん上達するが、そうでない人はそれなりにしか...
    • good
    • 0

週1時間の授業で1年勉強したとして、年間40時間勉強したとしても


ソフトウエア開発会社に入って研修を受けたら、1日8時間ずつなら
5日間、1日4時間なら10日間。
大学で学ぶのはそのぐらいの量です。

授業での勉強だけでは、完璧に使いこなせるとは限りません。
運転免許を取ってすぐにレースで好成績を上げられないのと同じ。
    • good
    • 0

>>初心者の大学生が1年程度受ける講義の内容は、独学でも難しいですか?



大学の講義がどんなレベルか判らないので、独学でなんとかなるかどうか判りませんね。
ただ、C言語は、向き・不向きがあるようです。
ポインターが理解できる人と、いつまでたっても理解できない人がいます。
まあ、学生が、文系、理系と分けられるようなものでしょうか?
あなたが、いくつかのコードを書いて、ポインタを理解できたら、独学でも大丈夫です。
そうでないなら難しいでしょう。
    • good
    • 0

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

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

QC言語はどこまでゲームを作り込むことができますか?

ゲームを作っているのですが、使用しているソフトではパフォーマンスに少し満足できません。
なのでC言語を学ぼうと思ったのですがC言語は、例えばACTが作れるとか、どのくらいまで作れるとか。
逆にRPGとかは作れないみたいな、そういった限界がどこまであるのかわかりますか?

Aベストアンサー

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


ですが、あなたが言う「作れる」とはニュアンスが違うと思います。

C言語自体は、とても低機能です。
そのツールが持っているような機能、例えば「画面にキャラクターを表示する」といったものはありません。
「水平に弾を発射」と設定すればいいだけのものが、
「一定時間毎に座標を少しずつ変化させて表示。画面外に出たら廃棄」
といった感じの、細かく分解する必要があります。
(これでも不十分で、「一定時間毎」ってどうやる?「画面外」とは?等と、より細かく分解しなければなりません)

結局、C言語で作る、ということは、「今使っているツールと同じようなものを自作する」のと同じことです。


また、C言語は速い、と誤解されているようです。
「無駄を省く等のチューニングができる場合がある」から「速くなるかもしれない」だけです。
そのツールでも、パフォーマンスは考慮されているでしょう。
C言語で書いても、何の対策もしていないなら、ツール以下のパフォーマンスになることもあります。

C言語に限界はありません。
限界は、プログラマの方にあります。
C言語に変えたら全て解決、といった単純な話ではありませんので、覚悟してください。


CPUは、機械語しか理解できません。
全てのプログラムは、機械語に翻訳されるか、「プログラミング言語を解釈して実行するプログラム」を使って実行されます。

C言語は、大体前者で、しかも、 機械語とほぼ同等なことができるように作られています。
なので、原理的には、今あるコンピュータゲームは、ほぼ全てC言語で作ることができる、となります。


です...続きを読む

Qメッセージの頭に「#」の意味教えてください

メッセージの頭に「#」の意味教えてください

Aベストアンサー

言語にもよりますがコメント文に利用されることが多いですね
ただC系ではありません

QCのプログラムに無性にイライラするのはおかしいですか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  hn[ p[0] ]++;
 }
}

3重にするならせめて、y,x,i の順にしてp[0]への代入は1回で済ませればと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++){
  p[0] = img -> imageData[img->widthStep* y + x*3 ];  //B(青色)
  for( i=0; i<256; i++){
     if(p[0]==i){hn[i]++;}
  }
 }
}

最近のコンパイラの最適化では、私の書いたようなコーディング(修正?)は無意味なのでしょうか?

CQ出版のインタフェース 2017-5 の記事のプログラム例に
for( i=0; i<256; i++){
 for( y =0; y < Y; y++ ){
  for( x = 0; x < X; x++){
   p[0] = img -> imageData[img->widthStep* y + x*3 ]; //B(青色)
   if(p[0]==i){hn[i]++;}
  }
 }
}
がありました。このリストを見て、無性にイライラするのは私だけでしょうか?

なぜ、i,y,x の3重のループで処理しないといけないのか、y,xの2重ループで十分ではないかと思います。

for( y =0; y < Y; y++ ){
 for( x = 0; x < X; x++)...続きを読む

Aベストアンサー

利点を考えてみました


これを並列処理したときに
スレッド0: hn[0] に p[0] = 0 をカウント
スレッド1: hn[1] に p[0] = 1 をカウント
...
とすれば、
・img -> imageData は読み出すだけなので衝突しない
・hn[i] でアクセスする領域は、スレッド毎に i が違うので、同じ箇所に書き込まれることはない。
となり、排他処理が不要となります。
(もちろん、x,y,i,p[0]はスレッドでローカルな変数とします)

ただ、並列処理のオーバーヘッドや同時並列処理数等を考えると、こんな並列処理はしない方が効率的です。


あるいは、hn[]がシークに時間がかかる領域の場合、
hn[p[0]) で毎回違う位置を探しに行って、その時間が無視できないほどだったら、
先にhnを決めてしまった方が速くなるでしょう。

こちらも、非現実的です。

QC言語 型変換のタイミング

C言語 型変換のタイミングについて教えてください。
「型変換は代入のとき行われる」と理解していたのですが、代入の前の計算時も行われるのでしょうか?

char c1=120,c2=10;
int i;
のとき、
i = c1 + c2;
は i= -126 を期待したのですが i = 130 となっていました。

質問1)これは、C言語の仕様でしょうか? それともコンパイラに任されている仕様でしょうか?

関連して、
質問2)期待した計算結果をiに代入するには、
char c3;
c3 = c1 + c2; i=c3;
とする以外に方法ありますか?

質問3)計算途中でオーバーフローする可能性のある計算を確実の行うにはどのように記述したらよいでしょう?
int x0,x1,x2,x3;
x0 = (x1 + x2 + x3) / 3;
x0 = x1 * x2 / x3; (ただしx2 < x3)

よろしくお願いします。

Aベストアンサー

1 については C の仕様です. 計算を行うときに, int 以下の型はすべて int (または unsigned int) に変換したうえで計算されます. したがって
i = c1 + c2;
はあたかも
i = (int)c1 + (int)c2;
と書いたのと同じ計算をします.

2 は
i = (char)(c1+c2);
のように演算結果を強引にキャストすればいい, んじゃないかなと思う.

3 については.... ポータブルにやるなら努力と根性で多倍長演算を実装するしかないんじゃないかなぁ.

あ, あと余談だけど C の仕様では
char は*少なくとも*8ビット
です.

Qc言語プログラミング

2つの符号なし整数a,bを受け取りaをbで割った余りを整数で出力するプログラムを記述するにはどのようにすればいいですか?
キーワード: 剰余演算子

Aベストアンサー

c=a%b

Qc言語

c言語って本読んで勉強してもどこに保存するのかわかりません。
メモ帳で拡張子.cで保存すればいいのでしょうか
初歩的ですいませんがお願い致します

Aベストアンサー

Cのプログラムの作成とコンパイルの手順
http://guppy.eng.kagawa-u.ac.jp/~kagawa/2011/Programming1/dosPrompt.html

で紹介されている、bcc32というボーランド社製のコンパイラは現在、

プログラムの作成
C++ Compiler - FREE TOOL
https://www.embarcadero.com/jp/free-tools/ccompiler/start-for-free

になっていると思います。

Borland C++ Compilerのダウンロードとインストール - Windows環境
http://webkaru.net/clang/borland-c-compiler-install/

Borland C++ Compilerの設定 - Windows環境
http://webkaru.net/clang/borland-c-compiler-how-to-use/

を見てコンパイラのパスを設定すれば、
フォルダに保存した拡張子cなどのファイルをコンパイル出来るようになります。

Cのプログラムの作成とコンパイルの手順
http://guppy.eng.kagawa-u.ac.jp/~kagawa/2011/Programming1/dosPrompt.html

で紹介されている、bcc32というボーランド社製のコンパイラは現在、

プログラムの作成
C++ Compiler - FREE TOOL
https://www.embarcadero.com/jp/free-tools/ccompiler/start-for-free

になっていると思います。

Borland C++ Compilerのダウンロードとインストール - Windows環境
http://webkaru.net/clang/borland-c-compiler-install/

Borland C++ Compilerの設定 - Windows環境
http:/...続きを読む

QC/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。 例えばですが、関数

C/C++言語で変数名から変数のアドレスを取得する方法があれば、ご教示願います。

例えばですが、関数GetProcAddress()は、関数の文字列からエクスポート済みの関数のアドレスを戻り値で返しています。
GetProcAddress()と同じようにアドレスを取得したい変数名の文字列を渡して、変数のアドレスを取得したいです。

よろしくお願いします。

Aベストアンサー

無理です。

C/C++ はコンパイルした時点で変数名は捨てられて自動採番の識別子に置き換えられるので。

ただし、「どうしても変数名から」というときのために「マクロ引数の文字列化」を巧みに利用してそれらしい挙動をさせるためのコードはよく見ます。
詳しくはググってください。

参考になればよろしいんですが。

QC言語のビジュアルスタジオについて ビジュアルスタジオをパソコンでインストールしました。 しかし、ビ

C言語のビジュアルスタジオについて

ビジュアルスタジオをパソコンでインストールしました。
しかし、ビルドができません。
最初に空のソリューションをつくり
つぎに新しい項目を追加し、テキストファイルで追加しましたができません

どうしたら良いですか

Aベストアンサー

内部で動いてるnmakeが実行する内容が何処かに表示、あるいはファイルに出力されていますので、それを見てnmakeの動きを追ってください。
ところで今使ってらっしゃるのはVisualStudioCodeにC/C++の開発環境を設定したものでしょうか

Qプログラマー 契約社員

プログラマーとして契約社員で入社した会社で即戦力とならなければ契約満了するケースは多いですか?

育てるという概念は新卒のみに適用で中途入社は即戦力になりえなければ契約満了という形が多いですか?

Aベストアンサー

契約社員は中途入社とは違います。
中途入社でも育てますが、契約社員は使えなければ交換してもらうことは多いです。
まぁ年齢とかその人の資質にもよりますので一概には言えないと思いますが。

QC言語 a * b / c の計算

特に困っているわけではないのですが、エレガントな方法が見つからないので質問します。

a,c は32ビット、bは8ビット、0<a≦c、0<b がわかっているとします。
このとき、8ビットの整数計算値 a * b / c を「最大32ビットの範囲」で計算する方法、教えてください。
一応C言語で考えていますので、以下の***の部分の具体的な計算方法がわかればうれしいです。

int a,c; // 32bit 符号付き整数
signed char b,d; // 8bit 符号付き整数
if(a<2^(32-8)) d = a * b /c;
else **** ← この部分のプログラム

Aベストアンサー

決してエレガントではありませんが、a, cは正でありしかし符号付の型だという前提で a * b / c の整数の商を求めるのであれば、最初にa - cを求めて一時変数に代入しておき、bの数だけループし、ループ中に一時変数にaを加え、それがc以上になったらdを1加えて一時変数からcを引き去ることを繰り返せば、間違いなくすべての数値は32ビット以内に収まると思います。CPUにALUしかない時代の発想で、歳がばれますね・・・


人気Q&Aランキング