báo cáo thực hành kỹ thuật lập trình - Pdf 29

BÁO CÁO THỰC HÀNH KĨ THUẬT LẬP TRÌNH
Sinh viên: Nguyễn Thị Dung
MSSV: 201092228
Lớp: CN-CNTT3
Phần 1: Thứ tự thực hiện các phép toán trong C,C++
1.1 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức:
Đoạn code Kết quả
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c,d;
a=b=c++=d=10;
printf("\na=%d\nb=%d\nc=%d\nd=%d",a,b,c,d);
getch();
}
Chương trình
báo lỗi ở dòng
a=b=c++=d=10
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c,d;
a=b=++c=d=10;
printf("\na=%d\nb=%d\nc=%d\nd=%d",a,b,c,d);
getch();
}
a=10
b=10
c=10

b= (2*a)+ ++a;
printf("\na=%d,b=%d",a,b);
b= (2*a)+ a++;
printf("\na=%d,b=%d",a,b);
b= ++a + (2*a);
printf("\na=%d,b=%d",a,b);
b= a++ + (2*a);
printf("\n\n a=10\n");
a=10;
printf(" \n a++,a = %d, %d",a++,a);
a=10;
printf(" \n ++a,a = %d, %d",++a,a);
a=10;
printf(" \n a,a++ = %d, %d",a,a++);
a=10;
printf(" \n a,++a = %d, %d",a,++a);
getch();
}
Nhập a=5
a=6,b=15
a=7,b=21
a=8,b=22
a=9,b=24
a=10,b=30
a++,a=10,10
++a,a=11,10
a,a++=11,10
a,++a=11,11
Kết luận:
Trong C++ phép toán ++ có mức độ ưu tiên cao hơn các phép toán khác nhưng theo quy tắc

#include<conio.h>
#include<string.h>
int main()
{
int i,t[100],k;
char chuoi[1000];
char s1,s2;
printf("nhap vao xau ky tu :\n");
gets(chuoi);
printf("xau vua nhap la :\n");
puts(chuoi);
int n = strlen(chuoi);
for (i=0;i<n;i++)t[i]=0;
3
for (i=0;i<n;i++)
{
k=0;
while (chuoi[i]!=chuoi[k])
k++;
t[k]++;
}
for(i=0;i<n;i++)
if (t[i])
printf("\nky tu '%c' co mat trong xau %d lan\n",chuoi[i],t[i]);
printf("\nnhap vao ki tu thu nhat:");
scanf("%c",&s1);
printf("\nnhap vao ki tu thu hai:");
scanf("%c",&s2);
for(i=0;i<n;i++)
{if(chuoi[i]==s1) chuoi[i]=s2;

#define max 100
void Nhap(int A[max][max], int n)
{
for(int i = 0; i<n ; i++)
for(int j = 0; j<n ; j++)
5
{
printf("[%d][%d] =",i,j);
scanf("%d", &A[i][j]);
}
}
void Xuat(int A[max][max], int n)
{
for(int i = 0; i<n ; i++)
{
printf("\n");
for(int j = 0; j<n ; j++)
printf("%d\t",A[i][j]);
}
}
void Tong(int A[max][max], int B[max][max], int C[max][max], int n){
for(int i = 0; i<n ; i++)
for(int j = 0; j<n ; j++)
C[i][j] = A[i][j]+B[i][j];
}
void Tich(int A[max][max], int B[max][max], int C[max][max], int n)
{
for(int i = 0; i<n ; i++)
for(int k = 0; k<n ; k++)
{

Chương trình Kết quả
#include <stdio.h>
#include <conio.h>
void main(){
int a,b,c;
int *p=&c;
c = 3;
/* divide c by itself */
a = c/*p;
b = c /* set b to 3 */ ;
printf("a=%d, b=%d, c=%d\n", a,b,c);
getch();
}
Chương trình báo lỗi
#include <stdio.h>
#include <conio.h>
void main(){
int a,b,c;
int *p=&c;
c = 3;
/* divide c by itself */
a = c/(*p); //sửa lỗi
b = c /* set b to 3 */ ;
printf("a=%d, b=%d, c=%d\n", a,b,c);
getch();
}
a=1,b=3,c=3
Kết luận:
Do trình dịch hiểu /* là bắt đầu của chú thích nên toàn bộ đoạn lệnh không được thực hiện cho
tới khi gặp */ kết thúc chú thích.

int n,i;
printf("\n Nhap so phan tu n=");
scanf("%d",&n);
printf("\n Nhap day so thuc\n");
for(i=0;i<n;i++)
{
y[i]=0;
printf("x%d=",i+1);
scanf("%f",&x[i]);
y[i]=canba(x[i]);
s+=y[i];
}
printf("\n Tong la: %f",s);
getch();
}
Phần 5: Con trỏ và cấp phát bộ nhớ động
5.1 Viết lại chương trình 2.2,2.3 dùng cấp phát bộ nhớ động
Input: Nhập vào 2 ma trận sử dụng cấp phát bộ nhớ động
Output: Đưa ra tổng và tích của 2 ma trận
Chương trình:
10
#include<conio.h>
#include<stdio.h>
#include<malloc.h>
typedef struct
{
int m;
int n;
int **data;
}matrix;

scanf("%d\t",A.data[i][j]);
}
}
}
matrix tong(matrix &A,matrix &B)
{
matrix C;
C.m=A.m;
C.n=A.n;
for(int i=0;i<A.m;i++)
for(int j=0;j<A.n;j++)
C.data[i][j]=A.data[i][j]+B.data[i][j];
12
return C;
}
matrix tich(matrix &A,matrix &B)
{
int k;
matrix C;
C.m=A.m;
C.n=A.n;
for(int i=0;i<A.m;i++)
for(int j=0;j<A.n;j++)
{ C.data[i][j]=0;
for(k=0;k<A.n;k++);
C.data[i][j]=C.data[i][j]+A.data[i][k]*B.data[k][j];
}
return C;
}
void main()

