私がC/C++の宿題を片づけてあげるわよ 15代目

このエントリーをはてなブックマークに追加
0も含まれるので、9と8で10行9列になるのではないでしょうか?
953948:03/11/26 05:14
あ、すいません。10と9でいいみたいですね。なにか勘違いしてました。
はい、了解。ちょっとまってねー。
>>948
#include <iostream>

inline void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}

int main()
{
using namespace std;
const int M = 10;
const int N = 9;
int a[M][N];
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
cin >> a[i][j];
for (j = 0; j < N; j++)
swap(a[8][j], a[6][j]);
for (i = 0; i < M; i++)
swap(a[i][3], a[i][6]);
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}
>>955
どうもありがとうございます!!
#include <stdio.h>

/* 関数 sum_dgt */
long int sum_dgt(long int x)
{
long int y, ret = 0;
if(x < 0){
y = -x;
while (y != 0){
ret += y % 10, y /= 10;
}
return ret;
}else{
while (x != 0){
ret += x % 10, x /= 10;
}
return ret;
}
}
/* main関数による演算 */
long int main(void)
{
long int num;

printf("整数を入力してください。\n");
scanf("%ld",&num);
printf("与えられた各桁の数の和は、%ldです。\n", sum_dgt(num) );
return 0;
}
問題は
「20桁までの整数値を文字として受け取って、各桁の整数を返す関数をつくりなさい。main関数における入力も文字列で行うこと。
数値として変換できない文字が引数として与えられた場合は、関数の結果に-1を
返すようにする。-1が返された場合はmain関数でエラーが出るようにしなさい。
」とのことなのですが・・・ここからどう改良すればいいのでしょうか?
入力からしておかしくないか?
まず
/* main関数による演算 */
long int main(void)
{
char *s;

printf("整数を入力してください。\n");
scanf("%s",&num);
printf("与えられた各桁の数の和は、%dです。\n", sum_dgt(s) );
return 0;
}

>>959(ソース参照用)
次に
sum_dgtが行う事を整理してみる

・引数で文字列を受け取る
・文字列の格文字がすべて整数なら全ての文字を足した数字を返す
・一つでも整数で無いものが入っていたら -1 を返す

という事です。
最初はループを使ってみましょう

もし時間があれば整数で受け取って再帰を使って全桁を受け取るプログラムも作ってみるとイイね。
ちなみに整数で入力を受けたら20桁まで計算できないんじゃないかなぁ
>>959間違えた

/* main関数による演算 */
long int main(void)
{
char s[21];

printf("整数を入力してください。\n");
scanf("%s",&num);
printf("与えられた各桁の数の和は、%dです。\n", sum_dgt(s) );
return 0;
}
>>961(ソース参照用)
二つの数字を入力し一つ目の数字と二つ目の数字の差を何等分するか入力し
例えば
8.2と0で2等分だったら4.1が出力するプログラム
簡単なんだけど小数点ではできない。
縦と横で力の分解をしろ
>>961
細かいことを言えば、
scanf("%20s", s);

>>957 コンパイラすら通してないが、こんなん。
#include <stdio.h>
#include <ctype.h>

int sum_dgt(char *s)
{
int retval = 0;
int d;
for (;*s != '\0'; s++) {
if (!isdigit(*s))
return -1;
sscanf(s, "%1d", &d);
retval += d;
}
return retval;
}
965962:03/11/26 13:42
作っても出力が0.000000しかでない。
int sum_dgtnum (int n)
{
static int k += n;
static int flag = 1;
if (n<0) flag = -1;
}

int sum_dgt (char *s)
{
if (*s) sum_dgt (s+1);
if (!isdigit(*s)) sum_dgtnum (-1);
sum_dgtnum (*s-'0');
return sum_dgtnum (0);
}
これはだめぽ?
>>965
じゃあ作り方が間違ってるね
>>965 変数をdoubleで宣言
とりあえずソースだそうぜ
970962:03/11/26 14:05
#include<stdio.h>

int main(){

double a,b,c,d,e;

scanf("%f",&a);
scanf("%f",&b);

c=a-b;

scanf("%f",&d);

e=c/d;

printf("%f\n",e);

return 0;

}
>>966 だめぽ。

