トップページ⇒tech
1001コメント440KB

C/C++の宿題を片付けます 92代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/07/04(水) 10:09:24
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/
0002デフォルトの名無しさん2007/07/04(水) 10:28:19

         v――.、
      /  !     \
      /   ,イ      ヽ
..    /  _,,,ノ !)ノリハ    i
    i  jr三ミ__r;三ミ_   ヽ
    l  ,iヾ二ノ ヽ二 ハ   ノ  / ̄ ̄\
    ヽ、.l  ,.r、_,っ、  !_,    /ヽ、___ノ|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.      !  rrrrrrrァi! L_./⌒( i  " i | ./ <  >>1 糞スレ立てんな、蛆虫、氏ね。
   ヾヾ ゝ、^'ー=~''"' ;,/.     | i | i  >   \______________
 ゞ","",,ヽ  >、__,r    /  ヽ | i ″)
 ヾ ,, ,, ヽ          ノ  | i i .丿
 /ヾ ,,  ,,ヽ (      / )/ | ‖i /
 | ヾ ,,,,  ヽ "──""  ノ(/| ii  | )
 ヽ ヾ ,, ,, ,,.ヽ      ノ ./ .|__ii___|ヽ
  ヽ ヾ ,,,  ,,  \    /  i⌒( ̄ ~  |
  /   )==(○)==(  ヽ- ̄ ̄ /
 (⌒-/",,--______-- ",, ヽ ゝ─-- /
.(__/ヾヾヾ ,,,  ,,, ,,-ゞヾ/  ヽ.,,_,,/
 ヽ(    ソ""""\    ヽ  i_/
<(⌒""`--.,__)   /ヽ    )
<(~`─"   \ (~    /
<(_,,,__,,,,    ) \    ̄ゝ
      ̄"""   ヽ.,,__ゝ
0003デフォルトの名無しさん2007/07/04(水) 10:52:26
[1] 問題文:入力した人の年齢の合計と平均を出力させるプログラムを作成して下さい。
※入力時に累積の人数を表示 ※年齢入力時に数字属性と範囲のチェックを行う※nullは不許可とする
※0 〜 9 の文字のみで、かつ 1 〜 99 の範囲のみを許可する※年齢の平均は小数点第二位まで出力する※名前に空が入力された場合に年齢の合計と平均を出力してプログラムを終了する
−実行結果−

1人目の名前:human1
1人目の年齢:
入力エラー(年齢を入力してください)
1人目の年齢:30

2人目の名前:human2
2人目の年齢:abc
入力エラー(年齢は数字のみで入力してください)
2人目の年齢:20

3人目の名前:human3
3人目の年齢:0
入力エラー(年齢は1から99の範囲で入力してください)
3人目の年齢:25

4人目の名前:
年齢の合計は75歳、年齢の平均は25.00歳


[2] OS: Windows2000
[3] 期限:2007年7月4日13時まで
0004デフォルトの名無しさん2007/07/04(水) 11:04:29
[1] 授業単元: オペレーティングシステム
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4494.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年07月06日まで
[5] その他の制限: 特に制限はありませんが、
簡単なコメントをつけていただけると助かります。
0005デフォルトの名無しさん2007/07/04(水) 11:04:44
前スレ>>999
#include<stdio.h>
#include<string.h>
int main(void)
{
char a[]="aiai";
char b[]="ai";
int i,count;
count=0;
for(i=0;i<strlen(a)-strlen(b);i++)
if(strncmp(a,b,strlen(b))==0)count++;
printf("%d",count);
}

多分こんな感じ。ループの度にstrlen(b)やるので大量データに向いてないとかあるけど。
0006デフォルトの名無しさん2007/07/04(水) 11:05:12
>>前スレ999
>if(a&&b)count++;

とりあえず、これは無いだろうw
aとbが有効なポインタだから (a && b)がtrueになっているだけであって、
決して "aiai"の先頭が "ai"だから trueになっている訳ではないぞw

もし自力で実装するなら、以下の様に考えると、ベタでも動くものが作れるかと。
0: 捜索開始場所を aとする
1: まず bの先頭1文字を aから捜索する
2: 1文字目から不一致なら aを+1して 1へ
3: 発見した場合、その場所から +n文字目は bの+n文字目と同じか比較し、
 bが終わるまでチェックする
4: すべて一致すれば ++countして、捜索開始場所を a+strlen(b)に変更し、1へ
5: 途中で不一致だった場合は、捜索開始場所を +1して 1に戻る
0007デフォルトの名無しさん2007/07/04(水) 11:06:08
あ、間違い。
-if(strncmp(a,b,strlen(b))==0)count++;
+if(strncmp(&a[i],b,strlen(b))==0)count++;
0008デフォルトの名無しさん2007/07/04(水) 11:15:54
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 線形探索
次の表は、平成19年のお年玉付き年賀葉書の当選番号である。
1等 157788、457190
2等 5161、7093、7485、9614
3等 64、79
手元に届いた年賀状の抽選番号をキーボードから入力し、
当選したかどうかチェックして結果を表示するプログラムを作成する。
ただし、ここでは簡単のため下2桁だけを扱うものとする。

当選番号(の下2桁)は、キーの配列に初期値として格納する
キーボードから2桁の数字を入力してターゲットに格納し、線形探索を行う。
探索結果を画面に出力する。当選した場合は何等が当たったか、も出力すること。
【発展】
余力のある人は、下2桁に限らず、全桁を初期値として格納し、当選のチェックを実行するプログラムを作成してみること。
[3] 環境
 [3.1] OS: WindowsXP 
[3.2] コンパイラ名とバージョン: VS 2005
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: [発展]の方でお願いします
0009デフォルトの名無しさん2007/07/04(水) 11:29:04
>>前スレ999
”aaaa"と"aa"を比較した時に3回文字列が出現したと数えるか、
2回出現したと数えるかで文字列発見時のポインタ、配列参照の仕方が変わる
0010デフォルトの名無しさん2007/07/04(水) 12:18:44
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
問題
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい

実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
0011デフォルトの名無しさん2007/07/04(水) 12:28:38
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):

2次方程式 ax*x+bx+c=0
の係数a,b,cを与え、方程式の解を求めて出力せよ(関数は使わなくてよい)
係数の値によって3つの場合分けをする
zの平方根yの計算はy=sqrt(z)で計算する。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語: C++
[4] 期限: 7月6日
[5] その他の制限:特になし。

ネットで2次方程式を探しましたが、よくわからないので上の問題の条件で回答いただけると幸いです。
お願いいたします。
0012デフォルトの名無しさん2007/07/04(水) 12:41:01
>>10 ってね、前にも同じ問題があったけど、偶数要素は入力された奇数番目なんよ。
要するに、入力された文字列を格納した配列の要素番号が奇数か偶数かってことだよね?
0013デフォルトの名無しさん2007/07/04(水) 13:03:33
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
5 名の体重をキーボードから読み込んで,5 名の平均値以上の
値を持つ人の番号と体重を表示するプログラムを作成しなさ
い.
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日

実行結果
1 番目の体重= 60.5
2 番目の体重= 57.3
3 番目の体重= 68.1
4 番目の体重= 52.4
5 番目の体重= 65.2
----------------
平均値: 60.7kg
3 番目: 68.1kg
5 番目: 65.2kg

よろしくお願いします
0014デフォルトの名無しさん2007/07/04(水) 13:04:22
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
5 名の体重をキーボードから読み込んで,それらの値を小さい
順に表示するプログラムを作成しなさい.
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日

(実行結果例)
1 番目の体重= 60.5
2 番目の体重= 57.3
3 番目の体重= 68.1
4 番目の体重= 52.4
5 番目の体重= 65.2
----------------
(1): 52.4kg
(2): 57.3kg
(3): 60.5kg
(4): 65.2kg
(5): 68.1kg
よろしくお願いします
0015デフォルトの名無しさん2007/07/04(水) 13:05:59
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
5 名の体重をキーボードから読み込んで,値の小さい順に,何
番目の人かと,その体重を表示するプログラムを作成しなさ
い.なお,同じ値があれば,番号の小さい方を先に表示する.
(ヒント:番号を保存する配列を別途用意して,体重データを入れ替え
る時に番号も入れ替える)
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日
(実行結果例)
1 番目の体重= 60.5
2 番目の体重= 57.3
3 番目の体重= 68.1
4 番目の体重= 52.4
5 番目の体重= 65.2
----------------
(1) 3 番目: 52.4kg
(2) 1 番目: 57.3kg
(3) 0 番目: 60.5kg
(4) 4 番目: 65.2kg
(5) 2 番目: 68.1kg

よろしくお願いします
0016デフォルトの名無しさん2007/07/04(水) 13:07:16
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
三角形の「底辺の長さ」と「高さ」を仮引数として,三角形
の面積(底辺の長さ×高さ÷2)を返却値とする関数triangle
を定義しなさい.この関数triangle を用いてキーボートから
読み込んだ底辺の長さ,高さの三角形の面積を表示するプロ
グラムを作成しなさい.
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日

(実行結果例)
三角形の面積計算
底辺の長さ:10.8
高さ:8.6
----------------
面積: 46.44
よろしくお願いします
0017デフォルトの名無しさん2007/07/04(水) 13:08:57
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
3つの整数tanka,kosu,pay を仮引数として,
pay − tanka×kosu
の値を返す関数otsuri を定義しなさい.この関数otsuri を用
いて,キーボートから読み込んだ単価,購入個数,支払金額
に対して,おつり(=支払金額 − 単価×個数)を表示するプ
ログラムを作成しなさい.
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日
(実行結果例)
単価:129
購入個数:17
支払金額:5000
-----------------
おつり:2807 円

よろしくお願いします
0018デフォルトの名無しさん2007/07/04(水) 13:09:29
夏休み前のラッシュ 必死だな とだけレスしとく、すまんw
0019デフォルトの名無しさん2007/07/04(水) 13:11:59
同じ書き込みを繰り返しやがってとおもったら少しずつ違ったのね
0020デフォルトの名無しさん2007/07/04(水) 13:14:38
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
要素数がnum であるdouble 型の配列xv の全要素に,値c
を代入する関数SetValue を定義しなさい(関数SetValue は
値を返さないvoid 型).この関数SetValue を用いて,要素数
10 のdouble 型配列buf_A とbuf_B の全要素を,それぞれキ
ーボードから読込んだ値に設定するプログラムを作成しなさ
い.(設定後のbufA とbufB の全要素を画面に表示する)

 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 7月5日
(実行結果例)
bufA に設定する値= 1.23
bufB に設定する値= 3.45
-------------------
bufA[0]=1.23 bufB[0]=3.45
bufA[1]=1.23 bufB[1]=3.45
:
bufA[9]=1.23 bufB[9]=3.45

よろしくお願いします
0021デフォルトの名無しさん2007/07/04(水) 13:19:15
>>3
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 256
typedef struct{
char name[N];
int age;
}ID;
int main(void){
ID data[N];
char str[N];
int i,sum=0;
for(i=0;;i++){
printf("%d人目の名前:",i+1);
fgets(data[i].name,N-1,stdin);
if(data[i].name[0]==' ')break;
printf("%d人目の年齢:",i+1);
while(1){
data[i].age=strtol(fgets(str,N-1,stdin),NULL,0);
if(data[i].age<100&&data[i].age>0)break;
printf("入力エラー(年齢は数字のみで入力してください)\n");}
sum+=data[i].age;}
printf("年齢の合計は%d歳、年齢の平均は%.2f歳\n",sum,(double)sum/(i+1));
return 0;
}
0022デフォルトの名無しさん2007/07/04(水) 13:21:11
string.hは前書いてたコードの消し忘れorz
0023デフォルトの名無しさん2007/07/04(水) 13:29:41
>>10 MAX文字までの制限つきだけど、良いのかしらん。

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

#define MAX 512

int main(void) {
char str[MAX] , str_e[MAX/2]={"\0"} , str_o[MAX/2]={"\0"} , ch;
unsigned int i;
printf("文字列入力==> ");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);

for(i=0; i<strlen(str)-1; i++) {
if(i%2) str_o[i/2]=str[i];
else str_e[i/2]=str[i];
}
printf("偶数要素:%s \n",str_e);
printf("奇数要素:%s \n",str_o);
return 0;
}
0024違ってたらゴメン2007/07/04(水) 14:03:16
>>20
#include <stdio.h>
#define NUM 10

void SetValue(int num,double *xv,double *c){
for(;-1<num;num--)
*(xv+num) = *c;
}

void main(void)
{
int i;
double c,buf_A[NUM],buf_B[NUM];
printf("bufA に設定する値= ");
scanf("%lf", &c);
SetValue(NUM,buf_A,&c);
printf("bufB に設定する値= ");
scanf("%lf", &c);
SetValue(NUM,buf_B,&c);
for(i=0;i<10;i++)
printf("bufA[%d]= %lf bufB[%d]= %lf \n",i,buf_A[i],i,buf_B[i]);
}
0025デフォルトの名無しさん2007/07/04(水) 14:13:10
7.4課題
次のプログラムを元にして、足し算などの式を入力すると計算結果を
表示するプログラムを考える
(1)現在の内容を理解しコメントをつけよ
(2)たとえば式1+2「ENTER」を入力すると結果の3が表示されるような
のにつくりなおせ。他の演算が出来るようになっているとさらにいい評価

#include <stdio.h>
#include <ctype.h>
main() {
char c[10];
char *p;
int i=0;
printf("Enter a number");
fgets(c,6,stdin);
p = &c;
while(isdigit(*p)){
i=i*10+(*p++)-48;//←これよくわからない
}
printf("You have entered:%d\n",i);
}
0026間違ってたらゴメン2007/07/04(水) 14:15:20
#include <stdio.h>

int Otsuri (int tanka,int kosu,int pay){
return pay - tanka * kosu;
}

void main(void)
{
int otsuri,tanka,kosu,pay;
printf("単価> ");
scanf("%d", &tanka);
printf("購入個数> ");
scanf("%d", &kosu);
printf("支払金額> ");
scanf("%d", &pay);

printf("(実行結果例)\n 単価:%d \n 購入個数:%d \n 支払金額:%d \n----------------- \n おつり:%d 円\n",tanka,kosu,pay,Otsuri(tanka,kosu,pay));
}
0027デフォルトの名無しさん2007/07/04(水) 14:15:27
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:標準関数の利用
問題1
文字列を入力し、文字列中の英字と数字の文字数をカウントしなさい
使用する標準関数:isdight()
実行画面
文字列入力==>AB123CDEF45G
英字:7
数字:5
0028262007/07/04(水) 14:16:42
>>26は>>17へ
0029デフォルトの名無しさん2007/07/04(水) 14:23:29
>>27
#include <stdio.h>
#include <ctype.h>

int main(void) {
int cnt_a=0, cnt_n=0 , ch;
printf("文字列入力==>");
while( (ch=getchar()) != '\n') {
if( isdigit(ch) ) cnt_n++;
else if ( isalpha(ch) ) cnt_a++;
}
printf("英字:%d \n",cnt_a);
printf("数字:%d \n",cnt_n);
return 0;
}
0030デフォルトの名無しさん2007/07/04(水) 14:26:54
すみませんが、前スレの
>>914
をお願いします。
0031デフォルトの名無しさん2007/07/04(水) 14:29:35
[1] 授業単元:C言語実習&基礎
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4487.txt
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C
[4] 期限: 2007/7/4 15:30
[5] その他の制限: 特になし


すみません。前スレ938です。
どうしても今日提出しなければいけないので・・・
よろしくお願いいたします。


0032デフォルトの名無しさん2007/07/04(水) 14:29:44
914 名前:デフォルトの名無しさん 投稿日:2007/07/03(火) 15:36:08
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
1. コマンドライン引数でファイル名をn個指定し、 ファイル1からファイルnまでの内容をこの順に連結し、
その結果を標準出力に出力するプログラムを書け。 入力ファイルに関してエラーが発生した場合、
そこで処理を終了せず、残りのファイルの処理を続けること。
ただし、以下のオプションをとることができるようにせよ。
-u 出力の際に、アルファベット小文字を対応する大文字に変換する。
-l 出力の際に、アルファベット大文字を対応する小文字に変換する。
-e 出力の際に、空行を除去する。
-s 出力の際に、#から始まる行を除去する。
*入出力を行うシステムコールを直接使用すること。
2.コマンドライン引数でファイル名を2個指定し、 標準入力からテキストを入力し、
#で始まる行をファイル1に出力し、 それ以外の行をファイル2に出力せよ。
ただし、以下のオプションをとることができるようにせよ。
-a 同名のファイルがすでに存在する場合は、末尾に追加するようにする。 このオプションがない場合は、上書きする。
-e ファイル2への出力の際に、 空行を除去する。
-s ファイル1への出力の際に、 行頭の#一文字を除去する。
*入出力を行うシステムコールを直接使用すること。
*ただし、複数のオプションが同時にしていされているときは、両方なるように
すること。
ファイルをコピーするプログラム。入力と出力にはシステムコールを直接使用する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4485.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 木曜日まで
[5] その他の制限:ないです

どうかよろしくお願いします。
0033デフォルトの名無しさん2007/07/04(水) 14:45:42
>>32
この順って、どの順?

前スレで久々「ありがとう」の言葉をもらった
嬉しいもんだ
0034デフォルトの名無しさん2007/07/04(水) 14:54:11
>>33さん
ファイル1→ファイル2→ファイル3
ということです。
0035間違ってたらゴメン2007/07/04(水) 14:57:16
>>25 足算と引算だけやってみたが何かおかしいかもしれない・・
#include <stdio.h>
#include <ctype.h>
#define BUF 100
void main(void){
char *p,c[BUF];
int i=0,ii=0,f=0;
printf("計算式入力(足算/引算):");
fgets(c,BUF,stdin);
p = &c;
do{
while(isdigit(*p)){
i=i*10+(*p++)-48;//←これよくわからない
}
if(f){
if(f == 1) ii = ii + i;
if(f == 2) ii = ii - i;
}
else
ii = i;
if((*p) == '+') f = 1;
if((*p) == '-') f = 2;
i = 0;
*p++;
}while(*p);
printf("計算結果:%d\n",ii);
}
(実行結果)
計算式入力(足算/引算):10+10-1-1
計算結果:18
0036デフォルトの名無しさん2007/07/04(水) 15:27:22
前スレの942さんのプログラムをコンパイルすると、
mainの戻り値の型がintではありません。と警告が出るのですが
これは出ちゃうものなんでしょうか?
0037デフォルトの名無しさん2007/07/04(水) 15:29:39
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
文字型配列のstr1とstr2を用意しておき、str1に文字列をキーボードから
読み込んだ後、ポインタを用いてstr2に逆順に文字を格納し、表示せよ。
なお最終的な表示部は「printf("%s\n" ,str2);」を用いること。
(実行例)
文字列を入力せよ:Tanaka Tarou
結果:uoraT akanaT

(ヒント)
配列を読み込んだ文字を一文字づつ切り出して格納する。
このとき配列要素の指定はポインタを介して行うこと。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc Ver,?
 [3.3] 言語: C言語
[4] 期限: 7/5 PM12:00
0038デフォルトの名無しさん2007/07/04(水) 15:36:53
>>36
ISO、ANSI準拠で int main(void) { return 0; } といったスタイルにしないと
エラーが出ちゃうようなコンパイラだと でっ、でちゃうぅ〜〜〜
0039デフォルトの名無しさん2007/07/04(水) 15:41:29
倍精度実数が 0 であるかどうかを判定しても いいでしょうか
0040デフォルトの名無しさん2007/07/04(水) 15:46:52
>>37
#include<stdio.h>
#include<string.h>
#define N 256
int main(void)
{
char str1[N],str2[N];
int i=0,l,k;
printf("文字列を入力せよ:");
scanf("%s",str1);
k=strlen(str1);
while(str1[i]!='\0')
*(str2+i++)=*(str1+k-i-1);
str2[k]='\0';
printf("結果:%s\n",str2);
return 0;
}

0041デフォルトの名無しさん2007/07/04(水) 16:06:08
>>40
ありがとうございます。
ただこれ実行すると
文字列を入力せよ:Tanaka Tarou
結果:akanaT
という感じでスペース以降が逆順で表示されないのですが、
スペース以降含めて文字列全て逆表示にできないでしょうか?
結果:uoraT akanaT
みたいに
0042デフォルトの名無しさん2007/07/04(水) 16:09:39
>>41
ごめん、なんかlとかよく分からないの入ってたり色々…。

#include<stdio.h>
#include<string.h>
#define N 256
int main(void)
{
char str1[N],str2[N];
int i=0,k;
printf("文字列を入力せよ:");
fgets(str1,N-1,stdin);
k=(int)strlen(str1);
while(str1[i]!='\0')
*(str2+i++)=*(str1+k-i-1);
str2[k]='\0';
printf("結果:%s\n",str2);
return 0;
}
0043デフォルトの名無しさん2007/07/04(水) 16:17:51
>>42
早い手直しありがとうございます。
もしかして前スレの>>991さんでしたら、そちらもありがとうございます。
違ってたらすいません。
0044デフォルトの名無しさん2007/07/04(水) 16:18:38
>>42
早い手直しありがとうございます。
もしかして前スレの>>991さんでしたら、そちらもありがとうございます。
違ってたらすいません。
0045デフォルトの名無しさん2007/07/04(水) 16:32:01
35様、ありがとうございます。
掛け算割算も工夫してみます
0046312007/07/04(水) 17:17:04
分かる方いらっしゃらないでしょうか・・・?
0047デフォルトの名無しさん2007/07/04(水) 17:28:40
>>46
そのままコピペしたらエラー出まくり。
プログラムの仕様くらい書け。
おまけに長いくせに別関数にするだけ。

自分でやった方が早いと思うよ。
0048デフォルトの名無しさん2007/07/04(水) 17:30:32
>>25
あまり綺麗ではないが、四則演算とカッコ対応
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4496.txt
0049デフォルトの名無しさん2007/07/04(水) 17:33:42
あの・・・
>>32
をお願いできますでしょうか?
0050デフォルトの名無しさん2007/07/04(水) 17:35:19
前スレ>>965の人へ
前スレにもある通り、与えられたそのままの条件でプログラムを書くと
出力が滅茶苦茶になる。

もう一度良く問題文を確かめて欲しい。
0051デフォルトの名無しさん2007/07/04(水) 17:36:00
>>46
gets_s()だのstrcpy_s()だの、VC++8.0専用のソースのようだが
引数が足りなくてコンパイルエラーになる箇所があるようだねえ
0052デフォルトの名無しさん2007/07/04(水) 17:37:54
数値を入力しIEEE754のビットパターンを出力するCのプログラ
ム頼む!
漏れの命がかかってるorz
0053デフォルトの名無しさん2007/07/04(水) 18:05:56
>>38さん
エラー表示が出なくなりました。ありがとです
コンパイラによって違うのですね・・・
0054デフォルトの名無しさん2007/07/04(水) 18:10:35
>>53
警告とエラーは別物だぞ
0055デフォルトの名無しさん2007/07/04(水) 18:10:52
gets_s使うくらいならfgets使え
0056デフォルトの名無しさん2007/07/04(水) 18:48:43
>>52
#include <stdio.h>
void putbin(unsigned char n)
{
    int i;
    for (i = 1 << 7; i > 0; i >>= 1)
        putchar((n & i) ? '1' : '0');
}
int main()
{
    int i = 1;
    unsigned char *s = (unsigned char *)&i;
    int islittle = s[0];
    double x;
    while (scanf("%lf", &x) == 1) {
        s = (unsigned char *)&x;
        if (islittle) {
            for (i = sizeof(x)-1; i >= 0; --i)
                putbin(s[i]);
        } else {
            for (i = 0; i < sizeof(x); ++i)
                putbin(s[i]);
        }
        putchar('\n');
    }
    return 0;
}
0057デフォルトの名無しさん2007/07/04(水) 18:53:10
あの・・・ 何回もすみませんが
>>32
をお願いできますでしょうか?
0058デフォルトの名無しさん2007/07/04(水) 18:55:40
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):abc.txt には、データが何行にも分けて
書いてある。それを1行ずつ読んで、
1)先頭に&がついていたら a.txt に追記(書込み)
2)先頭に&がついてなかったら b.txt に追記(書込み)
するプログラムを作れ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 7月8日
[5] その他の制限:30行以下

