Если поле недостаточно, строка выводится полностью;
Void main ()
Форматный вывод символьных и строковых данных
Для вывода символов используется формат типа в”%с", а для вывода строк формат типа "%s". Особенности вывода символов и строк рассмотрим на примерах. Ниже приведена программа, с помощью которой можно вывести в файл символы, заданные i-кодами, по 10 значений в строке.
(пример старой версии)
# include <stdio>
FILE *f;
{int i; f = fopen ( “14vivsim.res”, “w” ) ;
for ( i = 27; i < 255; i++)
{ fprintf (f, “ %3d = %c”, i, i ) ;
if ( (i - 26) % 10 = = 0 ) fprintf (f, “\n”) ; } fclose (f) ;
}
При выводе символов и в списках форматов можно использовать символьные константы - управляющие коды иesc-последовательности. Примеры управляющих кодов даны в табл. ниже.
С помощью управляющих кодов можно формировать документ требуемой формы. Например, с помощью кода\r можно несколько раз выводить данные на одной и той же строке: расставить граничные символы, а затем вывести требуемые значения в соответствующие графы таблицы.
Код
Назначение кода
\n
новая строка
\b
возврат на 1 символ
\r
возврат в начало строки
\f
прогон бумаги до конца страницы
\\
вывод символа “\”
\’
вывод апострофа
\”
вывод кавычек
\?
вывод знака вопроса
\a
короткий звуковой сигнал
\07
“—“
В программе на рис. 16 из каждой строки исходных данных вводится 15 символов в элементы массива:
d[ i ] [ 0 ] / d[ i ][ 14 ]. В d[ i ][15] вводится признак конца строки: d[ i ][15] = \n. В соответствии с правилами работы функцииfgetsформируется: d[ i ][16] = \0. После ввода значения строки d[ i ] оно выводится с помощьюfprintf.
Для вывода строк можно использовать следующие виды форматов:
"%s” - вывод всех символов строки;
“%ws” - вывод строки в поле w до первого символа \0;
“%w.ps”- вывод р символов в поле w;
"%.рs" - вывод р символов строки в поле w = р.
Ниже приведен пример вывода символьной строки с помощью различных форматов типа %s и результаты ее выполнения.
Составные типы данных определяют наборы однотипных или разнотипных компонентов. В языке VC++2005 следующие составные типы:
1. Массивы.
2. Строки.
3. Структуры.
4. Объединения.
5. Перечисления.
6. Файлы.
Обработка массивов в VC++
Массив состоит из определенного количества компонентов одного и того же типа. Компоненты могут быть простыми и составными. Доступ к каждому элементу массива осуществляется с помощью индексирования. Индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки. Допустимый диапазон индексов определяется в описании массива. Чтобы создать массив необходимо указать три параметра:
· Тип значений каждого элемента.
· Имя массива.
· Количество элементов в массиве.
Формат объявления массива:
Тип идентификатор_массива [количество элементов];
Пример:
int x[100]; //в ОП по адресу хвыделяется участок размером 100 умноженное на размер типа int, 4 байта.
float a[200]; //в ОП по адресу aвыделяется участок размером 200 умноженное на размер типа float, 4 байта.
Размер массива можно определить:
Число_байтов = sizeof (тип_элемента) * число элементов;
· Размерность – это целое положительное константное выражение.
· Тип элемента в одномерном массиве – простой (скалярный).
· Количество элементов обязательно надо указать в одномерном массиве, если не проводится инициализация.
· В массиве каждый элемент обрабатывается отдельно.
· Доступ к каждому элементу массива осуществляется по имени массива и порядковому номеру элемента, указанного в квадратных скобках (индексу).
Пример индексации элементов массива
array [ 2 ] ; // третий элемент массива array
a [ i + 2 ] ; // (i + 2)-ий элемент массива a
· Каждому элементу одномерного массива соответствует один индекс.
· Одномерный массив имеет одну меру измерения, в нем может быть n элементов, использовать можем k элементов, где n>=k. Каждый элемент стоит на i‑том месте, где i изменяется от 0 до k. Т.Е. 0<=I <= k, где k<=n.Компилятор не контролирует значение индексной переменной, это необходимо делать внутри программы.
Основные операции над массивом – инициализация.
Прежде чем использовать элементы массива в программе, необходимо его инициализировать, т.е. каждый элемент должен получить конкретное значение.
Это можно выполнить в трех случаях:
1. во время объявления;
2. во время присвоения каждому элементу конкретное значение;
3. во время считывания с устройства в/в по адресу элемента массива.
1 случай: инициализация выполняется во время объявления массива по формату: тип имя_массива [ N ] = { элемент0,…,элементN-1};
Пример инициализации одномерного массива простого типа в момент объявления массива
int m [ 3 ] = { 1, 10, 100 } ; //нулевой элемент равен 1, первый – 10. второй – 100.
unsigned short x [ 5 ] = { 3, 5 } ; // нулевой элемент равен 3; первый – 5; элементы, значения которых не указаны, обнуляются, т.е.второй, третий и четвертый элементы равны 0.Чтобы обнулить все элементы массива, достаточно при объявлении массива, нулевому элементу присвоить нуль
int mas [10] = {0};
double y [ ] = { 1.5, 7.38, -8.9, 0.0, 10.5 } ;//в квадратных скобках не указано количество элементов, оно определяется по количеству элементов в фигурных скобках.
char c [ 4 ] = { 'a', 'b', 'c', '\0' } ;
Пример поиска минимального элемента в одномерном массиве простого типа
2 случай: каждому элементу массива присвоить случайно выработанное число
#include <iostream>
using namespace std ;
const int N = 100 ; int fk; // fk – переменная по фактическое количество элементов
int main ( )
{
// объявление массива из 100 элементов целого типа
int array [ N ] ;
do{
cout << "\n Введите фактическое количество элементов \t";
cin >> fk;
}while (fk > N) ;
// цикл ввода элементов массива
for ( int j = 0; j < fk; j++ )
{
cout << "Enter array [" << j << "] -> " ;
array [j] = rand();
cout << array [ j ] <<" "<< '\n' ;
}
// вывод подсказки
cout << "\n\nThe entered array\n" ;
// цикл вывода элементов массива
for ( int j = 0; j < fk; j++ )
cout << array [ j ] <<" "<< '\t' ;
cout << endl ;
for ( int j = 0; j < fk; j++ )
{
cout << "Enter array [" << j << "] -> " ;
array [j] = rand()/N;
cout << array [ j ] <<" "<< '\n' ;
}
return 0 ;
}
3 случай:
Пример ввода/вывода одномерного массива простого типа
#include <iostream>
using namespace std ;
const int N = 100 ; int fk; // fk – переменная по фактическое количество элементов
int main ( )
{
// объявление массива из 100 элементов целого типа
int array [ N ] ;
do{
cout << "\n Введите фактическое количество элементов \t";
cin >> fk;
}while (fk < N) ;
// цикл ввода элементов массива
for ( int j = 0; j < fk; j++ )
{
cout << "Enter array [" << j << "] -> " ;
cin >> array [ j ] ;
}
// вывод подсказки
cout << "\n\nThe entered array\n" ;
// цикл вывода элементов массива
for ( int j = 0; j < fk; j++ )
cout << array [ j ] <<" "<< '\t' ;
cout << endl ;
return 0 ;
}
Пузырьковая сортировка.
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
void main ()
{
const int k = 100;
int fk; int i;
do
{
cout <<"fk = ";cin>>fk;
}
while (fk > k);
int mas[k];
// цикл ввода элементов массива
srand(( unsigned)time(NULL));
cout<<"\n isxod mas\n";
for ( i = 0; i < fk ; i++)
{
mas[i] = rand()%15+2;
cout<< mas[i]<<'\t';
}
bool pr = 0; int dmas; //предполагаем, что ряд не отсортирован
while (pr == false) //до тех пор пока ряд не отсортирован - сортируем
{
pr = true; //предположим, что не будет ни одной перестановки
for(i = 0; i < fk-1 ; i++)
{
if (mas[i] < mas[i+1])//если следующий элемент больше предыдущий
{
dmas = mas[i]; //делаем перестановку
//наибольший элемент
//переставляем вперед
mas[i] = mas[i+1];
mas[i+1] = dmas;
pr = false; //принимаем признак ложного ряда
}
}
}
cout<<"\n res mas \n";
for ( i = 0; i < fk ; i++)
{
cout<<mas[i]<<'\t';
}
// TODO: Add your control notification handler code here
}
Недостаток при использовании статического массивазаключается в том, что резервируется ОП под массив на наибольшее количество элементов и закрепляется за программой до ее завершения, а используется фактически возможное, что меньше или равно выделенному участку.В результатеэтого ОП простаивает или используется не экономно.