>>970
scanf("%f"

scanf("%lf"
>>971
そうだっけ?

lfって long double じゃないの?

参考資料 ttp://okuyama.mt.tama.hosei.ac.jp/unix/C/slide16-1.html
case sensitiveですヨ。

>long double の場合には L を付す必要があります。

>ふたつの l フラグを指定することは L フラグと等価である
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
scan()の場合
float *は"%f",double *は"%lf",long double *は"%Lf"
printf()の場合
floatは"%f",doubleは"%f",long doubleは"%Lf"

とりあえず、ANSIではそうなのよん。規格とか規格の解説で確認されたし。
・・・scaf()とprintf()で書式指定が似てるけれど異なるんで、それも確認してちょ。
みなさんのよーに、URLパッっと出せればかっこいいのだろうが。
>>974の説明はわかりやすいので参考資料よりもそっちのがカッコイ
976ちんプンかんプン:03/11/26 15:40
すみませんが 下記の問題はいったい何が問題で、何をどうすればいいのでしょうか。
ちなみにC言語今日がはじめて。全く意味不明。本は高いし何の本買ったらいいか分からないし。
あぁ、これから先、やっていけるだろうか・・・。まずパソコン買わなきゃな。

int a = 55 ; という式がある。
これは整数である。
この整数を 文字型にして。
char b[3]="55"; はダメ。
>>976
>まずパソコン買わなきゃな。

PC買ったら↓ここにおいで。
タダで使えるBorland C++ Part3
http://pc2.2ch.net/test/read.cgi/tech/1054390397/
PCはマル紅で19800円だよ
LSI-C86 -> VC++6.0 -> MS-C -> MinGW gcc3.2
漏れのコンパイラ経歴。結局はフリーに落ち着いたという罠。
980ちんプンかんプン:03/11/26 15:53
>>977
はい。買ったら行きます。行きますのでおしえてくらさい。
もしかして、”文字型にして” が問題なのかなぁ。
数値55と文字列定数の"55"の違いを言いたいんじゃ?
982ちんプンかんプン:03/11/26 15:56
そうか、 a は整数型 で それを文字型にしろと言ってるのかぁ。
そうですよね? それが問題になってるんですよね?
うーん、自力で理解できるのはここまでだな。。。。
VC++6.0 -> LSI-C -> VC++6.0 -> LSI-C -> VC++6.0 -> BCC55 -> VC++6.0 -> gcc -> BCC55 -> VC++6.0
結局使いやすいところに落ち着いたという罠
984ちんプンかんプン:03/11/26 15:58
>>981
そうですか。そういうことですか。
つまり、整数型と文字型の違いを説明しろ、と言う問題なんですか。
そかそか。なるほど。
で、答えはどのように答えたらいいのでしょうか。
>>983
すげー行ったり来たりだ。
>>984
整数型と文字列型があまり違うように見えない俺はどうしよう…別にいいよね?

>>985
OS入れなおしたりしまくってたから気分変わりまくるよ。CygWin 入れた時はもう何がなんだかわからなかったりした
結局gcc というか linux でほんの数回コンパイルした程度だから gcc は入ってないも同然ですが。。。
>>984
char b[3]={'5', '5', '\0'}";
>>987
とっても楽しかったです

ゲラゲラ
C言語で、実数値を表示させる際、整数部を5桁、小数部を2桁表示する為のprintfの書式は、
printf("%8.2f")でよろしいでしょうか?
>>987
って思ったら }" という部分が間違えてる。別に間違いを笑ったわけではないのであしからず
printf ("%5.2f");
>>976 文字「列」への変換の場合。
int a = 55;
char b[10];
sprintf(b, "%d", a);
初日にしちゃ高レベルな問題だぁね。

あるいは・・・文字型への変換。
int a = 55;
char b = a;

>>984 ネタかもしれんが、マジレス。
それは char b[3] = "55";と同じ。

>>989 printf("%8.2f", 12345.1234);して 実際に確かるのが吉。

だれかそろそろ次スレたててちょ。
>>992
OK任せろ俺が立てる
スレ立てるのってきめ台詞いるの?・・・
995989:03/11/26 16:17
>>992
printf("%8.2f", 12345.1234);ですると、12345.12と表示されますが、
printf("%5.2f", 12345.1234);でも、12345.12と表示されます。
どちらが正しいのでしょうか?
そーゆーときは、整数部の桁数減らしてみる。
>>995
12345.1234 を、1234567890.12345 とかにしてみたら?
スレ立てられない・・・

C/C++の宿題ならおいどんに任せろ 16代目

おいどんはC++房でおわす。
こんにちの技術は日進月歩、どんどん進むでごわす
わからない宿題はどんとこーい。

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2
1000デフォルトの名無しさん:03/11/26 16:22
カッコイイきめ台詞でこのスレ終わろうぜ

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。