Tải bản đầy đủ (.docx) (62 trang)

BỘ 50 CÂU HỎI LẬP TRÌNH C CÓ ĐÁP ÁN, LỜI GIẢI CHI TIẾT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.12 MB, 62 trang )

Họ và tên: Phạm Văn Thái
Lớp: AT15E (L09)
MSV: AT150551

Lập Trình Căn Bản
Buổi 1:
1. Một số hoàn hảo là một số có tổng các ước số của nó bằng chính số đó. Hãy tìm số hồn
hảo nhỏ hơn 5000. Ví dụ: 6 có các ước số là 1, 2, 3 và 6 = 1 + 2 + 3.
Cụ thể hơn với số n bất kỳ:
#include <stdio.h>
#include <stdlib.h>
int main(){
int n,tong=0;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1) printf("\nn duong, nhap lai\n");
} while (n<1);
printf("\nso hoan hao la: ");
for (int i=1;i<=n;i++){
if (i==1) {
printf("1");
continue;
}
for (int j=1;jif (i%j==0) tong+=j;
}
if (i==tong) printf("\t%d",i);
tong=0;
}
return 0;


}

P h ạ m V ă n T h á i - P a g e 1 | 62


Sử dụng hàm:
#include <stdio.h>
#include <stdlib.h>
void timsohoanhao(int n) {
int tong=0;
for (int i=1; i<=n; i++) {
if (i==1) {
printf("1");
continue;
}
for (int j=1; jif (i%j==0)
tong+=j;
}
if (i==tong)
printf("\t%d",i);
tong=0;
}
}
int main() {
int n;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)

printf("\nn duong, nhap lai\n");
}
while (n<1);
printf("\nso hoan hao la: ");
timsohoanhao(n);
return 0;
}

P h ạ m V ă n T h á i - P a g e 2 | 62


2. Tính tổng bình phương của 2 số
#include <stdio.h>
#include <stdlib.h>
int main(){
int a,b;
do {
printf("nhap a = ");
scanf("%d",&a);
printf("\nnhap b = ");
scanf("%d",&b);
if (a<0) printf("\na duong, nhap lai\n");
if (b<0) printf("\nb duong, nhap lai\n");
} while (a<0||b<0);
printf("\ntong binh phuong cua %d va %d la: %d",a,b,a*a+b*b);
return 0;
}

P h ạ m V ă n T h á i - P a g e 3 | 62



Sử dụng hàm:
#include <stdio.h>
#include <stdlib.h>
void nhap(char ten,int *a) {
do {
printf("nhap %c = ",ten);
scanf("%d",a);
if (*a<0)
printf("\n%c duong, nhap lai\n",ten);
}
while (*a<0);
}
int tongbp(int a, int b){
return (a*a+b*b);
}
int main() {
int a,b;
nhap('a',&a);
nhap('b',&b);
printf("\ntong binh phuong cua %d va %d la: %d",a,b,tongbp(a,b));
return 0;
}

P h ạ m V ă n T h á i - P a g e 4 | 62


3. Viết chương trình giải hệ phương trình bậc nhất:
– ax + by = c
– dx + ey = f

Hướng dẫn : Phải nhớ được công thức : D, Dx, Dy,
Xét điều kiện cho D, Dx, Dy

#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c,d,e,f;
printf("he phuong trinh dang:");
printf("\nax+by=c");
printf("\ndx+ey=f");
printf("\nnhap a,b,c,d,e,f theo thu tu cua he\n");
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
int D, Dx, Dy;
D= a*e-b*d;
Dx= c*e-b*f;
Dy= a*f-c*d;
if (D==0) {
if (c==f)
printf("\nhe vo so nghiem");
else
printf("\nhe vo nghiem");
}
else
printf("\nhe co nghiem duy nhat x = %7.3f, y = %7.3f",(float)Dx/D, (float)Dy/D);
P h ạ m V ă n T h á i - P a g e 5 | 62


return 0;
}
Sử dụng hàm:

