[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 23:17 / Filesize : 116 KB / Number-of Response : 449
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 17



1 名前:デフォルトの名無しさん mailto:age [2007/07/24(火) 23:17:11 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 16
pc11.2ch.net/test/read.cgi/tech/1184003625/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 93代目
pc11.2ch.net/test/read.cgi/tech/1184506311/

196 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:12:11 ]
>>194
・だからfgets()で79を指定するのは当然、-1なのも当然
fgetsの第2引数はナルターミネータを含んだ長さ(即ち80)だと何度言えばわかってくれるんだ

197 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:22:44 ]
>>196
80を指定したら79まで(-1された数まで)文字が入るのはつまりそういうことだよね

ここがみんなの言ってた本の悪いところか…
それすらわかってなかった俺お先真っ暗

ちなみに本は「独習C 第3版」です
この本がやるからにはなにかあると思ったんだけど過信しすぎだったか

198 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:23:01 ]
すみません 質問をしたいのですが
コマンドラインから
「読込ファイル名」「出力ファイル名」を入力し
読込ファイル名は「絶対パス」「相対パス」「ファイル名」の3つを入力をします
「絶対パス」「相対パス」の中で
ディレクトリの読込権限 または
ファイルの読込権限がなかった場合を判定したいです。
access関数の使用をしているのですが
ディレクトリの読込権限をどのように判定すれば良いのか
どなたかご教授あ願い致します。


199 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:53:19 ]
>>198
access()はディレクトリにも使えるよ。

200 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 03:27:18 ]
>>198
ありがとうございます
ただ僕が悩んでいる所は
if(access(Yname ,R_OK)==0){
printf("読込可能ファイルアクセス権限があります");
}
if(access(Yname ,R_OK)!=0){    //←この部分の判断です
printf(""); //ここのメッセージは2つの可能性があります 
}

2度目の判断文で
ディレクトリでエラーが発生した場合は
「ディレクトリのアクセス権限がありません」と表示し
ファイルが存在したがアクセス権限がなかった場合は
「ファイルのアクセス権限がありません」
と表示したいです

読込エラー発生時に「ディレクトリ」で発生したのか
「ファイル読込」で発生したのかを判断したいのですが
どうにもうまく思いつきません。
もう少しヒントをお願い致します。




201 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 03:39:39 ]
>>200
www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
ディレクトリかどうかは、statで判定できるよ。

202 名前:198 mailto:sage [2007/07/29(日) 07:13:13 ]
>>201

ありがとうございます
ただ statを使って2つのエラーメッセージを使い分ける
方法がちょっと見えて来ないんですが
少し詳しくご教授お願い致します。

203 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 07:18:08 ]
>>202
ディレクトリとファイル名に分割してディレクトリを調べてみるしかないんじゃね?
#つーか、errnoじゃだめなんか?

204 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 07:36:49 ]
>>202
こんな感じかね。

if(access(Yname ,R_OK)!=0){
    struct stat sb;
    if (stat(Yname, &sb) == 0) {
        if (sb.st_mode & S_IFMT == S_IFDIR)
            puts("ディレクトリのアクセス権限がありません");
        else
            puts("ファイルのアクセス権限がありません");
    }





205 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 08:35:08 ]
>>203
>>204
ありがとうございます
「ファイル読込に失敗した時に」
「ファイルが存在する場合」 までは理解できたのですが
if (sb.st_mode & S_IFMT == S_IFDIR)
この部分がちょっと自身がないのですがこういった意味なのですか?
「ファイルの種類がディレクトリならば」と言う意味で

絶対パスでこのように指定した場合(erroeがアクセス権限なしのディレクトリ)
[ c:/dir/dir2/error/hoge.txt ]
[ c: ]にアクセス権限があるか?
[ dir ]にアクセス権限があるか?
[ dir2 ]にアクセス権限があるか?
[ error ]にアクセス権限があるか?
を if (sb.st_mode & S_IFMT == S_IFDIR)  の一文で調べ
[ error ]にアクセス権限がなかったため
puts("ディレクトリのアクセス権限がありません");
と表示されると言う事ですか?


