
- •Основы программирования язык “с” Минск – 2005
- •§1 Введение в программирование
- •Void main()
- •Void main()
- •Void main()
- •2 Распечатать свою фамилию следующим образом
- •3. Распечатать прямоугольник следующим образом
- •1.1 Простые программы: печать стоки текста Понятие переменной.
- •Volatile while
- •1.2 Целый тип данных
- •1.3 Числа с плавающей точкой
- •Void main({
- •1.4 Символьный тип
- •Void main()
- •§2 Управляющий структуры
- •2.1 Структура выбора if (если) и if/else(если - иначе)
- •Void main()
- •Void main()
- •2.2 Структуры повторенийfor(цикл)
- •Void main()
- •Void main()
- •2.3 Структура повторения while (пока)
- •Void main()
- •Void main()
- •Void main(){
- •Void main()
- •Void main()
- •2.4 Структура многомерного выбора switch
- •Void main()
- •Void main()
- •2.5 Операторы continue и break
- •Void main()
- •Void main()
- •2.6 Контрольные вопросы:
- •§3 Функция
- •Int printf(“const char * string”,…); %[флаг][ширина][точность][модификатор типа] тип_формата
- •Int scanf(const char * format, ……); возвращаемое значение – число считанных полей
- •3.1 Определение функции:
- •3.2 Классы памяти.
- •3.3 Указатели
- •Void main()
- •Void fff(int,int,int*,int*,int*,double*);
- •Void main()
- •Void fff(int a,int b,int*p1,int*p2,int*p3,double*p4)
- •Генерация случайных чисел.
- •Void main()
- •Void main()
- •Void main()
- •Void main(){
- •Void main()
- •3.6 Переменные перечисляемого типа
- •Int rollDice();
- •Void main()
- •Int sum,myPoint;
- •Int rollDice(){
- •Int die1,die2,workSum;
- •Void main()
- •§4 Массивы
- •4.1 Одномерные массивы
- •Int array[10];
- •4.2 Примеры использования массивов
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •4.3 Сортировки массивов
- •Void main()
- •Void main()
- •Void main()
- •Void main(){
- •Int arr1[maxsize],arr2[maxsize],buf;
- •Void main()
- •4.4 Передача массивов функции
- •4.5 Двумерные массивы
- •Void main()
- •Int I,j,temp;
- •Void main()
- •4.6 Контрольные вопросы:
- •§5 Символьная строка
- •5.1 Объявление символьной строки
- •Void main()
- •Void main()
- •Int srav(char *,char *);
- •Void main()
- •Int srav(char *X,char *y)
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •5.3 Массив строк
- •Void main()
- •Void main()
- •Void main()
- •§6 Динамическое распределение памяти
- •6.1 Функция malloc()
- •Void * malloc(unsigned size)
- •Void free(free *ptr)
- •Void main(){
- •Void main(){
- •Void vvod_mas(int*,int);
- •Void sort_vozr(int*,int);
- •Void main()
- •Vvod_mas(ptr1,n1);
- •Vvod_mas(ptr2,n2);
- •Void sort_vozr(int*X,int n)
- •Void vvod_mas(int*X,int n)
- •6.2 Функция сalloc()
- •Void * сalloc(unsigned num ,unsigned size)
- •6.3 Функция realloc()
- •Void * realloc(void *ptr ,unsigned size)
- •§7 Структура
- •7.1 Объявление структуры
- •Void main()
- •7.2 Объединения
- •§8 Файлы и потоки
- •8.1 Объявления файла
- •Int feof(file *);
- •8.2 Работа с текстовым файлом
- •Int fprintf(file *, const char format, …);
- •Void main()
- •Int account;
- •Int fputs(const char *, file *);
- •Int fscanf( file *, const char *format, …..);
- •Void main()
- •Void main()
- •Int account;
- •Void main()
- •Int fseek(file *,long ,int );
- •Void main()
- •Void main()
- •Void main()
- •Void show_file(file *k1)
- •Void dobav_file(file *k1)
- •Void fill_file(file *k1)
- •Создание файла произвольного доступа.
- •8.3 Работа с бинарным файлом
- •Void main()
- •Void main()
- •Void print_file(file *);
- •Void main(){
- •If(feof(k1)){
- •If(feof(k2)){
- •Void print_file(file *k){
- •8.4 Kонтрольные вопросы
- •Какие операции определены со строками?
Создание файла произвольного доступа.
Создавая с помощью функции форматированного вывода fprintf записи необязательно имеют одинаковую длину, а например отдельные записи в файле с произвольным доступом обычно имеют фиксированную длину, что позволяет получить к ним непосредственный (и следовательно, быстрый) доступ без поиска по всем записям. Для этого создаются бинарные файлы.
8.3 Работа с бинарным файлом
unsigned fread(void *ptr,unsigned size,unsigned n, FILE *stream);
Первый параметр- это указатель на буфер, в котором будут помещены данные из файла; следующие два параметра задают размер блока и количество читаемых блоков соответственно; последний параметр – это указатель на файл с которого считываются данные. Возвращает функция число успешно прочитанных элементов данных.
Индикатор текущей позиции в файле передвигается на число успешно прочитанных символов. В случае возникновения ошибки значение индикатора становится неопределенным.
unsigned fwrite(void *ptr,unsigned size,unsigned n, FILE *stream);
Первый параметр- это указатель на буфер, из которого будут помещены данные в файл; следующие два параметра задают размер блока и количество записываемых блоков соответственно; последний параметр – это указатель на файл в который записываются данные. Возвращает функция число успешно прочитанных элементов данных.
Индикатор текущей позиции в файле передвигается на число успешно записанных символов. В случае возникновения ошибки значение индикатора становится неопределенным.
Программа, которая создает бинарный файл для записи и чтения, записывает туда числа и считывает.
#include<stdio.h>
#include<stdlib.h>
Void main()
{
FILE *f1;
int n;
if(!(f1=fopen("int.bin","w+b"))){
puts("FILE ne otkrit!!!!!!");
exit(1);
}
puts("Zapis` v file: ");
do{
scanf("%d",&n);
fwrite(&n,sizeof(int),1,f1);
}while(n);
fseek(f1,0,0);
puts("\nSoderzanie faila:");
do{
fread(&n,sizeof(int),1,f1);
printf(" %d",n);
}while(n);
fclose(f1);
}
Программа, которая читает 10 чисел с конца из заранее созданного файла.
#include<stdio.h>
char name[]="int.bin";
Void main()
{
int i,n=10,x;
FILE *f;
f=fopen(name,"rb");
if(!f)
return;
for(i=1;i<=n;i++){
fseek(f,-i*sizeof(int),SEEK_END);
fread(&x,sizeof(int),1,f);
printf("\n%d\n",x);
}
fclose(f);
}
Функция для записи в файл.
void fill_file (FILE * f){
int x;
scanf(“%d”,&x);
while(x){
fwrite(&x,sizeof(int),1,f);
scanf(“%d”,&x);
}
}
Функция определение длины файла.
int getFileSize(FILE *f){
int count=0,tmp;
fseek(f,SEEK_SET,0);
while(!feof(f)){
fread(&tmp,sizeof(int),1,f);
count++;
}
return count-1;
}
Функция, читающая элемент заданной позиции.
int getElementAtPosition(int i,FILE*f){
int buf;
fseek(f,i*sizeof(int),SEEK_SET);
fread(&buf,sizeof(int),1,f);
return buf;
}
Функция, записывающая элемент в заданную позицию.
void setFileElements (int pos , int element ){
fseek (f , pos * sizeof (int) , SEEK_SET );
fwrite (&element ,sizeof (int) , 1 , f);
}
Функция, вывода элементов файла
void print_file (FILE * f){
fseek(f,SEEK_SET,0);
for (int i=0; ! feof (f); i++){
int x;
if ( ! fread (&x , sizeof (int) , 1 , f) ) break;
printf ("element # %d = %d\n" , i , x);
}
}
Программа с использованием данных функций.
#include<stdio.h>
#include<stdlib.h>
int getFileSize(FILE *f);//Считает количество чисел в файле
int getElementAtPosition(int i,FILE*f);//Возвращает число записанное на i-ой позиции
void setFileElements (int pos , int element , FILE * f);//Заменяем число на позиции pos на число element
void print_file (FILE *f);//выводит содержание файла
void main()
{
FILE *f1;
int n,n1;
if(!(f1=fopen("int.bin","w+b")))
{
puts("FILE ne otkrit!!!!!!");
exit(1);
}
puts("Zapis` v file: ");
do
{
scanf("%d",&n);
fwrite(&n,sizeof(int),1,f1);
}while(n);
puts("\nSoderzanie faila:");
fseek(f1,0,0);
print_file(f1);
puts("\nKolichestvo elementov:");
fseek(f1,0,0);
printf("%d\n",getFileSize(f1));
puts("\nVvedite nomer elementa konori xotite uvidet: ");
scanf("%d",&n);
fseek(f1,0,0);
printf("[%d]=%d\n",n,getElementAtPosition(n,f1));
puts("\nVvedite element konori xotite pomestit v file: ");
scanf("%d",&n);
puts("\nVvedite kuda vstavit element: ");
scanf("%d",&n1);
fseek(f1,0,0);
setFileElements(n1,n,f1);
puts("\nSoderzanie faila:");
fseek(f1,0,0);
print_file(f1);
puts("\nKolichestvo elementov:");
fseek(f1,0,0);
printf("%d\n",getFileSize(f1));
fclose(f1);
}
int getFileSize(FILE *f)
{
int count=0,tmp;
fseek(f,SEEK_SET,0);
while(!feof(f))
{
fread(&tmp,sizeof(int),1,f);
count++;
}
return count-1;
}
int getElementAtPosition(int i,FILE*f)
{
int buf;
fseek(f,i*sizeof(int),SEEK_SET);
fread(&buf,sizeof(int),1,f);
return buf;
}
void setFileElements (int pos , int element , FILE * f){
fseek (f , pos * sizeof (int) , SEEK_SET );
fwrite (&element ,sizeof (int) , 1 , f);
}
void print_file (FILE *f){
fseek(f,SEEK_SET,0);
for (int i=0; ! feof (f); i++){
int x;
if ( ! fread (&x , sizeof (int) , 1 , f) ) break;
printf ("element # %d = %d\n" , i , x);
}
}
Задачи:
1. Программа, которая заполняет файл, потом считывает данные с файл и с начало и с конца. Использовать функции.
#include<stdio.h>
#include<stdlib.h>
void fill_file(FILE *,int *);
void print_file(FILE *,int *);
void print_file_end(FILE *,int *);
char name[]="chisla.bin";
void main(){
int n;
FILE *k;
k=fopen(name,"w+b");
if(!k)
return;
fill_file(k,&n);
print_file(k,&n);
print_file_end(k,&n);
fclose(k);
}
void fill_file(FILE *k,int *p){
int x,i;
printf("Vvedive kol: ");
scanf("%d",p);
for(i=0;i<*p;i++){
scanf("%d",&x);
fwrite(&x,sizeof(int),1,k);
}
}
void print_file(FILE *k,int *p){
puts("\n");
int x,i;
fseek(k,0*sizeof(int),SEEK_SET);
for(i=0;i<*p;i++){
fread(&x,sizeof(int),1,k);
printf("[%d]=%d\n",i,x);
}
}
void print_file_end(FILE *k,int *p){
puts("\n");
int x,i;
for(i=1;i<=*p;i++){
fseek(k,-i*sizeof(int),SEEK_END);
fread(&x,sizeof(int),1,k);
printf("%d\n",x);
}
}
2. Программа, которая получает 2 файла в которых записаны числа, причем оба файла отсортирован по возрастанию. Переписать данные в третий файл, так чтобы они были по возрастанию. Не использовать дополнительных файлов, массивов и т.д.
#include<stdio.h>
#include<stdlib.h>