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

このエントリーをはてなブックマークに追加
941デフォルトの名無しさん:2007/09/20(木) 19:38:01
1] 授業単元:C言語
[2] 問題文:
二つの整数を読み込んで、後者が前者の約数かを表示するプログラムを表示しなさい。

等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。

整数値を読みこんで、その絶対値を表示しなさい。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (bcc32)
 [3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:
942デフォルトの名無しさん:2007/09/20(木) 19:48:15
1.二つの整数を読み込んで、後者が前者の約数かを表示するプログラム。
2.等価演算氏や関係演算子が、1あるいは0の値を生成することを確認するプログラム。
3.整数値を読みこんで、その絶対値を表示するプログラム。
943912:2007/09/20(木) 20:17:18
>>913-914
レスサンクス。やんない方がいい事みたいだな。

これだけだとなんなので、>>941の1つめ
#include <stdio.h>
int main(void){
  int a,b;
  printf("整数値を2つ入力して下さい>");
  scanf("%d %d",&a,&b);
  if(b!=0 && a%b==0){
    printf("%dは%dの約数です。",b,a);
  }else{
    printf("%dは%dの約数ではありません。",b,a);
  }
  return 0;
}
944デフォルトの名無しさん:2007/09/20(木) 20:22:45
>>941
> 等価演算氏や関係演算子が、1あるいは0の値を生成する

これってC的にはどうなの?
1って保証あったっけ?
945デフォルトの名無しさん:2007/09/20(木) 20:22:45
aが0の場合、0以外のbが全部約数になるけど、いいんかね?
946デフォルトの名無しさん:2007/09/20(木) 20:27:46
>>941
2つめ

#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(n>>(sizeof(n)*8-1))?~n+1:n);
return 0;
}
947946:2007/09/20(木) 20:28:26
3つめだった
948デフォルトの名無しさん:2007/09/20(木) 20:29:03
/*読み込んだ整数値の符号を判定*/
#include <stdio.h>
int main(void)
{
int no1,no2;

puts("二つの整数を入力してください。");
printf("整数1:"); scanf("%d",&no1);
printf("整数2:"); scanf("%d",&no2);

if(no2%no1)
puts("後者は前者の約数ではありません。");
else
puts("後者は前者の約数です。");

return (0);
}
949デフォルトの名無しさん:2007/09/20(木) 20:38:48
>>944
疑問に思ったら仕様書を確認しような。以下 ANSI ISO/IEC 9899, 1999 から引用。

6.5.8 - 6
Each of the operator < (less than), > (greater than), <= (less than
or equal to), and >= (greater than or equal to) shall yield 1 if the
specified relation is true and 0 if it is false. The result has type int.

6.5.9 - 3
The == (equal to) and != (not equal to) operators are analogous to the
relational operators exept for their lower precedence. Each of the
operator yields 1 if the specified relation is true and 0 if it is false.
The result has type int. For any pair of operand, exactly one of the
relations is true.
950デフォルトの名無しさん:2007/09/20(木) 20:42:40
>>941
二つ目
#include <stdio.h>

int main(void)
{
int i;

for(i=0; i<2; i++) printf("%d %d %d ", i == 0, i > 0, i < 1);

return 0;
}
951デフォルトの名無しさん:2007/09/20(木) 20:45:34
/*1か0を生成*/
#include <stdio.h>
int main(void)
{
int no1;

printf("整数を入力してください。:");
scanf("%d",&no1);

if (no1 == 0)
puts("0");
else
puts("1");

return (0)
}
952デフォルトの名無しさん:2007/09/20(木) 20:51:38
953デフォルトの名無しさん:2007/09/20(木) 20:56:45
確実に0か1かを返すプログラムを提供してくれたんだと思うよ
954デフォルトの名無しさん:2007/09/20(木) 20:59:23
>整数値を読みこんで、その絶対値を表示しなさい。
は、
-8とか-10と入力したら、
絶対値は、8です、とか10ですとか表示するプログラムのことです。
955デフォルトの名無しさん:2007/09/20(木) 21:01:50
#include <stdio.h>

