C Primer Plus(第5版)第5章プログラミング練習


第五章演算子、式、文
プログラミング練習
1.プログラムを作成します.分で表す時間を時間と分で表す時間に変換します.#defineまたはconstを使用して、60を表すシンボル定数を作成します.whileループを使用して、ユーザーが値を繰り返し入力し、0以下の時間を入力するとループを終了します.
#include <stdio.h>
#define H 60

int main(void)
{
	//             #define
	//const int H = 60;
	
	int m;

	printf("     (  0  ):");
	scanf("%d", &m);
	while (m > 0)
	{
		printf("%dM = %dH%dM
", m, m/H, m%H); printf(" ( 0 ):"); scanf("%d", &m); } return 0; }

2.整数を入力する必要があるプログラムを作成し、入力した値から入力した値より10大きい整数値まで(つまり、5を入力すると、出力は5から15まで)印刷します.各出力値の間にスペース、タブ、または改行で区切る必要があります.
#include <stdio.h>

int main(void)
{
	int a, b;

	printf("       :");
	scanf("%d", &a);
	b = 11;
	while (b-- > 0)
	{
		printf("%d\t", a++);
	}
	printf("
"); return 0; }

3.ユーザーに日数を入力し、その値を週数と日数に変換するプログラムを作成します.たとえば、このプログラムは18日を2週間4日に変換します.結果を次の形式で表示します.
18 days are 2 weeks, 4 days.
whileループを使用して、ユーザーに日数を繰り返し入力させます.0または-20などの非正数を入力すると、プログラムはループを終了します.
#include <stdio.h>
#define W 7

int main(void)
{
	int day = 0;

	printf("     (  0  ):");
	scanf("%d", &day);
	while (day > 0)
	{
		printf("%d days are %d weeks, %d days.
", day, day/W, day%W); printf(" ( 0 ):"); scanf("%d", &day); } return 0; }

4.ユーザーがセンチメートルで高さ値を入力するプログラムを作成し、センチメートルとフィートインチで高さ値を表示します.センチメートルとインチの値に小数点が表示されます.プログラムは、ユーザが非正の数値を入力するまで、ユーザが入力を継続することを可能にする.プログラムの実行例を次に示します.
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters(<=O to quit): 168
168.0 cm = 5 feet, 6.1 inches
Enter a height in centimeters(<=O to quit): 0
#include <stdio.h>
#define INCH 2.54
#define FEET 12

int main(void)
{
	float cm;
	float inch;
	int feet;

	printf("Enter a height in centimeters: ");
	scanf("%f", &cm);
	while (cm > 0)
	{
		inch = cm / INCH;
		feet = (int)inch / FEET;
		printf("%.1f cm = %d feet, %.1f inches
", cm, feet, inch-feet*FEET); printf("Enter a height in centimeters(<=O to quit): "); scanf("%f", &cm); } return 0; }

5.最初の20個の整数の和を見つけるためのプログラムaddemup.c(プログラムリスト5.13)を書き換えます(addemup.cプログラムは、初日に$lを得た場合、翌日に$2を得た場合、3日目に$3を得た場合、20日間で多くのお金を稼ぐプログラムと見なすことができます).プログラムを変更します.計算がどこまで行われるかをインタラクティブに伝えることができます.すなわち,20の代わりに1つの読み込まれた変数を用いる.
#include <stdio.h>

int main(void)
{
	int count, sum;
	int day;

	printf("     :");
	scanf("%d", &day);
	sum = count = 0;
	while (count++ < day)
		sum += count;
	printf("sum = %d
", sum); return 0; }

6.プログラミング練習5のプログラムを修正し、整数平方の和を計算できるようにします(好きな場合は、初日に$lを得た場合、翌日に$4を得た場合、3日目に$9を得た場合、いくらを得るかを計算することができます.これは良い商売のように見えます).
Cには平方関数はありませんが、nの平方がn*nであることを利用することができます.
#include <stdio.h>

int main(void)
{
	int count, sum;
	int day;

	printf("     :");
	scanf("%d", &day);
	sum = count = 0;
	while (count++ < day)
		sum += count * count;
	printf("sum = %d
", sum); return 0; }

7.float型数を入力してキューブ値を印刷するプログラムを作成します.独自に設計した関数を使用して、値のキューブを計算し、そのキューブを印刷します.main()プログラムは入力した値をこの関数に渡す.
#include <stdio.h>

void fun(float n);

int main(void)
{
	float num;
	
	printf("          :");
	scanf("%f", &num);
	fun(num);
	
	return 0;
}

void fun(float n)
{
	printf("%.2f    :%.2f
", n, n * n * n); }

8.ユーザに華氏温度を入力するように要求するプログラムを作成する.プログラムはdoubleタイプで温度値を読み込み,ユーザが提供する関数Temperatures()にパラメータとして渡す.この関数は、対応する摂氏温度と絶対温度を計算し、小数点の右側に2桁の数値の精度で3つの温度を表示します.この3つの値は、各値が表す温度スケールで識別されるべきです.次に、華氏温度を摂氏温度に変換する方程式を示します.
Celsius = 1.8 * Fahreneit + 32.0
通常、科学的な絶対温度の目盛りは0が絶対ゼロを表し、可能な温度の下限である.次に、摂氏温度を絶対温度に変換する方程式を示します.
Kelvin=Celsius+273.16
Temperatures()関数はconstを使用して変換内の3つの定数を表す記号を作成します.main()関数は、ユーザがqまたは他の非数値値を入力すると、サイクルが終了する温度を繰り返し入力できるようにするサイクルを使用する.
#include <stdio.h>

void temperatures(double fa);

int main(void)
{
	double fa;
	
	printf("         :");
	while (scanf("%lf", &fa) == 1)
	{
		temperatures(fa);
		printf("         (  q  ):");
	}
	
	return 0;
}

void temperatures(double fa)
{//           ,        ,          
	const double k = 273.16, g = 1.8, c = 32.0;

	printf("Fahrenei:	%.2lf
", fa); printf("Celsius: %.2lf
", g * fa + c); printf("Kelvin: %.2lf
", g * fa + c + k); } /* void temperatures(double f) {// const double k = 273.16, c = 32.00; printf(" %.2lf  =  %.2lf  =   %.2lf
",      f, (f - c) * 5 / 9, ((f - c) * 5 / 9) + k); } */