1read 100read
2011年12月2期プログラム11: C言語なら俺に聞け(入門編)Part 93 (981) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
12: ★★Java質問・相談スレッド149★★ (972)
13: ゲームプログラムなら俺に聞け22 (502)
14: Perlについての質問箱 49箱目 (618)
15: Win32API質問箱 Build100 (720)

C言語なら俺に聞け(入門編)Part 93


1 :11/12/03 〜 最終レス :11/12/24
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 92
http://hibari.2ch.net/test/read.cgi/tech/1320933306/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 154代目
http://hibari.2ch.net/test/read.cgi/tech/1322562648/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/

2 :
すまない。1から22までの階乗を表示しろ
という課題なのだ。通信講座で、正直理解しないでやってる事が多い。
超初歩的なミス等があると思うので探して欲しい。
ちなみに今自分が理解していないと痛感している部分は、
ループ変数を関数に渡す という作業だと思う。
なのでその辺をざっくり教えて頂けるとありがたい。
諸事情で通信講座先の先生には聞くことができないのだ。
頼れる人が居なくて困っている。
暇な人がいたら返答よろしく頼みたい
#include<stdio.h>
double dr;
double ko = 0;
double hu(double ji)
{
ko = ko + ji * dr;
return ko;
}
void main()
{
double se;
se = 22;
for(se =0;se > 0; se--);
{
se = hu(se);
printf("%d\n",hu);
}
}

3 :
>>2
とりあえず突っ込みたいのは
なんで型をdoubleにしてるのか
seに22を代入してるのにすぐ直後のfor文で0を代入してるのはなぜか
for文のあとに;つけてると駄目だとか
drはmain内で使わないのか
そもそも動かしてみたのか
パッと見で気がついたのはこれぐらいか

4 :
>>2
3を踏まえた上でさらに突っ込みたいのがもう一点
ループの中で関数huへのポインタをprintfで出力しているがそれは何の意味があるのか
俺がパッと見で気がついたのはこれぐらいか

5 :
>>2
お前の中の階乗ってのはどういう計算なんだ?

6 :
>>2
なんで偉そうなの?
ググればいくらでも出てくるようなしょべえ課題じゃん

7 :
型がdoubleなのは22の階乗はintじゃオーバーフローするからだろ

8 :
http://codepad.org/B50qjioM

9 :
>>8
美しいな

10 :
無駄を省いてすっきりしたコードになってるな

11 :
こんなのろまなコードは使いものにならないね

12 :
>>11
何に使うつもなんだ?

13 :
>>12
物理の数値計算で

14 :
http://codepad.org/xNUNQgCD

15 :
>>14
そのres *= 10とかは全部res *= iでいいな。

16 :
2です みんな親切にありがとう!
高圧的な文章になってたみたいですみません
参考になります!

17 :
>>15
すごいバカが来たw

18 :
>>15
breakのないswitch書きたくなっただけだからさあ

19 :
i-- と言えばよかったのに

20 :
>>17
自己紹介乙。

21 :
>>20

22 :
ここまでおれのじえん

23 :
>>14のコードでres * =iにしたら、階乗じゃなくてiのi-1乗になるな

24 :
caseラベルと同じ値なのにか。

25 :
>>24
お前はcaseを何だと思ってるんだ

26 :
Wikiでここの住民が手分けして規格を翻訳したら何かに抵触します?

27 :
ここの住民w
やりたきゃお前一人でやれよw

28 :
>>26
著作権関連をクリアしないと

29 :
>>28
やはり著作権に抵触しますか。
自分はTOEIC600点程度ですが微力ながら貢献できるかなとは思ったのですが。

30 :
「公式な翻訳」と名乗らなければおk
規格を読んで理解した人が、
その理解に基づいて「私見を述べる」ことまで
誰かに許可を得る必要はない
# JIS があるのを知らないウルトラ情弱か
# 買えない乞食かはともかく

31 :
翻訳権というのがあるので単に翻訳しただけのものはNGだけどな。

32 :
P2Pでながせばおk

