code 47

توجه: این برنامه نیاز به فایل دارد که نام فایل را از کاربر خوانده (نام فایل را با پسوند txt. وارد کنید) .

مثال محتوای فایل : a.c.v…-s—f

این برنامه دارای تابع strtok است که با مشخص کردن کاراکترهای مد نظر ( . و – در این برنامه ) آن هارا حذف کرده و در هر ردیف کاراکتر جدید + کاراکتر های خط قبل را چاپ میکند.
:

#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
#include <stdio.h>
 
struct list {
	char  *val;
	struct list *next;
};
struct list *root;    
struct list *head;
FILE *f;
int node_counter=0;

int init_list();  
void print_list (struct list * head);
int list_add(char *string);
int open_file();
 
int main(){
	int i;
	i=init_list();
	open_file();
	print_list(head);
	return(0);
}  
 
 
int init_list(){ 
	node_counter = 0;
	root=(struct list *)malloc(sizeof(struct list));
	if(root==NULL ){
		printf("Init list failed\n");
		return(1);
	}
    root->next=NULL;
    return(0);
}


//insert a node at the end of the list
int list_add(char *string){
	struct list *curr;
	char *str;
	curr = (struct list *)malloc(sizeof(struct list));
	str= (char *)malloc(60*sizeof(char));
	strcpy(str,string);
	if(curr==NULL){
		printf("Adding to a list failed\n");
		return(1);
	}
	if(node_counter==0)
		head=curr;
	curr->val=str;
	//strcpy(curr->cstr.val,string);
	root->next=curr;
	curr->next=NULL;
	root=curr;
	node_counter++;
	return(0);
}

void print_list (struct list * head) {
    struct list * ptr =head;
    while(ptr!=NULL){
        printf("%s ", ptr->val);
        ptr=ptr->next;
    }
    printf("\n");
}

int stringtoken (char str[])
{
	char * pch;
	pch = strtok (str," ,.-");
	printf("  %s  ",pch);
	while (pch != NULL)
	{
		print_list(head);
		list_add(pch);
		pch = strtok (NULL, " ,.-");
	}
	return 0;
}

int open_file(){
	char fname[60];
	char line [ 128 ];
	printf("Give the name of the file\n");
	scanf("%s",fname);
	
	
	f=fopen(fname,"r");
	if ( f!= NULL )
	{
		while ( fgets ( line, sizeof line, f ) != NULL ) /* read a line */
		{
			stringtoken(line);    //split line to tokens
		}
		fclose ( f );
	}
	else
	{
		printf("ERROR OPENING THE FILE");
		return(1);
	}
	return 0;
}

code 46

توجه این برنامه نیاز به یک فایل دارد که در آن تعدادی حرف به طور پیوسته و بدون فاصله وارد شده باشد.

این برنامه ابتدا حروفی که در جایگاه زوج قرار دارد در یک لیست پیوندی قرار میدهد و بار دیگر حروفی را که در جایگاه فرد قرار دارد را در لیستی دیگر .سپس آن دو لیست را به طور جداگانه و در دو خط چاپ میکند.

اشاره گرهای first1 و first2 به منظور نگه داری آدرس خانه اول است .
:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int i=0;
struct node{
	char name=' ';
	struct node *link;
};

struct node* cnode(struct node *temp,char ch){
	struct node *next;
	next=(struct node *)malloc(sizeof(struct node));
	next->name=ch;

	if(i%2==0){
		next->link=temp->link;
		temp->link=next;
		return next;
	}
	else{
		next->link=temp->link;
		temp->link=next;
		return next;
	}	
}

int main(){
	struct node *first1,*first2,*temp1,*temp2;
	
	char ch;
	FILE *fp;
	fp=fopen("node2.txt","r");
	first1=(struct node *)malloc(sizeof(struct node));
	first2=(struct node *)malloc(sizeof(struct node));
	
	first1->link=NULL;
	temp1=first1;
	first2->link=NULL;
	temp2=first2;
	 
	 while(!feof(fp)){
	 	ch=getc(fp);
	 	if(i%2==0){
	 		temp1=cnode(temp1,ch);
		 }
	     else{
		 	temp2=cnode(temp2,ch);
		 }
	 i++;
	 }
	 
	 
	 temp1=first1;
	 temp2=first2;
	 while(temp1!=NULL){
	 	if(temp1==first1){
	 		temp1=temp1->link;
		 }
	 	printf("%c",temp1->name);
	 	temp1=temp1->link;
	 }
	 printf("\n");
	 while(temp2!=NULL)
	 {
	 	if(temp2==first2){
	 	temp2=temp2->link;
		 }
		printf("%c",temp2->name);
	 	temp2=temp2->link;
	 }
}

code 45