#include <stdio.h>
#include <stdlib.h>
void timnghiem(int a, int b, int c, int d, int e, int f){
int D, Dx, Dy;
D= a*e-b*d;
Dx= c*e-b*f;
Dy= a*f-c*d;
if (D==0) {
if (c==f)
printf("\nhe vo so nghiem");
else
printf("\nhe vo nghiem");
}
else
printf("\nhe co nghiem duy nhat x = %7.3f, y = %7.3f",(float)Dx/D, (float)Dy/D);
}
int main() {
int a,b,c,d,e,f;
printf("he phuong trinh dang:");
printf("\nax+by=c");
printf("\ndx+ey=f");
printf("\nnhap a,b,c,d,e,f theo thu tu cua he\n");
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
timnghiem(a,b,c,d,e,f);
return 0;
P h ạ m V ă n T h á i - P a g e 6 | 62


}


P h ạ m V ă n T h á i - P a g e 7 | 62


4. Giai phuong trinh ax2 +bx +c =0
Bài này không nói gì a<>0 thì phải xét cả a=0, a<>0
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c;
printf("phuong trinh dang:");
printf("\nax^2+bx+c=0");
printf("\nnhap a,b,c theo thu tu\n");
scanf("%d%d%d",&a,&b,&c);
if (a==0)
printf("phuong trinh co nghiem duy nhat x = %8.3f",-c/(float)b);
else {
int denta;
denta= b*b-4*a*c;
if (denta<0)
printf("phuong trinh vo nghiem");
else if (denta==0)
printf("phuong trinh co nghiem kep x = %8.3f",-b/(float)2*a);
else {
printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",(-b+sqrt(denta))/
(float)2*a,(-b-sqrt(denta))/(float)2*a);
}
}
return 0;
}


P h ạ m V ă n T h á i - P a g e 8 | 62


5. Giải phương trình trùng phương
Ax4+bx2+c=0
Đặt t=x2
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c;
printf("phuong trinh dang:");
printf("\nax^4+bx^2+c=0");
printf("\nnhap a,b,c theo thu tu\n");
scanf("%d%d%d",&a,&b,&c);
if (a==0) {
if (b==0 && c==0)
printf("phuong trnh co vo so nghiem");
else if (b==0 && c!=0)
printf("phuong trinh vo nghiem");
else if (b!=0 && c==0)
printf("phuong trinh co nghiem duy nhat x = 0");
else {
if (-c/b>0)
printf("phuong trinh co 2 nghiem phan biet: x1 = %8.3f, x2 = %8.3f",sqrt((float)-c/b),sqrt((float)-c/b));
else
printf("phuong trinh vo nghiem");
}
}
else {
if (c==0) {

if (-b/a<=0)
printf("phuong trinh co nghiem duy nhat x = 0");
else

P h ạ m V ă n T h á i - P a g e 9 | 62


printf("phuong trinh co 3 nghiem: x1 = 0; x2 = %8.3f, x3 = %8.3f", sqrt(-b/(float)a),-sqrt(-b/
(float)a));
}
else {
int denta;
denta= b*b-4*a*c;
if (denta<0)
printf("phuong trinh vo nghiem");
else if (denta==0) {
if (-b/2*a<0)
printf("phuong trinh vo nghiem");
else
printf("phuong trinh 2 nghiem x1 = %8.3f, x2 = %8.3f",sqrt(-b/(float)2*a),-sqrt(-b/
(float)2*a));
}
else {
if (((-b+sqrt(denta))/(float)2*a>0)&&((-b-sqrt(denta))/(float)2*a)>0)
printf("phuong trinh co 4 nghiem phan biet x1 = %8.3f, x2 = %8.3f, x3 = %8.3f, x4 =
%8.3f",sqrt((-b+sqrt(denta))/(float)2*a),-sqrt((-b+sqrt(denta))/(float)2*a),sqrt((-b-sqrt(denta))/
(float)2*a),-sqrt((-b-sqrt(denta))/(float)2*a));
else if (((-b+sqrt(denta))/(float)2*a<0)&&((-b-sqrt(denta))/(float)2*a)<0)
printf("phuong trinh vo nghiem");
else if (((-b+sqrt(denta))/(float)2*a>0)&&((-b-sqrt(denta))/(float)2*a)<0)

printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",sqrt((-b+sqrt(denta))/
(float)2*a),-sqrt((-b+sqrt(denta))/(float)2*a));
else if (((-b+sqrt(denta))/(float)2*a<0)&&((-b-sqrt(denta))/(float)2*a)>0)
printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",sqrt((-b-sqrt(denta))/
(float)2*a),-sqrt((-b-sqrt(denta))/(float)2*a));
}
}
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 10 | 62