33 :
規格自体に著作件あるの?

34 :
>>30
JISって今、環境によって読めないから、それじゃね?
原因は分らんが俺も読めん
AdobeReaderは過去バージョンとかも試したのだが…

35 :
>>33
JIS は規格文に著作権があると言い張っているが、手続上は公文書のはずなので法的な根拠は希薄というのが結論。
最終的には所で争ってみないとわからない。
が、たぶん明確に争われたことは無い。
これって JIS 側にとってもにしちゃうのはリスクがあるから小規模に複製することまでは訴えないと思う。
もしもの結果で明確に著作権が認められないことになっちゃうと今の体制も否定されることになるわけだから。
ISO は規格に著作権を認めることを要求してる。
法律が国際条約と衝突する場合は国際条約が優先するものだけど、
ISO は単なる民間組織なのでたぶん日本国内でどこまで言えるものなのかはよくわかんないな。

36 :
著作権とかめんどくせーな
そのうち足し算にも権利があるとかいいはじめるぞあの糞ども
すべてフリーにしろフリー&オープンが唯一絶対の答えなのだ

37 :
アホっぽいな。

38 :
著作権法
第十条  この法律にいう著作物を例示すると、おおむね次のとおりである。
(中略)
九  プログラムの著作物
3  第一項第九号に掲げる著作物に対するこの法律による保護は、
その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。
ざっと読んだ限りでは規格自体に著作権があるかどうかは明記されてないっぽい。
仮に規格自体に著作権が認められたとしても、保護されないだろうけど。

39 :
int v;

40 :
そういえば、プログラムに著作権があるかどうかもめていた時代があったものだな

41 :
総当たりでバイト列生成して公開し続けるシステムを作ったら権利を独り占め出来るんですか?

42 :
もじれつ[5]={なると、たにし、まんぽ、、ぬるぽ};

43 :
>>41
残念。
それはすでに 1726-1735 に希代の天才によって考案されており、特許法29-1「特許出願前に日本国内又は外国において公然知られた発明」にあたり権利は発生しないだろう。
http://ja.wikipedia.org/wiki/%E3%82%B6%E3%83%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3

44 :
そのシステムに対する権利は発生しなくても
生成物であるあらゆるバイト列については権利が発生するのでは?
公然と知られた発明によって作られたデータに権利がないと仮にするのなら
オープンソースのアプリで描いた絵にも著作権が無いということになる

45 :
権利が発生するとしたら、その生成物であるバイト列に価値があると認められた時