よろしくお願いします。
0059デフォルトの名無しさん2007/07/04(水) 18:56:53
>>57
ここは基本的に問題出す方も投げ出しっぱなし、
説く方も気が向き次第なスレです。
そんな必死に頼りにする所ではありませんカス。
0060デフォルトの名無しさん2007/07/04(水) 18:59:44
>>58
データって
111
&222
333
444
&555
こんな感じでいいの?
0061デフォルトの名無しさん2007/07/04(水) 19:02:18
>>60
多分、そうだと思います。

その場合だと、
&222
&555が、a.txtへ

111
333
444が、b.txtへ
という感じだと思います。

お願いします。
0062前スレ9992007/07/04(水) 19:04:13
>>5
>>6
>>9

ありがとうございます。これを理解して応用していけるようにがんばります。
0063デフォルトの名無しさん2007/07/04(水) 19:07:50
>>58
#include <stdio.h>
int main(void)
{
    FILE *fabc, *fa, *fb, *current;
    int c, prev;
    if (!(fabc = fopen("abc.txt", "r"))
            || !(fa = fopen("a.txt", "w"))
            || !(fb = fopen("b.txt", "w")))
        return fputs("can't open files\n", stderr), 1;
    current = fb;
    for (prev = '\n'; (c = getc(fabc)) != EOF; prev = c) {
        if (prev == '\n' && c == '&') current = fa;
        else if (prev == '\n') current = fb;
        putc(c, current);
    }
    fclose(fabc), fclose(fa), fclose(fb);
    return 0;
}
0064デフォルトの名無しさん2007/07/04(水) 19:11:46
>>63
とても早くて助かります。
ありがとうございました。
0065デフォルトの名無しさん2007/07/04(水) 19:13:23
>>58
#include<stdio.h>
#define N 256
int main(void)
{
FILE *abc,*a,*b;
int n=0;
char str[N];
fopen_s(&abc,"abc.txt","r");
fopen_s(&a,"a.txt","a");
fopen_s(&b,"b.txt","a");
while(fgets(str,N-1,abc)!=NULL&&n<30){
if(str[0]=='&')
fprintf(a,"%s",str);
else fprintf(b,"%s",str);
n++;
}
fclose(abc);
fclose(a);
fclose(b);
return 0;
}
0066デフォルトの名無しさん2007/07/04(水) 19:17:13
>>52
#include <stdio.h>
#include <string.h>

int main()
{
float f;
unsigned int bitf;
int i;
char buff[sizeof(int)*8 + 1] = {'\0'};
scanf("%f",&f);
memcpy(&bitf,&f,sizeof(int));
for(i = sizeof(int)*8-1; i >=0 ; i--)
{
if(bitf%2)
buff[i] = '1';
else
buff[i] = '0';
bitf /= 2;
}
printf("%s\n",buff);
return 0;
}
0067デフォルトの名無しさん2007/07/04(水) 19:19:52
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク): ttp://www.vipper.org/vip548391.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 7月6日(金)12:00まで
ttp://www.vipper.org/vip548389.c
作ってみたのですが後半値が変化しません。どこが違ってるでしょうか。
よろしくお願いします。
0068デフォルトの名無しさん2007/07/04(水) 19:23:41
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。

pwdを実行し、成功すれば、その後、ls -lを実行するプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4501.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: ないです

よろしくお願いします。
0069デフォルトの名無しさん2007/07/04(水) 19:31:30
>>67
double型なのに徹頭徹尾%dを使ってるとことか。
0070デフォルトの名無しさん2007/07/04(水) 19:40:27
>>69
ありがとうございました。
基本的なところで間違ってたのかorz
0071デフォルトの名無しさん2007/07/04(水) 20:41:42
もう居ないかもしれんが>>31
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4503.c
もっとできるだろうが飽きたからこれで終わりにする
0072工房・・・2007/07/04(水) 20:53:43
[1] 授業単元:While文
[2]スーパーのレジの処理を行うプログラム。
品物の値段を入力していき、最後に0(ゼロ)を入力すると消費税を加算した金額を表示する。
さらに、預かり金を入力すると、お釣りを表示する。
<出力結果例>
いらっしゃいませ
XXX←値段を入力
小計=XXX円
XXX←値段を入力
小計=XXX円
0
小計=XXXX円 消費税XX円 合計金額XXXX円
お預かり金額(入力させる)
お釣り XXX円(お釣りは1万円何枚、5000円何枚などを表示させる)
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン:UNIX
 [3.3] 言語: C言語
