Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст_лекций_Си.doc
Скачиваний:
18
Добавлен:
16.03.2016
Размер:
1.06 Mб
Скачать

Вычисление квадратичной формы

void main(void) {

float u[SIZE], /* Входной вектор */

b[SIZE][SIZE], /* Входная матрица */

v[SIZE], /* Вектор b*u */

z, /* Результат */

scalar(); /* Скалярное произведение векторов */

int i, j;

printf ( "Исходный вектор: \n" );

for ( i=0; i<SIZE; i++ ) {

scanf ( "%f", &u[i] );}

printf ( "Исходная матрица: \n" );

for ( i=0; i<SIZE; i++ ) {

for ( j=0; j<SIZE; j++ ) {

scanf ( "%f", &b[i][j] ); } }

matrix(b, u, v);

z=scalar(v, u);

printf ( " \n \n \n Квадратичная форма равна %.5g \n", z);

} /* End main */

/* Умножение матрицы на вектор */

void matrix ( float a[][SIZE], float x[], float y[] ) {

int i, j;

for ( i=0; i<SIZE; i++ ) {

for ( y[i]=j=0; j<SIZE; j++ ) {

y[i] += a[i][j]*x[j];

}

}

} /* End matrix */

/* Скалярное произведение векторов */

float scalar (float x[], float y[] ) {

int i;

for ( z = i = 0; i<SIZE; i++ ) {

z += x[i]*y[i];

}

return z;

} /* End scalar */

Глава 9 Символьная информация и строки

Для представления текстовой информации в языке СИ используются символы (константы), символьные переменные и строки (строковые константы), для которых в языке СИ не введено отдельного типа в отличие от некоторых других языков программирования.

Символьные константы используются для изображения отдельных знаков, имеющих индивидуальные внутренние коды. Каждая символьная константа – это лексема (элемент языка СИ), которая состоит из изображения символа и ограничивающих апострофов: ‘A’, ‘a’,’B’,’8’,’+’,’;’.

Внутри апострофов можно записать любой символ, изображаемый на экране или принтере в текстовом режиме а также управляющие символы.

Для символьных данных (переменных) введен базовый тип char. Описание символьных переменных имеет вид:

char список_имен_переменных;

Пример:

char a, z;

    1. Ввод - вывод символьных данных

Для ввода и вывода символьных значений в форматных строках библиотечных функций printf( ) и scanf( ) используется спецификация преобразования % c.

Пример:

Ввести предложение, слова в котором разделены пробелами и в конце которого стоит точка. Удалить повторяющиеся пробелы между отдельными словами (оставить по одному пробелу), вывести отредактированное предложение на экран.

/* удаление повторяющихся пробелов */

#include<stdio.h>

void main()

{

char z,s; /*z–текущий вводимый символ*/

/*s–предыдущий введенный символ*/

printf(“\nНапишите предложение с точкой в конце: \n”);

for ( z=s=’ ’;z!=’.’;s=z ) {

scanf(“%c”,&z); // z=getch();

if ( z ! =’ ‘ || s !=’ ‘)

printf(“%c”,z); } /*конец цикла обработки*/

} /*конец программы*/

В программе две символьные переменные: z – для чтения очередного символа и s – для хранения предыдущего. В заголовке цикла переменные s и z получают значение “пробел”. Очередной символ вводится как значение переменной z, и пара z, s анализируется. Если хотя бы один из символов значений пары отличен от пробела, то значение z печатается. В заголовке цикла z сравнивается с символом “точка” и при несовпадении запоминается как значение s. Далее цикл повторяется до появления на входе точки, причем появление двух пробелов (z и s)приводит к пропуску оператора печати.

    1. Внутренние коды и упорядоченность символов

ВАЖНО ! В языке принято соглашение, что везде, где синтаксис позволяет использовать целые числа, можно использовать и символы, т.е. данные типа char, которые при этом представляются числовыми значениями своих внутренних кодов. Такое соглашение позволяет сравнительно просто упорядочивать символы, обращаясь с ними как с целочисленными величинами.

Например, внутренние коды десятичных цифр в таблицах кодов ASCII упорядочены по числовым значениям, поэтому несложно перебирать символы десятичных цифр в нужном порядке.

Пример:

Следующая программа печатает цифры от 0 до 9 и шестнадцатеричные представления их внутренних кодов.

/*печать десятичных цифр*/

#include<stdio.h>

void main()

{ char z;

for ( z=’0’, z<=’9’, z++ ) {

if ( z= =’0’ | |z= =’5’) printf(“\n”);

printf( “%c – %x”, z, z);

}

} /*конец программы*/

Результат выполнения программы:

0–30 1–31 2–32 3–33 4–34

5–35 6–36 7–37 8–38 9–39

Обратите внимание на то, что символьная переменная z является операндом арифметической операции ‘++’, выполняемой над числовым представлением ее внутреннего кода. Для изображения значения символов в форматной строке функции printf( ) используется спецификация . шестнадцатеричные коды выводятся с помощью спецификации .

Пример:

Воспользовавшись упорядоченностью внутренних кодов букв латинского алфавита, очень просто его напечатать.

/*печать латинского алфавита*/

#include<stdio.h>

void main() {

char z;

for ( z=’A’, z<=’Z’, z++)

printf(“%c”,z);

} /*конец программы*/

Результат выполнения программы:

ABCDEFGHIJKLMNOPQRSTUVWXYZ