Язык программирования Си

Особенности языка Си, примеры написания программ на нем и сфера применения. Аспекты линейных, разветвляющихся, циклических алгоритмов и операторов с параметрами и предусловием, форматированного и потокового ввода-вывода. Работа с функциями и строками.

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 30.03.2009
Размер файла 106,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

/* Функция y=t**n */

int power(t,n);

int t,n;

{

int p=1;

while(n!=0)

{ if(n%2 !=0) p=p*t;

n=n/2; t=t*t;

}

return(p);

}

//Возведение в степень- головная программа

#include <stdio.h>

main()

{ int a,n;

printf("Введи a, n \n");

scanf("%d %d",&a,&n);

printf("%d в степени %d = %d",a, n, power(a,n));

}

Прототип функции.

Прототипирование- это предварительное объявление функций (описание того, как выглядят их заголовки). При прототипировании имена формальных параметров можно не указывать, компилятор интересует только их тип.

Пример 4.

Требуется составить программу нахождения наибольшего значения среди трех величин- max(a,b,c). Для ее решения можно использовать вспомогательный алгоритм нахождения максимального значения из двух, поскольку справедливо равенство: max(a,b,c)= max(max(a,b),с).

#include <iostream.h>

int MAX (int, int) //прототип функции MAX

void main() // Основная функция

{ int a,b,c,d;

cout<<”Введите а, в, с:”;

cin>>a>>b>>c;

d=MAX(MAX(a,b),c);

cout<<”\nMAX(a,b,c)=”<<d;

}

//Определение функции MAX

int MAX(int x, int y)

{ if (x>y) return x;

else return y;

}

Примерные вопросы для защиты

23. Определение функции.

24. Обращение к функции.

25. Найти ошибку в программе:

#include <iostream.h>

void main()

{ int a=1,b=2,c;

c=sum(a,b);

cout<<c;

}

Int sum(int x, int y);

{return x+y

}

Задачи для самостоятельного выполненияи"

1

1. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади поверхности и длины экватора оформите отдельными функциями.

2. Написать программу, вычисляющую доход по вкладу. Исходными данными для вычисления являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней).

2

1. Напишите программу поиска большего из четырех чисел с использованием функции поиска большего из двух чисел.

2. Напишите программу, состоящую из трех функций и основной программы. Первая функция организует ввод двух целых чисел X и Y, вторая проверяет их сумму, третья выводи результат. Используйте эти функции в основной программе. Используйте X и Y как глобальные переменные.

3

1. Даны координаты вершин многоугольника (x1, y1,x2,y2,…x10,y10). Напишите программу для вычисления его периметра (вычисление расстояния между вершинами оформить функцией).

2. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади поверхности и длины экватора оформите отдельными функциями.

4

1. Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k.

2. Напишите программу поиска большего из четырех чисел с использованием подпрограммы поиска большего из двух чисел.

5

