БлогNot. Примеры и решения зачётных задач по Си

Примеры и решения зачётных задач по Си

Три примера, в каждом листинге сначала идёт условие, а затем программа, компилировалось в Borland C++ 3.1

/* В произвольном файле найти ASCII-код наиболее часто встречаемого
 символа. Учесть, что таких символов может быть более одного */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
 FILE *fp=fopen ("z1.cpp","r+b");
 if (fp==NULL) {
  printf ("\nНе могу открыть файл!");
  exit (1);
 }
 unsigned char c;
 unsigned long ascii[256];
 memset (ascii,0,256*sizeof(unsigned long));
 while (1) {
  fread (&c,1,1,fp);
  if (feof(fp)) break;
  ascii[c]++;
 }
 unsigned long max=0;
 for (int i=0; i<256; i++) if (ascii[i]>max) max=ascii[i];
 printf ("\n N=%ld, symbol(s): ",max);
 for (i=0; i<256; i++) if (ascii[i]==max) printf ("%d(%c) ",i,i);
 getchar();
}
/* В строке s, заданной указателем, подсчитать количество вхождений
 строки t, также заданной указателем. Задачу решить с помощью функции. */
#include <stdio.h>

int strnchr (unsigned char *s, unsigned char *t) {
 int n=0;
 unsigned char *t0=t;
 while (*s) {
  while (*s!=*t) {
   s++;
   if (*s=='\0') return n;
  }
  while (*s==*t) {
   s++; t++;
   if (*t=='\0') {
    n++;
    if (*s=='\0') return n;
   }
  }
  t=t0;
 }
 return n;
}

void main() {
 unsigned char *s="abacbccabbbaacabc";
 unsigned char *t="abc";
 puts (s);
 puts (t);
 printf ("%d times",strnchr(s,t));
 getchar();
}
/* Выделить память динамически для хранения произвольного файла, имя
 файла задается пользователем. В случае, если память выделить невозможно,
 вывести соответствующее сообщение */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>

void main() {
 FILE *fp;
 unsigned char name[128];
 printf ("\nEnter file name: ");
 fgets (name,128,stdin);
 name[strlen(name)-1]='\0';
 fp=fopen(name,"r+b");
 if (fp==NULL) {
  printf ("\Can't open file %s",name);
  exit (1);
 }
 fpos_t len;
 fseek (fp,0,SEEK_END);
 fgetpos (fp,&len);
 unsigned char far *fdata=(unsigned char far *)farmalloc(len);
 if (fdata==NULL) {
  printf ("\Can't allocate %ld bytes",len);
  exit (2);
 }
 unsigned char c;
 unsigned long k=-1;
 fseek (fp,0,SEEK_SET);
 while (1) {
  fread (&c,1,1,fp);
  fdata[++k]=c;
  if (feof(fp)) break;
 }
 for (unsigned long i=0; i<k; i++) putch(fdata[i]);
 getchar();
}

24.12.2010, 13:37 [10516 просмотров]


теги: c++ программирование

К этой статье пока нет комментариев, Ваш будет первым