6. Viết chương trình nhập vào số nguyên h và in ra màn hình tam giác cân có chiều cao h

H=1
H=1
H=1

J=1

Hướng dẫn:
Tam giác đặc: số dòng là số chiều cao nhập vào (vd h4)
Đáy =2*h-1
Vịng for ngồi I chạy theo dòng (1-h=4)
Vòng for trong (j=1-2*h-1)
ứng với i=1: j=[4,4]
i=2-> j=[3, 5]
i=3-> j=[2,6]
i=4-> j=[1,7]

[a, b]
a=h-i+1
b=h+i-1
for(i=1;i<=h;i++)
for(j=1;j<=2*h-1;j++)
if (j>=h-i+1 &&j<=h+i-1) printf(“ * “);
else printf(“ “);
tam giac khong dac: nghi lai (hoi Chien)

P h ạ m V ă n T h á i - P a g e 11 | 62


Hình 1
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (j<=h-i||j>=h+i)
printf(" ");
else
printf("*");

}
printf("\n");
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 12 | 62


Hình 2
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (i==1) {
if (j==h)
printf("*");
else {
printf(" ");
continue;
}

}
if (i==h) {
printf("*");
continue;
}
if (j==h-i||j==h+i)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 13 | 62


7. Viết chương trình thực hiện các yêu cầu sau:
Thực hiện lặp lại việc nhập 1 số nguyên dương n từ bàn phím, tính n! (n
giai thừa). Kết thúc chương trình khi nhập n=0.
In kết quả ra màn hình.
Ví dụ: nhập 3 tính 3!=6 enter lại quay lại nhập n=4… khi nào nhập n=0 thì mới thốt
C1: dùng goto
C2: dùng if… else, while, do…while, switch
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
return1:
do {

printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
int giaithua(unsigned int n) {
if (n<=1)
return 1;
else
return n*giaithua(n-1);
}
printf("%d! = %d\n",n,giaithua(n));
goto return1;
return 0;
}
P h ạ m V ă n T h á i - P a g e 14 | 62


#include <stdio.h>
#include <stdlib.h>
unsigned int giaithua(int n)
{
if (n<=1)
return 1;
else
return n*giaithua(n-1);
}
int main()
{

int n;
while (1)
{
printf("\nnhap n = ");
scanf("%d",&n);
if (n==0)
break;
printf("\n%d! = %d",n,giaithua(n));
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 15 | 62


8. Cần có tổng 200000 đồng từ 3 loại giấy bạc 1000 đồng, 2000 đồng, 5000 đồng. Lập
chương trình để tìm ra tất cả các phương án có thể
Hướng dẫn: x * 1000 + y * 2000 + z * 5000 = 200.000
200 * 1000 = 200000 => x thuộc [0, 200]
100 * 2000 = 200000 => y thuộc [0, 100]
40 * 5000 = 200000 => z thuộc [0, 40]
For(x=0;x<=200;x++)
For(y=0;y<=100;y++)
For(z=0;z<=40;z++)
If (x * 1000 + y * 2000 + z * 5000 ==200000) in ra x, y , z
#include <stdio.h>
#include <stdlib.h>
int main() {
int dem=0;
printf("cac truong hop chia 200000 theo 3 loai 1000, 2000, 5000 la:");

for (int i=1; i<=40; i++)
for (int j=1; j<= 100; j++)
for (int k=1; k<=200; k++)
if ((i*5000+j*2000+k*1000)==200000) {
dem++;
printf("\nTH%d: co %d to 1000, %d to 2000, %d to 5000",dem,k,j,i);
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 16 | 62


9. Viết chương trình in ra tam giác cân có độ cao h
a. Tam giác cân đặc nằm giữa màn hình
b. Tam giác cân rỗng nằm giữa màn hình
c. Tam giác vuông cân đặc
d. Tam giác vuông cân rỗng
a.
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);

for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (j<=h-i||j>=h+i)
printf(" ");
else
printf("*");
}
printf("\n");
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 17 | 62


b.
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (i==1) {

if (j==h)
printf("*");
else {
printf(" ");
continue;
}
}
if (i==h) {
printf("*");
continue;
}
prinf((j==h-i||j==h+i) ? "*":" ");
}
printf("\n");
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 18 | 62


c.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("\nNhap n: ");
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++)

printf((j<=i)? "*":" ");
printf("\n");
}
return 0;
}

d.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("\nNhap n: ");
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++)
printf((j==i||j==1||i==n)? "*":" ");
printf("\n");
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 19 | 62


10.Chương trình kiểm tra xem số N có phải là số nguyên tố không?
Liệt kê tất cả các số nguyên tố nhỏ hơn giá trị N nhập từ bàn phím
Phần 1:
#include <stdio.h>
#include <stdlib.h>
int main() {

int n,dem=0;
printf("Nhap N: ");
scanf("%d", &n);
for(int i = 2; i <= sqrt(n); i++) {
if (n%i==0) {
printf("N khong phai la so nguyen to");
dem++;
break;
}
}
if (dem==0||n==2||n==3)
printf("%d la so nguyen to",n);
return 0;
}

P h ạ m V ă n T h á i - P a g e 20 | 62


Sử Dụng Hàm:
#include <stdio.h>
#include <stdlib.h>
int ktsonguyento(int n)
{
int dem = 0;
for(int i = 2; i <= sqrt(n); i++)
{
if (n%i==0)
{
return 0;
dem++;

break;
}
}
if (dem==0||n==2||n==3)
return 1;
}
int main()
{
int n,dem=0;
printf("Nhap N: ");
scanf("%d", &n);
if (ktsonguyento(n))
printf("%d la so nguyen to",n);
else
printf("N khong phai la so nguyen to");
return 0;
}
P h ạ m V ă n T h á i - P a g e 21 | 62


Phần 2:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,dem=0;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");

}
while (n<1);
printf("\ncac so nguyen to la:\n");
for (int i=2; i<=n; i++) {
for(int j = 2; j <= sqrt(i); j++) {
if (i%j==0) {
dem++;
break;
}
}
if (dem==0||i==2||i==3)
printf("%d\t",i);
dem=0;
}
return 0;
}

P h ạ m V ă n T h á i - P a g e 22 | 62


Sử Dụng Hàm:
#include <stdio.h>
#include <stdlib.h>
void songuyento (int n){
int dem=0;
for (int i=2; i<=n; i++) {
for(int j = 2; j <= sqrt(i); j++) {
if (i%j==0) {
dem++;
break;

}
}
if (dem==0||i==2||i==3)
printf("%d\t",i);
dem=0;
}
}
int main() {
int n;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
printf("\ncac so nguyen to la:\n");
songuyento(n);
return 0;
}
P h ạ m V ă n T h á i - P a g e 23 | 62


Bài tập buổi 2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_year (int year)
{

return (((year%4==0)&&(year%100!=0))||(year%400==0));
}
int check_month (int month)
{
return (month <=12 && month >=1);
}
int check_day (int day, int year, int month)
{
if (month==2)
{
if (check_year(year))
return (day<=29&&day>=1);
else
return (day<=28&&day>=1);
P h ạ m V ă n T h á i - P a g e 24 | 62


}
else if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return (day<=31&&day>=1);
else
return (day<=30&&day>=1);
}
char *dayweek (int day, int month, int year)
{
int dayofweek,a,y,m;
a=(14-month)/12;
y=year-a;
m=month+12*a-2;
dayofweek= (day + y + y/4 - y/100 + y/400 + (31*m)/12)%7;

if (dayofweek==0) return "Chu Nhat";
else if (dayofweek==1) return "Thu Hai";
else if (dayofweek==2) return "Thu Ba";
else if (dayofweek==3) return "Thu Tu";
else if (dayofweek==4) return "Thu Nam";
else if (dayofweek==5) return "Thu Sau";
else if (dayofweek==6) return "Thu Bay";
}
int main()
{
int day,month,year;
printf("nhap ngay, thang, nam: ");
scanf("%d%d%d",&day,&month,&year);
if (check_month(month)&&check_year(year)&&check_day(day,month,year))
{
P h ạ m V ă n T h á i - P a g e 25 | 62


×