Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
71
Решение:
#include<iostream.h> #include<conio.h> int main() { unsigned int n,sum=0,br=0,chislo; while(chislo!=0) { cout<<«введите число»; cin>>chislo; if(chislo%2==0) sum=sum+chislo; if(chislo%2!=0) br++; } cout<<«сумма четных чисел=«<<sum<<endl; cout<<«количество нечетных чисел=«<<br<<endl; getch(); return 0;
}
Задача 2. Напишите программу, запрашивающую у пользователя N целых чисел (2<=N<=30). Найти количество максимальных элементов.
Решение:
#include<iostream.h> #include<conio.h> int main() { int n,k=0,l=0; double a[29],max,min; cout<<«введите количество элементов массива»; cin>>n; cout<<«введите элементы массива»; for(int i=0;i<n;i++) cin>>a[i]; max=a[0];min=a[0]; for (int j=0;j<n;j++) if (a[j]>max) max=a[j]; for (int j=0;j<n;j++) if (a[j]==max) k++; cout<<«max=«<<max<<endl; cout<<«k=«<<k; getch(); return 0; }
Задача 3. Напишите программу, запрашивающую у пользователя N целых чисел (2<=N<=30). Найти количество элементов массива сумма цифр, которых — двухзначное число.
Решение:
#include<iostream.h> #include<conio.h> int main() { int n; int a[29],s,k=0,chislo; cout<<«введите количество элементов массива»; cin>>n; cout<<«введите элементы массива»; for(int i=0;i<n;i++) cin>>a[i]; for(int j=0;j<n;j++) { s=0; chislo=a[j]; while(chislo) { s+=chislo%10; chislo/=10; } if (s>9||s>-9) k++; } cout<<k; getch(); return 0;
}
Задача 4. Напишите программу, запрашивающую у пользователя N целых чисел (2<=N<=30). Найти и вывести числа, кратные каждой своей цифре.
Решение:
#include<iostream.h> #include<conio.h> int main() { int n,arr[24],br=0, chislo,flag; cin>>n; for (int i=0;i<n;i++) cin>>arr[i]; for (int j=0;j<n;j++) { flag=1; chislo=arr[j]; while(chislo) { if(arr[j]%(chislo%10)!=0)
{ flag=0; break;
} chislo/=10; } if(flag) { cout<<arr[j]<<« «; } } if(!br) cout<<«No»<<endl; getch(); return 0; }
72
73
Задача 5. Дан массив из целых чисел arr[n]={20,8,32,6,1} отсортировать
массив по убыванию.
Решение:
#include<iostream.h> #include<conio.h> int main() { const int n=5; int arr[n]={20,8,32,6,1},swap; for(int i=0;i<n-1;i++) for(int j=0;j<n-i-1;j++) if(arr[j]<arr[j+1]) { swap=arr[j]; arr[j]=arr[j+1]; arr[j+1]=swap; } for(int k=0;k<n;k++) cout<<«arr[«<<k<<«]»<<arr[k]<<endl; getch(); return 0;
}
8.5. ФУНКЦИИ
Задача 1. Напишите программу, запрашивающую у пользователя данные:
день, месяц, год (1700,3000). Определить порядковый номер дня соответствующе-
го года.
#include<iostream.h> #include<conio.h> using namespace std; bool IsLeap(int); int main() { int d,m,y,nr; bool error; do { error=false; cout<<«Input a day[1,31]:»; cin>>d; cout<<«Input a month[1,12]:»; cin>>m; cout<<«Input a year [1700,3000]:»; cin>>y; error=(d<1)||(d>31)||(m<1)||(m>12)||(y<1700)||(y>3000); if (error) cout << «Incorrect input data» << endl; else { switch(m) { case 4: case 6: case 9: case 11: if (d>30) error=true; break;
74
case 2: if(!IsLeap(y)&& d>28) error=true; } } } while (error); switch(m) { case 1: nr=d; break; case 2: nr=d+31;break; case 3: nr=d+59;break; case 4: nr=d+90;break; case 5: nr=d+121;break; case 6: nr=d+151;break; case 7: nr=d+181;break; case 8: nr=d+212;break; case 9: nr=d+243;break; case 10: nr=d+273;break; case 11: nr=d+304;break; case 12: nr=d+334; } if (IsLeap(y)&& m>2) nr++; cout << endl << d << '.' << m << '.' << y << endl << nr << endl; return 0; } bool IsLeap(int y) { getch (); return ((y%4==0)&&(y%10))||(y%400);
}
Задача 2. Вычислить значение полинома: Р
(н)
(х)=а
0
х
Н
+А
1
х
п-1
+А
2
х
н-2
+а
п-1
х +а
н
.
Решение:
using namespace std; double ValPol(double a[], double x, int n); void main() { const int N=4; double a[N+1]={2.0,3.0,-1.0,-1.0,5.0}; double x=3.0; cout << «P(« << x << «)=« << ValPol(a,x,N) << endl; } double ValPol(double a[], double x, int n) { double v; v=a[0]; for (int i=1; i<=n; i++) v=v*x+a[i]; return v; }
Замечание:
Группа символов между пробелами считается словом. Палиндром читается одинаково слево направо и справо налево.
75
8.6. ЗАДАЧИ ПО ТЕМЕ «ОБРАБОТКА СТРОК»
Задача 1. Дана строка символов (<=80), заканчивающая точкой. Подсчитать
количество слов в строке.
#include<iostream.h> #include<conio.h> #include<string.h> int main() { char str[81]; cin.getline(str,81); int br,i=0; while(str[i]!='\0') { if (str[i]==' ') br++; else cout << endl; i++; } cout << (br+1) << endl; getch(); return 0; }
Задача 2. Найти количество однобуквенных слов.
#include<iostream.h> #include<conio.h> #include<string.h> int main() { char str[81]; cin.getline(str,81); int br,i=0; if(str[1]==' '|| str[1]=='.') br++; while(str[i]!='.') { if(str[i]==' ') { if (str[i+2]==' '||str[i+2]=='. ') br++; } i++; } cout << br << endl; getch(); return 0; }
Задача 3. Определить является ли данная строка палиндромом.
#include<iostream.h> #include<conio.h> #include<string.h> int main() { char str[51]; cin.getline(str,51); int n,i;
76
n=strlen(str); for(i=0;i<n/2;i++) if(str[i]!=str[n-1-i]) break; if(i<n/2) cout << «no» << endl; else cout << «yes» << endl; getch(); return 0; }
Задача 4. Даны две символьные строки. Определить сколько раз вторая
строка содержится в первой.
Решение:
#include<iostream.h> #include<conio.h> #include<string.h> int main() { char str1[100],str2[100]; cin.getline(str1,100); cin.getline(str2,50); int i=0,j,br=0; while(str1[i]!='\0') { j=0; if (str1[i]==str2[0]) { while(str2[j]!='\0') { if(str1[i+j]!=str2[j]) break; j++; } } if(str2[j]=='\0') br++; i++; } cout << br << endl; getch(); return 0;
}
8.7. ЗАДАЧИ ПО ТЕМЕ «СТРУКТУРЫ»
Задача 1. Описать структуру с именем Hospital, содержащую следующие поля: фамилия (инициалы), диагноз и количество дней, проведенных в больнице. Вывести:
1) фамилии тех пациентов, чей диагноз задан с клавиатуры;
2) фамилию пациента с наибольшим количеством дней проведенных
в больнице.
77
#include<iostream.h> #include<conio.h> struct Hospital { char name[31]; char diagnose[31]; int days; }; int main() { int n; cin >>n; Hospital patients[50]; for(int i=0;i<n;i++) { cin.get(); cin.getline(patients[i].name,31); cin >> patients[i].diagnose; cin >> patients[i].days; } int ind=0,max=patients[0].days; char FindDiagnose[31]; cin >> FindDiagnose; for(int j=0;j<n;j++) { if(strcmp(patients[j].diagnose,FindDiagnose)==0) { cout << patients[j].name << endl; } if(max<patients[j].days) { max=patients[j].days; ind=j; } } cout << patients[ind].name << « «; cout << patients[ind].diagnose << « «; cout << patients[ind].days << endl; getch(); return 0; }
Задача 2. Описать структуру с именем Firma, содержащую следующие поля:
фамилия (инициалы), табельный номер, должность, зарплата. Вывести фамилии
тех работников, чья зарплата <700 рублей.
Решение:
#include<iostream.h> #include<conio.h> #include<iomanip.h> #include<string.h> int main() struct Firma { char name[31]; char number[11]; char duty[21]; double payment;
}; int main() { int n; Firma workers[21]; cin >> n; for(int i=0;i<n;i++) { cin.get(); cin.getline(workers[i].name,31); cin>>workers[i].number; cin>>workers[i].duty; cin>>workers[i].payment; } for(int j=0;j<n;j++) { if(workers[j].payment<700) { cout << workers[j].name << endl; } } getch(); return 0;
}
Замечание:
Функция name_file.seekg(n); устанавливает get указатель в открытом файле. От этой позиции значение компонента будет считано.
8.8. ФАЙЛЫ
Задача 1. Написать программу, которая вводит с клавиатуры данные: имя и
возраст пяти учеников. Данные записать в файл под названием zad_1.txt, в глав-
ную директорию С:. Для разделения данных используйте знак — ‘\n’.
#include<iostream.h> #include<conio.h> #include<fstream.h> int main() { char name[20]; int year; ofstream myFile; myFile.open(«c:/zad_1.txt»,ios::out); for(int i=0;i<5;i++) { cout << «Имя:»; cin >> name; cout << «Возраст»; cin>>year; myFile << name << « «; myFile << year << '\n'; } myFile.close(); getch(); return 0; }
78
79
Задача 2. Написать программу, которая выводит данные на экран монитора из файла zad_1.txt.
#include<iostream.h> #include<conio.h> #include<fstream.h> int main() { char name[20]; int year; ifstream myFile; myFile.open(«c:/zad_1.txt»,ios::in); for(int i=0;i<5;i++) { myFile >> name; cout << name << « «; myFile >> year; cout << year << '\n'; } myFile.close(); getch(); return 0; }
Задача 3. Описать структуру с именем Student, содержащую следующие по-
ля: фамилия, имя, отчество, номер зачетной книжки и средний балл. С клавиатуры ввести данные учеников одного класса и записать в файл (studens.txt). Из файла
извлечь ФИО учеников, чей средний балл между 4 и 5.
Решение:
#include<iostream.h> #include<fstream.h> #include<conio.h> struct Student { char first_name[20]; char second_name[20]; char last_name[20]; double sr_ball; char num[11]; }; int main() { Student students; fstream file; file.open(«c:/students.txt»,ios::in); int n,i; cout << «Введите число учеников»; cin >> n; for(i=0;i<n;i++) { cout << «Имя:»; cin >> students.first_name; cout << «Отчество:»; cin >> students.second_name; cout << «Фамилия:»; cin >> students.last_name;
cout << «Средний балл:»; cin >> students.sr_ball; cout << «Номер:»; cin >> students.num; file << students.first_name << « «; file << students.second_name << « «; file << students.last_name << « «; file << students.sr_ball << « «; file << students.num << '\n'; } file.seekg(0); for(i=0;i<n;i++) { file >> students.first_name; file >> students.second_name; file >> students.last_name; file >> students.sr_ball; file >> students.num; if(students.sr_ball>=4&&students.sr_ball<=5) { cout << students.first_name << « «; cout << students.second_name << « «; cout << students.last_name << endl; } }
file.close(); getch(); return 0; }
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]