برنامه ای که ۵ حرف را از ورودی گرفته و هر کدام را داخل یک گره قرار میدهد.سپس یک دور آن ها را به صورت پیوسته و یک دور به صورت مرتب شده نمایش میدهد .
:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node
{
	char content=' ';
	node *next;
};
node* createnode(node*);//to create new nodes
void deletenode(node*);//to delete a node by comparing it's content
void show(node*,node*,node*);//to show nodes by priority
void sort(node*,node*,node*);//to sort datas by content value
int main()
{
	node *first,*last,*temp;
	first=(node*)malloc(sizeof(node));
	first->next=NULL;
	last = first;
	for(int i=0;i<5;i++)
	{
	 last =	createnode(last);
	}
	show(temp,first,last);
	sort(temp,first,last);
	show(temp,first,last);
}//end of main
//******************************
node* createnode(node  *last)
{
	node *temp;
	temp=(node*)malloc(sizeof(node));
	puts("\nEnter an character for new node's content:");
	temp->content=getche();
	temp->next=(*last).next;
	last->next=temp;
	return temp;
}//end of createnode
//******************************
void show(node *temp,node *first,node *last)
{
	temp=first;
	printf("\n");
	while(temp!=NULL)
	{
		if(temp==first)
		{
			temp=temp->next;
			continue;
		}
		printf("%c",temp->content);
		temp=temp->next;
	}
}//end of show
//******************************
void sort(node *temp,node *first,node *last)
{
	int count=0;
	temp=first;
	do
	{
		count++;
		temp=temp->next;
	}
	while(temp->next!=NULL);
	for(int j=0;j<=count;j++)
	{
		temp=first;
		do
		{
			if(temp->content > temp->next->content)
			{
				char i=temp->content;
				temp->content = temp->next->content;
				temp->next->content=i;
			}
			temp=temp->next;
		}
		while(temp->next!=NULL);
	}
}//end of sort

code 44

برنامه ای رشته عددی را از ورودی خوانده , آن را به مقدار عدددی تبدیل می کند.

(نکته ی این سوال در بخش پرسش و پاسخ جواب داده شده است).

(۶-۹)
:

#include <conio.h>
#include <stdio.h>
void ascii_to_int(int *, char *);
int main()
{
   int number ;
   char s[10] ;
   printf("\n enter numeric string:");
   gets(s) ;
   ascii_to_int(&number, s) ;
   printf(" numeric value is:%d", number) ;
   getch();
   return 0;
}
//**************************
void ascii_to_int(int *value, char *str)
{
  int sign = 1 ;
  *value = 0 ;
  while(*str == ' ') str++ ;
     if(*str== '-' || *str == '+')
	   sign = (*str ++ == '-') ? -1 : 1;
     while(*str)
	if((*str >= '0') && (*str <= '9'))
	    *value = (*value * 10) + (*str ++ -48) ;
	else {
	  printf("Watning :the <%c> is invalid character.\n", *str);
	  break ;
	}
     *value *=sign ;
}

code 43

برنامه ای که تعداد n عدد را از ورودی خوانده در آرایه پویا قرار داده و سپس آرایه را به تابع ارسال میکند .تابع , میانه اعداد موجود در آرایه را پیدا کرده و به برنامه بر میگرداند.

تابع pinput : خواندن عناصر آرایه از ورودی

تابع bubble : آرایه را مرتب می کند.

تابع median : اشاره گر به آرایه , طول آرایه , و متغیر مربوط به میانه عدد را گرفته , میانه را محاسبه میکند و در آن متغیر قرار می دهد.

تابع pout : عناصر آرایه را به خروجی میبرد.

(۶-۶)
:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void pinput(int *, int);
void bubble(int *, int);
void median(int *, int, float *);
void pout(int *, int);
int main()
{
  int n, i;
  int  *p;
  float mead;
  printf(" enter number of items(n):");
  scanf("%d", &n);
  p = (int *)malloc(n * sizeof(int));
  if(!p){
       printf(" aloocation failure!");
       getch();
       exit(1);
  }
  pinput(p, n);
  bubble(p, n);
  printf("\n sorted data are:");
  pout(p, n);
  median(p, n, &mead);
  printf("\n median = %5.2f", mead);
  getch();
  return 0;
}
//*****************************
void pinput(int  *p, int n)
{
  int i;
  for(i = 0; i < n; i ++){
     printf("enter number %d:", i + 1);
       scanf("%d", p + i);
  }
}
//*****************************
void bubble(int  *temp, int len)
{
   int i, j, item;
   for(i = len - 1 ; i > 0; i --)
	for(j = 0; j < i ; j++)
	  if(*(temp + j) > *(temp + j + 1)) {
	     item = *(temp + j);
	     *(temp + j) = *(temp + j + 1);
	     *(temp + j + 1) = item ;
	  }//end of if
}
//*************************
void median(int *x, int n, float *mead)
{
  if(n % 2 == 0)
       *mead =(float) (*(x + ((n - 1) / 2)) + *(x + (n / 2))) / 2;
  else
       *mead = *(x + (n - 1) / 2);
}
//****************
void pout(int *p, int n)
{
  int i;
  for(i = 0; i < n; i ++){
     printf("%3d",*(p+i));
  }
  printf("\n");
}