HN - Aptech


 
IndexIndex  PortalPortal  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Share | 
 

 Một ví dụ cuối cùng về C mà cô cho trên lớp

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiêu đề: Một ví dụ cuối cùng về C mà cô cho trên lớp   Tue Jul 07, 2009 9:20 am

Code:

 #include<stdio.h>
 #include<conio.h>
 #include<string.h>
 //khai bao ham con
 void nhap(int *n, char s[][50]);
 void sap(int n, char s[][50]);
 int kt(char s[]);
 void dem(int n, char s[][50]);
 void cat(int n, char s[][50]);
 int ktdx(char s[]);
 void dx(int n, char s[][50]);
 void noi(int n, char s[][50], char a[500]);
 //dinh nghia ham main
 void main()
 {
   int n;
   char s[10][50],a[500]="";
   clrscr();
   nhap(&n,s);
   sap(n,s);
   dem(n,s);
   cat(n,s);
   dx(n,s);
   noi(n,s,a);
   getch();
 }
 //dinh nghia ham con
 void nhap(int *n, char s[][50])
 {
   int i;
   printf("\nnhap n(1->10)=");
   scanf("%d",n);
   while(*n<1||*n>10)
   {
      printf("\nnhap lai n(1->10)=");
      scanf("%d",n);
   }
   printf("\nnhap %d chuoi:\n",*n);
   for(i=0;i<*n;i++)
   {
      printf("s[%d]: ",i);
      fflush(stdin);
      gets(s[i]);
   }
 }
 void sap(int n, char s[][50])
 {
   int i,j;
   char t[50];
   for(i=0;i<n-1;i++)
      for(j=i+1;j<n;j++)
         if(strcmp(s[i],s[j])>0)
         {
            strcpy(t,s[i]);
            strcpy(s[i],s[j]);
            strcpy(s[j],t);
         }
   printf("\nmang sau khi sap xep:\n");
   for(i=0;i<n;i++)
      puts(s[i]);
 }
 int kt(char s[])
 {
   int i,d=0;
   for(i=0;i<strlen(s)-1;i++)
      if(s[i]==' '&&s[i+1]!=' ')
         d++;
      if(s[0]!=' ')
         d++;
   return d;
 }
 void dem(int n, char s[][50])
 {
   int i;
   printf("\nso tu trong chuoi:\n");
   for(i=0;i<n;i++)
   {
      printf("\n");
      printf("s[%d]: %d",i,kt(s[i]));
   }
 }
 void cat(int n, char s[][50])
 {
   int i,j;
   char t[10][50];
   for(i=0;i<n;i++)
      strcpy(t[i],s[i]);
   for(i=0;i<n;i++)
      while(s[i][0]==' ')
            for(j=0;j<strlen(s[i]);j++)
               s[i][j]=s[i][j+1];
   printf("\ndo dai chuoi truoc va sau khi cat:\n");
   for(i=0;i<n;i++)
      if(t[i][0]==' ')
         {
            printf("\ndoi voi chuoi thu %d :\n",i);
            printf("\ndo dai truoc: %d",strlen(t[i]));
            printf("\ndo dai sau: %d",strlen(s[i]));
            printf("\n");
         }
 }
 int ktdx(char s[])
 {
   int i,k,d=0;
   k=strlen(s);
   for(i=0;i<k/2;i++)
      if(s[i]==s[k-1-i])
         d++;
   if(d==k/2) return 1;
   else return 0;
 }
 void dx(int n, char s[][50])
 {
   int i,d=0;
   for(i=0;i<n;i++)
      if(ktdx(s[i])==1)
         d++;
   printf("\nso chuoi doi xung: %d",d);
   printf("\ncac chuoi doi xung: \n");
   for(i=0;i<n;i++)
      if(ktdx(s[i])==1)
         puts(s[i]);
 }
 void noi(int n, char s[][50], char a[500])
 {
   int i;
   for(i=0;i<n;i++)
      strcat(a,s[i]);
   printf("\nchuoi sau khi noi:\n");
    puts(a);
 }

Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Tue Jul 07, 2009 1:37 pm

em đã test thử, với một chuỗi rỗng ( không nhập gì ) thì kết quả không đúng, anh kiểm tra lại xem sao
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Tue Jul 07, 2009 4:34 pm

em Hà à, anh cũng test lại với chuỗi rỗng rồi, chạy vẫn đúng mà, chú ý chuỗi rỗng phải là hai dấu nháy kép đứng liền nhau, tức là s[10]="", em thử lại xem sao!


Được sửa bởi nbp2983 ngày Tue Jul 07, 2009 11:54 pm; sửa lần 1.
Về Đầu Trang Go down
Xem lý lịch thành viên




Join date : 01/01/1970

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Tue Jul 07, 2009 9:58 pm

tại sao lại là 2 nháy kép đứng liền nhau em không hiểu
theo em hiểu rỗng là ko có gì ko nhập vào gì mà chỉ enter thôi .
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Tue Jul 07, 2009 11:24 pm

cách giải thích sau sẽ đầy đủ và thuyết phục hơn:
-chuỗi rỗng trước hết phải là một chuỗi chỉ gồm một (thậm chí nhiều) ký tự rỗng, chú ý ký tự rỗng vẫn là một ký tự và được ký hiệu bởi \0(nó ko hiện nên được màn hình, có mã C là 0), do đó hằng ký tự rỗng được viết là '\0' (gồm một cặp dấu nháy đơn, cũng viết NULL), vậy nên chuỗi rỗng được viết như sau: s[10]="\0" (gồm một cặp dấu nháy kép), hoặc đơn giản hơn nhưng trình biên dịch vẫn hiểu, đó là: s[10]="" (hai dấu nháy kép phải đứng liền nhau, nếu cách ra nó sẽ hiểu là ký tự cách)
-cách hiểu chuỗi rỗng là ko có gì, ko nhập vào, mà chỉ enter thôi là sai, vì khi đó nó không phải một chuỗi, do không có một ký tự nào được nhập vào cả( việc nhấn enter ko phải là nhập ký tự). hihi thế là OK!
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 9:13 am