[4] 期限: 2007年07月04日24:00まで
[5] その他の制限: While文、scan,printfだけを関数では使うようにしてください・・・
0073デフォルトの名無しさん2007/07/04(水) 21:14:45
全スレ955ですが、お願いします。
[1] 授業単元:C言語
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4488.txt
[3]
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C
[4] 期限: 2007/7/4 
[5] その他の制限: 特になし
0074デフォルトの名無しさん2007/07/04(水) 21:26:17
>>72
#include <stdio.h>
int main(void)
{
int sum=0;
int x,azukarikin,goukei,turi,man,gosen,sen,gohyaku,hyaku,gojyu,jyu,go,iti;
printf("いらっしゃいませ。\n");
while(1){
scanf("%d",&x);
if(!x)break;
sum+=x;
printf("小計:%d\n",sum);}
goukei=(int)sum*1.05;
printf("小計:%d 消費税:%.0f 合計:%d\n",sum,sum*0.05,goukei);
printf("お預かり金額:");
scanf("%d",&azukarikin);
turi=azukarikin-goukei;
printf("お釣り:%d\n",turi);
man=turi/10000;turi%=10000;
gosen=turi/5000;turi%=5000;
sen=turi/1000;turi%=1000;
gohyaku=turi/500;turi%=500;
hyaku=turi/100;turi%=100;
gojyu=turi/50;turi%=50;
jyu=turi/10;turi%=10;
go=turi/5;turi%=5;
iti=turi;
printf("一万円:%d枚 五千円:%d枚 千円:%d枚\n",man,gosen,sen);
printf("五百円:%d枚 百円:%d枚 五十円:%d枚\n",gohyaku,hyaku,gojyu);
printf("十円:%d枚 五円:%d枚 一円:%d枚\n",jyu,go,iti);
return 0;
}
0075デフォルトの名無しさん2007/07/04(水) 21:26:22
>>73
だから問題が雑すぎ
0076デフォルトの名無しさん2007/07/04(水) 21:32:20
>>73
1番目
#include <stdio.h>
int main(void)
{
char str[256],str2[256];
int n,i;
printf("str:");
scanf("%s",str);
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++)
str2[i]=str[i];
str2[n]='\0';
printf("%s\n",str2);
return 0;
}
0077デフォルトの名無しさん2007/07/04(水) 21:42:54
ジョブショップスケジューリングにおいて、ディスパッチングルールとして、EDDを用いたスケジューリングを作成するプログラムを作成しなさい
という宿題が出たんですけど、もしわかるひとがいたらよろしくお願いします。
0078デフォルトの名無しさん2007/07/04(水) 21:44:53
>>72

