Примерно задание за второ контролно и поправителен изпит ПИК1
===============================================================
Продължителността
на контролната работа е два учебни часа – 90 минути.
Забранява се
използването
на електронни устройства – компютри, таблети, телефони.
Разрешава се ползването на материалите от лекциите както и 4
допълнителни страници (два листа) формат А4 написани от студента (не
ксероксни копия) с всякаква помощна информация. Контролната работа се
състои
от три
части.
Първата
част проверява усвояването на операции, управляващи конструкции,
извикване на
функции и връщане на резултати, класове памет, работа с указатели и
масиви.
Студентът разчита записан код, в който на всеки ред е записан пример с
някои от
проверяваните елементи и показва резултатите от изпълнението му.
Необходимите
пресмятания за получаване на резултата задължително се правят в писмен
вид и се
прилагат към резултатите от изпълнение на кода. Ако
те не бъдат приложени, частта се счита за
неизпълнена. Първата част се счита за изпълнена на 50%, ако половината
от
отговорите са верни и обосновани със съответните пресмятания.
Втората
част проверява възможностите на студентите за разчитане на задание,
алгоритмизиране и кодиране на задача с елементарен алгоритъм
–
намиране на
сума, максимално, минимално число, проверка за четни и нечетни числа.
Оценява
се усвояването на работата с текстови файлове – начини на
отваряне, прочитане,
записване, работа с форматни спецификации, решенията взимани от
студента за избор
на начина на четене и запис. Заданието изисква създаването на две
функции
(освен функцията main() ) с точно определени аргументи,
едната от които
изисква четене и запис на символи, а втората – на числови
стойности. Втората
част се счита за изпълнена на 50%, ако едната от двете функции е
правилно
написана и правилно извикана за изпълнение.
Третата
част оценява способността на студента да разпознава основните
управляващи
структури и тяхното взаимодействие, да различава и кодира различните
видове
цикли. В нея се задава блокова схема, която включва две управляващи
структури.
От студента се изисква да ги разпознае и кодира на езика С като част от
програма, без да се търси смисъла на алгоритъма, декларация на
променливите и цялостно
оформяне на програмата. Частта се счита за изпълнена на 50%, ако
правилно е
разпозната и кодирана една от двете управляващи структури.
Общата
оценка се оформя на базата на процента на изпълнението на заданието.
Оценява се
процентното изпълнение на всяка част и се умножава по тежестта на
отделните
части. Полученото процентно изпълнение се оценява по следния начин:
среден
3:
50% изпълнение
добър
4 : 65%
изпълнение
мн.
добър 5:
80%
изпълнение
отличен
6:
90% изпълнение
Тежестта
на отделните части в оценяването е: първа част – 35%, втора
част
– 45%, трета
част 20%.
1. Kакво ще изведе следната програма (в черновата трябва
да личи как сте получили резултатите):
#include <stdio.h> static float w=3.9; short f(short a, short *b) {a++; (*b)++; w++; printf ("13: %d %d %4.2f\n",a,*b,w);return a-*b;} int main(){ short x, y, z, arr[]={4,8,0,6}, *p=arr; char m[]="dcrfvtgb",*pc; y=2;z=3; x = (++y !=z); printf("1: %d %d %d\n",x,y,z); x=y=6; x *=(y=5); printf("2: %d %d\n",x,y); x=0;y=2;z=7; printf("3: %d %d %d %d\n",!x||y&&!z, x,y,z); x=5;y=3; printf("4: %d %d %d\n",x, y, x<y? x:y); y=0; if(y) x=7;else x=5; printf("5: %d %d\n",x,y); y=8;if(z=(y++>8))x=9;else x=0; printf("6: %d %d %d\n",x,y,z); x=y=5; while(y++<5) x+=y; printf("7: %d %d\n",x,y); for(x=y=5;y<7;x=y++) printf("8:%d %d\n",x,y); for(x=2,y=5;y>=1;x++,y/=3); printf("9: %d %d\n",x,y); printf("10: %d %d\n",p[2], *(arr+1)); x=y=3; z=f(x,&y); printf("11:%d %d %d %4.2f\n", x,y,z,w) ; for(x=y=z=10 ; z-- >9 ;x*=y);printf("12: %d %d %d\n",x,y,z); for (pc=m; *pc ; pc++) (*pc)--; printf("14: %s %c\n",m+2, *(m+1)); return 0; } |
|
2. В текстовия файл D:\Tt\Kapa.txt са
въведени цели числа, записани по едно на ред. Напишете програма на
езика С, с три функции: a)int main(), която отваря файла, извиква другите две функции, извежда получения резултат на екрана и затваря файла; b)int max(FILE *) за изчисляване на най-голямото отрицателно число във файла; c)void cpy2(FILE *) за копиране на файла в зададен от потребителя файл като навсякъде цифрата 2 се заменя с цифрата 4. |
#include <stdio.h> #include <string.h> int max(FILE *); void cpy2(FILE *); int main(){ FILE *f; int mn; if( !(f=fopen("D:\\Tt\\Kapa.txt","rt"))){ printf("the file does not exist\n"); return 1; } if(!(mn=max(f))) printf("there is no negatives numbers in the file \n"); else printf ("the max negative number is %d\n",mn); rewind(f); cpy2(f); fclose(f); return 0; } int max(FILE *inp){ int next,maxneg=0; for(;fscanf(inp,"%d",&next)!= EOF;){ if(next <0){ if(!maxneg) maxneg=next; else if(maxneg<next) maxneg=next; } } return maxneg; } void cpy2(FILE *inp){ FILE *outp; char name[51]; int next; printf ("name of the new file: "); if(!fgets(name,50,stdin)){ printf("Error in the new file name 1"); return; } name[strlen(name)-1]=0; /* remove '\n' in the string */ if(!(outp=fopen(name,"w"))){ printf("Error in the new file name 2"); return; } for(;(next=fgetc(inp))!= EOF;){ if (next == '2') next = '4'; if(fputc(next,outp)==EOF){ printf("Error - in file writing"); return; } } fclose(outp); } |
|
m=c; do{ if(a>b){ if(!(a>c)) z[m]=a; } else{ if(b>c) break; else z[m]=b; } k[i]=m++; }while(m<b); |
=============================================
Втори пример:
===============================================================
1. Опишете съвсем точно какво ще изведе следната програма:
#include <stdio.h>
static float w=3.4;
short f(short a, short *b) {a++; (*b)++; w++;
printf ("13: %d %d %4.2f\n",a,*b,w);return a+*b;}
int main(){
short x, y, z, arr[]={1,5,7,3}, *p=arr;
char m[]="successful",*pc;
y=z=3; x = (y++ !=z); printf("1: %d %d %d\n",x,y,z);
x=y=3; x *=(y=2); printf("2: %d %d\n",x,y);
x=1;y=0;z=4; printf("3: %d %d %d %d\n",x||y&&!z, x,y,z);
x=2;y=1; printf("4: %d %d %d\n",x, y, x<y? x:y);
y=5; if(y) x=4;else x=2; printf("5: %d %d\n",x,y);
y=3;if(z=(y++>5))x=5;else x=3;
printf("6: %d %d %d\n",x,y,z);
x=y=2; while(y++<2) x+=y; printf("7: %d %d\n",x,y);
for(x=y=2;y<3;x=y++) printf("8:%d %d\n",x,y);
for(x=1,y=7;y>=1;x++,y/=3); printf("9: %d %d\n",x,y);
printf("10: %d %d\n",p[1], *(arr+2));
x=y=1; z=f(x,&y); printf("11:%d %d %d %4.2f\n", x,y,z,w) ;
for(x=y=z=10 ; z-- >0 ;x*=y);printf("12: %d %d %d\n",x,y,z);
x=2;y=4;f(x,&y);printf("14: %d %d\n",x,y);
for (pc=m; *pc ; pc++) (*pc)++;
printf("15: %s %c\n",m+2, *(m+1));
return 0;
}
2. В текстовия файл A:\Test\Sign.txt са въведени цели числа, записани по едно на ред.
Напишете програма на езика С, с 3 функции
a)int main(), която отваря файла извиква другите 2 функции и затваря файла
b)int avrg(FILE *) за извеждане на екрана и в зададен от потребителя файл средно-аритметичното на положителните числа
c)void dig6(FILE *) за извеждане на екрана, колко пъти се среща цифрата 6 във зададения файл.
3.Преведете на езика С следният отрязък от блок-схема:
![]() |
========================================================