1. Напишите программу для вычисления числа сочетаний из N по M. Число сочетаний определяется по формуле N!/(M!*(N-M)!, где N - количество элементов перебора. Используйте подпрограмму вычисления факториала.

2. Даны координаты вершин многоугольника (x1, y1,x2,y2,…x10,y10). Напишите программу для вычисления его периметра (вычисление расстояния между вершинами оформить функцией).

6

1. Напишите программу, которая удаляет из введенной строки любой требуемый введенный с клавиатуры символ. Процесс удаления выделите в отдельную функцию.

2. Дано простое число. Составить функцию, которая будет находить следующее за ним простое число.

7

1. Даны три целых числа. Определить, сумма цифр которого из них больше. Подсчет суммы цифр организовать через функцию.

2. Составить программу, определяющую, в каком из данных двух чисел больше цифр.

8

1. Составить программу для вычисления площади кольца по значениям внутреннего и внешнего радиусов, используя функцию вычисления площади круга.

2. Даны натуральные числа K и N. Составить программу формирования массива А, элементами которого являются числа, сумма цифр которых равна K и которые не больше N.

9

1. Составить программу для вычисления суммы факториалов всех четных чисел от m до n.

2. Дан массив A(N) (N - четное).

Сформировать массив В(М), элементами которого являются средние арифметические соседних пар рядом стоящих в массиве А чисел. (Например, массив А состоит из элементов 1; 3; 5; -2; 0; 4; 0; 3. элементами массива В будут 2; 1,5; 2; 1,5).

10

1. Заменить отрицательные элементы линейного массива их модулями, не пользуясь стандартной функцией вычисления модуля. Подсчитать количество произведенных замен.

2. Составьте программу, которая в массиве A[N] находит второе по величине число (вывести на печать число, которое меньше максимального элемента массива, но больше всех других элементов).,

Лабораторная работа №8

Строки

Цель работы

Ознакомиться с правилами работы со строками на языке Си. Освоить программирование задач обработки текстовых данных.

Содержание работы

· Изучить способы инициализации, вывода и ввода строк, работы со строками.

· Написать на языке Си программу, выполняющую определенную в задании задачу.

· Отладить программу, проверить правильность работы программы на тестовых примерах.

Методические указания

Обработка символьных строк.

Символьные строки организуются как массивы символов, последним из которых является символ /0, внутренний код который равен 0 на длину ограничений нет.

Пример: char str [20];

Возможна инициализация

Пример: char S [10]='строка';

char S [ ]='строка';

char S [10]= {`c','т','р','о','к','а','/0'};

S [5]='а';

Обработка строк связана с перебором всех символов от начало до конца. Признаком конца такого перебора является обнаружение 0 символа.

Пример 1: Заменить все символы строки на * и подсчитать длину строки.

// замена символов на *

# include <stdio.h>

# include <conio.h>

void main ( )

{char S[ ] = `fh 5 j';

int i=0;

clrscr ( );

puts (S);

while (S[i])

{ S [i++]='*'; puts (S);}

printf (`\n,длина строки=', i);

}

результат: fh 5 j

*h 5 j

** 5 j

** * j

** * *

длина строки =4

Цикл повторяет свое выполнения, пока S [i] не получит значение нулевого символа.

puts(s)- функция для вывода строки на экран, s- имя строки, библиотека stdio.h

gets(s)- ввод строки с клавиатуры, s- имя строки, в которую производится ввод, библиотека stdio.h.

strlen (s) - функция определения длины строки s, библиотека обработки строк string.h.

Пример 2:

ввести строку и перевернуть.

//обращение строки

# include <stdio.h>

# include <string.h>

void main ( )

{ char c, s [10];

int i;

printf (`введите строку');

gets (s);

for (i=0; i<=(strlen(s)-1)/2; i++)

{c=S[i]; S[i]=S [strlen (s) - i -1];

S[strlen(S) - i - 1] =c;}

printf (`\n перевернутая строка :');

puts(s);

}

Строка как параметр функции.

Имя строки является указателем - переменной, и следовательно его значение может подвергаться изменению. В заголовках функций, работающих со строками, рекомендуется явно использовать обозначение символьного указателя.

Пример3:

Записать определения функции вычисление длины строки (аналог стандартной strlen( )).

int length (char*s)

{int k;

for (k=0; *s++! ='\0'; k++);

return k;

}

Здесь: функция использует явный механизм работы с указателем. Изменение значения указателя s допустимо благодаря тому, что он является переменной. (для числовых массивов этого делать нельзя!)

Пример4:

оформить программу обращения строки в виде функции и написать основную программу, использующую ее. Для определения длинны стоки не будем пользоваться стандартной функцией. Для вывода строки на экран применим функцию printf ( ) со спецификатором % S.

// обращение строки

# include <stdio.h>

# include <conio.h>

//прототипы функций

Int length (char*str);

// основная программа

Void main ()

{Char S [ ] = `1 2 3 4 5 6 7 8 9';

clrscr ();

Invers (S);

// вызов функции обращение строки

printf (`/n%S', S);

}

// функция вычисления длины строк

Int length (char*e)

{Int R;

For (R=0; *S++! ='/0': R++);

Return R;

}

// функция обращения строки

Void invers (char*e)

{Char C;

Int i, j, m;

m=length (e);

// вызов функции length

For (i=0, j=m-1; i<j; i++, j--)

{c=e[i]; e[i]=e[j]; e[j]=c}

}

в результате 9 8 7 6 5 4 3 2 1 0

здесь функция invers() работает аналогично паскалевой структуре. Обмен параметрами через указатели имитирует обмен по имени.

Пример 5:

описать функцию вставки символа в строку. Параметры функции: строка, позиция вставки, вставляемый символ use - эту функцию в основной программе, где исходная строка, номер позиции и вставляемый символ задаются вводом.

// вставка символа в строку

# include <stdio.h>

# include <string.h>

# include <conio.h>

void insert (char*str, int p, char c)

{int i;

for (i=strlen(str); i>=p; i--)

str [i+1]=str[i];

str[p]=c;

}

void main()

{char c, S[100]; int n;

clrscr();

puts(`введите строку:'); gets (S);

puts(`введите позицию вставки:'); scanf(`%d',&n);

scanf (`введите символ:'); c=getche ();

insert (S,n,c);

puts (`/n результат :'); puts(S);

}

результат: ввести строку 0 1 2 3 4 5 6 7 8 9

позицию вставки: 4

ввести символ: *

результат: 0 1 2 3 * 5 6 7 8 9

Задания для самостоятельного выполнения

1

1. Заменить в заданной строке первое вхождение слова «кот» на «пес».

2. Статистика. Дан текст. Напишите программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.

2

1. Строка содержит дефис. Обменять местами части строки до и после дефиса.

2. Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, произво 00дящую следующее форматирование: после каждой точки в конце предложения должен стоять хотя бы один пробел; первое слово в предложении должно начинаться с прописной буквы.

Замечание. Текст может быть как на русском, так и на английском языке.

3

1. В строке имеется точка с запятой. Подсчитать количество символов до точки с запятой и после нее.

2. Статистика -Дан текст. Определите, каких букв (строчных или прописных) в нем больше, и преобразуйте следующим образом: если больше прописных букв, чем строчных, то все буквы преобразуются в прописные; если больше строчных, то все буквы преобразуются в строчные; если поровну и тех и других - текст остается без изменения.

4

1. Удалить в сроке все находящиеся в ней пробелы

2. Дана строка. Преобразовать ее, удалив каждый символ * и повторив каждый символ, отличный от *.

5

1. Строка содержит одно слово. Проверить будет ли оно читаться одинаково справа налево и слева направо, т.е. является ли оно полиандромом.

2. Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишним, если он:

« Стоит вначале строки;

« Стоит в конце строки;

« Следует за пробелом.

6

1. Заданы две строки. Напечатать те слова, которые встречаются в каждом из двух заданных предложений.

2. Форматированный вывод числа. С клавиатуры вводится целое число в десятичной системе счисления. Написать программу, реализующую вывод его представления с разделением на триады цифр.

Пример.

Число: 100000

Форматированный вывод: 100 000

Число: 1000000

Форматированный вывод: 1 000 000

7

1. Дана строка, заканчивающаяся точкой. Подсчитать, сколько слов в строке.

2. Дано число в двоичной системе счисления. Проверить правильность ввода этого числа (в его записи должны быть только символы 0 и 1). Если число введено неверно, повторить ввод. При правильном вводе перевести число в десятичную систему счисления

8

1. Дана строка. Подсчитать, сколько в ней символов *, ;, :.

2. В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев

9

1. Дана строка, содержащая текст. Найти длину самого короткого слова и самого длинного слова.

2. Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в тексте.

10

1. Дана строка. В строке заменить точку с запятой на двоеточие.

2. Результаты вступительных экзаменов представлены в виде списка из N строк, в каждой строке которого записаны фамилия студента и отметки по каждому из M экзаменов. Определить количество абитуриентов, сдавших вступительные экзамены только на «отлично».

11

1. В строке удалить символ двоеточие. Подсчитать количество удалений.

2. Двумерный массив n x m содержит некоторые буквы русского алфавита, расположенные в произвольном порядке. Написать программу, проверяющую, можно или из этих букв составить данное слово S. Каждая буква массива используется не более одного раза.

12

1. В строке вместо пробелов вставить запятую и пробел.

2. Даны две строки А и В. Составьте программу, проверяющую, можно ли из букв, находящих в А, составить В ( буквы можно использовать не более одного раза и можно переставлять).

Например, А: ИНТЕГРАЛ; В: АГЕНТ - составить можно; В: ГРАФ - составить нельзя.

13

1. Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

2. Строка, содержащая произвольный русский текст состоит не более чем из 200 символов. Написать , какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться к грамматически правильной форме, например a - 25, к - 3 раза и т.д.

14

1. Определить сколько раз в строке встречается заданный символ.

2. Дана строка содержащая текст. Найти длину самого короткого слова и самого длинного слова.

15

1. Дана строка, содержащая текст. Заменить все точки в строке на многоточие.

2. Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три буквы.


Подобные документы

  • Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.

    реферат [64,0 K], добавлен 20.03.2016

  • Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.

    курсовая работа [44,3 K], добавлен 18.03.2013

  • Понятие и характеристика операторов ввода и вывода информации, случаи их применяется в программах и основные виды: составной оператор Begin ... end, условный оператор If. Суть операторов безусловного перехода и циклических процессов, примеры применения.

    реферат [27,9 K], добавлен 03.03.2010

  • Характерные черты программирования на алгоритмическом языке СИ (алфавит, операции, специфика операторов, комментарии и другие элементы). Аналитический обзор и рассмотрение примеров программ, иллюстрирующих особенности применения основных операторов СИ.

    презентация [251,0 K], добавлен 26.07.2013

  • Анализ операторов ввода и вывода, а также характеристика форматов, используемых в этих операторах. Оформление законченной программы с применением этих операторов. Структура программы. Алфавит языка и типы данных. Ввод и вывод информации. Форматный вывод.

    лабораторная работа [62,0 K], добавлен 15.07.2010

  • Изучение циклических операторов: оператора цикла, управляемого счетчиком, оператора цикла с предусловием и постусловием. Минимизированные функции, текст программы. Алгоритм работы приложения по нахождению функции с помощью операторов break и continue.

    лабораторная работа [474,2 K], добавлен 23.11.2014

  • Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотечных функций ввода, вывода в С++. Описание переменной вещественного типа в языке программирования С++.

    лабораторная работа [137,9 K], добавлен 13.06.2014

  • Особенности синтаксиса языка программирования С++. Создание панели меню, для получения информации о программе, сохранения результата и выхода из программы. Работа с файлами, двумерными и одномерными динамическими массивами, функциями, строками и циклами.

    курсовая работа [782,3 K], добавлен 06.02.2016

  • Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.

    курсовая работа [1,7 M], добавлен 06.01.2014

  • Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.

    курсовая работа [37,3 K], добавлен 28.06.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.