C言語質問スレ【激初心者】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/10/12(水) 00:07:44・最低でもC言語が何か分かってる人でお願いします。
・質問者は自分の環境をわかる範囲で書きましょう。
優しい方々が答えてくれることを期待してます。
0002デフォルトの名無しさん
2005/10/12(水) 00:10:060003デフォルトの名無しさん
2005/10/12(水) 00:11:280004デフォルトの名無しさん
2005/10/12(水) 00:21:13コンパイラ(ぷよぷよ):VISUAL STDIO 20003
#include<studio.h>
int main(void)
{
printf(”hello,work”);
0005デフォルトの名無しさん
2005/10/12(水) 06:56:040006デフォルトの名無しさん
2005/10/12(水) 10:34:19_━ ━_ _━ ━_
_━ ━_ _━ ━_
━ ○ ━ ━ ○ ━
 ̄━ ━ ̄  ̄━ ━ ̄
 ̄━ ━ ̄  ̄━ ━ ̄
 ̄━━━━━━ ̄  ̄━━━━━━ ̄
┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
━
━━ __ __ ━━
 ̄━ ━━__ __━━ ━ ̄
 ̄━ ━__ __━ ━ ̄
 ̄━ ━━━━━━ ━ ̄
 ̄━ ━ ̄
 ̄━_ _━ ̄
 ̄━_ _━ ̄
 ̄━━━ ̄
0007デフォルトの名無しさん
2005/10/12(水) 21:27:13なんかこんなファイルくれました。その人がいうにはそれあればほとんどのものがつくれるとか。
でも使おうにも意味不なもんなのでコレがなにか誰か教えてください。コンバイルっていってたかも・・?
http://www4.pf-x.net/~what/
0008デフォルトの名無しさん
2005/10/12(水) 22:12:06Microsoft Visual C++ 6.0 Professional Edition (Japanese)
0009デフォルトの名無しさん
2005/10/12(水) 22:15:18絶望を感じた・・・
0010デフォルトの名無しさん
2005/10/12(水) 23:33:450011デフォルトの名無しさん
2005/10/13(木) 00:06:27マジデスカ; 使い方っていうかコレ開いて使うものなのかコマンドプロントとかでアレをするのか分かんないんですが;
誰か教えてください orz
ちょっとなんかヤバそうなので一旦7のを外しときます
0012デフォルトの名無しさん
2005/10/13(木) 10:07:270013デフォルトの名無しさん
2005/10/13(木) 10:09:540014デフォルトの名無しさん
2005/10/13(木) 17:33:12char word[32] = "hello, world!";
char *ptr;
ptr = word;
printf("%s\n", word);
printf("%s\n", &ptr);
printfの上はふつうに表示されるのに下は文字化けします.
数値(%d),一つの文字(%c)では正常に表示されます.
文字列の場合は単純に先頭のアドレスをprintfに渡してもダメならば
どう扱うべきなのでしょうか?
0015デフォルトの名無しさん
2005/10/13(木) 17:40:42ptrはポインタだから、printf("%s\n", ptr);でいい。
0017デフォルトの名無しさん
2005/10/13(木) 18:43:32int main(){
set<string> in(istream_iterator<string>(cin), istream_iterator<string>());
copy(in.begin(), in.end(), ostream_iterator<string>(cout));
}
001817
2005/10/13(木) 18:44:220019デフォルトの名無しさん
2005/10/13(木) 23:16:27なにをどう勉強すればよいのでしょうか?
だれか教えてください。
0020デフォルトの名無しさん
2005/10/13(木) 23:26:380021デフォルトの名無しさん
2005/10/13(木) 23:42:520022デフォルトの名無しさん
2005/10/14(金) 10:05:59気軽に「こんなソフトありませんか?」 22
ttp://pc7.2ch.net/test/read.cgi/software/1129190874/
0023デフォルトの名無しさん
2005/10/18(火) 23:39:14ある駐車場があって、そこでは一時間駐車すると500円とられ
それから30分ごとに料金が200円追加される。
分単位で時間を入力したときにそのときの料金を表示させる。
このようなプログラムを作りたいのですが、どのようにすればいいか考え付きません。
めっちゃ基礎の範囲ですが、どなたか教えてください。
0024デフォルトの名無しさん
2005/10/18(火) 23:55:20int Ryokin(int hun){
if(hun <= 60) return 500;
else return ((hun - 31) / 30) * 200 + 500;
}
int main(void){
int n;
printf("時間を入力してください(分)\n");
scanf("%d",&n);
printf("%d円になります。\n",Ryokin(n));
return 0;
}
どちらかというと良心的な駐車場
0025デフォルトの名無しさん
2005/10/19(水) 00:26:53ありがとうございます!感謝感激です。
0026デフォルトの名無しさん
2005/10/19(水) 00:36:01入力するプログラムを作りたいのですが、できますか?
0027デフォルトの名無しさん
2005/10/19(水) 00:51:42できますが初心者向けではありません。
0028デフォルトの名無しさん
2005/10/19(水) 01:14:58日本語で言う単語です。
0030デフォルトの名無しさん
2005/10/19(水) 15:04:10大学のプログラミングの授業でC言語をならいはじめたんですが、講義形式の授業なのでさっぱりわけがわかりません。
自分でプログラム打って動かしたら理解ができそうなんですけど、
C言語をプログラミングできるソフトってネット上で手にはいりますか?
0031デフォルトの名無しさん
2005/10/19(水) 15:05:51講師に聞けよ。金払ってるんだろ?
0032デフォルトの名無しさん
2005/10/19(水) 15:08:280033デフォルトの名無しさん
2005/10/19(水) 15:17:090034デフォルトの名無しさん
2005/10/19(水) 15:22:540035デフォルトの名無しさん
2005/10/19(水) 15:32:030036デフォルトの名無しさん
2005/10/19(水) 15:38:040037デフォルトの名無しさん
2005/10/19(水) 16:22:49ttp://homepage3.nifty.com/mmgames/c_guide/
0038デフォルトの名無しさん
2005/10/19(水) 20:26:15どなたか教えてくださいm( __ __ )m
�@円柱の体積を求めるプログラムを作りなさい
ただし半径と高さはキーボードから入力する(変数の型をfloatにする)
�A時速(km/時)をキーボードから入力し、時速(m/秒)に変換して出力するプログラム作りなさい
(変数の型をfloatにする)
以上の2問でつ
お願いします
0039デフォルトの名無しさん
2005/10/19(水) 20:35:25宿題スレへ池
0040Ω
2005/10/19(水) 20:54:25real r,h,v
write(6,*) 'radius?'
read(5,*) r
write(6,*) 'hight?'
read(5,*) h
v=3.14159264*r*r*h
write(6,*) 'Volume=',v
stop
end
program convert_from_km/h_to_m/s
real s1,s2
write(6,*) 'speed? [km/s]'
read(5,*) s1
s2=s1/3.6
write(6,*) s2,'[km/h=',s,'[m/s]'
stop
end
0041デフォルトの名無しさん
2005/10/19(水) 20:56:18後はこれをC言語に変えるだけwww
>>38
004238
2005/10/19(水) 21:17:08余計わからない…
0043デフォルトの名無しさん
2005/10/19(水) 22:11:42004438
2005/10/19(水) 22:29:53聞いたことがないでつorz
上の2個の問題はなんとか自分で解けました
0045デフォルトの名無しさん
2005/10/19(水) 23:29:17> 時速(m/秒)
秒速だろ?
0046デフォルトの名無しさん
2005/10/19(水) 23:39:34まああれをFORTRANと呼ぶのが正しいのかどうかは疑問だが
0047デフォルトの名無しさん
2005/10/20(木) 00:05:53「0〜1の擬似乱数を30000個ずつ3行発生させるプログラム」がどうしてもできません…。
誰か教えてください…。
「1〜100の擬似乱数を10個ずつ10行」はできたのですが、それを変えてもうまくいきません。
一応、これがそのプログラムです
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,j;
/* 乱数系列の変更 */
srand((unsigned) time(NULL));
/* 1〜100の擬似乱数を10個ずつ10行発生 */
for (i=1; i<=10; i++) {
for (j=0; j<10; j++) {
printf("%3d ",rand()%100+1);
}
printf("\n");
}
return 0;
}
どうかよろしくオナガイシマス……。
ちなみに富士通Fortranを使っています。
0048デフォルトの名無しさん
2005/10/20(木) 00:37:230049デフォルトの名無しさん
2005/10/20(木) 00:54:52何がどう駄目なのか、それを書かないと誰も回答できんよ?
005047
2005/10/20(木) 01:29:47私は>>47に書いた「1〜100の擬似乱数を10個ずつ10行発生」のプログラムを書き換えたら、「0〜1の擬似乱数を30000個ずつ3行発生」もできるような気がしてるんですが…
どこをどう書き換えたらうまくいくのかわかりません…。
それとも、書き換えるだけでは駄目ですか??
すみません、よろしくお願いします…。
0051デフォルトの名無しさん
2005/10/20(木) 02:25:30そもそも >>47 のプログラムを理解してないんじゃない?
なんかの丸写しだろ?
それじゃあ教えようすらないよ
0052デフォルトの名無しさん
2005/10/20(木) 03:10:470053デフォルトの名無しさん
2005/10/20(木) 11:39:050054デフォルトの名無しさん
2005/10/20(木) 11:42:000055デフォルトの名無しさん
2005/10/20(木) 12:45:132つの問題の違いを見ていけば、自然と答えが出るのでは。
「10」個を「30000」個に、「10」行を「3」行に、「「1〜100」を「0〜1」にっていう部分しか違わないじゃない。
プログラム中に出てくる数字も限られてるんだし、どこを書き換えればいいかはわかるでしょう。
for文とrand、srandがわかってないなら入門サイトなり授業だか研修だかで使ってる本なりを見れば
載ってるかと。
ちなみに rand()%5 の%は剰余(割ったあまり)を計算するものだから、0〜4の値になります。
0056デフォルトの名無しさん
2005/10/20(木) 12:57:17実は整数値でなくなるので若干の質的な変更も必要な罠。
0057デフォルトの名無しさん
2005/10/22(土) 17:08:17どうしても大文字に変換したものと小文字に変換したものが表示されません。
data.inというファイルがあるというものとして教えてください。
分割して書き込みます
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int capital(int);
int small(int);
int main(void)
{
int i;
FILE *inp,*outp;
/*入力ファイルのオープン*/
if((inp=fopen("data.in","r"))==NULL)
{
printf("can't open -- data.in\n");
exit(EXIT_FAILURE);
}
/*出力ファイルのオープン*/
if((outp=fopen("prog02.out","w"))==NULL)
{
printf("can't open -- prog02.out");
exit(EXIT_FAILURE);
}
0058デフォルトの名無しさん
2005/10/22(土) 17:09:03fprintf(outp,"通常データ\n");
while((i=fgetc(inp))!=EOF)
{
putc(i,outp);
}
fprintf(outp,"\n大文字に変換\n");
while((i=fgetc(inp))!=EOF)
{
putc(capital(i),outp);
}
fprintf(outp,"\n小文字に変換\n");
while((i=fgetc(inp))!=EOF)
{
putc(small(i),outp);
}
/*ファイルのクローズ*/
if(fclose(inp))
{
printf("\nfailed to close a file\n");
}
if(fclose(outp))
{
printf("\nfailed to close a file\n");
}
return EXIT_FAILURE;
}
0059デフォルトの名無しさん
2005/10/22(土) 17:12:06int capital(int moji)
{
int diff,i;
diff='a'-'A';
if('a'<=moji && moji<='z')
{
return moji-diff;
}
return moji;
}
/* 大文字 → 小文字 */
int small(int moji)
{
int diff;
diff='a'-'A';
if('A'<=moji && moji<='Z')
{
return moji+diff;
}
return moji;
}
0060デフォルトの名無しさん
2005/10/22(土) 17:22:33宜しくお願いします。
0061デフォルトの名無しさん
2005/10/22(土) 17:24:44最初の「通常データ」のループで入力ファイルを終端まで読み込んでいるので、
その後巻き戻さない限りもう読めるものがないという状況になっているだけ。
0062デフォルトの名無しさん
2005/10/22(土) 17:25:15fseekを使いましょう
0063デフォルトの名無しさん
2005/10/22(土) 17:26:140064デフォルトの名無しさん
2005/10/22(土) 17:29:07a. クローズして再オープンする
or
b. fseek()を調べろ
0065デフォルトの名無しさん
2005/10/22(土) 17:30:35rewind()の立場は?
006657
2005/10/22(土) 17:36:53巻き戻しの作業について調べたいと思います!
006757
2005/10/22(土) 17:52:28今コンパイルして実行してみたら、ちゃんと思い通りに動いてくれました!!
本当にありがうございました!!
物凄い悩んでいたから本当にうれしい。
0068デフォルトの名無しさん
2005/10/22(土) 19:32:52nを入力させて
1+3=4=2^2
1+3+5=9=3^2
…というようにn番目の奇数までを足していって
上のように表示させるのって出来ますか?forかwhileで
0069デフォルトの名無しさん
2005/10/22(土) 19:44:58//sum = 0 ;
for (i = 1; i <= n ; i ++)
{
// sum += 1 + 2 * (i - 1) ;
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
これでどうです?
007068
2005/10/22(土) 20:00:26nを4として
1+3+5+7=4^2とでました。
しかし自分はn=4としたら
1=1^2
1+3=2^2
1+3+5=3^2
1+3+5+7=4^2
というように設定したnより小さかった場合も
表示したいのですがこういうのはできませんかね?
0071デフォルトの名無しさん
2005/10/22(土) 20:13:45そのぐらい自分で書けないでどうしますか。
方針:
・>69を関数にする。
・1からnまでのループを作り、その中で上記関数を呼ぶ。
0072デフォルトの名無しさん
2005/10/22(土) 20:19:110073デフォルトの名無しさん
2005/10/22(土) 20:23:45んじゃ、関数化しないで変数名が競合しないように気をつけて書きな。
0074デフォルトの名無しさん
2005/10/22(土) 20:24:25for(n = 1; n <= m; n++){
for (i = 1; i <= n ; i ++)
{
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
}
0075デフォルトの名無しさん
2005/10/22(土) 20:28:12007672
2005/10/22(土) 20:58:59もう一回やってみます。
//m=4ていうのはmが4までやるってことですよね?
0077デフォルトの名無しさん
2005/10/22(土) 23:09:12単に変数名変えるのがめんどうだっただけ
#include <stdio.h>
int main(void){
int i,n,m = 4;
for(n = 1; n <= m; n++){
for (i = 1; i <= n ; i ++)
{
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
}
return 0;
}
007876
2005/10/22(土) 23:33:55今後はもっとちゃんと勉強します。
0079デフォルトの名無しさん
2005/10/23(日) 12:56:13#include<stdio.h>
int GetBekijyou(int, int);
void main(void)
{
int number1, number2;
int kekka;
number1=5;
number2=3;
kekka=GetBekijyou(number1,number2);
printf("%d no %d jyo=%d\n", number1, number2, kekka);
}
int GetBekijyou(int x, int y)
{
int z;
if(y==1)
return(x);
z = x*GetBekijyou(x, y-1);
return(z);
}
結果:5 no 3 jyo=125
008079
2005/10/23(日) 12:57:45これの再帰呼び出しの部分がよく分かりません・・・
xに関数GetBekijyouを掛けてるのかな、とか色々考えたんですが、それじゃおかしくなってしまって・・・
因みに、自分は中学、高校とも全くと言っていいほど数学が出来なかったんですが
これじゃC言語を学ぶのは厳しいでしょうか?orz
0081デフォルトの名無しさん
2005/10/23(日) 13:08:03> xに関数GetBekijyouを掛けてるのかな
そのとおりだけど何か。
0083デフォルトの名無しさん
2005/10/23(日) 15:40:14配列に文字列を入力から受け取ってそれを別の
配列にコピーするプログラムなんですが、配列
から配列に代入する部分でエラーが出ます。
どなたか原因がわかるかたがいらっしゃいましたら
お願いしますm(..)m
環境はredhatlinuxの8です。
----------ソース----------
1 #include <stdio.h>
2
3 int main(){
4 char name1[100];
5 char name2[100];
6
7 printf("input your name\n");
8 scanf("%s",name1);
9 printf("name1=%s\n",name1);
10
11 name2 = name1;
12 printf("name2=%s\n",name2);
13
14 return 0;
15 }
----------結果----------
# gcc test1.c
test1.c: 関数 `main' 内:
test1.c:11: 代入 に互換性のない型
0084デフォルトの名無しさん
2005/10/23(日) 16:16:59Cには文字列型は存在しない。
アドレスをアドレスには代入できない。
文字列のコピーには、strcpyを使う。
ってなところでどう?
0085デフォルトの名無しさん
2005/10/23(日) 16:17:00Cでは配列を配列に代入することはできません。素直にstrcpy()でも使ってください。
008683
2005/10/23(日) 21:52:13strcpyで解決しました!
0087デフォルトの名無しさん
2005/10/23(日) 22:09:25プログラムとは直接関係ありませんが、
コンソールアプリケーションで作った実行ファイルのアイコンを変換する方法
もしくはツールを知ってる方いたら、教えてもらえないでしょうか?
0088デフォルトの名無しさん
2005/10/23(日) 22:25:14ショートカットを作ってプロパティダイアログでアイコンの変更。
0089デフォルトの名無しさん
2005/10/23(日) 22:28:45リソースをくっつければEXEのアイコンを指定できる。
0090デフォルトの名無しさん
2005/10/24(月) 00:21:22たびたびすいません、もうひとつ質問よろしいでしょうか。
次のソースなんですが、関数に構造体のアドレスを渡して
scanfで入力した値を構造体のメンバに入れて、その値をmain
で表示するというプログラムです。
コンパイルは通ったのですが、実行すると落ちることがあります。
具体的にはscanfで入力する文字が半角英字で3文字までなら
ちゃんと表示してくれるのですが、4文字以上入れると表示せずに
"セグメンテーション違反です"とでます。
ちなみに、9,10行目を
struct Seito seito1;
startup(&seito1);
とした場合は4文字以上入れてもちゃんと表示してくれます。
どこがおかしいかわかる方いらっしゃいましたらよろしくお願いします。
環境はRedHatLinux8です。
0091デフォルトの名無しさん
2005/10/24(月) 00:22:23#include <stdio.h>
#include <string.h>
struct Seito{
char name[100];
};
int main(){
struct Seito * seito1;
startup(seito1);
return 0;
}
int startup(struct Seito * seito1);
int startup(struct Seito * seito1){
char name[100];
/* get name */
printf("input your name\n");
scanf("%s",name);
/* set struct player status */
strcpy(seito1->name,name);
printf("seito1 name is %s\n",seito1->name);
return 0;
}
0092デフォルトの名無しさん
2005/10/24(月) 00:40:33struct Seitoのメモリが確保されていない。
というわけでこうしてみな。
int main() {
struct Seito seito1;
startup(&seito1);
return 0;
}
0093デフォルトの名無しさん
2005/10/24(月) 00:53:02ありがとうございます。
92さんのやり方だとうまくいきます。
構造体変数をいきなりポインタ型で宣言しても領域は確保して
くれないんですね。(て認識であってますよね?)
理由がわかって助かりましたー。
0094デフォルトの名無しさん
2005/10/24(月) 07:19:46という課題が出ました、200字程度で書けって言われたけど全然分かりません
どのように答えれば良いのか教えてください
0095デフォルトの名無しさん
2005/10/24(月) 08:43:11また、あまりデータの偏りによらず、性能が劣化しない
0096デフォルトの名無しさん
2005/10/24(月) 09:20:32全てのノードが左方向だけ(or右方向だけ)につながって、それって線形リストと一緒やん状態
0097デフォルトの名無しさん
2005/10/24(月) 10:01:52void rev_intary(int vc[],int no) {/*・・・*/}
を作成しなさい。
このプログラムの作成方法がまったく分かりません・・・。const型修飾子と関係あるんですか?
よろしければ、教えてください。お願いします。
0098デフォルトの名無しさん
2005/10/24(月) 10:07:350099デフォルトの名無しさん
2005/10/24(月) 10:08:40関係ないんですか・・・。このプログラムはどう作成すればいいんでしょうか・・?
0100デフォルトの名無しさん
2005/10/24(月) 10:13:16安直に
void rev_intary(int vc[], int no)
{
int i, t;
for (i=0; i<no/2; i++) {
t = vc[i]; vc[i] = vc[no-i-1]; vc[no-i-1] = t;
}
}
0101デフォルトの名無しさん
2005/10/24(月) 10:18:07ありがとうございます。しかしこのプログラムで翻訳するとエラーになるんですが・・・。
■ このスレッドは過去ログ倉庫に格納されています