C/C++の宿題を片付けます 92代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/07/04(水) 10:09:24【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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:19v――.、
/ ! \
/ ,イ ヽ
.. / _,,,ノ !)ノリハ 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※入力時に累積の人数を表示 ※年齢入力時に数字属性と範囲のチェックを行う※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[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#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>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[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”aaaa"と"aa"を比較した時に3回文字列が出現したと数えるか、
2回出現したと数えるかで文字列発見時のポインタ、配列参照の仕方が変わる
0010デフォルトの名無しさん
2007/07/04(水) 12:18:44環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
問題
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
0011デフォルトの名無しさん
2007/07/04(水) 12:28:38[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要するに、入力された文字列を格納した配列の要素番号が奇数か偶数かってことだよね?
0013デフォルトの名無しさん
2007/07/04(水) 13:03:33[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[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[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[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[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:290019デフォルトの名無しさん
2007/07/04(水) 13:11:590020デフォルトの名無しさん
2007/07/04(水) 13:14:38[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#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:110023デフォルトの名無しさん
2007/07/04(水) 13:29:41#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#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次のプログラムを元にして、足し算などの式を入力すると計算結果を
表示するプログラムを考える
(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:20int 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環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:標準関数の利用
問題1
文字列を入力し、文字列中の英字と数字の文字数をカウントしなさい
使用する標準関数:isdight()
実行画面
文字列入力==>AB123CDEF45G
英字:7
数字:5
0029デフォルトの名無しさん
2007/07/04(水) 14:23:29#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[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[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この順って、どの順?
前スレで久々「ありがとう」の言葉をもらった
嬉しいもんだ
0034デフォルトの名無しさん
2007/07/04(水) 14:54:11ファイル1→ファイル2→ファイル3
ということです。
0035間違ってたらゴメン
2007/07/04(水) 14:57:16#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:22mainの戻り値の型がintではありません。と警告が出るのですが
これは出ちゃうものなんでしょうか?
0037デフォルトの名無しさん
2007/07/04(水) 15:29:39[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:53ISO、ANSI準拠で int main(void) { return 0; } といったスタイルにしないと
エラーが出ちゃうようなコンパイラだと でっ、でちゃうぅ〜〜〜
0039デフォルトの名無しさん
2007/07/04(水) 15:41:290040デフォルトの名無しさん
2007/07/04(水) 15:46:52#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ありがとうございます。
ただこれ実行すると
文字列を入力せよ:Tanaka Tarou
結果:akanaT
という感じでスペース以降が逆順で表示されないのですが、
スペース以降含めて文字列全て逆表示にできないでしょうか?
結果:uoraT akanaT
みたいに
0042デフォルトの名無しさん
2007/07/04(水) 16:09:39ごめん、なんか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早い手直しありがとうございます。
もしかして前スレの>>991さんでしたら、そちらもありがとうございます。
違ってたらすいません。
0044デフォルトの名無しさん
2007/07/04(水) 16:18:38早い手直しありがとうございます。
もしかして前スレの>>991さんでしたら、そちらもありがとうございます。
違ってたらすいません。
0045デフォルトの名無しさん
2007/07/04(水) 16:32:01掛け算割算も工夫してみます
004631
2007/07/04(水) 17:17:040047デフォルトの名無しさん
2007/07/04(水) 17:28:40そのままコピペしたらエラー出まくり。
プログラムの仕様くらい書け。
おまけに長いくせに別関数にするだけ。
自分でやった方が早いと思うよ。
0048デフォルトの名無しさん
2007/07/04(水) 17:30:32あまり綺麗ではないが、四則演算とカッコ対応
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前スレにもある通り、与えられたそのままの条件でプログラムを書くと
出力が滅茶苦茶になる。
もう一度良く問題文を確かめて欲しい。
0051デフォルトの名無しさん
2007/07/04(水) 17:36:00gets_s()だのstrcpy_s()だの、VC++8.0専用のソースのようだが
引数が足りなくてコンパイルエラーになる箇所があるようだねえ
0052デフォルトの名無しさん
2007/07/04(水) 17:37:54ム頼む!
漏れの命がかかってるorz
0053デフォルトの名無しさん
2007/07/04(水) 18:05:56エラー表示が出なくなりました。ありがとです
コンパイラによって違うのですね・・・
0054デフォルトの名無しさん
2007/07/04(水) 18:10:35警告とエラーは別物だぞ
0055デフォルトの名無しさん
2007/07/04(水) 18:10:520056デフォルトの名無しさん
2007/07/04(水) 18:48:43#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[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ここは基本的に問題出す方も投げ出しっぱなし、
説く方も気が向き次第なスレです。
そんな必死に頼りにする所ではありませんカス。
0060デフォルトの名無しさん
2007/07/04(水) 18:59:44データって
111
&222
333
444
&555
こんな感じでいいの?
0061デフォルトの名無しさん
2007/07/04(水) 19:02:18多分、そうだと思います。
その場合だと、
&222
&555が、a.txtへ
111
333
444が、b.txtへ
という感じだと思います。
お願いします。
0063デフォルトの名無しさん
2007/07/04(水) 19:07:50#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とても早くて助かります。
ありがとうございました。
0065デフォルトの名無しさん
2007/07/04(水) 19:13:23#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#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[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[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:30double型なのに徹頭徹尾%dを使ってるとことか。
0070デフォルトの名無しさん
2007/07/04(水) 19:40:27ありがとうございました。
基本的なところで間違ってたのかorz
0071デフォルトの名無しさん
2007/07/04(水) 20:41:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4503.c
もっとできるだろうが飽きたからこれで終わりにする
0072工房・・・
2007/07/04(水) 20:53:43[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[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#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だから問題が雑すぎ
0076デフォルトの名無しさん
2007/07/04(水) 21:32:201番目
#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という宿題が出たんですけど、もしわかるひとがいたらよろしくお願いします。
0078デフォルトの名無しさん
2007/07/04(水) 21:44:53>>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:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4504.txt
0080デフォルトの名無しさん
2007/07/04(水) 21:49:27#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#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:032000円札忘れてたぜ
#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:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4505.c
0084デフォルトの名無しさん
2007/07/04(水) 23:00:06http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4506.c
0085デフォルトの名無しさん
2007/07/04(水) 23:39:54>>14
>>15
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4507.zip
0086デフォルトの名無しさん
2007/07/04(水) 23:41:44[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>>25
0088デフォルトの名無しさん
2007/07/05(木) 00:01:2286です。
引き算、掛け算、割り算も出来るプログラム教えてください。
0089デフォルトの名無しさん
2007/07/05(木) 00:02:24すいません。掛け算と割り算です
0090デフォルトの名無しさん
2007/07/05(木) 00:25:46http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4508.c
0091デフォルトの名無しさん
2007/07/05(木) 00:27:04>>48
0092デフォルトの名無しさん
2007/07/05(木) 00:35:46[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:040094デフォルトの名無しさん
2007/07/05(木) 00:56:00[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:065分で消す
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4510.c
0096デフォルトの名無しさん
2007/07/05(木) 01:26:27その実行画面でWindows…?
それにしても横に長い問題文だなw
0097デフォルトの名無しさん
2007/07/05(木) 01:30:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4511.c
0098デフォルトの名無しさん
2007/07/05(木) 01:40:35早く消せよ
0099デフォルトの名無しさん
2007/07/05(木) 01:45:26とかって問題があるが、俺それは苦手だw まぁ、グレゴリオ暦が1582年10月15日(金)から始まっているから
そこからの合計日数を求めちゃえば良いんでね?
0100デフォルトの名無しさん
2007/07/05(木) 02:17:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4512.c
0101デフォルトの名無しさん
2007/07/05(木) 02:19:47■ このスレッドは過去ログ倉庫に格納されています