Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 5 (win).doc
Скачиваний:
0
Добавлен:
21.02.2020
Размер:
148.99 Кб
Скачать

Пример 4 Сравнение строк

Напишем программу, запрашивающую пароль.

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

using namespace System;

int main(array<System::String ^> ^args)

{

char name[50];

char vvod[10], passw[]="d45gtr";

printf("Введите имя\n");

gets(name);

printf("Введите, %s, пароль\n", name);

gets(vvod);

if (strstr(vvod,passw))

printf ("Пароль принят");

else printf("Пароль не принят");

getch();

return 0;

}

В программе используется функция gets()– функция ввода строки и функция strstr(vvod,passw), которая сравнивает эталонный пароль d45gtr, содержащийся в массиве passw[] с паролем, введенным пользователем.

Задание 6

Внесите в исходный код программы 4 определение длины введенного пароля. Измените программу так, чтобы неверный ввод пароля мог быть выполнен не более трех раз и заканчивался сообщением "Превышено допустимое число ввода".

Задание 9

Проанализируйте коды следующих программ и определите результаты их выполнения.

Программа 1

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

using namespace System;

int main(array<System::String ^> ^args)

{

char a[25],b[5];

gets(a);

gets(b);

printf("%d\n",strcmp("a","a"));

printf("%d\n",strcmp("a","b"));

printf("%d\n",strcmp("b","a"));

getch();

return 0;

}

Программа 2

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

using namespace System;

int main(array<System::String ^> ^args)

{

char a[25],b[5];

gets(a);

gets(b);

strcat(a,b);

printf ("new string a=");

puts(a);

printf("string b=");

puts(b);

getch();

return 0;

}

5 Указатели и операции над указателями

Для доступа к данным процессор использует адреса. И когда компилятор обрабатывает оператор определения переменной, например,

int p1=10;

он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (p1) заменяются компилятором на адрес области памяти, в которой хранится значение переменной.

Для хранения адресов областей памяти предназначены указатели.

Формат объявления указателя на объект:

Тип *имя;

Пример 5 Описание указателей

int *p1;

Переменная p1 представляет собой указатель на тип int.

Для работы с указателями в С используются две операции: * и &.

В результате выполнения операции & определяется адрес ячейки памяти, которая соответствует переменной. Если b – имя переменной, то &b – ее адрес.

Например, если задать указателю имя a, то оператор

а=&b;

присваивает адрес b переменной а. Различие между двумя формами записи: а и &b, заключается в том, что а – это переменная, в то время как &b – константа. Предположим, что переменная b хранится в ячейке памяти под номером 2000, а ее значение равно 37. Тогда переменной а будет присвоено значение 2000.

Вторая операция над указателями * – операция косвенной адресации, выполняет действие, обратное по отношению к &.

Оператор а=*b; может быть прочитан так: «а получает значение переменной, расположенной по адресу b».