int main(void)
{
int n;

scanf("%d", &n);

printf("絶対値は%dです", n < 0 ? -n : n);

return 0;
}
956デフォルトの名無しさん:2007/09/20(木) 21:02:18
printf("%d",n>0?n:-n);
957デフォルトの名無しさん:2007/09/20(木) 21:05:30
どっちでもいいだろ
958デフォルトの名無しさん:2007/09/20(木) 21:10:38
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):int型で10個の要素を持つ配列に順次キーボードから整数を入力していく(入力データに関する
範囲チェックも行う)。10個の要素全てにデータを入力したら、配列の内容を降順にソートし、その内容を表示する。
また、10個の要素の合計、平均、最大値、最小値を求めて表示するプログラムの作成。
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月21日まで]
[5] その他の制限:
@配列に対する入力・出力は繰り返しのアルゴリズムで処理すること
A整数値しか入力されないものとし、入力データに大して「0以上かつ100以下」の範囲チェックを行う。
範囲外のデータが入力された場合はエラーメッセージを出力し、再入力を行う。
Bソートのアルゴリズムはfor文の2重ループで処理すること
C平均は小数点以下2桁で表示し、合計、平均、最大値、最小値は小数点の位置を合わせて表示する
959デフォルトの名無しさん:2007/09/20(木) 21:10:42
書き込みのタイミングが遅れただけなんだけど?
960デフォルトの名無しさん:2007/09/20(木) 21:11:15
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下の実行結果を表示するプログラムの作成

[実行結果]
国語 数学 英語 | 合計
-------------------+------
55 67 75 | 197
30 41 55 | 126
90 85 88 | 263
77 75 72 | 224
95 65 89 | 249
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

