Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Определить тип данных переменной из контекста ее описания
//------------------------------------------------------1 char *f(void); //------------------------------------------------------2 int (*p[5])(void); //------------------------------------------------------3 void ( *(*p)(void) )(void); //------------------------------------------------------4 int (*f(void))(); //------------------------------------------------------5 char **f(void); //------------------------------------------------------6 typedef char *PTR; PTR a[20]; //------------------------------------------------------7 typedef void (*PTR)(void); PTR F(void); //------------------------------------------------------8 typedef void (*PTR)(void); PTR F[20]; //------------------------------------------------------9 struct list {...}; list *F(list *); //------------------------------------------------------10 void **p[20]; //------------------------------------------------------11 char *(*pf)(char *); //------------------------------------------------------12 int F(char *,...); //------------------------------------------------------13 char **F(int); //------------------------------------------------------14 typedef char *PTR; PTR F(int); Структуры и объединения. Определить значения переменных после выполнения действий. //--------------------------------------------------------- union x // sizeof(int) = 2 { // sizeof(long)= 4 char c[4]; int n[2]; unsigned char u[4]; long l; } UNI; struct man { char name[20]; int dd,mm,yy; char *zodiak; } A= { "Иванов",1,10,1969,"Весы" }, B[10], *p; //------------------------------------------------------- 1 void F1() { char c; int i; for (i=0; i<10; i++) B[i].zodiak = "abcdefghij" + i; c = B[1].zodiak[2]; } //------------------------------------------------------- 2 void F2() { char c; int i,j; for (i=0; i<10; i++) { for (j=0; j<10; j++) B[i].name[j] = 'a' + i + j; B[i].name[j]='\0'; } c = B[1].zodiak[2]; } //------------------------------------------------------ 3 void F3() { int i,n; for (i=0; i<10; i++) B[i].dd = i; for (p=B, n=5; n!=0; n--, p++) n += p->dd; } //------------------------------------------------------ 4 void F4() { char c; int i; for (i=0; i<10; i++) B[i].zodiak = A.zodiak + i % 4; c = B[5].zodiak[2]; } //------------------------------------------------------ 5 void F5() { int i,n; char *p; for (i=0; i<10; i++) B[i].zodiak = "abcdefghij" + i; for (n=0, p=B[6].zodiak; *p !='\0'; p++, n++); } //----------------------------------------------------- 6 void F6() { long s; int i; for (i=0; i<4; i++) UNI.c[i]='0'+i; s = UNI.l; } //----------------------------------------------------- 7 void F7() { char z; UNI.l = 0x00003130; z = UNI.c[1]; } //----------------------------------------------------- 8 void F8() { long s; char z; UNI.l = 0x0000FFFF; z = UNI.c[1]; UNI.c[1]=UNI.c[2]; UNI.c[2]=z; s = UNI.l; } //----------------------------------------------------- 9 void F9() { long s; UNI.l = 0x0001FFFF; UNI.n[0] >>=2; s = UNI.l; } //---------------------------------------------------- 10 void F10() { long s; UNI.l = 0x0001FFFF; UNI.c[1] <<=2; s = UNI.l; } //---------------------------------------------------- 11 void F11() { long s; UNI.l = 0x0001FFFF; UNI.u[1] >>=2; s = UNI.l; } //---------------------------------------------------- 12 void F12() { long s; int i,m, cr; UNI.l = 0x00010000; for (i=0; i<4; i++) UNI.c[i] = ~UNI.c[i]; for (cr=1, i=0; i<4; i++) { m = UNI.c[i] + cr; UNI.c[i] = m; cr = (m & 0x100) !=0; } s = UNI.l; }
Указатель на структуру Определите значения переменных после выполнения действий. //------------------------------------------------------- 1 struct man1 { char name[20]; int dd,mm,yy; char *zodiak; struct man1 *next; } A1= {"Петров",1,10,1969,"Весы",NULL }, B1= {"Сидоров",8,9,1958,"Дева",&A1 }, *p1 = &B1; void F1() { char c1,c2,c3,c4; c1 = A1.name[2]; c2 = B1.zodiak[3]; c3 = p1->name[3]; c4 = p1->next->zodiak[1]; } //------------------------------------------------------- 2 struct man2 { char name[20]; char *zodiak; struct man2 *next; } C2[3] = { {"Петров","Весы",NULL }, {"Сидоров","Дева",&C2[0] }, {"Иванов","Козерог",&C2[1] } }; void F2() { char c1,c2,c3,c4; c1 = C2[0].name[2];c2 = C2[1].zodiak[3]; c3 = C2[2].next->name[3]; c4 = C2[2].next->next->zodiak[1]; } //------------------------------------------------------- 3 struct tree3 { int vv; struct tree3 *l,*r; } A3 = { 1,NULL,NULL }, B3 = { 2,NULL,NULL }, C3 = { 3, &A3, &B3 }, D3 = { 4, &C3, NULL }, *p3 = &D3; void F3() { int i1,i2,i3,i4; i1 =A3.vv; i2 = D3.l->vv; i3 =p3->l->r->vv;i4 = p3->vv; } //------------------------------------------------------- 4 struct tree4 { int vv; struct tree4 *l,*r; } F[4] = {{ 1,NULL,NULL }, { 2,NULL,NULL }, { 3, &F[0], &F[1] }, { 4, &F[2], NULL }}; void F4() { int i1,i2,i3,i4; i1 = F[0].vv; i2 = F[3].l->vv; i3 = F[3].l->r->vv; i4 = F[2].r->vv; } //------------------------------------------------------- 5 struct list5 { int vv; struct list5 *pred,*next; }; extern struct list5 C5,B5,A5; struct list5 A5 = { 1, &C5, &B5 }, B5 = { 2, &A5, &C5 }, C5 = { 3, &B5, &A5 }, *p5 = &A5; void F5() { int i1,i2,i3,i4; i1 = A5.next->vv; i2 = p5->next->next->vv; i3 = A5.pred->next->vv; i4 = p5->pred->pred->pred->vv; } //------------------------------------------------------ 6 char *p6[] = { "Иванов","Петров","Сидоров",NULL}; void F6() { char c1,c2,c3,c4; c1 = *p6[0]; c2 = *(p6[1]+2); c3 = p6[2][3]; c4 = (*(p6+2))[1]; } //------------------------------------------------------ 7 struct dat7 { int dd,mm,yy; } aa = { 17,7,1977 }, bb = { 22,7,1982 }; struct man7 { char name[20]; struct dat7 *pd; struct dat7 dd; char *zodiak; } A7= {"Петров", &aa, { 1,10,1969 }, "Весы" }, B7= {"Сидоров", &bb, { 8,9,1958 }, "Дева" }, *p7 = &B7; void F7() { int i1,i2,i3,i4; i1 = A7.dd.mm; i2 = A7.pd->yy; i3 = p7->dd.dd; i4 = p7->pd->yy; } //------------------------------------------------------ 8 struct dat8 { int dd,mm,yy; }; struct man8 { char name[20]; struct dat8 dd[3]; } A8[2] = { {"Петров", {{1,10,1969},{8,8,1988},{3,2,1978}}}, {"Иванов",{{8,12,1958},{12,3,1976},{3,12,1967}}} }; void F8() { int i1,i2,i3,i4; i1 = A8[0].dd[0].mm; i2 = A8[1].dd[2].dd; } 5 Функции в С++ Определить ошибки при объявлении, определении или вызове функций. // Объявления ----------------------------------------1 (a) set( int *, int ); (b) void func(); (c) string error( int ); (d) arr[10] sum( int *, int );
(e) void print( int arr[][], int size ); (f) int ff( int a, int b = 0, int с = 0 ); (g) void operate ( int *matrix[] ); (h) char *screenlnit( int height = 24, int width,char background ); (i) void putValues( int (&ia)[] );
// Вызовы---------------------------------------------2
doublecalc( double ) ; int count( const string &, char ) ; void sum( vector<int>&, int ) ; vector<int>vec( 10 );
(a) саlс( 23.4,55.1); (b) count( "abcda", 'a' ) ; (c) sum( vec, 43.8 ); (d) calc( 66 ) ;
// Повторныеобъявления----------------------------------4
(a) char *screenlnit( int height, int width,char background = ' ' ); char *screenlnit( int height = 24, int width,char background );
(b) void print( int (*arr)[6], int size ); void print( int (*arr)[5J, int size );
(c) void manip( int *pi, int first, int end = 0 ); void manip( int *pi, int first = 0, int end = 0 )
// Ошибкиввызовах--------------------------------------5
void print( int arr[][5], int size ); void operate(int *matrix[7]); char *screenlnit( int height = 24, int width = 80,char background = ' ');
(a) screenlnit(); (b) int *matrix[5]; operate( matrix ); (c) int arr[5][5]; print( arr, 5 );
Обработка массивов Содержательно сформулировать результат выполнения функции, примерно в таком виде: "Функция находит в массиве минимальный элемент и возвращает в качестве результата его индекс". Для этого необходимо формальную запись алгоритма перевести в словесное описание, а затем попытаться сформулировать результат. Если это не получается, то же самое можно попытаться проделать по шагам, либо по нисходящей, либо по восходящей цепочке конструкций языка: перевести конструкцию в словесное описание, сформулировать результат или алгоритм ее выполнения, затем то же самое сделать с учетом вложенной или объемлющей конструкции. То есть использовать ту же технологию структурного проектирования с точностью до наоборот.
//------------------------------------------------ 1 int F1(int c[], int n) { int s,i; for (s=0, i=0; i<n; i++) s +=c[i]; return s; } //------------------------------------------------ 2 int F2(int c[], int n) { int m,i,k; for (m=c[0],i=1,k=0; i<n; i++) if (c[i] > m) { m=c[i]; k=i;} return k; } //------------------------------------------------ 3 int F3(int c[], int n) { int i,j; for (i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (c[i]==c[j]) return i; return -1; } //------------------------------------------------ 4 int F4(int n) { int k,m; for (k=0, m=1; m <= n; k++, m = m * 2); return k-1; } //------------------------------------------------ 5 void F5(int c[], int n) { int i,j,k; for (i=0,j=n-1; i < j; i++,j--) { k = c[i]; c[i] = c[j]; c[j] = k; } } //------------------------------------------------ 6 int F6(int c[], int n) { int i,j,k1,k2; for (i=0; i<n; i++) { for (j=k1=k2=0; j<n; j++) if (c[i] != c[j]) { if (c[i] < c[j]) k1++; else k2++; } if (k1 == k2) return i; } return -1; } //------------------------------------------------ 7 int F7(int c[], int n) { int i,j,m,s; for (s=0, i=0; i < n-1; i++) { for (j=i+1, m=0; j<n; j++) if (c[i]==c[j]) m++; if (m > s) s = m; } return s; } //------------------------------------------------ 8 int F8(int c[], int n) { int i,j,k,m; for (i=k=m=0; i < n-1; i++) if (c[i] < c[i+1]) k++; else { if (k > m) m=k; k=0; } return m; } //------------------------------------------------ 9 int F9(int n) { int i,k, c[6]; for (i=0; n !=0; i++, n /=10) c[i]=n % 10; for( k=0; k < i; k++) n = n *10 + c[k]; return n; } //------------------------------------------------ 10 int F10(int n) { int m,k; for (m=0; n!=0; n /=10) if ((k = n % 10) > m) m = k; return m; } Степенные ряды //-----------------------------------------------1 double sum(double x,double eps) { double s,sn; int n; for (s=0, sn = 1, n=1; fabs(sn) > eps; n++) { s += sn; sn= - sn * x / n; } return s; } //-----------------------------------------------2 for (s=0, sn = x, n=1; fabs(sn) > eps; n++) { s += sn; sn= - sn * x / n; } //-----------------------------------------------3 for (s=0, sn = x; n=1; fabs(sn) > eps; n+=2) { s += sn; sn= sn * x * x / (n*(n+1)); } //-----------------------------------------------4 for (s=0, sn = x, n=1; fabs(sn) > eps; n+=2) { s += sn; sn= sn * x / (n*(n+1)); } //-----------------------------------------------5 for (s=0, sn = x, n=1; fabs(sn) > eps; n++) { s += sn; sn= sn * x * (2*n) / (2*n-1); } //-----------------------------------------------6 for (s=0, sn = x, n=1; fabs(sn) > eps; n+=2) { s += sn; sn= sn * x *x * n / (n+1); } //-----------------------------------------------7 for (s=0, sn = x, n=1; fabs(sn) > eps; n++) { s += sn; sn= sn * x * x * (2*n-1) / (2*n+1); } //-----------------------------------------------8 for (s=0, sn = x, n=2; fabs(sn) > eps; n+=2) { s += sn; sn= sn * x *x * (n-1) / (n+1); } //-----------------------------------------------9 for (s=0, sn = 1, n=1; fabs(sn) > eps; n++) { s += sn; int nn = 2*n-2; if (nn==0) nn=1; sn= sn * x * x * nn / (2*n); } //-----------------------------------------------10 for (s=0, sn = 1, n=1; fabs(sn) > eps; n+=2) { s += sn; int nn = n-1; if (nn==0) nn=1; sn= sn * x *x * nn / (n+1); }
Строки, символы и тексты //------------------------------------------------- 2 void F1(c1[],c2[]) { int i,j; for (j=0,i=0;c1[i]!=0;i++) // Посимвольный просмотр строки {if (c1[i]!=' ') // Текущий символ – не пробел { if (i!=0 && c1[i-1]==' ') // Первый в слове - c2[j++]=' '; // добавить пробел c2[j++]=c1[i]; // Перенести символ слова } // в выходную строку } c2[j]=0; } //------------------------------------------------- 2 void F2(char c[]) { int i,j; for (i=0; c[i] !='\0'; i++); for (j=0,i--; i>j; i--,j++) { char s; s=c[i]; c[i]=c[j]; c[j]=s; } } //------------------------------------------------- 3 int F3(char s) { if (s >='0' && s <='9') return(s - '0'); else return(-1); } } //------------------------------------------------- 4 int F4(char c[]) { int i,old,nw; for (i=0, old=0, nw=0; c[i] !='\0'; i++) { if (c[i]==' ') old = 0; else { if (old==0) nw++; old=1; } } return nw; } //------------------------------------------------- 5 void F5(char c[]) { int i,j; for (i=0, j=0; c[i] !='\0'; i++) if (c[i] !=' ') c[j++] = c[i]; c[j] = '\0'; } //------------------------------------------------- 6 void F6(char c[], int nn) { int k,mm; for (mm=nn, k=1; mm !=0; mm /=10,k++); for (c[k--]='\0'; k>=0; k--) { c[k]= nn % 10 + '0'; nn /=10; } } //------------------------------------------------- 7 int F7(char c[]) { int i,s; for (i=0; c[i] !='\0'; i++) if (c[i] >='0' && c[i]<='7') break; for (s=0; c[i] >='0' && c[i] <='7'; i++) s = s * 8 + c[i] - '0'; return s; } //------------------------------------------------- 8 int F8(char c[]) { int n,k,ns; for (n=0,ns=0; c[n] !='\0'; n++) { for (k=0; n-k !=0 && c[n+k] !='\0'; k++) if (c[n-k] != c[n+k]) break; if (k >=3) ns++; } return ns; } //------------------------------------------------- 9 int F9(char c1[],char c2[]) {int i,j; for (i=0; c1[i] !='\0'; i++) { for (j=0; c2[j] !='\0'; j++) if (c1[i+j] != c2[j]) break; if (c2[j] =='\0') return i; } return -1;} //------------------------------------------------ 10 char F10(char c[]) { char m,z; int n,s,i; for (s=0,m='A'; m <='Z'; m++) { for (n=0, i=0; c[i] !='\0'; i++) if (c[i]==m) n++; if (n > s) { z=m; s=n; } } return z; } //------------------------------------------------ 11 void F11(char c[], double x) { int i; for (c[0]='.',i=1; i<6; i++) { x *= 10.; c[i]=(int)x + '0'; x -= (int)x; } c[i]='\0'; } //------------------------------------------------ 12 int F12(char c[]) { for (int i=0; c[i]!=0; i++) { if (c[i]==' ') continue; for (int j=i+1; c[j]==c[i]; j++); for (; c[j]!=0; j++) { for (int k=0; i+k<j && c[i+k]==c[j+k]; k++); if (k>=4)returni; } } } Биты, байты и слова В первой половине заданий необходимо определить значения переменных после выполнения поразрядных операций.Учтите, что заданные маски соответствуют восьмеричным или шестнадцатеричным цифрам.
//-------------------------------------------------- int i,j; long l; char c; double d; // Примечание: - sizeof(int) равен 2 // - sizeof(long) равен 4 // "~" - операция побитовой инверсии //------------------------------------------------ 1 i = 0x5678; l = (i & ~0x00F0) | 0x0010; c = (l >> 4) & 0xF + '0'; j = (i & 0xFF0F) | (~i & 0x00F0); //------------------------------------------------ 2 i = 1; j = 2; c = 3; l = (j > i) + (j==c) << 1 + (i !=c) << 2; //------------------------------------------------ 3 for (l=1,i=0; l >0; l<<=1, i++); //------------------------------------------------ 4 for (l=1,i=0; l !=0; l<<=1, i++); //------------------------------------------------ 5 i = 1; j = 3; c = 2; l = i + (j << 4) + (c << 8 ); c = i << 8;j = j << j; //------------------------------------------------ 6 int F6(long n) { int i,s; for (i=0,s=0; i < sizeof(long) * 8; i++) { if (n & 1) s++; n >>=1; } returns; } //------------------------------------------------ 7 long F7(long n) { int i; long s; for (i=s=0; i < sizeof(long) * 8; i++) { s <<=1; s |= n & 1; n >>=1; } return s; } //------------------------------------------------ 8 long F8(long n, int m1, int m2) { long s,x; int i; for (i=0,x=1,s=n; i < sizeof(long)*8; i++) { if (i >=m1 && i <=m2) s |= x; x <<=1; } return s; } //------------------------------------------------ 9 int F9(char c[]) { int i,s; for (i=0; c[i] !='\0'; i++) if (c[i] >='0' && c[i] <='7') break; for (s=0; c[i] >='0' && c[i] <='7'; i++) { s <<=3; s |= c[i] & 0x7; } return s; } //------------------------------------------------ 10 void F10(char c[],long n) { int i; i=sizeof(long)*8/3 +1; for (c[i--]='\0'; i>=0; i--) { c[i] = (n & 0x7) + '0'; n >>=3; } } //------------------------------------------------ 11 // Операция "^" - ИСКЛЮЧАЮЩЕЕ ИЛИ int F11(long n) { int i,m,k; for (i=m=k=0; i < sizeof(long) * 8; i++, n >>= 1) if ((n & 1) ^ m) { k++; m =!m; } return k; } Рекурсивный вызов функции //------------------------------------------------------1 long F(int n) {if (n==1) return (1); return (n * F(n-1));} //------------------------------------------------------2 struct xxx { int val; xxx *next; }; void F( xxx **p, int v) { xxx *q; if (*p !=NULL) F( &((*p)->next) ,v ); else { q = malloc(sizeof( xxx)); q->val = v; q->next = NULL; *p = q; } } //------------------------------------------------------3 double F(double *pk, double x, int n) { if (n==0) return(*pk); return( *pk + x *F(pk+1,x,n-1)); } void z3() { double B[] ={ 5.,0.7,4.,3. } ,X=1., Y; // Примервызова Y = F(B,X,4); } //------------------------------------------------------4 void sort(int in[], int a, int b) { int i,j,mode; if (a==b) return; for (i=a, j=b, mode=1; i != j; mode >0 ? i++ : j--) if (in[i] > in[j]) { int c; c = in[i]; in[i] = in[j]; in[j]=c; mode = -mode; } sort(in,a,i-1); sort(in,i+1,b); } //------------------------------------------------------5 char *F(char *p, char *s) { if ( *s =='\0') return p; *p++ = *s; p=F(p, s+1);*p++ = *s; return p; } void z6() { char *q, S[80]; F(S, "abcd"); // Пример вызова } //------------------------------------------------------6 void F(char **p, char *s) { if ( *s =='\0') return; *(*p)++ = *s; F(p, s+1); *(*p)++ = *s; } void z7() {char *q, S[80]; q = S; F(&q,"abcd"); // Примервызова } //------------------------------------------------------7 struct xxx { int val; xxx *next; }; int F( xxx *p) { int zzz; if (p ==NULL) return 0; zzz = F(p->next)); if (zzz > p->val) return zzz; return p->val; } //------------------------------------------------------8 struct xxx { int val; xxx *p[10]; }; int F( xxx *p) { int zzz,i, rrr; if (p==NULL) return 0; for (i=0, zzz = p->val; i<20; i++) if ((rrr=F(p->p[i])) > zzz) zzz = rrr; return zzz; } //------------------------------------------------------9 struct xxx { int val; xxx *p[10]; }; int F( xxx *p) { int zzz,i, rrr; if (p==NULL) return 0; for (i=0, zzz = 0; i<20; i++) if ((rrr=F(p->p[i])) > zzz) zzz = rrr; return zzz+1; } //------------------------------------------------------10 void F(int p[], int nn) { int i; if (nn==1) { p[0]=0; return; } for (i=2; nn % i !=0; i++); p[0]=i; F(p+1,nn / i); }
Указатели и ссылки Обработка указателей //------------------------------------------------------- 1 void F1(int *p1, int *p2) { int c; c = *p1; *p1 = *p2; *p2 = c;} //------------------------------------------------------- 2 void F2(int *p, int *q, int n) { for (*q = *p++; n > 0; n--, p++) if (*p > *q) *q = *p; } //------------------------------------------------------- 3 int *F3(int *p, int n) { int *q; for (q = p; n > 0; n--, p++) if (*p > *q) q = p; return q; } //--- Указатели на строки (char*) ----------------------- 4 void F4(char *p) { char *q; for (q=p; *q !='\0'; q++); for (q--; p < q; p++, q--) { char c; c = *p; *p = *q; *q = c; } } //------------------------------------------------------- 5 int F5(char *p) { int n; for (n=0; *p !='\0'; p++, n++); return n; } //------------------------------------------------------- 6 char *F6(char *p,char *q) { char *s1,*s2; for (; *p!='\0'; p++) { for (s1=p, s2=q; *s2!='\0' && *s1==*s2; s1++,s2++); if (*s2 == '\0') return p; } return NULL; } //------------------------------------------------------- 7 void F7(char *p, char *q) { for (; *p !='\0'; p++); for (; *q !='\0'; *p++ = *q++); *q = '\0'; } //------------------------------------------------------- 8 int F8(char *p) { int n; if (*p=='\0') return (0); if (*p !=' ') n=1; else n=0; for (p++; *p !='\0'; p++) if (p[0] !=' ' && p[-1]==' ') n++; return n; } //------------------------------------------------------- 9 void F9(char *p) { char *q; int n; for (n=0, q=p; *p !='\0'; p++) {if (*p !=' ') { n=0; *q++ = *p; } else { n++; if (n==1) *q++ = *p; } } } //------------------------------------------------------ 10 void F10(char *p) { char *q; int cm; for (q=p,cm=0; *p !='\0'; p++) { if (p[0]=='*' && p[1]=='/') { cm--, p++; continue; } if (p[0]=='/' && p[1]=='*') { cm++, p++; continue; } if (cm==0) *q++ = *p; } *q=0; }
|
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 426. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |