1. 程式人生 > 其它 >C語言 程式設計結構練習題2

C語言 程式設計結構練習題2

技術標籤:程式設計c語言

1.【問題描述】 用整數1-7依次表示星期一至星期日。由鍵盤輸入一個整數,輸出對應的英文表示,如果輸入的整數在1~7之外,輸出“Error”資訊。
【樣例輸入1】1
【樣例輸出1】Monday
【樣例輸入2】7
【樣例輸出2】Sunday
【樣例輸入3】10
【樣例輸出3】Error
【樣例說明】本題輸出結束後無換行符。

#include <stdio.h>
int main()
{
	int num;
	scanf_s("%d", &num);
	if (num < 1 || num>7)
		printf(
"Error"); else { switch (num) { case 1:printf("Monday"); break; case 2:printf("Tuesday"); break; case 3:printf("Wednesday"); break; case 4:printf("Thursday"); break; case 5:printf("Friday"); break; case 6:printf("Saturday"
); break; case 7:printf("Sunday"); break; } } return 0; }

2.【問題描述】 從鍵盤輸入三角形的三個邊長判斷能否構成三角形,如能構成三角形,則判斷是哪一種型別(等腰三角形isosceles triangle、等邊三角形equilateral triangle、直角三角形right triangle、任意三角形arbitrary triangle);否則輸出“not triangle”。
【輸入形式】輸入三個雙精度浮點數
【輸出形式】判斷輸出語句結束後跟換行符\n,所有輸出語句字元小寫。
【樣例輸入1】3.0 3.0 4.0

【樣例輸出1】isosceles triangle
【樣例輸入2】3.0 3.0 3.0
【樣例輸出2】equilateral triangle
【樣例輸入3】1.0 3.0 6.0
【樣例輸出3】not triangle

#include <stdio.h>
int main()
{
	double x,y,z;
	scanf_s("%lf%lf%lf", &x, &y, &z);
	if (x + y > z&&x + z > y&&y + z > x)
	{
		if (x == y && y == z)
			printf("equilateral triangle\n");
		else if (x == y || x == z || y == z)
			printf("isocseles triangle\n");
		else if (x*x+y*y==z*z||x*x+z*z==y*y||y*y+z*z==x*x)
			printf("right triangle\n");
		else
			printf("arbitrary triangle\n");
	}
	else
		printf("not triangle\n");
	return 0;
}

3.【問題描述】 猴子吃桃。猴子第一天摘下若干桃子,當即吃了一半,還不過癮,又多吃了一個,第二天早上將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半再加一個桃子。到第n天,只剩下一個桃子。求第一天共摘下多少桃子。
【輸入形式】輸入剩下一個桃子的天數
【輸出形式】輸出桃子的數量,輸出結束有換行符。
【樣例輸入1】6
【樣例輸出1】94
【樣例輸入2】10
【樣例輸出2】1534

#include <stdio.h>
int main()
{
	int n,peach=1,i;
	scanf_s("%d", &n);
	for (i = 1; i < n; i++)
	{
		peach = 2 * (peach + 1);
	}
	printf("%d\n",peach);
	return 0;
}

4.【問題描述】 求1~n項Fibonacci數列的數值。
【輸入形式】讀入正整數值n項的值。
【輸出形式】每行輸出5個數值,每個數值佔8位。輸出結束有換行符。
【樣例輸出】
在這裡插入圖片描述

#include <stdio.h>
int main()
{
	long int a1=1,a2=1,an,n,i;
	scanf_s("%d", &n);
	printf("%8ld%8ld", a1, a2);
	for (i = 3; i <= n; i++)
	{
		an = a1 + a2;
		a1 = a2;
		a2 = an;
		printf("%8ld",an);
		if (i % 5 == 0) printf("\n");
	}
	return 0;
}

5.【問題描述】 百錢買百雞。“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?”
【輸出形式】輸出所有的解,每行輸出一組解。輸出結束有換行符。
【樣例輸出】
在這裡插入圖片描述