>>74とほぼ同じだけど
#include <stdio.h>
int main(void)
{
int price, subtotal = 0, tax, pay, change;
int ichiman, gosen, sen, gohyaku, hyaku, goju, ju, go, ichi;
printf("いらっしゃいませ\n");
while(price) {
scanf("%d", &price);
if(price) printf("小計 = %d円\n", price);
subtotal += price;
}
tax = 0.05*subtotal;
printf("小計 = %d円 消費税%d円 合計金額%d円\n", subtotal, tax, subtotal+tax);
printf("お預かり金額 : ");
scanf("%d", &pay);
change = pay-(subtotal+tax);
if(change < 0) {
printf("お金が足りません");
return 0;
}
ichiman = change/10000; change -= ichiman*10000; gosen = change/5000; change -= gosen*5000;
sen = change/1000; change -= sen*1000; gohyaku = change/500; change -= gohyaku*500;
hyaku = change/100; change -= hyaku*100; goju = change/50; change -= goju*50;
ju = change/10; change -= ju*10; go = change/5; change -= go*5; ichi = change;
printf("1万円 : %d枚 5千円: %d枚 千円 : %d枚\n", ichiman, gosen, sen);
printf("5百円 : %d枚 100円: %d枚 50円 : %d枚\n", gohyaku, hyaku, goju);
printf("10円 : %d枚 5円: %d枚 1円 : %d枚", ju, go, ichi);
return 0;
}
0079デフォルトの名無しさん2007/07/04(水) 21:45:40
>>8
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4504.txt
0080デフォルトの名無しさん2007/07/04(水) 21:49:27
>>68
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void execpwd(char **argv) { execlp("pwd", "pwd", (char*)0); }
void execls(char **argv) { execvp("ls", argv); }
void (*execfn[])(char **argv) = { execpwd, execls, 0 };
int main(int argc, char **argv) {
    pid_t pid;
    int    i, status;
    for (i = 0; execfn[i]; ++i) {
        if ((pid = fork()) == 0) {
            (*execfn[i])(argv);
            _exit(1);
        }
        if (pid == -1) return perror("fork"), 1;
        waitpid(pid, &status, 0);
        if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
            return fprintf(stderr, "command failed\n"), 1;
    }
    return 0;
}
0081デフォルトの名無しさん2007/07/04(水) 21:54:51
>>16
#include <stdio.h>
#include <stdlib.h>
double triangle(double a, double h)
{
    return a * h / 2;
}
int main(void)
{
    char buf[256];
    double a, h;
   
    printf("三角形の面積計算\n");
    printf("底辺の長さ:");
    if (fgets(buf, 256, stdin) == 0) {
        return 1;
    }
    a = atof(buf);
   
    printf("高さ:");
    if (fgets(buf, 256, stdin) == 0) {
        return 1;
    }
    h = atof(buf);
   
    printf("----------------\n");
    printf("面積:%g", triangle(a, h));
    return 0;
}
0082デフォルトの名無しさん2007/07/04(水) 22:21:03
>>72
2000円札忘れてたぜ

