Nhập vào một tháng bất kì và xem tháng đó có bao nhiêu ngày sử dụng switch

Bài toán luyện tập lập trình C/C++ số 22 là một bài toánvề switch case trong C/C++. Bài tập trả về số ngày của một tháng trong năm.

Bạn đang xem: Bài tập switch case trong c


1.Giới thiệu bài toán

Switch case là một cấu trúc có điều kiện của ngôn ngữ C/C++. Cấu trúc thuộc loại cấu trúc giống if, else trong C/C++. Trong bài viết này, mình sẽ đưa ra cho bạn một bài tập khá thú vị về phần này:

Đề bài:

Viết hàm nhập vào một tháng m hợp lệ và cho biết tháng đó có bao nhiêu ngày?

Bài toán khá đơn giản, nó giúp bạn hiểu được cấu trúc switch case trong C.

2. Ý tưởng giải bài toán

Mình sẽ sử dụng cấu trúc switch trong việc đưa ra ngày của tháng. Cụ thể:

Tháng 1, 3, 5, 7, 8, 10, 12 sẽ có 31 ngàyTháng 4, 6, 9, 11 có 30 ngàyTháng 2 năm nhuận có 29 ngày, năm thường 28 ngày.

Vấn đề thứ 2 chúng ta cần biết năm đó là năm nhuận hay không?Do đó mình viết thêm phần nhập vào năm và kiểm tra xem năm đó là năm nhuận hay không?

3. Thuật toán kiểm tra một năm bất kì có phải là năm nhuận hay không?

Ý tưởng: Năm nhuận là năm chia hết cho 4 nhưng không chia hết cho 100

Với ý tưởng này mình viết hàm sau:


int NamNhuan(int a){if(a%4==0 && a%100!=0)return 1;elsereturn 0;}
Nếu là năm nhuận, return 1, năm không nhuận return 0;

4. Hàm trả về ngày của tháng trong năm

Hàm của mình viết dựa vào ý tưởng mình trình bày ở mục 2, mời bạn tham khảo:


void ReturnDate(){int Year;int Month;printf("Nhap Nam: "); scanf("%d",&Year);do{printf("Nhap thang hop le: ");scanf("%d",&Month);}while(Month12);switch(Month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:printf("\nThang %d co 31 ngay!", Month);break;case 2:{if(NamNhuan(Year))printf("\nThang 2 co 29 ngay!");else printf("\nThang 2 co 28 ngay!");break;}case 4:case 6:case 9:case 11:printf("\nThang %d co 30 ngay!",Month);break;}}
Chương trình hoàn chỉnh: bạn viết hai hàm liệt kê trên. Sau đó ở hàm main() bạn gọi hàm thứ 2 ra là được.

Kết quả chạy chương trình:

Ví dụ tháng 2 năm nhuận!



Hướng dẫn cài đặt và cấu hình Eclipse – IDE lập trình Java, PHP, C++


Hướng dẫn cài đặt Java, thiết lập biến môi trường Path Java trên win 10


Cách chạy chương trình Java bằng CMD command prompt


LEAVE A REPLY Cancel reply

Please enter your comment!Please enter your name hereYou have entered an incorrect email address!Please enter your email address here

Save my name, email, and website in this browser for the next time I comment.

Δ

Danh mụcCó thể bạn quan tâm hutgiammo.com - 19 Tháng Chín, 2020 0 Download và hướng dẫn cài đặt Eclipse cấu hình IDE lập trình Java android PHP, C++ cho windows 10 64 bit. Thiết lập biến môi trường JDK Java cho eclipse. hutgiammo.com - 9 Tháng Chín, 2020 0 Hướng dẫn cài đặt java, cấu hình, thiết lập biến môi trường Path cho Java win 10 64 bit . Kiểm tra môi trường Java cài đặt thành công . . . hutgiammo.com - 6 Tháng Chín, 2020 0 Bài viết này mình sẽ hướng dẫn bạn cách chạy và gỡ lỗi một chương trình java bất kì bằng cmd command prompt, powershell. Test chạy hello word Java. hutgiammo.com - 26 Tháng Tám, 2020 0 Download tải Dev C++ mới nhất cho windows 7, 10 32 bit, 64 bit version 5.9.2 for mac. Hướng dẫn cách sử dụng, cài đặt dùng cho việc học lập trình. hutgiammo.com - 7 Tháng Năm, 2020 0 Ở bài viết này mình sẽ chia sẻ về toán tử trong python. Các toán tử gán, toán học, so sánh, logic, toán tử biwter, membership, identify có ví dụ cụ thể. Phần Mềm Công Nghệ Thông Tin - hutgiammo.com là website chyên chia sẻ về phần mềm, ứng dụng, game, thủ thuật và các kinh nghiệm lập trình miễn phí.Contact us: adhutgiammo.comgmail.com © by hutgiammo.com 2022

Cũng giống như if-else, điều kiện switch-case dùng để thiết lập các điều kiện rẽ nhánh, tuy nhiên, phạm vi áp dụng lại bó hẹp hơn, nó chỉ áp dụng được cho hai loại hằng là hằng số nguyên và hằng ký tự. Dưới đây là cú pháp cơ bản:

switch(Giá_trị) {

  case Hằng_1:

    Khối_lệnh_1;

    break;

  case Hằng_2:

    Khối_lệnh_2;

    break;

  ...

  case Hằng_n:

    Khối_lệnh_n;

    break;

  default:

    Khối_lệnh;

}

, trong đó: Giá_trị ở đây có thể là giá trị của biến, giá trị của biểu thức hoặc giá trị trả về từ một hàm. Nếu Giá_trị bằng với hằng của case nào thì Khối_lệnh tương ứng với case đó sẽ được thực hiện, thực hiện xong khối lệnh thì sẽ thoát khỏi switch...case thông qua câu lệnh break; ngay dưới khối lệnh tương ứng đó. Nếu Giá_trị không bằng bất kỳ hằng nào thì khối lệnh dưới default sẽ được thực hiện.