46 :
C言語の暗黙の型変換に関して
代入や関数の引数へ渡すときに起きると思いますが
比較演算子の比較ときも同様に起きるのでしょうか?
また、swtich文のcaseに指定したときも起きるのでしょうか?
例)
long a;
short b;
switch(a){
case b: /* bはlongに変換されてaと比較される? */
・・・

47 :
>>46
caseで使えるのは、定数

48 :
>>47
おお、すみません失念してました 例を変えます
long a;
switch(a){
case 0x01: /* 0x01はlongに変換されてaと比較される? */
・・・

49 :
されません

50 :
なんとなくのサンプルコードを書いてみて
switchでの比較も 暗黙の型変換の対象になっていそう
と判断しました
http://codepad.org/zc7qtuO8
もしご存知の方がいたらこれが規格どおりなのか、未定義の動作なのか知りたいです

51 :
自分で調べられましたので勝手ですが結果を書いておきます
引用元:JIS X3010
6.8.4.2 switch 文
制御式に対して整数拡張を行う。各case ラベルの定数式を制御式の拡張後の型に型変換する。型変換
した値が拡張した制御式の値と一致する場合,制御はその一致したcase ラベルの直後の文に移る。
>>48の例でいうならやはりlongに変換されるようでした

52 :
その解釈なら double でもいけることになってしまう

53 :
>>52
> 整数拡張を行う

54 :
c言語の復習で、ポインタを使って関数にアドレス送って値入れるっていうプログラムを作ったのですが
セグメンテーションエラーになります。
どこが間違ってるのか分かりません。
回答お願いします。
#include <stdio.h>
void kansu(double *ratio2);
int main(void)
{
double *ratio;
kansu(ratio);
printf("%p\n", ratio);
printf("%f\n", *ratio);

return 0;
}
void kansu(double *ratio2)
{
*ratio2 = 3;
printf("%p\n", ratio2);
printf("%f\n", *ratio2);
}

55 :
int main(void)
{
double ratio;
kansu(&ratio);

56 :
> double *ratio;
ポインタを初期化してない。
ていうかポインタだけ用意してて実体がない。

57 :
>>55-56
あ、できました。
確かにmainでポインタにする意味がないですね
もう少し勉強しますありがとうございます

58 :
昔、zdnetの記者が知ったかぶりでポインタの解説記事を書いて、間違いを読者に指摘されて赤っ恥かいたことがある。
何が言いたいかって、要するにポインタなんて理解してなくてもプログラムを作れるから問題ないってことさ。

59 :
全部グローバル変数にすれば、おk

60 :
>>58
http://builder.japan.zdnet.com/script/sp_c-programming-language/20370255/
エピさんはc++の人だとおもってましたが、大奮闘です。

61 :
実際さ、ポインタのない言語で
void get2refs(int** a, int** b);
みたいに参照を2つ受け取りたいときってどうすんの?Javaとかみたいに。
戻り値だと1個しか受け取れないし、グローバル変数使うとマルチスレッドで困るし。
わざわざ専用の構造体作るのかな?

62 :
>>61
スレ違い。

63 :

ポインタ使わないでするにはどうしたらいいか?で、C言語の質問

64 :
>>61
参照を使います。

65 :
>>60
それ以外にもなんかおっさんが暴れ狂ってるやつがあったように思う

66 :
>>63
あんたは文盲か?

67 :
>61
perlはreturn に値2つ記述できると思った。
あとは別スレ行ってね。

68 :
構造体を返すのが一番良さそうだ

69 :
文字列を入力して、その中のスペースの数を返すプログラムを書きたいのですが、
スペースをどうやって判定すればいいかわかりません。
if文では無理なのでしょうか?↓現状
#include <stdio.h>
int countSpaces(char str[],int size){
int b=0;
int i;
for(i=0;i<size;i=i+1){
if(str[i]==''){
b=b+1;
}
}
return b;
}
int main(void){
char a[100],c;
int j;
printf("英語の文字列を入力:");
for(j=0;j<99;j=j+1){
scanf("%c",&a[j]);
if(a[j]=='\n'){
break;
}
}
a[j]='\0';
printf("スペースの数は%sです。\n",countSpaces(&a[0],100));
return 0;
}

70 :
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです
スペースの数は%sです

71 :
>>69
スペースをどこまでスペースとして判断するか(半角とか全角とかタブとか)である程度変わると思うが
文字コードで判定すればいいんじゃない?

72 :
おっと、ありがとうございます!
%dですね。

73 :
>>69
if(str[i]==''){
if(str[i] == ' '){ でいいと思うが。
て言うか、なにで開発してるのよ。
Visual Studio だと
c:\documents and settings\xxxx\my documents\temp\test\test\main.cpp(6): error C2137: 空の文字定数
って言われるんだが。

74 :
スペースは見落としやすい( >>73 が指摘してるみたいに
抜けてても気づきにくい)ので、自分なら、
if(str[i]=='\x20'){
ってするけどな。

75 :
isspace使おうぜ

76 :
isspacea()だと、タブとかも含まれるし、
scanf は改行も読んじゃうから、全部カウントされちゃうよ。

77 :
別にいいじゃないかそれで
スペースは'\x20'に限るという仕様でもないんだろ?

78 :
この場合は、そう考えるのが正常なのか・・・

79 :
タブはともかく、改行をカウントしちゃうのはどうなのかなぁ?
やっぱり単にスペースと言うと \x20 限定だと思うし。

80 :
0x20

81 :
ぽ0

82 :
ホワイトスペース

83 :
プリプロセッサで下記のような置換をしたいのですができますか?
T(value) -> value, value,
任意の数のvalueに置換

84 :
#include <stdio.h>
#define T(value) value, value
main(){
printf("%d %d", T(123));
}
たまにこんな感じのマクロ見かけると悪意しか感じないわ。

85 :
これが反日マスコミの編集による矮小化
176 :七つの海の名無しさん:2011/11/17(木) 21:57:56.45 ID:gClQt5ed
【重要】 ブータン国王の演説の報道は、重要な部分がことごとく反日マスコミにカットされて報道されています
「世界史において、かくも傑出し、重要性を持つ機関である日本国、(その)国会の中で、」 →★全部カット
「ブータン国民は、常に、日本に、強い、愛着の心を持ち、何十年もの間、偉大な日本の成功を →★全部カット
心情的に分かち合ってきました。」
「日本は、当時外国の領地(植民地)であったアジアに、自信とその進むべき道への自覚をもたらし
以降、日本のあとに続いて世界経済の最前線に躍り出た数多くの(アジアの)国々に希望を与えてきました」 →★全部カット
「日本は、過去においても、現代においても、世界のリーダーであり続けます」 
「このグローバル化した世界において、日本は、技術と革新の力、勤勉さと責務、強固な伝統的な価値における模範
であり、これまで以上にリーダーにふさわしいのです。」 →★全部カット
「世界は、常に、日本のことを、大変な名誉と誇り、そして規律を重んじる国民、歴史に裏打ちされた誇り高き伝統を持つ国民、
不屈の精神、断固たる決意、そして秀でることに願望を持って、何事にも取り組む国民、知行合一、兄弟愛や友人、
ゆるぎない強さと気丈さを併せ持つ国民、であると認識してまいりました」 →★全部カット
「他の国であれば、国家を打ちのめし、国家を打ち砕き、無秩序、大混乱、そして悲嘆をもたらしたであろう事態に
日本国民の皆様は、最悪の状況下でさえ、静かな尊厳、自信、規律、ここの強さを以って、対処されました」 →★全部カット
他にもカットシーンがたくさんあるので、ブータン国王の演説 でyoutube検索してください

86 :
>>74
if(str[i]==0x20){
ってすることはよくあるなぁ

87 :
int b;

88 :
配列のインデックスに負の値を使う意味ってある?
cに関してはググってもでてこない
アドレスは配列の先頭の一つ前を指してる事は分かったのだが

89 :
int n;

90 :
(´・ω・`)

91 :
>>88
例えば-1を特別扱いしないために配列top+1のアドレス相対で使うことはないこともない。
int a[100], *p = a + 1; x = p[-1];

92 :
a[-1]のつもりがa[0xFFFFFFFF]にアクセスしてたあの青春の1ページ

93 :
ポインタが64bitの環境でか。
まぁそんな環境じゃぁポインタ使うほとんどのプログラムは動かないだろうw

94 :
CPUが8086とかのころ、わざと桁あふれさせてメモリ先頭領域にアクセスしたりしてたな。

95 :
してたね。

96 :
p[-a];
とはあまり書かないけど
*(p-a);
ならしばしば使うね
というかアドレス計算でシコシコやる時は正だろうが負だろうが[]は使わない
[]を使うのは配列をそのまま要素の集合として扱うときだけ

97 :
>>91
納得出来ました
ソースは2つの配列があって、片方の配列の先頭をポインタの頭とした時、もう片方の配列の最後尾をそのポインタの[-1]で指してるような感じでした。
しかし紛らわしい使い方だ・・・

98 :
自前でアロケータ書く時とか、解放しようとするブロックのアドレスから
管理情報の位置を特定するために p[-sizeof(HEADER)] みたいな事する。

99 :
>>97
コンパイラが空気読まずに配列の間になんか挟んだら終わるな

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
12: ★★Java質問・相談スレッド149★★ (972)
13: ゲームプログラムなら俺に聞け22 (502)
14: Perlについての質問箱 49箱目 (618)
15: Win32API質問箱 Build100 (720)