#include <stdio.h>
int main(void) {
int price, subtotal = 0, tax, pay, change;
int ichiman, gosen, nisen, sen, gohyaku, hyaku, goju, ju, go, ichi;
printf("いらっしゃいませ\n");
while(price) {
scanf("%d", &price);
if(price) printf("小計 = %d円\n", price);
subtotal += price;
}
if(subtotal == 0) {
printf("何も買ってません"); return 0;
}
tax = 0.05*subtotal;
printf("小計 = %d円 消費税%d円 合計金額%d円\n", subtotal, tax, subtotal+tax);
printf("お預かり金額 : ");
scanf("%d", &pay); change = pay-(subtotal+tax);
if(change < 0) {
printf("お金が足りません"); return 0;
}
ichiman = change/10000; change %= 10000; gosen = change/5000; change %= 5000;
nisen = change/2000; change %= 2000; sen = change/1000; change %= 1000;
gohyaku = change/500; change %= 500; hyaku = change/100; change %= 100;
goju = change/50; change %= 50; ju = change/10; change %= 10;
go = change/5; change %= 5; ichi = change;
printf("壱万円紙幣 : %d枚 五千円紙幣 : %d枚 弐千円紙幣 : %d枚 千円紙幣 : %d枚\n", ichiman, gosen, nisen, sen);
printf("五百円硬貨 : %d枚 百円硬貨 : %d枚 五十円硬貨 : %d枚\n", gohyaku, hyaku, goju);
printf("十円硬貨 : %d枚 五円硬貨 : %d枚 一円硬貨 : %d枚", ju, go, ichi); return 0;
}
0083デフォルトの名無しさん2007/07/04(水) 22:53:33
>>73 2番目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4505.c
0084デフォルトの名無しさん2007/07/04(水) 23:00:06
>>73 3番目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4506.c
0085デフォルトの名無しさん2007/07/04(水) 23:39:54
>>13
>>14
>>15
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4507.zip
0086デフォルトの名無しさん2007/07/04(水) 23:41:44
[1] 授業単元:C言語
[2] 問題文: #include<stdio.h>
#include<ctype.h>
main(){
char c[10];
char *p;
int i=0;
printf("Enter a number; ");
fgets(c,6,stdin);
p=&c;
while(isdigit(*p)){
i=i*10+(*p++)-48;
printf("You have entered; %d\n",i);
}
}