-Vâng, coi như không quan tâm đến chuỗi rỗng, khi nhập chuỗi em chỉ gõ enter, kết quả ra sai, ở phần đếm từ của chuỗi. Anh kiểm tra lại xem sao.
-"cách hiểu chuỗi rỗng là ko có gì, ko nhập vào, mà chỉ enter thôi là sai," -> anh thử test đoạn code sau của em xem nhập như thế là đúng hay sai nhé Wink:
Code:

#include<stdio.h>
#include<conio.h>
void main()
{
    char a[10];
    clrscr();
    printf("Nhap chuoi: "); fflush(stdin); gets(a);
    if(a[0]=='\0') printf(" 1 ");
    else printf(" 0 ");
    getch();
}
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 9:46 am

Em còn chút thắc mắc, theo anh:"nếu chỉ gõ enter thôi là sai, vì khi đó nó không phải một chuỗi" nhưng khi thực hiện như thế, em vẫn có thể gọi hàm strlen(); và trả về kết quả là 0. Nếu không phải một chuỗi thì tại sao hàm strlen() trong thư viện string.h vẫn thực hiện được???
Vả lại, em chưa hiểu lắm chuỗi có nhiều ký tự rỗng là chuỗi ntn, anh có thể lấy ví dụ minh họa cho dễ hiểu hơn đc ko?
Thanhs anh Wink
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 10:31 am

-à anh hiểu ý của em rồi, ý hiểu của anh lúc đầu là cần một định nghĩa rõ ràng cho chuỗi rỗng, và anh đã định nghĩa chuỗi rỗng như trên(để nhập trong code).
-nhưng các em lại đang thắc mắc về nhập chuỗi rỗng từ bàn phím để chạy chương trình thì chương trình của anh chưa xử lý được trường hợp này, anh ghi nhận, và anh khắc phục như sau(ở hàm kt, thực ra trong phạm vi thi cử thì làm như trên là ăn điểm maximum rồi, không tin thì hỏi cô, hii...):
Code:

int kt(char s[])
 {
  int i,d=0;
  if(s[0]=='\0') d=0;
  else
  {
  for(i=0;i<strlen(s)-1;i++)
      if(s[i]==' '&&s[i+1]!=' ')
        d++;
      if(s[0]!=' ')
    d++;
  }
  return d;
 }
-bàn tiếp về chuỗi rỗng trong code, chuỗi rống có thể viết s[10]="" hoặc s[10]="\0" hoặc s[10]="\0\0\0" đây là trường hợp nhiều ký tự rỗng mà trình biên dịch vấn hiểu, hay gán luôn ký tự đầu là rống cũng được, tức là: s[0]='\0' cũng viết s[0]=NULL.
-còn khi nhập từ bàn phím để chạy chương trình ta chỉ ấn enter thì trình biên dịch tự hiểu đó là nhập chuỗi rỗng (lúc đầu anh chưa hiểu ý em Hà nên cứ đi vào định nghĩa chuỗi rống, dù sao thì đó cũng là đ/n đầy đủ về chuỗi rỗng, hihi..., tái bút: chúc cả lớp thi tốt!!)


Được sửa bởi nbp2983 ngày Wed Jul 08, 2009 3:39 pm; sửa lần 1.
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 10:48 am

tâm sự ngoài giờ hành chính:
qua nhiều lần trao đổi mình thấy em Hà của lớp chúng ta rất thông minh, anh Nghĩa chúc riêng em Hà thi đạt kết quả cao cực đại, và thành công hơn nữa trong các môn học sau=>thành đạt trong cuộc sống(đ.p.c.m!)_hihi, mình vốn dĩ là dân toán mà.
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 11:58 am

ok anh, chạy ngon rồi Wink chúc anh 100% cả thực hành và lý thuyết nhé Very Happy
Về Đầu Trang Go down
Xem lý lịch thành viên




Join date : 01/01/1970

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 4:14 pm

âhahahahaahaa
Code:

      Qua nhiều lần xem 2 anh trao đổi mình thấy anh Nghĩa và anh Hà của lớp chúng ta rất thông minh. Xuống dòng
      Em (Hưng) xin chúc 2 anh Nghĩa + Hà thi đạt kết quả cao cực đại, và thành công hơn nữa trong các môn học sau=>thành đạt trong cuộc sống(đ.p.c.m!)_hihi, em chưa fai? dân toán hehehehe. kệ cứ chúc nhau thế cho xôm
SPAM tý hehehehe
ma` em hiểu cái rỗng ="" rồi thanks anh nhé
Về Đầu Trang Go down
Xem lý lịch thành viên
spyware
Đại Bàng Tinh
Đại Bàng  Tinh


Tổng số bài gửi : 116
Join date : 04/06/2009
Age : 32
Đến từ : HN

Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Wed Jul 08, 2009 5:15 pm

à thì ra thế. bây giờ thì cũng hiểu rồi.
í quên. đang nói gì thế

_________________
::::Real Programmer :::::
Về Đầu Trang Go down
Xem lý lịch thành viên
Sponsored content




Bài gửiTiêu đề: Re: Một ví dụ cuối cùng về C mà cô cho trên lớp   Today at 11:21 pm

Về Đầu Trang Go down
 
Một ví dụ cuối cùng về C mà cô cho trên lớp
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
HN - Aptech :: Khóa Học :: SEMESTER I :: C :: Bài Tập-
Chuyển đến