206 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 08:57:52 ]
>>203

後 errno についても調べてみたのですが
機能としては  if(access(Yname ,R_OK)==0) などで
失敗をした場合にどんなエラーが発生をしたかを返す と言う事ですか?
C言語は始めたばかりでerrnoの存在を知らずに居たので
使えるかどうかはちょっと分からないです・・・

207 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 14:09:38 ]
すみません質問です。
static void test( lpfunc func )
{
(void) func;
}
のように関数のアドレスを受け取り、
代入も何もせずvoidにキャストしているだけ(?)の場合
どういう意味があるのか教えてください。



208 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:48:47 ]
>>207
それだけ見る限り、何の意味もなさそうだ。
func()としていればその関数を呼ぶことになるわけだが。

209 名前:207 mailto:sage [2007/07/29(日) 17:32:15 ]
>>208 
すみません情報が足りませんでした。

元のソースは以下になります。(nasm091)
static void bin_init (FILE *afp, efunc errfunc, ldfunc ldef)
{
fp = afp;

error = errfunc;
(void) ldef; /* placate optimisers */

start_point = 0; /* default */
textsect.contents = saa_init(1L);
datasect.contents = saa_init(1L);
textsect.length = datasect.length = 0;
textsect.index = seg_alloc();
datasect.index = seg_alloc();
bsslen = 0;
bssindex = seg_alloc();
relocs = NULL;
reloctail = &relocs;
}


210 名前:エスパー mailto:sage [2007/07/29(日) 17:39:11 ]
>>209
関数を改良してたらその引数は使わなくなった

でも、よそから使われてるから、いまさらインターフェイス変えられない

残してると、引数が使われてないとコンパイラが警告を出す

無意味に使ってやるか…


211 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:46:01 ]
placate optimisers って書いてあるから、コンパイラが出す「変数つかってねーぞ」っていう
ワーニングを抑制するための参照だろう。

212 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:48:32 ]
リロード(T=T)

213 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 17:51:41 ]
質問なのですが。
構造体の中の構造体の中にポインタの構造体を宣言しているのですが、
最下層であるポインタの構造体のメンバを出力させてたいのですが、..->ではないのでしょうか?
これだと何故かエラーになり...で出力できます。

214 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 17:55:33 ]
何言ってるか分からんが、言ってる通りなら -> だ
とりあえずソース貼れ



215 名前:207 mailto:sage [2007/07/29(日) 17:55:35 ]
>>210
>>211
よく分かりました。ありがとうございます。



216 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 19:06:35 ]
struct C{
int num5;
char str6;
char str7[20];
};

struct B{
int num3;
int num4;
srtuct C *c;
}

struct A {
int num1;
int num2;
struct B b;
}

これでC構造体のメンバを全て出力させてさせたいのですが、..−>では
エラーになり...でstr7などが何故か出力されます。

217 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:04:58 ]
何がいいたいのかわからんが

A a;
a.b.c->num5;
a.b.c->str6;
a.b.c->str7;

でよくね

218 名前:198 mailto:sage [2007/07/29(日) 20:34:19 ]
アロー演算子で出力出来なくて
ドット演算子で出力できる理由をしりたいのかな?



219 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:31:52 ]
構造体からはドット演算子、構造体のポインタからはアロー演算子。

220 名前:デフォルトの名無しさん [2007/07/29(日) 22:06:57 ]
ご丁寧に有難う御座います、しかし、...で出力されてアローがエラーになる理由がわかりません。
218さんわかりますでしょうか?


221 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:12:33 ]
再現する最低限の、確実にコンパイルできるソースを晒せ。

222 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:31:36 ]
>>53->>56
回答求む

223 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:34:23 ]
宿題スレ行け

224 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:34:51 ]
>>220
なりません。
だからとっととソースを晒せと



225 名前:デフォルトの名無しさん [2007/07/29(日) 22:50:36 ]
質問です。
4元1次連立方程式のデータはcとcheckの2つの配列に入力されますが、何故でしょうか?
また、1つの配列に入力して済ませる方法はありますか?宜しくお願いします。

void inputdata(double c[4][5],double check[4][5])
int ie ,ic;


226 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:55:01 ]
>>225
その質問に答えられるってどんなエスパーですかw

227 名前:デフォルトの名無しさん [2007/07/29(日) 22:58:25 ]
4元1次連立方程式ってなに?
調べるのめんどいからおせーて

228 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:04:38 0]
>>225
そんなんで分かるわけねーだろwww

229 名前:225 [2007/07/29(日) 23:09:32 0]
>>226
ゴメンなさいww何処まで書けばいいのやらで(汗

>>227
変数が四つ入ってる式のこと・・・だと思います。
例として・・・w+x+y+z=20 3w+x+y+5z=18 (w,x,y,zは全て変数)


230 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:15:55 0]
>>229
さぼらずに全部書け
ソースも書け
問題も書け
環境も書け
出題基も書け
何もかも書け
全て書け
とにかく書け

231 名前:225 [2007/07/29(日) 23:23:15 0]
以下、プログラムです。長くて申し訳ありません。
#include<stdio.h>
#include<math.h>
void inputdata (double [4][5],double [4][5]);
void calsol (double [4][5],double [4]);
void elimination (double [4][5],double [4][5]);
void pivot (int *,double [4][5],int *);
void outputdata (double[4]);
void checksol (double [4][5],double[4]);
main(){
double c[4][5],check[4][5],x[4];
inputdata(c,check);
calsol(c,x);
outputdata(x);
checksol(check,x);
return (0);
}
void inputdata(double c[4][5],double check[4][5]){
int ie ,ic;
printf("-----\n");
printf("Input Data\n");
printf("(a0*x0 + a1*x1 + a2*x2 + a3*x3 = a4)\n");
printf("\n");
for(ie=0;ie<=3;ie++){
printf("Equation %d\n",ie);
printf("Input a0 a1 a2 a3 a4\n");
for(ic=0;ic<=4;ic++){
scanf("%lf",&c[ie][ic]);
check[ie][ic] = c[ie][ic];
}
}
}

232 名前:225 [2007/07/29(日) 23:24:58 0]
続きです。
void calsol(double c[4][5],double x[4]){
double cc[4][5];
elimination(c,cc);
x[3]=cc[3][4];
x[2]=cc[2][4]-cc[2][3]*x[3];
x[1]=cc[1][4]-cc[1][3]*x[3]-cc[1][2]*x[2];
x[0]=cc[0][4]-cc[0][3]*x[3]-cc[0][2]*x[2]-cc[0][1]*x[1];
}
void elimination(double c[4][5],double cc[4][5]){
int ie,ic,ienew,imax,eli;
eli=0;
while(eli<4){
pivot (&eli,c,&imax);
cc[eli][eli]=1;
for(ie=eli+1;ie<=4;ie++){
cc[eli][ie]=c[imax][ie]/c[imax][eli];
}
ienew = 0;
for(ic=0;ic<=3-eli;ic++){
if(ie != imax){
for(ie=eli+1;ie<=4;ie++){
c[ienew][ie] = c[ic][ie]-cc[eli][ie]*c[ic][eli];
}
ienew = ienew + 1;
}
}
eli =eli + 1;
}
}

233 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:29:03 0]
>>225
>4元1次連立方程式のデータはcとcheckの2つの配列に入力されますが、何故でしょうか?

片方は、答えだした後、チェック用に使ってるだけじゃん
何が聞きたいのかよく分からんのだが…

234 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:31:29 0]
チェック用に使っている事を理解できなかったから質問したのでは?



235 名前:225 [2007/07/29(日) 23:44:36 0]
>>233
返信ありがとうございます。
検算用に使っているだけ、ということですか。わかりました。
検算の他に理由があるのかが分からなかったので質問させて頂きました。

