Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Thắc mắc về mảng và hàm putch()

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    6

    Mặc định Thắc mắc về mảng và hàm putch()

    Mình mới học về mảng (phải nói là tự nghiên cứu mới đúng ^^), có 1 điểm chưa rõ lắm, xin mọi người giúp đỡ.
    Khi khái báo mảng 2 chiều ko tường minh thì mình vần phải khai báo số phần tử chiều thứ 2, vd: a[][10] --> như vậy mảng này có n dòng và 10 cột thôi phải ko ? Nếu đúng là như vậy thì tại sao chương trình sau đây, mình khai báo chỉ có 10 cột nhưng mình lại có thể nhập nhiều hơn số đó, mọi người giải thích giùm mình với:
    Code:
    #include<conio.h> 
    #include<stdio.h>
     
    void Nhap(int a[][10],int M,int N) 
    { 
    	int i,j; 
    	for(i=0;i<M;i++)  
    		for(j=0; j<N; j++)
    		{ 
    			printf("Phan tu o dong %d cot %d: ",i,j); 
    			scanf("%d",&a[i][j]); 
    		} 
    }
    
     
    void InMaTran(int a[][10], int M, int N) 
    { 
    	int i,j; 
    	for(i=0;i<M;i++)
    	{ 
    		for(j=0; j< N; j++) 
    		printf("%d ",a[i][j]); 
    		printf("\n"); 
    	} 
    }
    
     
    /* Cong 2 ma tran A & B ket qua la ma tran C*/ 
    
    void CongMaTran(int a[][10],int b[][10],int M,int N,int c[][10])
    { 
    	int i,j; 
    	for(i=0;i<M;i++) 
    		for(j=0; j<N; j++) 
    			c[i][j]=a[i][j]+b[i][j]; 
    }
    
     
    int main() 
    { 
    	int a[10][10], b[10][10], M, N; 
    	int c[10][10];/* Ma tran tong*/ 
    	printf("So dong M= "); scanf("%d",&M); 
    	printf("So cot M= "); scanf("%d",&N); 
    	printf("Nhap ma tran A\n"); 
    	Nhap(a,M,N); 
    	printf("Nhap ma tran B\n"); 
    	Nhap(b,M,N); 
    	printf("Ma tran A: \n"); 
    	InMaTran(a,M,N); 
    	printf("Ma tran B: \n"); 
    	InMaTran(b,M,N); 
    	CongMaTran(a,b,M,N,c); 
    	printf("Ma tran tong C:\n"); 
    	InMaTran(c,M,N); 
    	getch(); 
    	return 0; 
    }

    Một câu hỏi nữa là: hàm putch() dùng để làm gì vậy? Mình ko thể phân biệt nó với hàm scanf(), cscanf()
    Nhờ mọi người giúp mình với! Thanks so much!

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Khi khái báo mảng 2 chiều ko tường minh thì mình vần phải khai báo số phần tử chiều thứ 2, vd: a[][10] --> như vậy mảng này có n dòng và 10 cột thôi phải ko ?
    Phải là 10 cột và n dòng mới đúng. Chủ yếu là ở dưới bạn đã khai báo int a[10][10], b[10][10], M, N; đủ 10 10
    Nhập vượt quá nó không báo lỗi ngay, nhưng khi mình chạy nó báo lỗi don't send.

    Một câu hỏi nữa là: hàm putch() dùng để làm gì vậy? Mình ko thể phân biệt nó với hàm scanf(), cscanf()
    putch là hàm xuất 1 kí tự ra màn hình int putch(int ch);

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    6

    Nhập vượt quá nó không báo lỗi ngay, nhưng khi mình chạy nó báo lỗi don't send.
    Mình vẫn có thể nhập bình thường nè bạn. Mình dùng TC 3.0.
    Ví dụ: chạy chương trình chính:
    So dong M= 2
    So cot M = 15
    Nhap ma tran A
    Phan tu o dong 0 cot 0: 1
    Phan tu o dong 0 cot 1: 2
    ...
    Phan tu o dong 1 cot 14: 15 (Mình ko hiểu tại sao có thể nhập hơn 10 cột )

    Lúc in nó ra nè:
    Ma trận A:
    1 2 3 4 5 6 7 8 9 10 1 2 3 4 5
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <-- Mình nhập từ 1->15, dòng 2 thì hiển thị đúng nhưng dòng 1 lại hiển thị sai (đối với các số có 2 chữ số trở lên)
    Đã được chỉnh sửa lần cuối bởi kennedy : 11-09-2008 lúc 12:32 PM.

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    6

    Sao ko ai trả lời mình hết vậy?
    Cho mình hỏi thêm cái này.

    Code:
    int isprime(int n)
    {
    	int i;
    	for(i=2;i<=sqrt(n);i++)
    	 if(n%i==0)return i;      <------------chỗ này gặp return có thoát khỏi vòng lặp ko?
            return 0;
    }
    
    void main()
    {
    	int n,i,p[50],count=0;
    	printf("\ninput: ");scanf("%d",&n);
    	while(n>1)
    	{
    		if(!isprime(n)){p[count++]=n;break;}                !isprime(n) <-- phủ định của cái này là gì vậy?
    		else {
    			p[count++]=isprime(n);
    			n=n/(isprime(n));}
    	}
    	for(i=0;i<count;i++)
    	printf(" %d ",p[i]);
    	getch ();
    
    }
    Đã được chỉnh sửa lần cuối bởi kennedy : 11-09-2008 lúc 03:52 PM.

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    336

    return thì thoát luôn khỏi hàm chứ ko chỉ thoát ra khỏi vòng lặp.
    if(!abc) tương đương với if(abc==0)
    code ra gió bão

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Thắc mắc về mảng và hàm putch()

    Các bạn đã trả lời khá rõ ràng rồi mình chỉ muốn nhắc chú ý thêm 1 điều đó là sau khi putch() sẽ xuống dòng đó hj hj
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    09 2008
    Bài viết
    6

    nhưng chưa có ai giải thích giùm mình cái vụ mảng hết ah. Mình mới học tới mảng, gặp cái ví dụ có sẵn, test thử thì gặp vấn đề rồi. Mọi người giúp mình với!

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    336

    bạn tự nhập quá số lượng do chính bạn đặt ra thì nó chạy sai là hiển nhiên rồi hay ý bạn là nhập 15 thì nó báo lỗi ngay ?
    code ra gió bão

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi kennedy Xem bài viết
    nhưng chưa có ai giải thích giùm mình cái vụ mảng hết ah. Mình mới học tới mảng, gặp cái ví dụ có sẵn, test thử thì gặp vấn đề rồi. Mọi người giúp mình với!
    thắc mắc về mảng hả? vậy hãy đặt 1 câu hỏi rõ ràng là bạn hỏi cái gì , ( post code )



    chứ tôi chả hiểu bạn thắc mắc cái gì...
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  10. #10
    Ngày gia nhập
    09 2008
    Bài viết
    6

    Code:
    #include<conio.h> 
    #include<stdio.h>
     
    void Nhap(int a[][10],int M,int N) 
    { 
    	int i,j; 
    	for(i=0;i<M;i++)  
    		for(j=0; j<N; j++)
    		{ 
    			printf("Phan tu o dong %d cot %d: ",i,j); 
    			scanf("%d",&a[i][j]); 
    		} 
    }
    
     
    void InMaTran(int a[][10], int M, int N) 
    { 
    	int i,j; 
    	for(i=0;i<M;i++)
    	{ 
    		for(j=0; j< N; j++) 
    		printf("%d ",a[i][j]); 
    		printf("\n"); 
    	} 
    }
    
     
    /* Cong 2 ma tran A & B ket qua la ma tran C*/ 
    
    void CongMaTran(int a[][10],int b[][10],int M,int N,int c[][10])
    { 
    	int i,j; 
    	for(i=0;i<M;i++) 
    		for(j=0; j<N; j++) 
    			c[i][j]=a[i][j]+b[i][j]; 
    }
    
     
    int main() 
    { 
    	int a[10][10], b[10][10], M, N; 
    	int c[10][10];/* Ma tran tong*/ 
    	printf("So dong M= "); scanf("%d",&M); 
    	printf("So cot M= "); scanf("%d",&N); 
    	printf("Nhap ma tran A\n"); 
    	Nhap(a,M,N); 
    	printf("Nhap ma tran B\n"); 
    	Nhap(b,M,N); 
    	printf("Ma tran A: \n"); 
    	InMaTran(a,M,N); 
    	printf("Ma tran B: \n"); 
    	InMaTran(b,M,N); 
    	CongMaTran(a,b,M,N,c); 
    	printf("Ma tran tong C:\n"); 
    	InMaTran(c,M,N); 
    	getch(); 
    	return 0; 
    }
    Chạy chương trình chính:
    So dong M= 2
    So cot M = 15
    Nhap ma tran A
    Phan tu o dong 0 cot 0: 1
    Phan tu o dong 0 cot 1: 2
    ...
    Phan tu o dong 1 cot 14: 15 (Mình ko hiểu tại sao có thể nhập hơn 10 cột )

    Lúc in nó ra nè:
    Ma trận A:
    1 2 3 4 5 6 7 8 9 10 1 2 3 4 5
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <-- Mình nhập từ 1->15, dòng 2 thì hiển thị đúng nhưng dòng 1 lại hiển thị sai, nếu sai/đúng thì phải sai/đúng cả 2 chứ.

Các đề tài tương tự

  1. Hàm trong C hàm putch()
    Gửi bởi thoxingg trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 23-10-2012, 08:35 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn