中国大学MOOC-翁カイ-C言語-PAT練習問題及び解答-第2週

18293 ワード

中国大学MOOC-翁カイ-C言語-PAT練習問題及び解答-第2週
02-0. 整数四則演算
入力フォーマット:1行に2つの正の整数AとBを入力します.出力フォーマット:4行において、フォーマット「A演算子B=結果」の順に、和、差、積、商を出力します.入力サンプル:3 2出力サンプル:3+2=5 3-2=1 3*2=6 3/2=1
#include     
int main()
{
	int A;
	int B;
	printf("input two nums:");
	scanf("%d %d", &A, &B);
	int x = A+B;
	int y = A-B;
	int m = A*B;
	int n = A/B;
	printf("%d + %d = %d
"
, A, B, x); printf("%d - %d = %d
"
, A, B, y); printf("%d * %d = %d
"
, A, B, m); printf("%d / %d = %d
"
, A, B, n); return 0; }

02-1. センチメートル換算フィートインチ
インチの長さのフィートfootとインチinchの値が知られている場合、対応するメートルは(foot+inch/12)*0.3048です.現在、ユーザーがセンチメートル数を入力している場合、インチの長さに対応するフィートとインチはいくらですか?1フィートが12インチに等しいことを忘れないでください.
入力フォーマット:1行に正の整数を1つ入力します.単位はセンチメートルです.出力フォーマット:このセンチメートル数がインチの長さのフィートとインチに対応する整数値を1行に出力し、真ん中をスペースで分けます.入力サンプル:170出力サンプル:5 6
int main()
{
	printf("input cm : ");
	int cm;
	scanf("%d", &cm);
	int foot = cm / 30.48;
	int inch = (cm/30.48-foot) * 12;
	printf("change : %d foot %d inch", foot, inch);
	return 0;
} 

02-2. そして何時
1106は11時6分を表すなど、4桁の数字で時間を表すことがあります.今、あなたのプログラムは開始時間と経過時間に基づいて終了時間を計算します.2つの数字を読み込んで、1番目の数字はこのような4桁の数字で現在の時間を表し、2番目の数字は分数を表し、現在の時間がそれ以上経過した後が何時であるかを計算し、結果も4桁の数字を表します.時間が1桁の場合、先頭のゼロがなく、すなわち5時30分が530と表される.なお、2番目の数字が表す分数は60を超えるか、負の数である可能性があります.
≪フォーマットの入力|Input Format|oem_src≫:1行に2つの整数を入力します.入力は、4桁の数字で表される開始時間と、経過した分の数で、空白で区切られます.注意:開始時間では、時間が1桁の場合、先頭のゼロはありません.すなわち、5時30分は530と表されます.経過した分数は60を超えたり、負の数になったりする可能性があります.≪出力フォーマット|Output Format|emdw≫:4桁の数値で表される終了時間を出力します.タイトルは開始時間と終了時間が同じ日であることを保証します.入力サンプル:1120 110出力サンプル:1310
int main()
{
	printf("input start time and minutes: ");
	int start,passed;
	scanf("%d %d", &start, &passed);
	int x=0, y, z;
	if(start > 1000)
	{
		x = start / 1000;
		y = (start % 1000) / 100;
		z = (start % 1000) % 100;
	}
	else
	{
		y = start / 100;
		z = start % 100;
	}
	int min = (x * 10 + y) * 60 + z;
	int end = min + passed;
	int hours = end / 60;
	int minutes = end % 60;
	//printf("%d hours %d minutes.
", hours, minutes);
printf("%d%d", hours, minutes); }

02-3. 逆順の3桁
プログラムは、正の3桁を読み込むたびに、ビット逆順の数字を出力します.注意:入力した数字に末尾の0が含まれている場合、出力に先頭の0を付けるべきではありません.例えば入力700、出力は7であるべきである.
入力フォーマット:各テストは3ビットの正の整数です.≪出力フォーマット|Output Format|emdw≫:ビット逆シーケンスの数を出力します.入力サンプル:123出力サンプル:321
int main()
{
	printf("input three digit : ");
	int num;
	scanf("%d", &num);
	int x = num / 100;
	int y = (num % 100) / 10;
	int z = (num % 100) % 10;
	int res = z*100 + y*10+x;    //        if   
	printf("%d", res);
	//        ,      。 
	if(z == 0 && y == 0)
	{
		printf("%d", x);
	}
	else if(z == 0)
	{
		printf("%d%d", y, x);
	}
	else 
	{
		printf("%d%d%d", z, y, x);
	}
	return 0;
}

02-4. BCD復号
BCD数は1バイトで2桁の10進数を表し、4ビットごとに1桁を表す.したがって、BCD数の16進数が0 x 12であれば、10進数の12を表す.しかし明ちゃんはBCDを習ったことがなく、すべてのBCD数をバイナリ数として10進数出力に変換しました.そこでBCDの0 x 12は10進数の18に出力されました!
今、あなたのプログラムはこの間違った10進数を読み込んで、正しい10進数を出力します.ヒント:18を0 x 12に変換してから12に変換することができます.
入力フォーマット:1行に[0,153]の範囲の正の整数を入力し、有効なBCD数に変換できることを保証します.つまり、この整数を16進数に変換した場合、A-Fの数字は現れません.≪出力フォーマット|Output Format|emdw≫:対応する10進数を出力します.入力サンプル:18出力サンプル:12
int main()
{
	int oct;
	printf("input: ");
	scanf("%d", &oct);
	int x = oct / (16*16);
	int y = oct % (16*16) / 16;
	int z = oct % (16*16) % 16;
	int num = x*100 + y*10 + z;
	printf("%d",num);
	return 0;
}