#include <stdio.h>
int main()
{
	int cock,hen,chicken;
	for (cock = 0; cock <= 20; cock++)
	{
		for (hen = 0; hen <= 33; hen++)
		{
			chicken = 100 - cock - hen;
			if (15 * cock + 9 * hen + chicken == 300)
			{
				printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken);
			}
		}
	}
	return 0;
}

6.【問題描述】 一個數如果等於其每一個數字立方之和,則此數稱為阿姆斯特朗數。如407就是一個阿姆斯特朗數,因為:。要求輸出100~999間所有的阿姆斯特朗數。
【輸出形式】要求輸出100~999間所有的阿姆斯特朗數。每個數值佔6位。輸出結束無換行符。
【樣例輸出】 153 370 371 407

 #include <stdio.h>
int main()
{
	int i,s,t,digit;
	for (i = 100; i <= 999; i++)
	{
		t = i;
		s = 0;
		while (t != 0)
		{
			digit = t % 10;
			s += digit * digit*digit;
			t = t / 10;
		}
		if (i == s) printf("%6d",i);
	}
	return 0;
}

7.【問題描述】3.2.13 一個數如果恰好等於它的因子之和,這個數就稱為“完數”。求1000以內的所有完數。
【輸出形式】1000以內的所有完數。每個數值佔6位。輸出結束無換行符。
【樣例輸出】 6 28 496
【樣例說明】完數 6=1+2+3

#include <stdio.h>
int main()
{
	int i,j,s;
	for (i = 1; i <= 1000; i++)
	{
		s = 0;
		for (j = 1; j < i; j++)
		{
			if (i%j == 0)
			{
				s += j;
			}
		}
		if (i == s) printf("%6d",i);
	}
	return 0;
}

8.【問題描述】 將一個正整數分解質因素。例如,輸入90,輸出90=2* 3* 3* 5。
【輸入形式】從鍵盤輸入一個整數。
【輸入輸出樣例1】(下劃線部分表示輸入)
Input an integer:90
90=2* 3* 3* 5
【輸入輸出樣例2】(下劃線部分表示輸入)
Input an integer:18
18=2* 3* 3
【樣例說明】
輸入提示符後無空格。
輸出語句的“=”兩邊無空格。輸出結束無換行符。
英文字母區分大小寫。必須嚴格按樣例輸入輸出。

#include <stdio.h>
int main()
{
	int n,i;
	printf("Input an integer:");
	scanf_s("%d", &n);
	printf("%d=", n);
	for (i = 2; i <= n; i++)
	{
		while (n != i)
		{
			if (n%i == 0)
			{
				printf("%d*", i);
				n = n / i;
			}
			else break;
		}
	}
	printf("%d\n", n);
	return 0;
}

9.【問題描述】列印圖形。
【樣例輸入】4
【樣例輸出】輸出結束有換行符。
在這裡插入圖片描述

 #include <stdio.h>
int main()
{
	int  i, j, m;
	scanf_s("%d", &m);
	for (i = 1; i <= m; i++)
	{
		for (j = 1; j <= m - i; j++)
		{
			printf(" ");
		}
		for (j = 1; j <= 2 * i - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 1; i < m; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf(" ");
		}
		for (j = 1; j <= 2 * (m - i) - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

10.【問題描述】列印空心圖形
【樣例輸入】5
【樣例輸出】輸出結束沒有換行符。
在這裡插入圖片描述
【樣例說明】星號之間有一個空格

#include <stdio.h>
int main()
{
	int n,i,j;
	scanf_s("%d", &n);
	for (i = 1; i <= n; i++)
	{
		if (i == 1) 
		{
			for (j = 1; j <= n; j++)
			{
				printf("* ");
			}
			printf("\n");
		}
		else if (i == n)
		{
			for (j = 1; j < i; j++) printf(" ");
			printf("*");
		}
		else
		{
			for (j = 1; j < i; j++) printf(" ");
			printf("*");
			for (j = 1; j <2 * (n - i); j++)printf(" ");
			printf("*");
			printf("\n");
		}
	}
	return 0;
}