あらかじめ以下の二次元配列を定義しておくこと
int ten[5][3] = {
{55,67,75}
{30,41,55}
{90,85,88}
{77,75,72}
{95,65,89}
};
961デフォルトの名無しさん:2007/09/20(木) 21:12:42
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
半角英数字を一文字入力し、入力された英字で始まる曜日を検索して表示するプログラム
[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
@あらかじめ以下の二次元配列を定義しておく
char week[7][10] = {
"Sunday"
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
"Saturday"
};
A入力された文字で始まる曜日がなければ「頭文字が一致する曜日はありませんでした」と表示する。
B入力された文字で始まる曜日があれば「頭文字が一致するのは以下の通りです」と表示し、
その次の行から頭文字が一致する曜日を全て表示する。
962デフォルトの名無しさん:2007/09/20(木) 21:16:05
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
金額を入力し、入力された金額の金種計算を行うプログラムの作成

[実行結果]()内はキーボードから入力
金額を入力:(10000000)
金額は「1〜9999999」の範囲で入力してください
金額を入力:(38999)

金種計算
------------------
10000 | 3
5000 | 1
2000 | 1
1000 | 1
500 | 1
100 | 4
50 | 1
10 | 4
5 | 1
1 | 4

[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限:@金種計算で必要な配列データは各自で最適だと思うものを用意する
963デフォルトの名無しさん:2007/09/20(木) 21:17:21
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
万年カレンダー(グレゴリオ暦)を表示するプログラムの作成

[実行結果]()内はキーボードからの入力
万年カレンダー
年を入力:(12345)
年は「1〜9999」の範囲で入力してください。
年を入力:(2006)
月を入力:(15)
月は「1〜12」での範囲で入力してください。
月を入力:(11)

2006年11月のカレンダー
----------------------------
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
----------------------------
964デフォルトの名無しさん:2007/09/20(木) 21:19:12

[3] 環境
 [3.1] OS:(Windows Vista Business)
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年09月20日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
グレゴリオ暦の規則
@ 西暦の年数が4で割り切れ、かつ100で割り切れない年を閏年とする。
A 西暦の年数が400で割り切れる年も閏年とする。
B 西暦1年1月1日を月曜日とする
カレンダーに必要な配列データなどは各自で最適だと思うものを用意すること
965デフォルトの名無しさん:2007/09/20(木) 21:29:20
なんか一気に来た
966デフォルトの名無しさん:2007/09/20(木) 21:31:52
>>962
#include<stdio.h>
int main(void){
int a[]={10000,5000,2000,1000,500,100,50,5,1};
int y,i;
while(1){
printf("金額を入力:");
scanf("%d",&y);
if(y<1||y>9999999)
printf("金額は「1〜9999999」の範囲で入力してください\n");
else
break;
}
printf("金種計算\n------------------\n");
for(i=0;i<9;i++){
printf("%5d | %d\n",a[i],y/a[i]);
y%=a[i];
}
return 0;
}
967デフォルトの名無しさん:2007/09/20(木) 21:46:47
新学期始まったんだなw
968デフォルトの名無しさん:2007/09/20(木) 22:06:06
>>963
#include<stdio.h>
int f(int y,int m,int d){
if(m<3) y--,m+=12;
return y*365+y/4-y/100+y/400+(m+1)*306/10+d-428;
}
int main(void){
int y,m,d;
printf("万年カレンダー\n");
//グレゴリオ暦は1582年10月15日から
while(1){
printf("年を入力:",y); scanf("%d",&y);
if(y<1||y>9999) printf("年は「1〜9999」の範囲で入力してください。\n");
else break;
}
while(1){
printf("月を入力:",m); scanf("%d",&m);
if(m<1||m>12) printf("月は「1〜12」での範囲で入力してください。\n");
else break;
}
printf("\n%d年%d月のカレンダー\n----------------------------\n"\
" sun mon tue wed thu fri sat\n----------------------------\n",y,m);
for(d=0;d<f(y,m,1)%7;d++) printf("  ");
for(d=1;d<=f(y,m+1,1)-f(y,m,1);d++){
printf("%4d",d);
if(f(y,m,d)%7==6) printf("\n");
}
printf("\n----------------------------\n");
return 0;
}
969デフォルトの名無しさん:2007/09/20(木) 22:32:02
1] 授業単元:C言語
[2] 問題文:
最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。

[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン: (bcc32)
 [3.3] 言語: C
[4] 期限: (2007年9月22日まで)
[5] その他の制限:

よろしくお願いします。

970デフォルトの名無しさん:2007/09/20(木) 22:32:49
減り幅限定しないのか?
971969:2007/09/20(木) 22:35:44
>970
すいません減り幅は、0〜50です。
よろしくお願いします。
972デフォルトの名無しさん:2007/09/20(木) 22:36:29
75個未満はいいのか?
973969:2007/09/20(木) 22:39:59
>972
何度もすいません。
75個以下になったらです。
974デフォルトの名無しさん:2007/09/20(木) 22:42:14
デバッグに3日以上かかるがいいのか?
975969:2007/09/20(木) 22:48:37
>974
できるだけ早くお願いしたいんですけど。。。
976デフォルトの名無しさん:2007/09/20(木) 22:49:39
終了条件ないと永遠に終わらないんだけど。
977969:2007/09/20(木) 22:54:20
>976
そのとおりですね。
5回250個足したら終了でお願いします。
978デフォルトの名無しさん:2007/09/20(木) 23:04:10
問題文
最初300個ある商品が、毎日何個かランダムに減っていき、
残り75個になったら、その3日後に250個たされるプログラムを作りなさい。
すいません減り幅は、0〜50です。
75個以下になったらです。

単語の抽出
最初 300個 商品 毎日 何個 ランダム
残り 75個 3日後 250個
減り幅 0〜50
75個以下
979デフォルトの名無しさん:2007/09/20(木) 23:06:24
乱数の精度は?
980969:2007/09/20(木) 23:11:51
>979
0〜50の間であればいいんですけど。。。
981デフォルトの名無しさん:2007/09/20(木) 23:20:52
>>969
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
int num, prev_num, dec_num, inc_times=0, inc_day=0, day;

num=prev_num=300;
for(day=1;inc_times<3;day++)
{
if(day==inc_day) num+=250, inc_times++;
dec_num=rand()%51;
if(dec_num>num){
printf("\n!!!%d 日目に商品が %d 個不足しました!!!\n", day, dec_num-num);
dec_num=num;
}
num-=dec_num;

if(num<=75 && day>=inc_day) inc_day=day+3;
printf("%2d日目 商品数:%3d->%3d %+4d\n", day, prev_num, num, num-prev_num);

prev_num=num;
}

return 0;
}
982デフォルトの名無しさん:2007/09/20(木) 23:50:04
>>981 の訂正
for(day=1;inc_times<3;day++)

for(day=1;inc_times<5;day++)
983デフォルトの名無しさん:2007/09/21(金) 08:47:08 BE:331348875-2BP(12)
次スレ立てました
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
984デフォルトの名無しさん:2007/09/21(金) 11:04:17
>>937
これも酷いな……。
こっちまでブルーになる。
985デフォルトの名無しさん:2007/09/21(金) 11:31:16
2×3=6ドットしかないのか
986デフォルトの名無しさん:2007/09/21(金) 11:40:51
単位がmなら何も不思議じゃない
987デフォルトの名無しさん:2007/09/21(金) 14:07:42
C#の問題は書いていいの?
C#の問題といてくれるスレはないの?
988デフォルトの名無しさん:2007/09/21(金) 14:13:08
無いよ
自分でやれカス
989デフォルトの名無しさん:2007/09/21(金) 14:13:11
無いよ
990デフォルトの名無しさん
>>961
#include<stdio.h>

main(){
int ten[5][3] = {
{55,67,75}
{30,41,55}
{90,85,88}
{77,75,72}
{95,65,89}
};

printf("国語 数学 英語 | 合計 \n"
"-------------------+------ \n"
"55 67 75 | 197 \n"
"30 41 55 | 126 \n"
"90 85 88 | 263 \n"
"77 75 72 | 224 \n"
"95 65 89 | 249 \n"
);
}