C言語なら俺に聞け 144
■ このスレッドは過去ログ倉庫に格納されています
配列に空白を入れるというのは、配列のどこかに、空白文字の文字コードを表す整数値を入れるという意味になる。 文字コードは、文字リテラルか整数リテラルで指定できる。 配列の初期化で int arr[10] = {}; と空に書くのは本来は行儀悪いことなんだな int arr[10] = {0}; と最低1個は書かないとだめなのか cの初心者抜け出したいんだがgithubってのを使えばいいの? (アスキーコードを使ってる仮定で) SPC文字 と 整数32 は等価 より大きいサイズへの整数への格上げも素直に行われるだろう long a = ' '; long b = 32; // a と b は等しい 元質問 >>565 「long型の配列に空白を入れることは可能でしょうか?」における 空白とはなんぞや?が ' ' でいいのかどうかは知らん >>579 min という変数がポインタだとして、min の指し示すところに 100 を代入する、という意味になる 部分だけではよくわからない場合もあるので、可能ならば全体を https://ideone.com に張ってもらえると、もっと解説できるかもしれない ロング型に文字入れてもprintfできないのに何の意味があるのか分からん 上位ビットのほうををフラグに使って下位は文字そのまんまかもしれんじゃん まぁ 構造体・共用体でやれって話になるが >long a = ' '; >long b = 32; >// a と b は等しい long a = 0; long b = '0'; a と b は等しくない #include <stdio.h> void maxmin(int array[],int max,int min); int main(void) { int i = 0,array[10],max,min; do { printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++; } while (array[i - 1] != -1); maxmin(array,&max,&min); printf("最大値 %d : 最小%d\n",max,min); return 0; } void maxmin(int array[],int max,int min) { int i = 0; *max = 0; *min = 100; while (array[i] != -1) { if (array[i] > max) max = array[i]; if (array[i] < min) min = array[i]; i++; } } × void maxmin(int array[],int max,int min) ○ void maxmin(int array[],int *max,int *min) × if (array[i] > max) max = array[i]; ○ if (array[i] > *max) *max = array[i]; × if (array[i] < min) min = array[i]; ○ if (array[i] < *min) *min = array[i]; ポインタ使わずに記述してて、呼び出し元に結果かえってないじゃーん から、慌ててポインタに変えた感じかな? 下の関数はmain関数と思い込んでだけどよく見たら引数あるのか >>593 2-1の 関数の中身は間違い ansの前に*が必要 エラーが起きても仕方ないものとするとか 初心者向けでも考え方が間違ってる エラーが起きないことを想定するとどんな書き方なんですか? >>600 50メートル歩くプログラムで、こけても起き上がらず、足を動かして歩こうとするみたいな。 >>593 今すぐ見るのをやめるべき って言うぐらいひどい そもそも今時のコンパイラ使ってたら警告でるだろうに >>588 ですけど、参考書は>>592 の文になってました。ネットの方は間違ってるみたいですね。 >苦しんで覚えるC言語(苦C)は、初心者を対象としたC言語入門サイトです。 >C言語の基本機能を体系立てて解説しており、市販書籍と同等以上の完成度です。 去年サイトリニューアルするまでは、項目はあるのにページが無いのとか結構あったし、完成してないのにこれで市販書籍以上の完成度とかよく書けるなw >>607 運営者本人が初学者だから苦しんでるんだろうなw >>604 ネット上には当てにならない情報が溢れているから、ある程度自分で判断できるレベルになるまではちゃんとした書籍で勉強した方がいいよ 体で覚えるしかないな なんて、コンパイラにバグがあって変な風に覚えちゃったりしてw よくあるのが非標準拡張機能に騙されて それが標準と思い込んでしまうことだ 最近の書籍はあてにならない 著者も編集もレベル落ちてる void * の変数に1を足しているのを見た時は驚きました。 メモリのハード的な最小単位へのポインタは欲しかった そういえば昔1/2ビットシフトなんてテクニックがあったな 1.5ストップビットみたいな 立ってるビットの総和で1シフトする/しないとかの条件付きかと思ったけど ふと 2で割る演算を 右へ算術シフトする話のほうっぽい ラプラス変換(からZ変換した)後に、やっとCのコーディングの話になるので どこか余所できいたほうがいい 数学ですかね… 他に当たります。ありがとうございます。 >>623 数値微分の考え方をまず理解して、さらに三角関数の微分と、極限を理解しないといけない。大学数学だよ。 元が消えてるからよく分からんけど、>>627 の内容って高校数学の内容じゃないの? https://i.imgur.com/yXsENPk.jpg https://i.imgur.com/LhIHXaC.jpg こちらになります。 一応これをC言語でやれというものなので、よろしくお願いします。 解き方の方針だけでも、、、 θをラプラス変換後、伝達関数と掛け合わせてから、逆ラプラス変換をするのかと思いましたが、そんなこと計算できませんでした。 よろしくお願いします。 流石にラプラス変換をC言語でやれという問題じゃないと思う(´・ω・`) 手計算で(6)式に対する出力信号(tの関数)をωcを含む形で導いてから、適当な値を変数omagacにセットして出力信号を数値計算するのでは...? 手計算で、θをラプラス変換して、10式と掛け合わせて、ラプラス逆変換までするのかな? それができたら、できそうだけど、、、 計算できるかな >>629 積分器の部分が面倒くさいな 単純に時間刻み値一段だけ遅延させてみたけどうまくcos波形にならない 何段遅延させればうまくいくかよく分からない とりあえず方針としては、ブロック図を単純に差分方程式に落とし込んでやれば回答には辿り着けるはず 1/sの部分が積分器だから入力を適当に遅延させて出力させてやればいい ラプラス変換云々は理論的な理解には大切だけど、プログラム的には最終的に差分方程式(数学的には微分方程式)の形に落とし込んでしまえばいいよ もうここまでにして途中のソースだけ挙げておく https://ideone.com/69YxIz ごめん、俺が知ってるやり方も部分分数分解だった。 でも手順に従うだけじゃ...? http://lab.cntl.kyutech.ac.jp/ ~nishida/lecture/MathOfCntl/no5.pdf >>634 伝達関数の使い方が、その方法じゃ分からないです… 勉強不足です。 >>635 θをラプラス変換したものを伝達関数と掛け合わせてから、逆ラプラス変換した結果がこうなりました。 T=ω/(ω^2+1) P=0.1/ω^2+1000^2 と適当な文字において、 θ(t)'=T(-cos(t)+ωsin(t)+e^(-ωt))+ P(-cos(t)+ωsin(1000^(2)×t)/1000^(2)+e^(-ωt)) となりました。 これをtを0.001秒毎に、0〜10まで出していけばいいんですよね? 自分でやってみたんですけど、tが0.001秒毎に変わっていかなくて途方にくれてます。 多分簡単なことなんで、コードをお願いします。 int main() { int a; a=1; sumNum(&a); printf("%d\n",a);//13 char str; sumStr(&str); printf("%c\n",str);//□ } void sumStr(char* str){ *str ="a"; } int sumNum(int * num){ *num=*num+12; return 0; } なぜ変数strの出力が"a"と表示されないのですか? "a"は{'a', '\0'}へのポインタ 'a'は文字のa "a"はポインタじゃないぞ printf("%u", sizeof "a"); //2 const char *p; p = &"a"; //ill-formed p = &"a"[0]; //well-formed 'a'はint型の0x41もしくは0xc1だ >>643 eclipseは出ない どのIDE使えば書きやすいのかそれも教えてくれないか >>644 仮に文字列リテラルの式の値の型がポインタじゃないとして、それらが何故その根拠になるのか分かりません(>_<) >>648 文字列リテラルは定数なのでそれは分かります(>_<) char a[] = "A"; a+1 セーフ a++ これも文法エラー ポインタならばこれは通るけど、配列では無理 ポインタ変数にリテラルを代入した場合は...?(>_<) >>646 面倒くせえやつだな const char *p; printf("%u", sizeof p); //4 const char (*q)[2]; q = &"a"; //well-formed q = &a[0]; //ill-formed >>648 syntax errorじゃない semantics errorだ >>649 定数だからエラーなのではない char s[2]; //non-constant array s++; //ill-formed >>654 これは分かりました(>_<) 配列の変数はポインタと同じようで違うんですね(>_<) >>640 void sumStr(char* str){ *str ="a"; } これ、strはcherのポインタでありその指す先はchar型だ。 "a"は 'a', '\0' と並んで入っている先を指すポインタだ。 *str は char 型で、"a" は char * 型だ。型が違う。 これが例えば *str = 'a'; だったり、あるいは *str = *"a"; だったりすれば型も一致するし目的の値の代入に成功するだろう。 (まあしかし普通は *str = *"a"; なんて書き方しないけどな)。 詳説 Cポインタ、2013、オライリー・ジャパン ポインタの仕様だけで、本が1冊書けるw どんなに面倒くさい言語やねんw >>659 そんなにネタはないと思うが、いったいどんな本なんだろう? ポインタ・文字列を、図解して説明している "abc" なら、"abc\0" みたいに4バイトになるとか >>645 書きやすいかどうかは分からないが、VisualStudioだとこんな感じで警告どころかエラーでビルドに失敗する(C++プログラムとしてだけど) 正確にはビルドするまでもなく、コーディング段階で赤色の波下線で警告表示されるのでそれ以前に問題に気付く https://i.imgur.com/6MLycv2.png >>662 VisualStudioはエディタやデバッガが滅茶苦茶優秀 コンパイラがウンチだけど、それさえ許容できればVisualStudio一択 これからC言語始めます自分で色々と調べたけっかこの2つが残りました どちらがいいでしょうか?アドバイス下さい。それやめとけなんて話もあればお聞かせ下さい 1,「C言語プログラミング」(ハーベイ・M. ダイテル/ポール・J. ダイテル 、ピアソン) 2,プログラミング言語C 第2版 ANSI規格準拠 B.W. カーニハン (著),? D.M. リッチー ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる