c和指针第五章编程练习代码

xiaoxiao2021-02-28  10

1.

#include<stdio.h> int main() { char ch ; while ( ( ch = getchar() ) != '\n' ) { if ( ch >= 'A' && ch <= 'Z' ) ch += 'a' - 'A' ; putchar(ch) ; } }

2.

#include<stdio.h> int main() { int ch ; while ( ( ch = getchar() ) != '\n' ) { if ( ch >= 65 && ch <= 90 ) ch = ch < 78 ? ch + 13 : ch - 13 ; if ( ch >= 97 && ch <= 122 ) ch = ch < 110 ? ch + 13 : ch - 13 ; putchar(ch) ; } }

3.返回值有问题不知该怎么解决

主函数

#include<stdio.h> #include<stdlib.h> unsigned int reverse_bits ( unsigned int value ) ; int main() { unsigned int value ; char str[100] ; scanf ( "%d", &value ) ; itoa ( value, str, 2 ) ; printf ( "%s\n", str ) ; value = reverse_bits ( value ) ; itoa ( value, str, 2 ) ; printf ( "%s\n", str ) ; printf ( "%d\n", value ) ; }

自己写的

unsigned int reverse_bits ( unsigned int value ) { value = ~value ; value = value << 26 ;//32位 return value ;

课后答案

unsigned int reverse_bits ( unsigned int value ) { unsigned int answer ; unsigned int i ; answer = 0 ; for ( i = 1; i != 0; i <<= 1 ) { answer <<= 1 ; if ( value & 1 ) answer |= 1 ; value >>= 1 ; } return answer ; }

4.

#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1000 void set_bit ( char bit_array[], unsigned bit_number ) ; void clear_bit ( char bit_array[], unsigned bit_number ) ; void assign_bit ( char bit_array[], unsigned bit_number, int value ) ; int text_bit ( char bit_array[], unsigned bit_number ) ; int main() { char ch ; int value, num, len ; unsigned bit_number ; char bit_array[MAX] ; printf ( "请输入num和value的值(value为1或0):" ) ; scanf ( "%d %d", &num, &value ) ; a: if ( value != 0 && value != 1 ) { printf ( "请重新输入value的值(value为1或0):" ) ; scanf ( "%d", &value ) ; goto a ; } itoa ( num, bit_array, 2 ) ; //用itoa函数将数转换成二进制并存到bit_array数组中 len = strlen ( bit_array ) ; //数组长度 printf ( "请输入bit_number(bit_number小于%d):", len + 1 ) ; //输入要操作的位 scanf ( "%d", &bit_number ) ; b: if ( bit_number < 0 || bit_number > len ) { printf ( "请重新输入bit_number(bit_number小于%d):", len + 1 ) ; scanf ( "%d", &bit_number ) ; goto b ; } set_bit ( bit_array, bit_number ) ; clear_bit ( bit_array, bit_number ) ; assign_bit ( bit_array, bit_number, value ) ; printf ( "操作之后:%d\n", text_bit ( bit_array, bit_number ) ) ; return 0 ; } void set_bit ( char bit_array[], unsigned bit_number ) //置1 { printf ( "操作之前:%s\n", bit_array ) ; bit_array[bit_number-1] = '1' ; //数组内存储的是字符所以用'1' printf ( "操作之后:%s\n", bit_array ) ; } void clear_bit ( char bit_array[], unsigned bit_number )//置0 { printf ( "操作之前:%s\n", bit_array ) ; bit_array[bit_number-1] = '0' ; printf ( "操作之后:%s\n", bit_array ) ; } void assign_bit ( char bit_array[], unsigned bit_number, int value ) { printf ( "操作之前:%s\n", bit_array ) ; if ( value == 0 ) bit_array[bit_number-1] = '0' ; else bit_array[bit_number-1] = '1' ; printf ( "操作之后:%s\n", bit_array ) ; } int text_bit ( char bit_array[], unsigned bit_number ) { int bour ; if ( bit_array[bit_number-1] != 0 ) bour = 1 ; else bour = 0 ; return bour ; }

5.自己写的,关于位的知识看到一篇文章写得很细,推荐给大家点击打开链接

#include<stdio.h> int store_bit_field ( int orginal_value, int value_to_store, unsigned starting_bit, unsigned ending_bit ) ; int main() { unsigned num ; int orginal_value ; int value_to_store ; unsigned starting_bit ; unsigned ending_bit ; printf ( "请输入:") ; scanf ( "%x %x %d %d", &orginal_value, &value_to_store, &starting_bit, &ending_bit ) ; num = store_bit_field ( orginal_value, value_to_store, starting_bit, ending_bit ) ; printf ( "0x%x", num ) ; return 0 ; } int store_bit_field ( int orginal_value, int value_to_store, unsigned starting_bit, unsigned ending_bit ) { unsigned int mask ; unsigned int num, unmask ; unsigned int i = 31 - starting_bit ;    //32位 mask = ( ~0 << ending_bit) & ( ~0 >> i) ; //创建掩码 unmask = ~mask ; //掩码反码 unmask &= orginal_value ; //用反码对原值执行位AND操作 mask = mask & (value_to_store<<ending_bit) ;//新值左移与源码执行位AND操作 num = mask | unmask ; //结果值与反码进行位OR操作 return num ; }

网上找的,用循环建掩码学到了哈哈

#include <stdio.h> int store_bit_field(int original_value, int value_to_store, unsigned starting_bit,unsigned ending_bit); int main(void) { printf("0x%x\n",store_bit_field(0x0,0x1,4,4)); printf("0x%x\n",store_bit_field(0xffff,0x123,15,4)); printf("0x%x\n",store_bit_field(0xffff,0x123,13,9)); return 0; } int store_bit_field(int original_value, int value_to_store, unsigned starting_bit,unsigned ending_bit) { int value; int i = ending_bit; int unmask = 0; int mask = 0; int num = starting_bit - ending_bit + 1; while(num != 0){ mask <<= 1; mask |= 1; num--; } while(i != 0){ i--; mask <<= 1; } unmask = ~mask; original_value &= unmask; i = ending_bit; while(i != 0){ i--; value_to_store <<= 1; } value = value_to_store & mask; value |= original_value; return value; }
转载请注明原文地址: https://www.6miu.com/read-2650219.html

最新回复(0)