パソコン活用研究シリコンバレー(C、C++、の活用研究)

簡単な計算系のプログラム

(準備中)

------------------------------------summery-----------------------------------------------------
Very short programs with a simple calculation system.
簡単な計算系の超ショートプログラムです。
-------------------------------------------------------------------------------------------------

簡単な計算系

1 引き算

入力値
入力は以下の通り半角スペース区切りで、正の整数 a, b が入力される。
a b
(末尾に改行が1つ入る)

ただし1 ≦ a, b ≦ 1000

出力
a から bを引いた差を出力して下さい。
最後は改行(余計な文字、空行を含めないこと)


#include <stdio.h>
int main(void){
int a,b,x;
scanf("%d", &a);
scanf("%d", &b);
x=a-b;
printf("%d", x);
return 0;
}

実行例
c:\bcc55\Bin>sub1
45 50
-5
c:\bcc55\Bin>sub1
1000
999
1
c:\bcc55\Bin>


2 単位の変換
入力値
距離 n と単位 s が半角スペース区切りで入力される。
(入力値最終行の末尾に改行が1つ入る)

1 ≦ n ≦ 1000
単位 s 「km」「m」「cm」の3種類のみ(半角英数)が入力

n s


出力
n を 単位 s から「mm」に換算し最後にmmを付けて出力する。
(最後は改行し、余計な文字、空行を含まない)

入力例
5 cm

出力例
50 mm

プログラム@ convlen1

#include <stdio.h>
#include <string.h>
int main(void){
char s[5];
long n;
scanf("%ld %s", &n,s);
if(strcmp(s,"km")==0) {n=n*1000*100*10;}
if(strcmp(s,"m")==0) {n=n*100*10;}
if(strcmp(s,"cm")==0) {n=n*10;}
printf("%ldmm\n", n);
return 0;
}

文字列を比較するにはstrcmp を使う



実行例
c:\bcc55\Bin>convlen1
3 cm
30mm

c:\bcc55\Bin>convlen1
25 m
25000mm

c:\bcc55\Bin>convlen1
525 km
525000000mm

c:\bcc55\Bin>



3 体積と表面積の計算
辺の長さ a の正六面体の体積と表面積を求める

辺の長さ a の正六面体の体積と表面積
体積=a*a*a
表面積=6*a*a

入力値
一辺の長さ a が入力される。
(入力値最終行の末尾に改行が1つ入る)

1 ≦ a ≦ 30  a は正の整数

出力
辺の長さ a の正六面体の体積v、表面積sを出力する。
体積と表面積はカンマで区切り v,sのように出力する。
(最後は改行し、余計な文字、空行を含まない)



入力例1
10
出力例1
1000,600

プログラム例@ volume


#include <stdio.h>
int main(void){
int a,v,s;
scanf("%d", &a);
v=a*a*a;
s=6*a*a;
printf("%d,%d\n", v,s);
return 0;
}

c:\bcc55\Bin>volume
1
1,6

c:\bcc55\Bin>volume
10
1000,600

c:\bcc55\Bin>volume
30
27000,5400


参考 C++でのプログラム例

#include <iostream>
using namespace std;
int main(void){
int a,v,s;
cin >> a;
v=a*a*a;
s=a*a*6;
cout << v<<","<<s <<endl;
return 0;
}

c:\bcc55\Bin>volumep
1
1,6

c:\bcc55\Bin>volumep
15
3375,1350



4 整数の桁数を求める
ある10進数の正の整数 x が何桁かを求める。


入力値
x
(入力行末尾には改行が入る)
1 ≦ x ≦ 10000の整数
出力
n が何桁かを数字で出力してください。
(最後は改行し、余計な文字、空行を含まない)


入力例1
200
出力例1
3
入力例2
9999
出力例2
4

プログラム例@ keta.c

#include <stdio.h>
int main(void){
int i,x;
scanf("%d",&x);
i=1;
while(x>=1){
x=x/10;
if (x<1) break;
i++;}
printf("%d",i);
return 0;
}

入力された値xを10で割り、何回割れるか(割った結果が1以上か)で桁数を求める。
i に桁数がカウントされる。


実行例

c:\bcc55\Bin>keta
32
2
c:\bcc55\Bin>keta
8765
4
c:\bcc55\Bin>


5 絶対値
整数 n の絶対値を求める。

入力値
n
(入力行末尾には改行が入る)
n は-10000 ≦ n ≦ 10000の整数


出力
入力された整数 n の絶対値
(最後は改行し、余計な文字、空行を含まない)

n は整数
入力例1
-1
出力例1
1


プログラム例@ abs1.c

#include <stdio.h>
#include <stdlib.h>
int main(void){
int n;
scanf("%d", &n);
printf("%d", abs(n));
return 0;
}

算術系関数のabsを使う

実行例

c:\bcc55\Bin>abs1
-10
10
c:\bcc55\Bin>abs1
-2678
2678
c:\bcc55\Bin>abs1
8
8
c:\bcc55\Bin>


プログラム例A abs2.c


#include <stdio.h>
#include <stdlib.h>
int main(void){
int n;
scanf("%d", &n);
if(n<0) n=-n;
printf("%d", n);
return 0;
}


入力値が負なら符号を反転させるという方法もあり得る。

実行例

c:\bcc55\Bin>abs2
0
0
c:\bcc55\Bin>abs2
590
590
c:\bcc55\Bin>abs2
-999
999
c:\bcc55\Bin>


6 お団子の代金
お団子は
・お皿代 10 円
・お団子1個 20 円

買ったお団子の数 N が与えられるのでお団子代を計算する


入力値
買ったお団子の数 N が 1 行で入力される。末尾に改行が 1 つ入ります。
1<= n <= 20

出力
・お皿代 10 円
・お団子1個 20 円
としてお団子代を計算する。

(末尾に改行を入れ、余計な文字、空行を含まない)

プログラム例@ price.c

#include <stdio.h>
int main(void){
int n;
scanf("%d", &n);
printf("%d", 10+n*20);
return 0;
}

実行例


c:\bcc55\Bin>price
3
70
c:\bcc55\Bin>price
8
170
c:\bcc55\Bin>


7余りを求める
整数 N と M が与えられるので N を M で割った余りを出力する。
割り切れる場合は0と出力。


入力される値
整数 N と M が空白を区切りとして入力される。

N M

ただし
・N, M は整数
・1 ≦ N, M ≦ 100
・M < N


出力
N をMで割った余りを出力してください。割り切れて余りが 0 の場合は 0 と出力。


#include <stdio.h>
int main(void){
int m,n;
scanf("%d",&n);
scanf("%d",&m);
printf("%d\n", n % m);
return 0;
}


c:\bcc55\Bin>mod
18 5
3

c:\bcc55\Bin>mod
233 11
2

以下は、Cの整数どうしの割り算では商は小数点以下を切捨てした整数値になる仕様
であることを利用している。
#include <stdio.h>
int main(void){
int m,n,rem;
scanf("%d",&n);
scanf("%d",&m);
rem=n-n/m*m;
printf("%d\n", rem);
return 0;
}

c:\bcc55\Bin>mod2
63 9
0

c:\bcc55\Bin>mod2
65 9
2

c:\bcc55\Bin>mod2
59 8
3





TopPage