上記のプログラムを元にして、足し算が出来るプログラムにせよ。

1+2を入力しENTERを押すと3が出力されるようにせよ。
また、足し算のほかにも引き算、掛け算、割り算のプログラムも作れ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2007年07月05日まで
[5] その他の制限:特になし
0087デフォルトの名無しさん2007/07/04(水) 23:49:56
>>86
>>25
0088デフォルトの名無しさん2007/07/05(木) 00:01:22
>>87
86です。
引き算、掛け算、割り算も出来るプログラム教えてください。
0089デフォルトの名無しさん2007/07/05(木) 00:02:24
>>87
すいません。掛け算と割り算です
0090デフォルトの名無しさん2007/07/05(木) 00:25:46
>>73 4番目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4508.c
0091デフォルトの名無しさん2007/07/05(木) 00:27:04
>>89
>>48
0092デフォルトの名無しさん2007/07/05(木) 00:35:46
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
最小二乗法は計測データの分析に使われる方法である.
ある測定で,xとyのn組のデータ(x1,y1),(x2,y2), .......(xn,yn)が得られたとする.それらの点は一次関数y=ax+bで表される直線の近傍で誤差を持ってばらついているとみなされるとき,一般に最小二乗法を用いる事でこの直線を推定できる.
それによれば,a,bは以下の式で求められる.
式→http://vista.crap.jp/img/vi8356319177.jpg