Lưu ý rằng default là không bắt buộc, nghĩa là bạn có thể bỏ đi phần default nếu bạn muốn cho phù hợp với bài toán của bạn.

Trong trường hợp có sự giống nhau của các Khối_lệnh ở các hằng khác nhau thì ta có cú pháp ngắn gọn hơn như sau:

switch(Giá_trị) {

  case Hằng_1:

  case Hằng_2:

  ...

  case Hằng_i:

    Khối_lệnh;

    break;

    ...

  default:

    Khối_lệnh0;

}

Ví dụ, hãy nhập vào một ký tự bất kỳ và xác định xem ký tự đó là nguyên âm hay phụ âm. Vì ngôn ngữ lập trình C không hỗ trợ ký tự có dấu nên ta chỉ xét các ký tự trong bảng chữ cái tiếng Anh. Những ký tự 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o' và 'u' là những nguyên âm. Những ký tự còn lại trong bảng chữ cái tiếng Anh là phụ âm. Vậy, ta có lời giải như sau:

#include<

stdio

.h> main() {

char

ch; printf(

"

\n

Nhap vao mot ky tu (A-Z hoac a-z): "

); ch=getchar();

if

(ch<

'A'

|| ch>

'z'

){ printf(

"

\n

Ky tu nhap vao '%c' khong nam trong bang chu cai tieng Anh!"

,ch); }

else

{

switch

(ch){

case

'a'

:

case

'A'

:

case

'e'

:

case

'E'

:

case

'i'

:

case

'I'

:

case

'o'

:

case

'O'

:

case

'u'

:

case

'U'

: printf(

"

\n

'%c' la nguyen am!"

,ch);

break

;

default

: printf(

"

\n

'%c' la phu am!"

,ch); } } }

Ta xét thêm một ví dụ nữa, ví dụ này yêu cầu nhập vào một tháng bất kỳ và xác định xem tháng đó có bao nhiêu ngày.Dưới đây là những phân tích cho ví dụ này:

- Tháng ở đây là tháng theo lịch dương (lịch Tây).

- Những tháng sau có 31 ngày: 1, 3, 5, 7, 8, 10 và tháng 12.

- Những tháng sau có 30 ngày: 4, 6, 9 và tháng 11.

- Riêng tháng 2: nếu là năm nhuận thì có 29 ngày, năm thường thì có 28 ngày.

- Năm nhuận là năm thoả mãn một trong hai điều kiện sau:

+ Điều kiện 1: Năm đó chia hết cho 4 nhưng không chia hết cho 100.

+ Điều kiện 2: Năm đó chia hết cho 400.

Chẳng hạn, năm 2000 là năm nhuận vì mặc dù nó không thoả mãn điều kiện 1 nhưng nó thoả mãn điều kiện 2 là chia hết cho 400; năm 2016 là năm nhuận vì 2016 chia hết cho 4 nhưng không chia hết cho 100.

Sau đây là chương trình thực hiện yêu cầu trên:

#include<

stdio

.h> main() {

int

thang, nam;

do

{ printf(

"

\n

Nhap vao mot thang bat ky: "

); scanf(

"%d"

,&thang); }

while

(!(

1

<=thang && thang<=

12

)); //trong khi tháng còn không nằm trong đoạn [1,12] thì còn yêu cầu nhập lại.

switch

(thang) {

case

4

:

case

6

:

case

9

:

case

11

: printf(

"

\n

thang %d co 30 ngay"

, thang);

break

;

case

2

: printf(

"

\n

Nhap vao mot nam: "

); scanf(

"%d"

,&nam);

if

((nam%

4

==

0

&& nam%

100

!=

0

) || (nam%

400

==

0

)) //nếu năm thỏa mãn một trong hai điều kiện đã phân tích ở trên printf(

"

\n

Thang %d nam %d co 29 ngay"

, thang, nam); //thì tháng tương ứng có 29 ngày (năm nhuận)

else

//nếu không thì printf(

"

\n

Thang %d nam %d co 28 ngay"

, thang, nam); //tháng tương ứng có 29 ngày (năm thường)

break

;

default

: printf(

"

\n

Thang %d co 31 ngay"

, thang); //những tháng còn lại có 31 ngày } }

Bài tập áp dụng:

Làm các Bài tập 4 và 5 của link bài tập sau: v1study.com/c-bai-tap-phan-dieu-kien-a492.html

Viết chương trình nhập vào tháng của một năm, cho biết số ngày của tháng đó. Nếu tháng nhập vào <1 hoặc >12 thì thông báo "Không tồn tại tháng này".

- Các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày

- Các tháng 4, 6, 9, 11 có 30 ngày

- Nếu là tháng 2 thì yêu cầu nhập thêm năm, nếu là năm nhuận thì tháng 2 có 29 ngày, còn lại là 28 ngày. Năm nhuận là năm chia hết cho 4.


#include <stdio.h>
int main()
{
int t, n;
printf("Nhap thang: ");
scanf("%d", &t);
if(t<=1 || t<=12)
{
switch(t)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
printf("Thang %d co 31 ngay", t); break;
case 4: case 6: case 9: case 11:
printf("Thang %d co 30 ngay", t); break;
case 2:
printf("Moi nhap them nam: ") ;
scanf("%d", &n);
if(n%4==0)
printf("Thang %d co 29 ngay", t);
else printf("Thang %d co 28 ngay", t); break;
}
}
else printf("Khong ton tai thang nay");
return 0;
}

Video liên quan

Chủ đề