Приветствую Вас Гость | RSS

Язык программирования С

Суббота, 04.05.2024, 04:34
Главная » 2010 » Март » 6 » 1.5.3. Подсчет строк. Упражнение 1.10.
19:58
1.5.3. Подсчет строк. Упражнение 1.10.

Упражнение 1.10. Напишите программу для копирования входного потока в выходной с заменой знаков табуляции на \t, символов возврата назад (Backspace) на \b, а обратных косых черт - на \\. Это сделает табуляции и символы возврата легко читаемыми в потоке.

/* замена знаков табуляции на \t, символов возврата назад на \b, обратных косых черт на \\ */

#include "stdafx.h"

int main()
{

int c;

while ((c = getchar()) != EOF) {

/* если c - табуляция, печатаем \t */
if(c == '\t')

printf("\\t");

/* если c - символ возврата назад, печатаем \b */
if(c == '\b')

printf("\\b");

/* если c - обратная косая черта, печатаем \\ */
if(c == '\\')

printf("\\ \b\\");

if(c != '\t' && c != '\b' && c != '\\')

putchar(c);

}

}

Результат выполнения:

Замена
Просмотров: 2967 | Добавил: brainfrog | Теги: копирование, программа, табуляция, упражнение, пробел, замена | Рейтинг: 5.0/4
Всего комментариев: 1
1 rafter  
0
Упражнение 2.6.
Напишите функцию setbits (x,p,n,y) так, чтобы она возвращала 
аргумент х, в котором п битов, начиная с позиции р, равны п крайним правым битам  
аргумента у, а остальные биты не тронуты.


Код
#include <stdio.h>
#define MAXNUM 0X11

unsigned setbits(unsigned x, int p, int n, unsigned y);

int bin_to_dec(char num[]);

int main(){
      
     int x = bin_to_dec("0000100000000000");
     int y = bin_to_dec("00000011");
     int p=7;
     int n=4;
      
     x=setbits(x,p,n,y);    
              
     printf("%d\n", x);
     return 0;
}

unsigned setbits(unsigned x, int p, int n, unsigned y){
     return x | (y&~(~0<<n))<<(p+1-n);
}

int bin_to_dec(char num[]){

     int i,j;
     for(i=0; num[i]!='\0' ; ++i);

     char temp[MAXNUM]="8421842184218421";    
     char  sum[MAXNUM]="0000000000000000";
      
     for(j=MAXNUM-1; i>=0; i--, j--){
         sum[j]=num;
     }

     for(j=0; j<MAXNUM-1; j++){        
         if(sum=='1'){
             sum=temp;         
         }         
     }
      
     int b1, b2, b3, b4;
     b1=b2=b3=b4=0;
     int buf=0;
     for(int i=12; i<16; i++){
         if(sum!='0'){
            buf=sum-'0';
            b1+=buf;
         }
     }
   
     buf=0;
      
     for(int i=8; i<12; i++){
         if(sum!='0'){
            buf=sum-'0';
            b2+=buf;
         }
     }
   
     buf=0;

     for(int i=4; i<8; i++){
         if(sum!='0'){
            buf=sum-'0';
            b3+=buf;
         }
     }
   
     buf=0;

     for(int i=0; i<4; i++){
         if(sum!='0'){
            buf=sum-'0';
            b4+=buf;
         }
     }
      
     b4<<=12;    
     b3<<=8;      
     b2<<=4;    
     
     int result = (b4 | b3 | b2 | b1);
     
     return result;
}[/j][/i]

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]