これら二つをまとめてプログラムすることは可能でしょうか。

236 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:52:54 0]
1つの配列でどうやって検算するんだよ

237 名前:198 mailto:sage [2007/07/29(日) 23:55:19 0]
>>198です
ディレクトリのアクセス権限ですが以下の方法でやってみました
レビューをお願い致します。
絶対パスで[c:/dir1/dir2/yomikomi.txt]まで入力します。
ファイルの権限とディレクトリの権限を調べるにはこれで問題ないでしょうか?
お願い致します。

main(int argc , char *argv[]){
char *Yname = argv[1] , *Sagyou = argv[1];
struct stat sb, struct stat sa;
int Loop , LenYname = strlen(Yname);

for(Loop = LenYname ; Loop >= 0 ; Loop--){
if(Sagyou[Loop] == '/'){
Sagyou[Loop] = '\0';
break;
}
}
if(stat(Sagyou , &sa) == 0){
if(access(Sagyou , 04 /*R_OK*/)!=0)
puts("ディレクトリのアクセス権限がない");
}
if(stat(Yname, &sb) == 0) {
if(access(Yname , 04 /*R_OK*/)==0)
puts("ファイルのアクセス権限がある");
if(access(Yname ,04/*R_OK*/)!=0)
puts("ファイルのアクセス権限がない");
}
}
</pre>

238 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:09:22 ]
>>237
・YnameとSagyouが共にargv[1]を指してしまうので、Sagyou[Loop]に書き込むことでYnameとしても同様に短くなってしまう。
・できればargv[1]からのエリアはは書き変えないほうがいい。
・strcpy()やstrrchr()を使え。
・ディレクトリ区切りにバックスラッシュを使われたらどうするんだ?

239 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:36:52 ]
>>238
ありがとうございます
質問ですが
Yname と Sagyouはポインタを使わず配列を
使ったほうが良いという事ですか?

240 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:30:47 ]
んだね。

241 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 09:07:47 ]
#include<pic.h>
#include"delay.h"
main() {
unsigned short i=0;
unsigned short d[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
__CONFIG(XT & WDTDIS & PWRTEN & UNPROTECT);
__IDLOC(0100);

TRISA = 0x00;
TRISB = 0x00;
PORTA = 0x01;
PORTB = 0x00;

while(1){
if(RA3==1){DelayMs(500);}
if(RA3==1){i++;}
if(RA4==1){DelayMs(500);}
if(RA4==1){i--;}

PORTB=d[i];
if(i==10){
i=0;}
if(i=-1){
i=9;
}}}

242 名前:241 mailto:sage [2007/07/31(火) 09:18:24 ]
7セグLEDを光らすプログラムを作っていて、スイッチRA3を押すと+1、RA4を押すと-1で,
0123456789012...とループするプログラム作ろうとしているのですが、
一番最後にループするために代入する式を入れてからなんか動きがおかしくなりはじめました。
どうすれば直るでしょうか?

243 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 09:21:05 ]
>>242
if(i=-1)


244 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 09:43:05 ]
だから条件式はリテラルを先に置けとあれほど



245 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:15:50 ]
そんな気持ち悪い書きかたを人に強制するな

246 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:45:44 ]
コンパイル通らなくなって原因が分りやすいってのは利点なんだろうけど、どうにも受け付けない。

しょっちゅうそんなミスするわけでもないし、ミスっても大概のコンパイラで警告出るだろ。

247 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 11:04:18 ]
書いた人間がちゃんと警告を出せるコンパイラでチェックする手間と、
読む人間(書いた当人の数ヵ月後も含む)が毎回混乱する無駄を考えればどちらがいいかは一目瞭然。

248 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 11:09:00 ]
最近の人間はlintとか使わんわけ?

249 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 11:12:09 ]
そんなミスが頻発し、すぐに対応できずに混乱しちゃうようなら必須なのかもね。

250 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 11:13:54 ]
お前らんとこには優秀なコーダーが揃ってるんだな…

