c primer plus(第六版) 第十五章答案(vscode编译运行通过)
作者:互联网
1.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
int strToNum(char *str)
{
int num = 0;
while(*str)
{
num *= 2;
num += *str - '0';
str++;
}
return num;
}
int main(void)
{
char * pbin = "01001001";
printf("The %s's result is %d\n", pbin, strToNum(pbin));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#define SIZE 33
void showBstr(const char *str)
{
int i = 0;
while(str[i])
{
putchar(str[i]);
if((++i % 4 == 0) && str[i])
putchar(' ');
}
}
void prinBinUseStr(int num)
{
char temp[SIZE];
for(int i = SIZE - 2; i >= 0; i--, num >>= 1)
{
temp[i] = (01 & num) + '0';
}
temp[SIZE - 1] = '\0';
showBstr(temp);
}
void strToNum(char *str1, char *str2)
{
int num1 = 0;
int num2 = 0;
int temp;
while(*str1)
{
num1 *= 2;
num1 += *str1 - '0';
str1++;
}
while(*str2)
{
num2 *= 2;
num2 += *str2 - '0';
str2++;
}
printf("The ~%s is: ", str1);
prinBinUseStr(~num1);
putchar('\n');
printf("The ~%s is: ", str2);
prinBinUseStr(~num2);
putchar('\n');
printf("The %s & %s is: ", str1, str2);
prinBinUseStr(num1 & num2);
putchar('\n');
printf("The %s | %s is: ", str1, str2);
prinBinUseStr(num1 | num2);
putchar('\n');
printf("The %s ^ %s is: ", str1, str2);
prinBinUseStr(num1 ^ num2);
putchar('\n');
}
int main(int argc, char *argv[])
{
char num1[SIZE];
char num2[SIZE];
if(argc < 3)
{
puts("The parameter number is too small. Check the parameter number");
exit(EXIT_FAILURE);
}
else
{
strcpy(num1, argv[1]);
strcpy(num2, argv[2]);
}
strToNum(num1, num2);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#define SIZE 33
void showOpenBit(int num)
{
int count = 0;
int temp = num;
for(int i = 31; i >= 0; i--, temp >>= 1)
{
if(temp & 01 == 1)
{
count++;
}
}
printf("There are %d open bits in %d\n", count, num);
}
void numTostr(int num, char *str)
{
for(int i = 31; i >= 0; i--, num >>= 1)
{
str[i] = (num & 01) + '0';
}
str[32] = '\0';
}
int main(int argc, char *argv[])
{
int num;
char num1[SIZE];
printf("Please input a num:(and input q to quit)");
while(scanf("%d", &num) == 1)
{
numTostr(num, num1);
printf("%s\n", num1);
showOpenBit(num);
printf("Please input a num:(and input q to quit)");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#define SIZE 33
void numTostr(int num, char *str)
{
for(int i = 31; i >= 0; i--, num >>= 1)
{
str[i] = (num & 01) + '0';
}
str[32] = '\0';
}
int TheNumPos(int num, int pos)
{
int mask = 1 << pos;
if((num & mask) == mask)
return 1;
else
return 0;
}
int main(int argc, char *argv[])
{
int num1, pos;
char num2[SIZE];
printf("Please input two num:(and input q to quit)");
while(scanf("%d %d", &num1, &pos) == 2)
{
numTostr(num1, num2);
printf("%s\n", num2);
if(TheNumPos(num1, pos) == 1)
{
printf("In the %d, at %d pos is 1\n", num1, pos);
}
else
{
printf("In the %d, at %d pos is 0\n", num1, pos);
}
printf("Please input two num:(and input q to quit)");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#define SIZE 33
void numTostr(int num, char *str)
{
for(int i = 31; i >= 0; i--, num >>= 1)
{
str[i] = (num & 01) + '0';
}
str[32] = '\0';
}
unsigned int rotate_1(unsigned int x, int pos)
{
size_t size = CHAR_BIT * sizeof(unsigned int);
unsigned int num;
pos = pos % size;
num = x >> (size - pos);
num |= x << pos;
return num;
}
int main(int argc, char *argv[])
{
int pos;
unsigned int num1, num2;
char temp1[SIZE], temp2[SIZE];
printf("Please input two num:(and input q to quit)");
while(scanf("%u %d", &num1, &pos) == 2)
{
num2 = rotate_1(num1, pos);
numTostr(num1, temp1);
numTostr(num2, temp2);
printf("The %s rotate %d is %s\n", temp1, pos, temp2);
printf("Please input two num:(and input q to quit)");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#define SIZE 33
typedef struct fontFormat{
unsigned int id: 8;
unsigned int size: 7;
unsigned int allgnment: 2;
bool overstriking: 1;
bool italic: 1;
bool underline: 1;
}seeting;
#define left 0
#define center 1
#define right 2
#define on true
#define off false
void showInfor(seeting front)
{
printf("%3s %4s %9s %3s %3s %3s\n","ID", "SIZE", "ALIGNMENT", "B", "I", "U");
printf("%3d %4d ",front.id,front.size);
switch(front.allgnment)
{
case left: printf(" %-9s", "left");break;
case center: printf(" %-9s", "center");break;
case right: printf(" %-9s", "right");break;
}
switch(front.overstriking)
{
case on: printf(" %3s","on");break;
case off: printf(" %3s","off");break;
}
switch(front.italic)
{
case on: printf(" %3s","on");break;
case off: printf(" %3s","off");break;
}
switch(front.underline)
{
case on: printf(" %3s","on");break;
case off: printf(" %3s","off");break;
}
}
void eatLine(void)
{
while(getchar() != '\n')
continue;
}
int getChoice(char *arr)
{
int ch;
ch = getchar();
eatLine();
while(strchr(arr,ch) == NULL)
{
printf("Please input %s\n", arr);
ch = getchar();
eatLine();
}
return ch;
}
int menu(void)
{
int ch;
printf("\n");
printf("f)change font s)change size a)change alignment\n");
printf("b)toggle bold i)toggle italic u)toggle underline\n");
printf("q)quit\n");
ch = getChoice("fsabiuq");
return ch;
}
void changeAlignment(seeting *pt)
{
int ch;
printf("Select alignment:\n");
printf("l)left c)center r)right\n");
ch = getChoice("lcr");
switch(ch)
{
case 'l':pt->allgnment = left; break;
case 'c':pt->allgnment = center; break;
case 'r':pt->allgnment = right; break;
}
}
void showMenu(seeting *pt)
{
int ch;
unsigned int temp;
showInfor(*pt);
putchar('\n');
putchar('\n');
while((ch = menu()) != 'q')
{
switch(ch)
{
case 'f':printf("Enter font ID(0-255):"); scanf("%u",&temp);eatLine();temp &= 0xff;pt->id = temp; break;
case 's':printf("Enter font size(0-127):"); scanf("%u", &temp);eatLine();temp &= 0x7f;pt->size = temp; break;
case 'a':changeAlignment(pt); break;
case 'b': pt->overstriking = !pt->overstriking; break;
case 'i': pt->italic = !pt->italic; break;
case 'u': pt->underline = !pt->underline; break;
}
showInfor(*pt);
putchar('\n');
putchar('\n');
}
}
int main(int argc, char *argv[])
{
seeting front = {1, 12, left, off, off, off};
showMenu(&front);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#include <limits.h>
#define LEFT 0x00000
#define CENTER 0x08000
#define RIGHT 0x10000
#define SIZE_SHIFT 8
#define ID_MASK 0xff
#define SIZE_MASK 0x7f00
#define AllIGN_MASK 0x18000
#define OVERSTRIKING_ON 0x20000
#define ITALIC_ON 0x40000
#define UNDERLINE_ON 0x80000
#define OFF 0x00000
typedef struct{
unsigned int id:8;
unsigned int size:7;
unsigned int allign:2;
bool overstriking:1;
bool italic:1;
bool underline:1;
}setting;
void show_result(unsigned long);
int show_menu(void);
void change_font(unsigned long *);
void change_size(unsigned long *);
void change_alignment(unsigned long *);
void toggle_bold(unsigned long *);
void toggle_italic(unsigned long *);
void toggle_underline(unsigned long *);
int main(int argc,char *argv[])
{
int ch;
unsigned long font = 1 | (12) << SIZE_SHIFT | LEFT;
show_result(font);
while((ch = show_menu()) != 'q')
{
switch(ch)
{
case 'f':change_font(&font);break;
case 's':change_size(&font);break;
case 'a':change_alignment(&font);break;
case 'b':toggle_bold(&font);break;
case 'i':toggle_italic(&font);break;
case 'u':toggle_underline(&font);break;
}
putchar('\n');
show_result(font);
}
printf("end");
printf("\n");
system("pause");
return 0;
}
void show_result(unsigned long font)
{
printf("ID SIZE ALIGNMENT B I U\n");
printf("%2d %4d",font & ID_MASK, ((font & SIZE_MASK) >> 8));
switch(font & AllIGN_MASK)
{
case LEFT:printf(" left");break;
case CENTER:printf(" center");break;
case RIGHT:printf(" right");break;
default:break;
}
switch(font & OVERSTRIKING_ON)
{
case OVERSTRIKING_ON:printf(" on");break;
case OFF:printf(" off");break;
default:break;
}
switch(font & ITALIC_ON)
{
case ITALIC_ON:printf(" on");break;
case OFF:printf(" off");break;
default:break;
}
switch(font & UNDERLINE_ON)
{
case UNDERLINE_ON:printf(" on\n");break;
case OFF:printf(" off\n");break;
default:break;
}
}
void eatline(void)
{
while(getchar() != '\n')
continue;
}
int get_choose(const char *p)
{
int ch;
ch = getchar();
if(strchr(p,ch) == NULL)
{
printf("Please input right option(%s)\n",p);
eatline();
ch = getchar();
}
eatline();
return ch;
}
#define SIZE 7
int show_menu(void)
{
const char *p[SIZE] = {
"change foot","change size","change alignment","toggle bold","toggle italic","toggle underline","quit",
};
const char data[SIZE + 1] = "fsabiuq";
for(int i = 0; i < SIZE; i++)
{
i % 3 == 0?printf("\n"):printf(" ");
printf("%c)%-17s",data[i],p[i]);
}
putchar('\n');
return get_choose(data);
}
void change_font(unsigned long *p)
{
int font_id;
printf("Enter font ID:(0~255):");
while(scanf("%d",&font_id) != 1)
{
printf("Please input a number(0-255):");
scanf("%*s");
}
eatline();
font_id &= 0xff;
*p &= 0xfff00;
*p |= font_id;
}
void change_size(unsigned long *p)
{
int font_size;
printf("Enter font size:(0~127):");
while(scanf("%d",&font_size) != 1)
{
printf("Please input a number(0-127):");
scanf("%*s");
}
eatline();
font_size &= 0x7f;
*p &= 0xf80ff;
*p |= font_size << SIZE_SHIFT;
}
#define SIZE2 3
int show_alignment_menu(void)
{
const char *data1[SIZE2] = {"left","center","right"};
const char data2[SIZE2 + 1] = "lcr";
for(int i = 0; i < SIZE2; i++)
{
printf("%c)%-8s",data2[i],data1[i]);
}
putchar('\n');
return get_choose(data2);
}
void change_alignment(unsigned long *p)
{
int ch;
ch = show_alignment_menu();
switch(ch)
{
case 'l':*p &= 0xE7fff;*p |= LEFT;break;
case 'c':*p &= 0xE7fff;*p |= CENTER;break;
case 'r':*p &= 0xE7fff;*p |= RIGHT;break;
default:break;
}
}
void toggle_bold(unsigned long *p)
{
*p ^= OVERSTRIKING_ON;
}
void toggle_italic(unsigned long *p)
{
*p ^= ITALIC_ON;
}
void toggle_underline(unsigned long *p)
{
*p ^= UNDERLINE_ON;
}
标签:case,break,vscode,第六版,int,num,plus,printf,include 来源: https://blog.csdn.net/qq_41701950/article/details/120081866