/* Дано предложение. Создать новое предложение,
Удалив из исходного знаки пунктуации и лишние пробелы. */
#include<string.h>
#include<stdio.h>
void main(void){
char s[120], s2[120]="", *p, d[]=" \t.,:;!?-";
p=strtok(gets(s),d);
while(p!=NULL){
strcat(strcat(s2,p)," ");
p=strtok(NULL,d);
}
if(*s2)
s2[strlen(s2)-1]=0;
puts(s2);
}
/* Дано предложение. Создать массив из встречающихся в нем слов. */
#include <string.h>
#include <stdio.h>
void main(void) {
char s1[120], s2[120]="",*razd=" \t,.",*d[60],*p;
int i,k=0;
p=strtok(gets(s1),razd); //исходное предложение разрушается
while(p!=NULL) {
for(i=0;i<k;i++)
if(!strcmp(p,d[i]))break;
if(i==k) d[k++]=p;
p=strtok(NULL,razd);
}
for(i=0;i<k;puts(d[i++]);
}
/* Дано предложение. Реверсировать каждое его слово. */
#include <string.h>
#include <stdio.h>
void main(void) {
char s[120], s2[120], d[]=" \t,.", *p, lenp;
strcpy(s2,gets(s));
p=strtok(s,d);
while(p!=NULL){
lenp=strlen(strrev(p));
p[lenp]=s2[p-s+lenp];
p=strtok(NULL,d);
}
puts(s);
}
/* Дано предложение. Удалить из него лидирующие и
завершающие пробелы и знаки пунктуации. */
#include<string.h>
#include<stdio.h>
void main(void){
char s[80], *s2, d[]=" \t.,:;!?-";
gets(s);
s2=s+strspn(s,d);
if(*s2)
strrev(s2)[strlen(s2)-strspn(strrev(s2),d)]=0;
puts(s2);
}
void swap(int *a, int *b) {
int c=*a;
*a=*b; *b=c;
}
Вычислить max2 |a|i=1,na+ max2 |b|i=1,nb.
int max(int *x, int nx) {
}
Вычислить (max2 |a|i=1,n+ max2 |b|i=1,m)/(kmaxa+kmaxb+1).
int max(int *x, int n, int *kmaxx) {
}
Вычислить длину окружности.
float pi=4*atan(1);
float CircleLength(float r){ //контроль r в вызывающей функции
return 2*pi*r;
}
if(r1<=0)
... //обработка ошибки
else
cl= CircleLength(r1);
float CircleLength(float r, int *error){ //контроль r в вызываемой функции
*error = r>0;
return 2*pi*r;
}
int err; // int *err; ERROR!!!
cl= CircleLength(r1, &err);
if(err==0)
... //обработка ошибки
else
... //OK
int CircleLength(float r, float *res){ //контроль r в вызываемой функции
*res= 2*pi*r;
return r>0;
}
float cl;
if(CircleLength(r1, &cl)==0)
... //обработка ошибки
else
... //OK
float CircleLength(float r){ //контроль r в вызываемой функции
return r<=0?r: 2*pi*r;
}
float cl;
if((cl=CircleLength(r1))<=0)
... //обработка ошибки
else
... //OK
int error;
float CircleLength(float r){ //контроль r в вызываемой функции
error= r<=0;
return 2*pi*r;
}
//можно как в случае 1 или
cl= CircleLength(r1);
if(error==1)
... //обработка ошибки
else
... //OK
Вычисление производной в точке x0 от функции, задаваемой указателем на Си–функцию
#include<stdio.h>
#include<math.h>
double fderiv(double (*f)(double),double x0, int dig) {
double eps,fx0,dx=0.1,df1,df0;
eps=pow(10.,-dig-1);
fx0=f(x0);
df1=(f(x0+dx)-fx0)/dx;
do {
df0=df1;
dx*=0.5;
df1=(f(x0+dx)-fx0)/dx;
} while(fabs(df1-df0)>eps);
return df1;
}
void main(void) {
// double f1(double x);
double x=1; int dig=4;//number of digits after decimal point
char format[20];
// scanf("%f%d",&x0,&dig);
sprintf(format,"df(%c.%df)=%c.%df\n",'%',dig,'%',dig);
printf(format,x,fderiv(exp,x,dig));
}
double f1(double x) {
return x*x+1;
}
Функции с переменным количеством аргументов
char *supercat(char *s, ...) {
char **ptr=&s;
*s=0;
while(**++ptr)
strcat(s, *ptr);
}
char s[80];
supercat(s,"Fr. ", "Skaryna ", "University", "");
Динамическое распределение памяти
в модели Small
void *malloc(unsigned size); //в противном случае NULL
void *calloc(unsigned n, unsigned size);
void *realloc(void *block, unsigned size);
void free(void *block);
unsigned coreleft(void);
в модели Large размеры типа long unsigned
int n, x[n]; //error
int *x, n;
scanf(“%d”,&n);
if((x=(int*)malloc(n*sizeof(int)))==NULL) {
puts(“Error!”); return;
}
int **a, n, i;
if((a=(int**)malloc(n*sizeof(int*)))==NULL) {...}
for(i=0; i<n; i++)
if((a[i]=(int*)malloc(n*sizeof(int)))==NULL) {...}
int **a, *b, n, i;
long z=(long)n*n*sizeof(int);
if(z>0xffffl) {...}
if((b=(int*)malloc(z))==NULL) {...}
if((a=(int**)malloc(n*sizeof(int*)))==NULL) {free(b);...}
for(i=0; i<n; i++)
a[i]=b+i*n;
}
//добавление элементов в список
//условие окончания – ввод неправильного элемента или нет памяти
void (*insert)(Blist **ph, Blist *p);
void add(Blist **ph) {
Blist *p;
while((p=input())!=NULL)
(*insert)(ph,p);
}
void insertfirst(Blist **ph, Blist *p) { p->next=*ph; *ph=p; } |
void insertlast(Blist **ph, Blist *p) {
Blist *q;
if(*ph==NULL)
*ph=p;
else {
for(q=*ph; q->next!=NULL; q=q->next);
q->next=p;
}
}
void insertlast2(Blist **ph, Blist *p) {
Blist **qq;
for(qq=ph; *qq!=NULL; qq=&((*qq)->next));
*qq=p;
}
//вставка с сохранением упорядоченности элементов списка
void insertsort(Blist **ph, Blist *p); //самостоятельно
//вставка после элемента, совпадающего с ключом, или в конец списка
int Bcmp(Book *b1, Book *b2); //0 при b1==b2, <0 при b1<b2, >0 при b1>b2
void insertafter(Blist **ph, Blist *p, Book *b) {
Blist *q;
if(*ph==NULL)
*ph=p;
else { for(q=*ph; q->next!=NULL; q=q->next) if(Bcmp(&(q->b),b)==0) break; p->next=q->next; q->next=p; } } |
//вставка перед элементом, совпадающим с ключом, или в конец списка
void insertbefore(Blist **ph, Blist *p, Book *b) {
Blist **qq;
for(qq=ph; *qq!=NULL; qq=&((*qq)->next)) if(!Bcmp(&((*qq)->b),b)) break; p->next=*qq; *qq=p; } |
//удаление элемента, совпадающего с ключом
void remove(Blist **ph, Book *b) {
Blist *q, *prev=NULL;
for(q=*ph; q!=NULL; prev=q, q=q->next)
if(!Bcmp(&(q->b),b))
break;
if(q!=NULL) {
if(prev==NULL) //удаляется начальный элемент списка
*ph=q->next;
else
prev->next=q->next;
free(q);
}
}
void remove2(Blist **ph, Book *b) {
Blist **qq, *q;
for(qq=ph; *qq!=NULL; qq=&((*qq)->next))
if(!Bcmp(&((*qq)->b),b))
break;
if(*qq!=NULL) { q=*qq; *qq=(*qq)->next; free(q); } } |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.