251 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 11:49:52 ]
= にしたら大抵警告が出るのに、リテラル前に書くメリットは皆無。

252 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 14:49:23 ]
while (num = fread(buf, size, max, fs)) {}
って書く時に警告でたらうっとおしくない?

リテラルは前に書くことはないけど

253 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 14:52:43 ]
>>250
俺を雇ってみる?
32歳実務経験なしだけど

254 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 14:54:24 ]
まあリテラルを前に書く習慣をつけるほど注意深い人は、
=と間違うミスはまずしないし、すぐ気がつくだろうという矛盾が



255 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 14:56:12 ]
>>252
while ((num = fread(buf, size, max, fs))) {}

256 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 15:23:46 ]
カッコがちょっとうっとおしいな

会社で演算子の優先度が分かりにくいから
条件式に全部カッコつけろって言われた
一般的にはそうなの?

257 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 15:43:53 ]
まぁ、論理演算子や関係演算子、ビットシフト演算子は括るのが多いかな。

258 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 15:45:20 ]
しまった、代入演算子もだ。

259 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:05:47 ]
ちょっとでも他人が迷いそうなやつはつけてる
優先順位表さっと見られる状態に無い場合もあるしな

260 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 16:12:24 ]
((A == B) && (C ==D)) || (E == F)

みたいな感じか?
流石に鬱陶しいから、俺ならこう書くけど。

(A == B && C == D) || E == F

このカッコは動作に影響はないけど書く。

261 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:38:21 ]
#include <stdio.h>

void func(int* num1, int* num2)
{
*num1+=1;
*num2++;
}

int main(void)
{
int num1=0;
int num2=0;

func(&num1, &num2);
printf("%d %d\n", num1, num2);

return 0;
}

なんでこのプログラムの実行結果はこうなりますか

262 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:45:55 ]
どうなるんだよ

263 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:45:57 ]
こうすれば期待通りかな?
(*num2)++;

264 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:50:09 ]
優先順位の話してるときに優先順位の質問が来たw



265 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:53:07 ]
>>263
なんでなんで?括弧がない場合は何がどうなってるの?

266 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:17:12 ]
*num2++と書くと演算子の優先順位から*(num2++)ということになる。

num2++;という式文は次のように書くのと同等。
num2 = &num2[1];
ポインタに対する増分演算子は、次の要素へ進むことを意味し、
普通は配列を指すポインタでないと使い道がない。

ようするに*num2++ではポインタ型の変数そのものの値を書き換えているが、
ポインタが指す値は読み取るだけで、書き換えてはいない。


267 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:45:18 ]
じゃあ括弧がない場合のprintfはnum2[1]の値が表示されるますか、あたまがこんがらがっちゃっちゃ

268 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:50:11 ]
いや、それはない。

func内のnum2とmain内のnum2は別の変数。
func内でnum2自身の値をいくら書き換えようとも、呼出元のmainへは反映されない。
下のプログラムで0と出力されるのと同じ理屈。
void f(int x)
{
  x = 7;
}

void g()
{
  int i = 0;
  f(i);
  printf("%d\n", i);
}

269 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:57:10 ]
*num2++;



*num2;
num2++;

と同じようなもんだと考えれば。

270 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:58:39 ]
入出力で「1文字」って場合、1バイト分を指すの?

271 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:00:04 ]
文脈による

272 名前:241 mailto:sage [2007/07/31(火) 21:13:26 ]
>>243
サンクス。やってみます。

273 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 22:29:54 ]
>>266>>268
簡潔かつ分かりやすい説明ありがとうございました。
なるほど。

274 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:18:39 ]
>>272
???