1行にxとyのそれぞれ値がスペースで区切られ,n組のデータがn行となって書かれたテキストデータを受け付け,最小二乗法でa, bを求めるプログラムを書け.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
データの行数は最大128行とする.
読み込んだデータはdouble型として扱い,配列x[], y[]に代入する.
最小二乗法でa, bを求める関数linestをプロトタイプ宣言し,x, yの配列の先頭アドレスとデータ数を渡す.
main関数以外の関数内で配列は使用せず,for文とポインタを利用すること.
出力する傾きと切片は,それぞれ"a = ","b = "の後に続けて小数第4位まで一行ずつ表示する.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 7月5日10時まで
[5] その他の制限:特になし

よろしくお願いします。
0093デフォルトの名無しさん2007/07/05(木) 00:37:04
もし>>25と>>86が違う人なら2人とも同じプログラムで死亡だな
0094デフォルトの名無しさん2007/07/05(木) 00:56:00
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4509.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 7月5日9時まで
[5] その他の制限:

実行結果
/home]% ./calender
2007 7
sun mon tue wed thu fri sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
/home]% ./calender
2006 7
sun mon tue wed thu fri sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
/home]%

よろしくお願いします。
0095デフォルトの名無しさん2007/07/05(木) 01:22:06
>>94
5分で消す
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4510.c
0096デフォルトの名無しさん2007/07/05(木) 01:26:27
>>94
その実行画面でWindows…?
それにしても横に長い問題文だなw
0097デフォルトの名無しさん2007/07/05(木) 01:30:47
>>94
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4511.c
0098デフォルトの名無しさん2007/07/05(木) 01:40:35
>>95
早く消せよ
0099デフォルトの名無しさん2007/07/05(木) 01:45:26
っつか、カレンダーの問題である年月日の曜日が何曜日であって、それを基点に合計日数を求めて
とかって問題があるが、俺それは苦手だw まぁ、グレゴリオ暦が1582年10月15日(金)から始まっているから
そこからの合計日数を求めちゃえば良いんでね?
0100デフォルトの名無しさん2007/07/05(木) 02:17:55
>>92
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4512.c
0101デフォルトの名無しさん2007/07/05(木) 02:19:47
>>95 >>97ありがとうございます^^
■ このスレッドは過去ログ倉庫に格納されています