C/C++の宿題を片付けます 76代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/06(月) 09:04:35【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん
2006/11/06(月) 10:12:390003デフォルトの名無しさん
2006/11/06(月) 11:07:320004デフォルトの名無しさん
2006/11/06(月) 20:56:110005デフォルトの名無しさん
2006/11/06(月) 21:03:21[2] 整数 m と d をを入力し, m 月 d 日が 1 年の何日目にあたるかを表示するプログラムを作成せよ. 例えば, 2 と 1 を入力すると, "2 月 1 日は 1 年の 32 日目です" 等と表示するようにせよ.
閏年は考慮しなくてよい. また, 間違った月日 (例えば, m=13 や m= 4, d=31 等) が入力された場合には, 入力が間違っている旨を表示して終了するようにせよ.
※ m月d日 → 1月〜m-1月の日数の和を求め, それに d を足せばよい.
[3]
[3.1] windowsXP sp2
[3.2] cygwin
[3.3] C
[4] 2006年 10月6日(今日中にアップロード)
[5] 配列って分野の宿題です。なるべく簡単な書き方でお願いします。
0006デフォルトの名無しさん
2006/11/06(月) 21:07:14閏年はどう扱う?
0007デフォルトの名無しさん
2006/11/06(月) 21:07:464行目が読めないのか?
0008デフォルトの名無しさん
2006/11/06(月) 21:08:43友達がばれたとか言ってたけど釣り?
0009デフォルトの名無しさん
2006/11/06(月) 21:10:29すまん。読めてなかった。吊ってくるorz
0010デフォルトの名無しさん
2006/11/06(月) 21:11:56利用させてもらうこともあるけど、
書き方とか定義する文字とか変えて絶対自分だって分からないようにしてる。
0011デフォルトの名無しさん
2006/11/06(月) 21:17:16#include<stdio.h>
#include<stdlib.h>
int main(void){
int day_list[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day_sum;
int m, d, i;
printf("Input date month day :");
scanf("%d %d", &m, &d);
if(m<1 || m>12 || d<1 || d>day_list[m]){
printf("\n入力が間違っています\n");
exit(1);
}
day_sum=d;
for(i=0;i<m;i++)
day_sum+=day_list[i];
printf("%d 月 %d 日は 1 年の %d 日目です\n", m, d, day_sum);
return 0;
}
0012デフォルトの名無しさん
2006/11/06(月) 21:35:22とか
printf
の
f
って何?
0013デフォルトの名無しさん
2006/11/06(月) 21:39:16宿題なのか?
f(ormat)
0014デフォルトの名無しさん
2006/11/06(月) 21:40:180015デフォルトの名無しさん
2006/11/06(月) 21:40:31formatじゃね?
0016デフォルトの名無しさん
2006/11/06(月) 21:44:27最近は、本当は意味なんてないんじゃないかと思い始めてた
0017デフォルトの名無しさん
2006/11/06(月) 21:48:400018デフォルトの名無しさん
2006/11/06(月) 21:54:05意味なんてあるわけないじゃん
0019デフォルトの名無しさん
2006/11/06(月) 21:58:01char とかstrlen とか、Cの用語には読み方が分かれるものが多いね。
0020C言語の問題くれよ(GUI無しで)
2006/11/06(月) 21:58:47<豆知識>
atof → あ、豆腐 → 豆腐は柔らかい → 固定されていない → 浮動小数点数に変換
間違っても ascii to float ではない
0021デフォルトの名無しさん
2006/11/06(月) 22:16:370022デフォルトの名無しさん
2006/11/06(月) 23:29:55表示させようとしたらそこだけバグるんだけど。
例えばm=sum/n が平均だとすると
mはちゃんとした数字出るけどsumはバグってる。
sumそのままprintしようとしちゃいけないんでしょうか。
これだけしか書かなくて分かるだろうか。
0023デフォルトの名無しさん
2006/11/06(月) 23:32:10わからん。テンプレ嫁。
まぁ書式指定子がどっかおかしいんだろうとは思うが。
0024デフォルトの名無しさん
2006/11/06(月) 23:35:55表示部分と変数宣言だけでも晒すべし
0025デフォルトの名無しさん
2006/11/06(月) 23:43:16そもそも固定小数点型なんてあったっけ?
0026デフォルトの名無しさん
2006/11/06(月) 23:44:24ネタにマジレスかこわるい
0027デフォルトの名無しさん
2006/11/06(月) 23:45:28整数型が狭義の固定小数点型
0028デフォルトの名無しさん
2006/11/06(月) 23:46:35>>25がマジレスだと思ってるのか?
0029デフォルトの名無しさん
2006/11/06(月) 23:48:14うまくいかないのがほんの一部だけで、全部晒すと効率悪いと思って
>>24
#include<limits.h><math.h><stdio.h>(全部)
int i,x[n];
double sum,m,s,v;
中略
for(sum=0.0,i=0;i<n;i++)
{
sum += x[i];
}
m=sum/n;
for(sum=0.0,i=0;i<n;i++)
{
sum += (x[i]-m)*(x[i]-m);
}
v=sum/n;
s=sqrt(v);
printf("合計%f\n",sum);
printf("平均%f\n",m);
printf("標準偏差%f\n",s);
return終わり
です
0030デフォルトの名無しさん
2006/11/06(月) 23:54:290031デフォルトの名無しさん
2006/11/06(月) 23:54:46書いてあるとおりに動いているだけじゃないのか?
sum を上書きしてしまってるの忘れてるとかな
0032デフォルトの名無しさん
2006/11/06(月) 23:55:02sumがバグってるとはどのような状況か?
異常なものが表示されるのか、
表示されないのか、
暴走するのか?
はっきりさせろ。
0033デフォルトの名無しさん
2006/11/06(月) 23:55:04出来ればどうバグってるのか教えておくれ。
オレはてっきり出力が”あqwせdrftgyふじこ”になってるんだと
思ってたんだけど、違うっぽいし。
あとドットとか本でした見た事なかったよ。
0034デフォルトの名無しさん
2006/11/07(火) 00:02:39親切にありがとうございます。
気付きました。
0035デフォルトの名無しさん
2006/11/07(火) 00:41:28[2] 問題文(含コード&リンク):
オイラーの予想:
オイラー(Euler, 1707年-1783年)は、1769年頃に、
「a^5+b^5+c^5+d^5=e^5を満足する正の整数はない」という予想を立てた。
コンピュータを用いて、偉大な数学者であるオイラーの予想を覆せ。
また、このプログラムは多少時間がかかることが予想されるので、
効率よくプログラムを組むこと。そのため、すべてを計算すると大変なので、
a<b<c<d<e<200を仮定してよい。
ヒント:
カウンタ変数を5つ用意して5重ループを構成する。
ループ数が多くなるので計算量に注意されたい。
200^5程度の値になると、通常のint型の表現範囲を超えるので注意すること。
答えは、次のとおり
a=27,b=84,c=110,d=133,e=144
a^5=14348907,b^5=4182119424,c^5=16105100000,d^5=41615795893,e^5=61917364224
c^5,d^5,e^5は、int型の表現範囲を超えているので、注意してください。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0
[3.3] 言語: C++
[4] 期限: 2006年11月7日まで
[5] その他の制限: この答え以外でも存在したら表示して欲しいです。
0036デフォルトの名無しさん
2006/11/07(火) 00:49:32意地悪で聞いてるわけじゃなくて,手元にある程度プログラムが出来てるのか確かめておきたい
0037デフォルトの名無しさん
2006/11/07(火) 00:55:47このプログラムは出来ています。
他の答えをだすプログラムを知りたくて。
0038デフォルトの名無しさん
2006/11/07(火) 00:58:05単純に考えて・・・
0039デフォルトの名無しさん
2006/11/07(火) 01:05:39ありがとうございます。
0040デフォルトの名無しさん
2006/11/07(火) 01:40:13ってのがあったけど200超えてるしな。
0041デフォルトの名無しさん
2006/11/07(火) 01:51:37ありがとうございました。
0042デフォルトの名無しさん
2006/11/07(火) 01:57:39[2] 問題文(含コード&リンク):3元連立方程式をガウスザイデル法で解くプログラムを作成せよ
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 6.0
[3.3] 言語: C
[4] 期限:水曜日まで
[5] その他の制限:
参考書にアルゴリズムは色々書いてあるけど
これをどうやってプログラムで書けばいいか分かりません・・・
0043デフォルトの名無しさん
2006/11/07(火) 02:10:00http://www.vector.co.jp/soft/dl/data/prog/se002453.html
この中のgseidel.c
というのはあまりにやっつけだろうか
0044c不明な人
2006/11/07(火) 13:10:25[2] 問題文(含コード&リンク):二つの整数n , r をキーボードから入力し,組合せの数nCrを画面表示するプログラムを作成
しなさい.ただし,組合せの数を求める関数のプロトタイプを「int combination(int, int)」,
整数値の階乗を求める関数のプロトタイプを「int kaijo(int)」としてプログラムすること. n や
r を大きくとるとオーバフローすることがあるが,本課題では考慮しなくてよい.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし
よろしくお願いします。。。
0045デフォルトの名無しさん
2006/11/07(火) 13:15:45前スレで見たよ、それ
0046デフォルトの名無しさん
2006/11/07(火) 13:17:20をプログラムで書こうとして、
((x[i]-x[i+1])(x[i+2]-x[i+1])+(y[i]-y[i+1])(y[i+2]-y[i+1]))
/sqrt(((x[i]-x[i+1])^2+(y[i]-y[i+1])^2))*((x[i+2]-x[i+1])^2+(y[i+2]-y[i+1])^2)))
と書いてみたのですが、エラーばっかりです。
x[i+1]と言う表現はダメなんでしょうか?
どのように表現すればいいでしょうか?
また、^2という表現も使えないのでしょうか?
どのように記述すればよいでしょうか?
言語はcです
0047c不明な人
2006/11/07(火) 13:19:401] 授業単元:情報処理�U
[2] 問題文(含コード&リンク):x を-2.8 以上2.8 以下の範囲で0.02 ずつ変化させ, y = cos x 及びy = sin x の値を画面表
示するプログラムを作成しなさい.ただし, y = cos x 及びy = sin x は,次式に示す多項式
cosx=1-x^2/2!+x^4/4!-x^6/6!+x^8/8!-x^10/10!
sinx=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-x^11/11!
により計算すること.また,これらの計算を行う関数のプロトタイプをそれぞれ「double
mycos(double)」,「double mysin(double)」とし,課題1(↑の44の問題です。)で作成した「kaijo()」関数を利用す
ること.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし
改めてよろしくお願いしますm(__)m
0048デフォルトの名無しさん
2006/11/07(火) 13:29:27>・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
配列宣言してないんじゃないのって気がするがな
そもそもそこで配列を使いたい理由がわからん
0050デフォルトの名無しさん
2006/11/07(火) 13:30:31[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse_string(char *str)を作成せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限:2006年11月8日
半角英数字はうまくいくのですが2バイト文字の場合がわかりません。
よろしくお願いします。
005150
2006/11/07(火) 13:31:48int reverse_string(char *str)
{
char *p,tmp;
p=str;
for(;*p !='\0';p++);
for(;p-str>0;str++){
tmp=*(--p);
*p=*str;
*str=tmp;
}
return 0;
}
main(void)
{
char str[50]="C言語";
printf("reverse_string関数実行前\n%s\n",str);
printf("reverse_string関数実行後\n");
reverse_string(str);
printf("%s\n",str);
return 0;
}
0052デフォルトの名無しさん
2006/11/07(火) 13:36:02#define M 4096
double x[M], y[M], z[M];
で確保してあります。
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
error C2296: '^' : 不正な左オペランドです。
こんな感じです。
>そもそもそこで配列を使いたい理由がわからん
配列に連続した座標が入っているので。
一つずつ動かして判定したいのです。
0053デフォルトの名無しさん
2006/11/07(火) 13:36:25期限もまだあることだし
0054デフォルトの名無しさん
2006/11/07(火) 13:40:51error C2296: '^' : 不正な左オペランドです。 というエラーメッセージを見る
↓
^2という表現は使えないのかな と気づく←ここまで出来てる
↓
C 演算子でググる
↓
^はxorに使われていることを知る
↓
じゃあべき乗はどう表すのか疑問に思う
↓
C べき乗でググる
↓
math.hのpowを使うことが分かる
はぁ・・・
0055デフォルトの名無しさん
2006/11/07(火) 13:44:110056デフォルトの名無しさん
2006/11/07(火) 13:46:04>>1
005746
2006/11/07(火) 13:56:11ありがとうございます。
べき乗については解決いたしました。
(x[i]-x[i+1])
のみだとエラーは出ないのですが、
(x[i]-x[i+1])(x[i+2]-x[i+1])
と書くと
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
となります。
なぜなんでしょうか???
0058デフォルトの名無しさん
2006/11/07(火) 14:00:26[1] cis english 2
[2] 問題文
英文を入力し,その英文の単語を全て出力するソースコード
[3] 環境
[3.1] OS: WindowsXP
[3.2]gcc
[3.3] C
[4] 期限:2006年11月12日12:00まで
[5] その他の制限:なし
0059デフォルトの名無しさん
2006/11/07(火) 14:02:19.,!?;:"'取り除くだけで答えになってしまうんじゃないだろうか
出てきた単語は昇順に並べ替えるとか 指定ないの?
0060デフォルトの名無しさん
2006/11/07(火) 14:05:24[2] 問題文:
ガウスの消去法を用いたプログラムで微分方程式を解く
f(0)=0,f(pi/2)=1の条件でf''(x)+f(x)を解け
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc 2.95
[3.3] 言語: C言語
[4] 期限: レポート提出があるので可能なら今日、できれば明日まで
[5] その他の制限: 特にありません
現在
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2897.c
までプログラムが進んでいます
数値の入力の直後にセグメンテーション違反です。と表示され終了してしまいます
微分方程式を解くときの数値などは問題ないはずなのですが、
17行目のscanfのところで止まってしまいます。
このエラーをどうにかする方法はないでしょうか?力を貸して頂ければ幸いです
0061デフォルトの名無しさん
2006/11/07(火) 14:06:15釣り?
掛け算は*だべ。
006260
2006/11/07(火) 14:07:48微分方程式が間違っていました
正しくはf''(x)+f(x)=0です
0064デフォルトの名無しさん
2006/11/07(火) 14:10:31いい意味でアメリカのラテン系移民の英語みたいなガッツを感じます。
0065デフォルトの名無しさん
2006/11/07(火) 14:59:05脳内コンパイラ
#include<stdio.h>
main() {
int kotae,n,r;
printf("nCrを計算するにゃん\n");
printf("nの値を入力するにゃん\n(n>=0にゃん)");
scanf("%d",&n);
if(n<0){
printf("死ねにゃん");
exit(1);
}
printf("rの値を入力するにゃん\n(0<=r<=nにゃん)\n");
scanf("%d",&r);
if(r>n||r<0){
printf("死ねにゃん");
exit(1);
}
printf("計算開始にゃん\n");
kotae = combination(n,r);
printf("答えは%dにゃん\a",kotae);
}
int kaijo(int x) {
if(x=1||x=0){return 1};
return x*kaijo(x-1);
}
int combination(int n, int r) {
int c;
c = kaijo(n)/(kaijo(r)*kaijo(n-r));
return c;
}
0066デフォルトの名無しさん
2006/11/07(火) 15:06:41int kaijo(int x) {
if(x=0)
return 1;
return x*kaijo(x-1);
}
0067デフォルトの名無しさん
2006/11/07(火) 15:07:24if ( x == 0 ) だろうが
0068デフォルトの名無しさん
2006/11/07(火) 15:07:28int kaijo(int x) {
if(x==0)
return 1;
return x*kaijo(x-1);
}
0069デフォルトの名無しさん
2006/11/07(火) 15:31:33#include <math.h>
main(){
double i,y1,y2;
for (i=-2.8;i<=2.8;i=i+0.02){
省略
指定された書式で思い思いに表示してください
}
}
double mycos(double x){
int n;
double y=0;
for(n=10;n>=2;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}
double mysin(double x){
int n;
double y=0;
for(n=11;n>=3;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}
展開式はアンロールしたよ その方が早いから(言い訳
0070デフォルトの名無しさん
2006/11/07(火) 16:27:450071デフォルトの名無しさん
2006/11/07(火) 16:28:26[2] 問題文(含コード&リンク):
#include <stdio.h>
#include<string.h>
int main(void)
{
int i;
char str_num[10] = "123456789";
char str_alpha[6] = "abcde";
for(i=0;i<10;i++){
strcpy(str_num, "123456789"); /* �@ */
strncpy(str_num, str_alpha, i); /* �A */
printf("i=%d, str_num:\"%s\"\n", i, str_num); /* �B */
}
return 0;
}
このプログラムの
�@をstrcpy(str_alpha, "abcde");
�Aをstrncpy(str_alpha, str_num, i);
�Bをprintf("i=%d, str_alpha=\"%s\"\n", i, str_alpha);
とした場合の実行結果について説明し、strncpy()の動作について説明
しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: 分かりません
[3.3] 言語: C
[4] 期限: 明日の朝まで
よろしくお願いします。
0072デフォルトの名無しさん
2006/11/07(火) 16:44:00ちょwwww分かれwwwwww
0074デフォルトの名無しさん
2006/11/07(火) 17:09:23kore.jikkou.sure.ba.ii.dake.jamaica!
0075sage
2006/11/07(火) 17:21:14[2] 問題文 番号と名前をメンバとする構造体を作成し、3件分のデータ表示を行うプログラムを作成せよ。
番号は3桁までとし、3桁を超える場合やすでに入力済みの数字が入力された場合はエラーを表示せよ。
[3.1] OS:unix
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:[2006年11月9日まで]
[5] その他の制限:なし
特に番号の重複エラーの処理がよくわからないのでよろしくお願いします。
007671
2006/11/07(火) 17:24:41もちろん実行したのですが、
/* �@ */
/* �A */
/* �B */
を変えることによって、なぜこの様な実行結果になったかを説明しないと
いけないのです。
なぜこの様な実行結果になったかが解らなくて。
0077デフォルトの名無しさん
2006/11/07(火) 17:36:39strcpy.to.strncpy.wo.google
0078デフォルトの名無しさん
2006/11/07(火) 18:32:35[2] 問題文(含コード&リンク): 数字を二つ入力したとき、その二つの数字の間の全ての数の和(シグマ計算)
を出力する(1と10を入力すると55、のような)プログラムをif と gotoを用いて2パターン以上作成せよ。
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: 初心者なもので何のことか…
[3.3] 言語: C++
[4] 期限: ([今年11月10日まで]
[5] その他の制限:超初心者なのでなるべく単純な方法でお願いします。m(_ _ )m
0079デフォルトの名無しさん
2006/11/07(火) 18:38:32ヒント web: manpage of strcpy
0080デフォルトの名無しさん
2006/11/07(火) 19:37:49作ってはみたが、時間がかかりすぎる。
それでもいいなら、アップする
CPU600MHz → 推定12時間以上?アリエネ
枝狩りのアルゴリズム考えないとな
0081デフォルトの名無しさん
2006/11/07(火) 19:38:53#include <stdlib.h>
main(){
int s,m,n;
scanf("%d",&m);
scanf("%d",&n);
s=(m+n)*(abs(m-n)+1)/2;
printf("%d",s);
}
0082デフォルトの名無しさん
2006/11/07(火) 19:42:301)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go amain(){
go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
to:gogo gog <= gg toog goto togo;printf("%d\n",tot);
}
2)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go og(go gg){gg/10&&og(gg/10);putchar(gg%10+48);}
go main(){
go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
to:gogo gog <= gg toog goto togo;
og(tot);
}
008381
2006/11/07(火) 19:49:050084デフォルトの名無しさん
2006/11/07(火) 19:50:53if(1) goto owari;
owari:
0085デフォルトの名無しさん
2006/11/07(火) 20:01:54先生がイラつくこと間違い無しの良解答だな
0086デフォルトの名無しさん
2006/11/07(火) 20:11:45最近の教科書にはどんどん使いましょうとか書いてあるのか。
0087デフォルトの名無しさん
2006/11/07(火) 20:12:200088デフォルトの名無しさん
2006/11/07(火) 20:19:26#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
0089デフォルトの名無しさん
2006/11/07(火) 20:31:37以下の様なプログラムを作りなさい。
・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。
・scanfを用いてパスワードの後半部分の入力を要求する。
・前半部分と後半部分を連結して1つのパスワードにする。
・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを
表示し、一致しない場合はパスワードの文字数を表示する。
以下、自分で考えてみたプログラムです。
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/
{char x[MAX], y[MAX], password[MAX]=abcd;
int i, k, flag=1;
scanf("%s", x);
y[MAX] = *strcat(argv[2], x);
k = strlen(strcat(argv[2], x));
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
if(flag == 1)
printf("OK, %s\n", argv[1]);
else
printf("パスワードの長さ:%d", k);}
ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、
ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか?
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年11月8日18:00まで
[5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
0090デフォルトの名無しさん
2006/11/07(火) 20:34:42#include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];
for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
0091デフォルトの名無しさん
2006/11/07(火) 20:39:180092デフォルトの名無しさん
2006/11/07(火) 20:42:01[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse(char *str)を作成せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限:明日まで
[5] その他の制限: インクルードはstdio.hのみでお願いします。
「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
0093デフォルトの名無しさん
2006/11/07(火) 20:43:08[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。
5個未満:1個あたり2000円
10個未満:1個あたり1900円
15個未満:1個あたり1500円
20個未満:1個あたり1400円
20個以上:1個あたり1200円
客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C++
[4] 期限:明日
0094デフォルトの名無しさん
2006/11/07(火) 20:47:19password[MAX]=abcd;
↓
password[MAX]="abcd";
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
↓
flag=(strcmp(y, password)==0);
0095デフォルトの名無しさん
2006/11/07(火) 20:59:06return忘れてるぞ
0096デフォルトの名無しさん
2006/11/07(火) 20:59:26文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
0097デフォルトの名無しさん
2006/11/07(火) 21:03:46>引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように
どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
009892
2006/11/07(火) 21:04:37009989
2006/11/07(火) 21:17:45>>94
あ、「"」つけるの忘れてました。
y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。
>>95
あ、リターンも忘れてました。
0100デフォルトの名無しさん
2006/11/07(火) 21:21:46010192
2006/11/07(火) 21:21:48int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str++){
tmp = *(--p);
*p = *str;
*str = tmp;
}
return 0;
}
main(void)
{
char str[30]="abcde";
printf("reverse関数実行前\n%s\n",str);
printf("reverse関数実行後\n");
reverse(str);
printf("%s",str);
return 0;
}
1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、
2バイト文字だと文字化けしてしまいます。
■ このスレッドは過去ログ倉庫に格納されています