275 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:00:20 ]
質問
001 C言語によるプログラムの一般的な作成手順を述べよ。
002 C言語のプログラムのソースファイルの拡張子は何か。
003 ソースファイルからオブジェクトファイルを作ることを何というか。
004 オブジェクトファイルから実行ファイルを作ることを何というか。
005 講義で使ったコンパイラの名前を答えよ。
006 UNIX(LINUX)では実行ファイルの名前はどのようになるか。
007 デバッグとは何か。
008 C言語でプログラムに使う文字はどういうものか。
009 C言語の標準規格はどう呼ばれるか。
010 もっとも短い実行できるC言語のソースを書け。
011 main関数とは何か。
012 main関数の型は何か。
013 main関数の戻り値はどうなるか。
014 グローバル(大域)変数とローカル(局所)変数の違いを答えよ。
015 静的変数はどういうときに使われるか。
016 変数の基本データ型をいくつか答えよ。
017 初期値が1である整数変数iの宣言は。
018 変数のアドレスとは何か。
019 変数のアドレスを知るにはどうするか。
020 講義で使ったシステムの整数の範囲を答えよ。
021 配列(変数)とは何か。
022 100個宣言した配列(変数)の添え字の範囲は。


276 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:02:02 ]
023 配列(変数)の初期値はどのように設定するか。
024 2次元配列はどのように宣言するか。
025 2次元配列はどのように並んでいるか。
026 構造体とは何か。
027 typedefとstructの役割はどう違うか。
028 #includeとは何か。
029 #include <stdio.h>の<>の意味は。
030 ヘッダファイルとは何か。
031 ヘッダファイルの拡張子は何か。
032 コメントとは何か。
033 コメントをソースに記入するのにはどうするか。
034 代入i=1の式としての値は何になるか。
035 整数変数iを1増やすのにどういう方法があるか。
036 printf関数は何をする関数か。
037 printf関数のfの由来は。
038 printf関数で改行させたいときには何を使うか。
039 printf関数で文字配列sの文字列を表示させたいときにはどう書くか。
040 整数変数iの値が1のときprintf("%d",--i);printf("%d",i++);でどういう表示がされるか。
041 整数変数dにscanf関数で整数をキーボード入力させる文を書け。
042 文字配列にscanf関数でキーボード入力するとき気をつけるべきことは。
043 文字リテラル'A'の整数としての値は。
044 'c'-'C'の値はいくらになるか。

277 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:03:22 ]
045 文字の種類を判別するときにインクルードするヘッダファイルの名前は。
046 文字列と'\0'の関係は。
047 strcmp関数を使うときにインクルードするヘッダファイルの名前は。
048 文字列の長さを知るために使う関数は。
049 1*2+3の値はいくらになるか。
050 10%(-3)の値はいくらになるか。
051 ビット演算子の例をあげよ。
052 27&15の値はいくらになるか。
053 27|15の値はいくらになるか。
054 31>>2の値はいくらになるか。
055 int i,j;と宣言されているとき、&i-&jの絶対値はいくらか。
056 整数変数aの値が12から19までのときだけ「TEEN」の4文字を表示する文を書け。
057 (i>=0)?i:(-i)は何をする式か。
058 NULLとは何か。
059 for(i=0;i<10;i++)printf("!");という文では感嘆符は何回表示されるか。
060 for(i=10;i>-10;--i)if(i)printf("o");ではoは何文字表示されるか。
061 i=10;while(i){printf("+");--i;}では+は何文字表示されるか。
062 breakはfor,do,whileではどのような意味があるか。
063 continueはfor,do,whileではどのような意味があるか。
064 switch文ではcaseの最後にbreak文が必要なのはなぜか。
065 switch文でdefault:はどういう意味を持つか。
066 if(i==0){}else{printf("A");}を出来るだけ簡単に書き直せ。
067 関数のプロトタイプ宣言はなぜ必要か。
068 関数の値を返すのに使う予約語は。
069 ファイルを扱うときにインクルードするヘッダファイルの名前は。
070 ファイルを扱うときに使う構造体の型の名前は。

278 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:03:30 ]
>>53

