Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.
Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции
- printf() — для вывода информации
- scanf() — для ввода информации.
Вывод информации
Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление
на экране.
Общая форма записи функции printf():
СтрокаФорматов состоит из следующих элементов:
- управляющих символов;
- текста, представленного для непосредственного вывода;
- форматов, предназначенных для вывода значений переменных различных типов.
Объекты могут отсутствовать.
Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.
Основные управляющие символы:
- ‘\n’ — перевод строки;
- ‘\t’ — горизонтальная табуляция;
- ‘\v’ — вертикальная табуляция;
- ‘\b’ — возврат на символ;
- ‘\r’ — возврат на начало строки;
- ‘\a’ — звуковой сигнал.
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:
- %d — целое число типа int со знаком в десятичной системе счисления;
- %u — целое число типа unsigned int;
- %x — целое число типа int со знаком в шестнадцатеричной системе счисления;
- %o — целое число типа int со знаком в восьмеричной системе счисления;
- %hd — целое число типа short со знаком в десятичной системе счисления;
- %hu — целое число типа unsigned short;
- %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
- %ld — целое число типа long int со знаком в десятичной системе счисления;
- %lu — целое число типа unsigned long int;
- %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
- %f — вещественный формат (числа с плавающей точкой типа float);
- %lf — вещественный формат двойной точности (числа с плавающей точкой типа double);
- %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
- %c — символьный формат;
- %s — строковый формат.
Строка форматов содержит форматы для вывода значений. Каждый формат вывода начинается с символа %. После строки форматов через запятую указываются имена переменных, которые необходимо вывести.
Количество символов % в строке формата должно совпадать с количеством переменных для вывода. Тип каждого формата должен совпадать с типом переменной, которая будет выводиться на это место. Замещение форматов вывода значениями переменных происходит в порядке их следования.
Пример на Си
2
3
4
5
6
7
8
9
10
int main()
{
int a = 5;
float x = 2.78;
printf("a=%d\n", a);
printf("x=%f\n", x);
getchar();
return 0;
}
Результат работы программы
Тот же самый код может быть представлен с использованием одного вызова printf:
2
3
4
5
6
7
8
9
int main()
{
int a = 5;
float x = 2.78;
printf("a=%d\nx=%f\n", a, x);
getchar();
return 0;
}
Табличный вывод
При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:
2
3
4
5
6
7
8
int main()
{
float x = 1.2345;
printf("x=%10.5f\n", x);
getchar();
return 0;
}
Результат выполнения

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.
Ввод информации
Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки.
Общая форма записи функции scanf( ):
Строка форматов аналогична функции printf().
Для формирования адреса переменной используется символ амперсанд ‘&’:
адрес = &объект
Строка форматов и список аргументов для функции обязательны.
Пример на Си
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h> // для перехода на русский язык
int main()
{
float y;
system("chcp 1251"); // переходим в консоли на русский язык
system("cls"); // очищаем окно консоли
printf("Введите y: "); // выводим сообщение
scanf("%f", &y); // вводим значения переменной y
printf("Значение переменной y=%f", y); // выводим значение переменной y
getchar(); getchar();
return 0;
}
Результат работы программы:

Функция scanf( ) является функцией незащищенного ввода, т.к. появилась она в ранних версиях языка Си. Поэтому чтобы разрешить работу данной функции в современных компиляторах необходимо в начало программы добавить строчку
Другой вариант — воспользоваться функцией защищенного ввода scanf_s( ), которая появилась несколько позже, но содержит тот же самый список параметров.
2
3
4
5
6
7
8
9
10
int main()
{
int a;
printf("a = ");
scanf_s("%d", &a);
printf("a = %d",a);
getchar(); getchar();
return 0;
}
Назад: Язык Си
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main(void)
{
char name1[9], name2[9], name3[9];
unsigned short nm1, nm2, nm3;
float sc1, sc2, sc3;
float cnt1, cnt2, cnt3;
float sq1, sq2, sq3;
printf("1. Введите: название, школу, количество, площадь >");
scanf("%s %c %d %f", &nm1, &sc1, &cnt1, &sq1);
printf("2. Введите: название, школу, количество, площадь >");
scanf("%s %c %d %f", &nm2, &sc2, &cnt2, &sq2);
printf("3. Введите: название, школу, количество, площадь >");
scanf("%s %c %d %f", &nm3, &sc3, &cnt3, &sq3);
/* Вывод таблицы */
/* вывод заголовков */
printf("-----------------------------------------------\n");
printf("| Буддийские монастыри Японии периода Нара |\n");
printf("|---------------------------------------------|\n");
printf("| Название | Школа | Количество |площадь земли|\n");
printf("| | | монахов | (га) | n");
printf("|----------|-------|------------|-------------|\n");
/* вывод строк фактических данных */
printf("| %9s | %c | %3d | %-5.1f |\n", nm1, sc1, cnt1, sq1);
printf("| %9s | %c | %3d | %-5.1f |\n", nm2, sc2, cnt2, sq2);
printf("| %9s | %c | %3d | %-5.1f |\n", nm3, sc3, cnt3, sq3);
printf("-----------------------------------------------\n");
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <conio.h>
#include <stdlib.h>
#include <math.h>
int main(){
int a[4][5];
int i,j,range,max,maxi,maxj;
float kproiz1,kproiz2;
int proiz1=1;
int proiz2=1;
printf("введите диапазон заполнения\n");
scanf("%d", &range);
//if (range>=1)
//range=range+5;
printf ("матрица\n");
for (i=0; i<5; i++){
for(j=0; j<6; j++){
a[i][j]=rand() % range+1;
printf("%d ", a[i][j]);
}
printf("\n");
}
max = 1;
for (i=0; i<5; i++){
for(j=0; j<6; j++){
if (a[i][j] > max){
max = a[i][j];
maxi=i;
maxj=j;
}
}
}
printf("Максимальный элемент матрицы %d[%d;%d] \n",max,maxi+1,maxj+1);
proiz1= proiz2 = a[maxi][maxj];
if (maxi<=2){
for (i=maxi+1; i<5; i++){
if (maxj!=5){
for(j=maxj; (j<i+1 && j!=5); j++){
proiz1*=a[i][j];
}
}
if (maxj!=0){
if (maxj==5){
proiz1=proiz1*a[i][maxj];
}
for(j=maxj-1; (j<i+1 && j!=0); j--){
proiz1=proiz1*a[i][j];
}
}
}
kproiz1=sqrt(proiz1);
printf("Среднее геометрическое %f \n",kproiz1);
}
if (maxi>=2){
for (i=maxi-1; i>0; i--){
if (maxj!=5){
for(j=maxj; (j<=i+1 && j!=5); j++){
proiz2=proiz2*a[i][j];
}
}
if (maxj!=0){
if (maxj==5){
proiz2=proiz2*a[i][maxj];
}
for(j=maxj-1; (j<=i+1 && j!=0); j--){
proiz2*=a[i][j];
}
}
}
kproiz2=sqrt(proiz2);
printf("Среднее геометрическое %f",kproiz2);
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<math.h>
int main()
{
float a=8.5;
float b=4.57;
int c=(pow(pow(a,2)-pow(b,2),1/2));
int p=((a+b+c)/2);
int r=(pow((((p-a)*(p-b)*(p-c))/2),1/2));
int y=((log(r)+pow(cos (b),2)+1.8*(exp(a-b)))/(0.15*c+r*pow(sin(b),2)));
printf("a=%f b=%f\n", a, b );
printf("c=%f \n", c );
printf("p=%.3f \n", p );
printf("r=%.3f \n", r );
printf("y=%.3f \n", y );
getchar();
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void sorting(int *tmp, int ptm)
{
int min, curr;
for ( int i = 0; i < ptm; i++)
{
min = i;
for (int t = i + 1; t < ptm; t++)
{
if (tmp[t] < tmp[min])
min = t;
}
curr = tmp[i];
tmp[i] = tmp[min];
tmp[min] = curr;
}
}
int main()
{
int a[10];
for (int i = 0; i < 10; i++)
{
printf("a%d= ", i);
scanf("%x", &a[i]);
}
sorting(a,10);
for (int i = 0; i<10; i++)
printf("%d ", a[i]);
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<conio.h>
#include<stdlib.h>
#include <locale.h>
#include <iostream>
int main()
{
int i, j, p, k = 5, n = 256, m = 8;
printf("%c", 201);
for (i = 0; i < m; i++)
{
for (j = 0; j < k; j++)
printf("%c", 205);
printf("%c", 209);
}
printf("\b%c", 187);
printf("\n");
for (i = 0; i < n / m; i++)
{
printf("%c", 186);
for (j = 0; j < m; j++)
{
if ((i * m + j)<=0||((i * m + j)>= 7 && (i * m + j) <= 13))
printf("%3d- ", i * m + j);
else
printf("%3d-%c", i * m + j, i * m + j);
printf("%c%", 179);
}
printf("\b%c\n", 186);
printf("%c", 199);
for (j = 0; j < m; j++)
{
for (p = 0; p < 5; p++)
printf("%c", 196);
printf("%c", 197);
}
if (i != (n / m - 1))
printf("\b%c%c%c", 182, 10, 13);
else
printf("\b%c%c", 182, 13);
}
printf("%c", 200);
for (i = 0; i < m; i++)
{
for (j = 0; j < k; j++)
printf("%c", 205);
printf("%c", 207);
}
printf("\b%c", 188);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <math.h>
void main()
{
int c, f;
float a, y;
c = 1;
f = 0;
printf("Enter a: ");
scanf_s("%f", &a);
for (float x = -1.7; x <= 3.3; x += 0.5)
if ((3.0 * a) + sin(x / 3) == 0)
f = 1;
if (f == 0)
{
printf("___________________________________________\n");
printf("|Number| x | a | y(x) |\n");
printf("|______|_____|______________|_____________|\n");
for (float x = -1.7; x <= 3.3; x += 0.5)
{
y = (2.0 * x) / ((3.0 * a) + sin(x / 3));
printf("|%4d |%5.1f|%14f|%13f|\n", c, x, a, y);
printf("|______|_____|______________|_____________|\n");
c++;
}
}
else
{
printf("___________________________________________________________________________________________\n");
for (int i = 1; i <= 12; i++)
{
printf("|Error: division by 0 | Error: division by 0 | Error: division by 0 | Error: division by 0|\n");
printf("|_____________________|______________________|______________________|_____________________|\n");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <conio.h>
int main(void){
int i;
printf("How many money do you have? , %s\n ", i);
scanf("Thanks now we calculate your oportunity, %d\n", i);
if("i <= 100") {
printf("old cucumber,milk with discount\n");
}
if ("i >= 300")
{
printf("some nuts, icecream\n");
}
else
{
printf("welcome to restoraunt\n");
}
2
3
4
{ int d =n%10; // цифра
n=n /10;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <ctype.h>
#include <conio.h>
int main() {
int count = 0; // количество символов
char ch;
char resp;
do {
ch = _getch(); // считывание символа без показа в консоль
if (((ch == 'y') || (ch == 'n') || (ch == 'Y') || (ch == 'N')) && (count == 0))
{
resp = toupper(ch); // сохранение ответа
putchar(resp); // вывод ответа в консоль
count++;
}
else
{
if (ch == 8) // Backspace
{
if (count > 0)
{
count = 0;
putchar(ch);
}
}
}
} while (ch != 13); // пока не нажали Enter
return 0;
}
2
3
4
5
6
7
{
count = 0;
putchar(ch);
putchar(' ');
putchar(ch);
}
2
3
4
5
6
7
8
int main(void)
{
int x;
scanf ("%n", &x);
printf ("%d\t", x);
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
v=1
r=1
y=1
=2
c=1
o=1
i=1
n=1
h=1
l=1
p=1
s=1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define LEN 80
int main()
{
char buf[LEN + 1] = "";
int cnt[SIZE] = {0};
printf( "> " );
scanf( "%80[^\n]", buf );
for( char *p = buf; *p; p++ )
cnt[*p]++;
for( char *p = buf; *p; cnt[*p++] = 0 )
if( cnt[*p] != 0 )
printf( "%c = %d\n", *p, cnt[*p] );
return 0;
}
2
3
4
5
6
7
8
char a,h; // так код РАБОТАЕТ (тут тип char)
scanf("%d", &a); // вводим число 10
printf("%d", a); // вывод числа 10
scanf("%d", &h); // вводим число 20
printf("%d", h); // вывод числа 20
2
3
4
5
6
7
char a,h; // так код НЕ работает
scanf("%d", &a); // вводим число 10
scanf("%d", &h); // вводим число 20
printf("%d", a);
printf("%d", h); // вывод НЕПРАВИЛЬНЫЙ
2
3
4
5
6
7
8
printf("Введите первое число: \n");
scanf("%d", &a); // вводим число 10
printf("Введите второе число: \n");
scanf("%d", &h); // вводим число 20
printf("Первое число: %d \n", a);
printf("Второе число: %d", h);
2
freopen("output.txt", "w", stdout);
2
3
4
5
6
7
8
9
#define _CRT_SECURE_NO_WARNINGS
int main(void)
{
char ch;
scanf("%n", &ch);
printf ("%c", ch);
return 0;
}
Например:
2
3
4
int length = 8, precision = 5;
sprintf(buf, "Value: %%%d.%df", length, precision); // Value: %8.5d
printf(buf, 3.14159265358979); // напечатает Value: 3.14159
system("chcp 1251");
(русские буквы или не те символы)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
float summ(float a, float b);
float minus(float a, float b);
float multi(float a, float b);
float diff(float a, float b);
int main(){
float a=1, b=1;
int oper=1;
printf("Enter the first number: ");
scanf("%f", &a);
printf("\nEnter the second number: ");
scanf("%f", &b);
printf("What operation do you want to make??\nEnter the appropriate number:\n 1-addition, 2-subtraction, 3-multiplication, 4-division:");
scanf("%d", &oper);
switch(oper){
case 1:
printf("Answer:%f", summ(a,b));
break;
case 2:
printf("Answer:%f", minus(a,b));
break;
case 3:
printf("Answer:%f", multi(a,b));
break;
case 4:
if(b==0){
printf("Division by zero is not allowed!!");
}
else{
printf("Answer:%f", diff(a,b));}
break;
default:
printf("Rechecks the value you entered!");
}
return 0;
}
float summ(float a, float b){
float res=a+b;
return res;
}
float minus(float a, float b){
float res=a-b;
return res;
}
float multi(float a, float b){
float res=a*b;
return res;;
}
float diff(float a, float b){
float res=a/b;
return res;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
int_tmain(int argc, _TCHAR* argv[])
{
float x1, y1, x2, y2, x3, y3, a, b, c, p, p1, p2, p3, s, s1, s2, s3, s0, l1, l2, l3;
scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3);
a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); //считаем стороны треугольника
b=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
c=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
l1=sqrt(x1*x1+y1*y1); // считаем расстояние от начала координат до вершин
l2=sqrt(x2*x2+y2*y2);
l3=sqrt(x3*x3+y3*y3);
p=(a+b+c)/2; //вычисляем полупериметр основного треугольника
p1=(l1+a+l2)/2;
p2=(l2+b+l3)/2;
p3=(l3+c+l1)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c)); //вычисляем площадь основного треугольника
s1=sqrt(p1*(p1-l1)*(p1-a)*(p1-l2));
s2=sqrt(p2*(p2-l2)*(p2-b)*(p2-l3));
s3=sqrt(p3*(p3-l3)*(p3-c)*(p3-l1));
if((s1==0) || (s2==0) || (s3==0)) printf("na storone");
else { if (s0<=s) printf("vnutri");
else printf("vne treugolnika");
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// натурального числа n. Пример: n=123; результат – число: 321. Выводить по одной цифре нельзя
#include <stdio.h>
int reverse;
int rev(int revNum)
{
if(revNum)
{
reverse = (reverse * 10) + (revNum % 10);
rev(revNum/10); //recurs vyzov
}
else
return; //kogda obrchis raven 0 to vernutsa k abonentu
return reverse;
}
int main()
{
int num;
printf("Vvesti chislo:");
scanf("%d",&num);
printf("Obratnoe chislo:%d\n",rev(num));
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int reverse = 0; // здесь будет число с обратным порядком цифр
int rev(int revNum) // допустим, revNum = 123
{
if (revNum) // если передано число больше 0
{
reverse = (reverse * 10) + (revNum % 10); // reverse = reverse*10+3:
// 1 итерация: reverse = 0*10+3
// 2 итерация: reverse = 3*10+2
// 3 итерация: reverse = 32*10+1
rev(revNum / 10); // 1 итерация: вызываем функцию рекурсивно для числа 12
// 2 итерация: вызываем функцию рекурсивно для числа 1
// 3 итерация: вызываем функцию рекурсивно для числа 0 (будет выход по условию в строке 5)
}
return reverse; // возвращаем полученное число
}
int main()
{
int num;
printf("Vvesti chislo:");
scanf_s("%d", &num); // ввод числа
printf("Obratnoe chislo:%d\n", rev(num)); // вывод значения, которое получено в reverse
getchar(); getchar();
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (void) {
char *locale = setlocale (LC_ALL, "");
double a, b, xk, xn, deltax, y, sum, x;
printf("Введите число a: \n");
scanf( "%.1lf", &a);
printf("Введите число b: \n");
scanf("%.1lf", &b);
printf ("Введите число xn: \n ");
scanf("%.1lf", &xn);
printf("Введите число xk: \n");
scanf("%.1lf", &xk);
printf("Введите число dx: \n");
scanf("%.2lf", &deltax);
printf ("\n");
x = xn;
y = 0.0;
while (x>=xn & x<=xk){
if (xb){
y = pow(fabs((pow(x,2)-a*exp((x-b)))),(1/3.0));
printf("При х = %.2lf", x);
printf( " y =%lf", y);
printf("\n");
};
if (x>a & x<=6){
sum = 0.0;
int k;
for (k =5;k<=12;k++){
sum = sum + (sqrt(k) +x)/log(k);
};
y = sum;
printf("При х = %.2lf", x);
printf( " y =%lf", y);
printf("\r\n");
}
x+=deltax;
};
return 0;
}
2
printf("\n Значение переменной y=%10.5\n", y);