Phần 6: Đa năng hóa toán tử
6.1 Xây dựng cấu trúc phân số , hàm tiện ích xác lập phân số ( setpPS(int,int), hàm tối giản phân
số, và đa năng hóa các toán tử +,-,*,/, ++,
Input: nhập vào tử số, mẫu số của phân số.
Output: đưa ra cấu trúc phân số đa năng hóa các toán tử của phân số
14
Giải pháp Mã giả
Xác lập phân số: dùng struct có 2 trường tử số và mẫu số;
Hàm setPs truyền vào 2 tham số là tử số và mẫu số.
typedef struct{
int t;
int m;
}ps;
ps setPS(int a,int b){
ps p;
p.t=a;p.m=b;
return p;
}
Tối giản: tìm ước số chung của tử và mẫu rồi chia cả tử và
mẫu cho ước số tìm được
int usc(ps p){
Đa năng hóa các toán tử: chồng các toán tử với tham số
truyền vào là 2 phân số, và 1 phân số với 1 số nguyên
ps operator+(ps p1,ps p2){
ps p;
p.t=p1.t*p2.m+p2.t*p1.m;
p.m=p1.m*p2.m;
return tgian(p);
}
ps operator+(ps p,int k){

return p;
}
ps operator+(ps p1,ps p2)
{
p1.t=p1.t*p2.m+p2.t*p1.m;
p1.m=p1.m*p2.m;
return tgian(p1);
}
ps operator+(ps p,int k)
{
p.t=p.t+k*p.m;
return tgian(p);
16
}
ps operator-(ps p1,ps p2)
{
p1.t=p1.t*p2.m-p2.t*p1.m;
p1.m=p1.m*p2.m;
return tgian(p1);
}
ps operator-(ps p,int k)
{
p.t=p.t-k*p.m;
return tgian(p);
}
ps operator*(ps p1,ps p2)
{
p1.t=p1.t*p2.t;
p1.m=p1.m*p2.m;
return tgian(p1);

{
p.t=p.t+p.m;
return p;
}
18
ps operator (ps p,int)
{
ps temp=p;
p.t=p.t+p.m;
return tgian(temp);
}
6.2 Áp dụng cấu trúc phân số cùng các hàm và toán tử trên, viết chương trình nhập các phân số
p1,p2,p3 và số nguyên a,b rồi tính và in ra giá trị các biểu thức:
Chương trình:
void main()
{
ps p1,p2;
int a,b,i;
int t,m;
printf("\n tu so:");scanf("%d",&t);
printf("\n mau so:");scanf("%d",&m);
p1=setPS(t,m);
printf("\n Nhap vao so nguyen: a=");scanf("%d",&a);
b= a++ + 2 * a;
printf("\na=%d,b=%d",a,b);
b= ++a + 2 * a;
printf("\na=%d,b=%d",a,b);
b= (2*a)+ ++a;
printf("\na=%d,b=%d",a,b);
b= (2*a)+ a++;

p1=1/1,p2=4/1
p1=1/1,p2=3/1
p1=1/1,p2=4/1
p1=1/1,p2=3/1
20
Các thực hiện phép toán ++, của trình dịch với cách thực hiện do ta định nghĩa là khác nhau.
Cách cài đặt của trình dịch luôn ưu tiên các phép toán ++, nhưng theo bảng thứ tự ưu tiên các
phép toán thì không phải vậy.
6.3 Xây dựng cấu trúc Time và đa năng hóa các toán tử.
Input: Nhập vào một giờ bất kỳ
Output: Đưa ra cấu trúc giờ và đa năng hóa các toán tử có thể của Time
Giải pháp Mã giả
Sử dụng struct để tạo cấu trúc Time với các
trường giờ, phút, giây.
typedef struct{
int gio;int phut;int giay;
}time;
Để dễ tính toán ta viết hàm convert từ giờ sang
giây và ngược lại
long int giay(time t){
return t.gio*3600+t.phut*60+t.giay;
}
time gio(long int g){
time t;
t.gio=g/3600;
t.giay=(g-t.gio*3600)/60;
t.phut=g-t.gio*3600-t.phut*60;
return t;
}
Đa năng hóa các toán tử +,- với tham số truyền

{
time t;
t.gio=a;
t.phut=b;
t.giay=c;
return t;
}
long int giay(time t)
{
return t.gio*3600+t.phut*60+t.giay;
}
time gio(long int g)
{
time t;
t.gio=g/3600;
t.phut=(g-t.gio*3600)/60;
t.giay=g-t.gio*3600-t.phut*60;
return t;
}
22
time operator+(time t1,time t2)
{
long int g1,g2;
g1=giay(t1);
g2=giay(t2);
g1+=g2;
return gio(g1);
}
time operator+(time t,int k)
{

long int g;
g=giay(t);
if(g>=3600) g-=3600;
else g=0;
return gio(g);
}
void main()
{
int h1,m1,s1,h2,m2,s2;
int k;
time t1,t2,t;
24
do{
printf("\n Nhap vao gio:");
scanf("%d",&h1);
}while(h1<0||h1>12);
do{
printf("\n Nhap vao phut:");
scanf("%d",&m1);
}while(m1<0||m1>60);
do{
printf("\n Nhap vao giay:");
scanf("%d",&s1);
}while(s1<0||s1>60);
t1=setT(h1,m1,s1);
do{
printf("\n Nhap vao gio:");
scanf("%d",&h2);
}while(h2<0||h2>12);
do{


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status