279 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:04:26 ]
071 fopen関数の戻り値は何か。
072 fopen関数が実行に失敗するとどうなるか。
073 fprintf関数とprintf関数の引数の違いは。
074 fscanf関数で1行読み込むときの注意は。
075 getc関数はどのような引数と戻り値を持つ関数か。
076 EOFとは何か。
077 cが整数変数、fpが正しい状態でwhile(EOF!=(c=getc(fp)))printf("%c",c);を実行すると結果は。
078 fflush関数は何をする関数か。
079 fclose関数が実行に失敗するとどうなるか。
080 標準入力とは何か。
081 標準出力とは何か。
082 ファイル入出力でどのようなエラーが考えられるか。
083 マルチタスク環境でファイルをロックするとはどういうことか。
084 rand関数を扱うときにインクルードするヘッダファイルの名前は。
085 rand関数の返す整数の値はどのような名前で呼ばれるか。
086 擬似乱数のシードとは何か。
087 srand関数はrand関数とどのような関係にあるか。
088 32ビットのint型は10進数で何桁の精度になるか。

280 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:05:43 ]
089 float型は十進数でほぼ何桁の精度になるか。
090 double型は十進数でほぼ何桁の精度になるか。
091 プログラムの処理の手順を一般に何と呼ぶか。
092 自分自身を呼び出すプログラムの手法を何というか。
093 キュー(待ち行列)とはどのようなものか。
094 スタックとはどのようなものか。
095 オーバーフローとは何か。
096 アンダーフローとは何か。
097 いわゆるセグメンテーションフォルトで中断した後にできるファイルを一般に何というか。
098 C言語を作ったのは誰か。
099 C言語の祖先に当たるプログラム言語は。
100 C言語はどういう種類のプログラム言語か。

281 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:07:06 ]
>>53-56 を読んだら氏ね

282 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:09:33 ]
読みましたよ。同じですね。答え教えて。

283 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:12:40 ]
>>282
100回ググれ。全ての答えはそこにある。

284 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:13:14 ]
何しに来たの?
死ねよマジで



285 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:20:20 ]
なにしにって答え聞きに。

286 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:21:54 ]
殺伐中のところお邪魔しますよ

問題:指定したテキストを、タブをスペースに置き換えて別ファイルとしてコピーする

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *from, *to;
char ch;
int tab, count=0;

if(argc!=3) {
printf("<test> <コピー元> <コピー先>\n");
exit(1);
}

if( (from=fopen(argv[1], "r")) ==NULL) {
printf("コピー元ファイル %s が開けません。" , argv[1]);
exit(1);
}

if( (to=fopen(argv[2], "w")) ==NULL) {
printf("コピー先ファイル %s が開けません。" , argv[2]);
exit(1);
}


287 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:23:58 ]

while(!feof(from)) {
ch = fgetc(from);
if(ch=='\t') {
for(tab=count; tab<8; tab++)
fputc(' ' , to);
count=0;
}
else {
if(!feof(from)) fputc(ch, to);
count++;                 //※
if(count==8 || ch=='\n') count=0;  //※
}
}
fclose(from);
fclose(to);

return 0;
}

/* ここまで */

※の部分は何のために何の処理をしているんだろう

288 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:25:39 ]
>>285
学校(がっこう)の先生(せんせい)か、パパやママにきいてみよう!

289 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:26:54 ]
先生は教えてくれない。親は使えない

290 名前:286-287 mailto:sage [2007/08/01(水) 00:27:22 ]
見づらくなってしまった…すいません
あと、
tab<8

count==8
の8は何の数なんだろう

291 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:34:48 ]
>>290
実行して確認するとかしてみたのか?
「8」はタブ文字を8個のスペースにしてるだけだ。
for文の前後3行を読むだけでわかる。

292 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:36:33 ]
>>291
ということは別に8である必要はないのかな

293 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:38:31 ]
Windowsならデフォルトは8じゃないか?Linuxとかは知らん。
デフォルトって言葉が正しいかどうかは知らんが、メモ帳とかはそうだよな。
ってか、8が何かわからんかったら10にして実行してみろ。

294 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:47:45 ]
なるほど
サントス



295 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:55:01 ]
俺のはシカト?

296 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:08:45 ]
おーい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<116KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef