汉字依然不能显示……
继续实践例程与做练习,发现我的电脑在使用\a后真的不会发出声音。还会有什么不一样的地方呢?
哎呀!!!被作业给难住了,一不小心就漏打卡了,赶紧先补交下作业。
前四题的答案公布
exam1-1
/* 1. 请在控制台实现如下功能。(20分) * ** *** **** */ #include<stdio.h> int main(void) { puts(" * "); puts(" ** "); puts("*** "); puts("****"); return 0; }
exam1-2
/* 2. 效果与第一题结果相同,但是打印的行数有程序运行是确定。(25分) * ** *** **** */ #include<stdio.h> #include<limits.h> void put_chars(unsigned int ch, unsigned int n) { while ( n-- >0 ) putchar(ch); } int main(void) { unsigned int no = 0; unsigned int nospace; unsigned int i; puts("输入数字以打印星星,输入的数字就是打印星星的行数,输入0结束程序。"); printf("请输入数字:"); scanf("%d", &no); while(no != 0) { if(no > 0 && no < UINT_MAX ) { for( i = 1; i <= no; i++) { nospace = ((no - i ) / 2) + ((no - i ) % 2); put_chars(' ', nospace); put_chars('*', i); printf("\n"); } } puts("输入数字以打印星星,输入的数字就是打印星星的行数,输入0结束程序。"); printf("请输入数字:"); scanf("%d", &no); }; //endof while return 0; }//endof main
exam1-3
/* 3.请实现2个函数完成BCB码到二进制格式的转换和二进制到BCD转换功能,并自己编写测试。(28分) */ #include<stdio.h> #include<limits.h> /* bcd转二进制,*/ unsigned char bcd2bin(unsigned char bcddata) { unsigned char bindata; bindata = ((( bcddata >> 4) & 0x0f ) * 10) + ( bcddata & 0x0f); return bindata; } /* 二进制转bcd,二进制数值小于100*/ unsigned char bin2bcd(unsigned char bindata) { unsigned char bcddata; bcddata = ((( bindata / 10 ) << 4 ) & 0xf0 ) + ( bindata % 10); return bcddata; } /*显示bcd*/ void showbcd( unsigned char bcddata) { printf( "%c%c", ((( bcddata >> 4) & 0x0f ) + '0'), (( bcddata & 0x0f) + '0')); } int main(void) { unsigned char cdata; unsigned char bcddata; unsigned char bindata; printf("请输入一个字符:"); scanf("%c", &cdata); bcddata = bin2bcd(cdata); printf("BCD结果\n"); printf("以字符显示:");showbcd(bcddata);putchar('\n'); printf("以十六进制显示:%x\n", bcddata ); printf("以整形显示:%d\n", bcddata ); bindata = bcd2bin(bcddata); printf("bin结果\n"); printf("以字符显示:%c\n", bindata); printf("以十六进制显示:%x\n", bindata ); printf("以整形显示:%d\n", bindata ); return 0; }//endof main
exam1-4
/* 4.请利用宏来实现3题功能。(30分) */ #include<stdio.h> #include<limits.h> /* bcd转二进制,*/ #define bcd2bin(bcddata) ((( (bcddata) >> 4) & 0x0f ) * 10) + ( (bcddata) & 0x0f) /* 二进制转bcd,二进制数值小于100*/ #define bin2bcd(bindata) ((( (bindata) / 10 ) << 4 ) & 0xf0 ) + ( (bindata) % 10); /*显示bcd*/ void showbcd( unsigned char bcddata) { printf( "%c%c", ((( bcddata >> 4) & 0x0f ) + '0'), (( bcddata & 0x0f) + '0')); } int main(void) { unsigned char cdata; unsigned char bcddata; unsigned char bindata; printf("请输入一个字符:"); scanf("%c", &cdata); bcddata = bin2bcd(cdata); printf("BCD结果\n"); printf("以字符显示:");showbcd(bcddata);putchar('\n'); printf("以十六进制显示:%x\n", bcddata ); printf("以整形显示:%d\n", bcddata ); bindata = bcd2bin(bcddata); printf("bin结果\n"); printf("以字符显示:%c\n", bindata); printf("以十六进制显示:%x\n", bindata ); printf("以整形显示:%d\n", bindata ); return 0; }//endof main
发现回错了帖子...
根据百度百科:https://baike.baidu.com/item/BCD%E7%A0%81
BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的;无权BCD码有余3码,余3循环码等。
在这里我们选用最常用的8421码吧,也就是 1000 0100 0010 0001 <==> 8421,用这个作为测试用例
提交第5题作业。虽然可能赶不上评分,但还是放出来给大家批评批评吧
/* 5.请利用来实现一个抽象数据类型的链表,他可以存放任意自定义数据类型,至少实现指定位置插入和制定位置得到数据,以及制定位置删除。(32分) */ #include<stdio.h> #include<limits.h> #include<stdlib.h> #define elemtype int #define sampleNo 10 /* 链表数据类型*/ typedef struct link{ elemtype data; struct link *next; }linker; /*查找第n个元素*/ linker *scanforNo(linker *linkdata, int no ) { int i=1; linker *tempdata; //printf("no = %d\n",no); tempdata = linkdata; while((i<(no+1)) && ((tempdata->next) != NULL)) { tempdata = tempdata->next; i++;//printf("%d\t",i);printf("no = %d\tdata = %d\n",no, tempdata->data); } if(i<(no+1)){ //printf("超出链表长度!\n"); tempdata = NULL; } return tempdata; } /*查找数据为data元素的位置*/ int scanforData(linker *linkdata, elemtype data) { int i=0; linker *tempdata; //printf("no = %d\n",no); tempdata = linkdata; while(((tempdata) != NULL) && (tempdata->data != data)) { tempdata = tempdata->next; i++;//printf("%d\t",i);printf("no = %d\tdata = %d\n",no, tempdata->data); } if(tempdata == NULL) { //printf("链表中没有%d!\n", data); i = 0; } return i; } /*在第n位插入数据*/ void insertData(linker *linkdata, int no, elemtype data) { int i=1; linker *tempdata; linker *temp; //printf("no = %d\n",no); tempdata = linkdata; while((i<(no)) && ((tempdata->next) != NULL)) { tempdata = tempdata->next; i++;//printf("%d\t",i);printf("no = %d\n",no); } //printf("%d\n",i); if(i>=(no-1)){ temp = (linker *)calloc(1, sizeof(linker)); temp->data = data; temp->next = tempdata->next; tempdata->next = temp; }else if(i<(no-1)){ printf("超出链表长度!\n"); } } /*删除第n位数据*/ void deleteData(linker *linkdata, int no) { int i=1; linker *tempdata; linker *temp; //printf("no = %d\n",no); tempdata = linkdata; while((i<(no+1)) && ((tempdata->next) != NULL)) { temp = tempdata; tempdata = tempdata->next; i++;//printf("%d\t",i);printf("no = %d\n",no); } //printf("%d\n",i); if(i>=(no+1)){ temp->next = tempdata->next; }else if(i<(no+1)){ printf("超出链表长度!\n"); } } /*打印整个链表*/ void printData(linker *linkdata) { linker *pt; pt = linkdata; while( pt->next != NULL) { pt = pt->next; printf("%d\t", pt->data ); } printf("\n打印链表结束!\n"); printf("------------------------------\n"); } /*打印命令界面*/ void drawUI(void) { //printf("\n-------------------------\n"); printf("添加新数据请输入1:\n"); printf("按位置查找请输入2:\n"); printf("按数据查找请输入3:\n"); printf("删除数据请输入4:\n"); printf("结束程序请输入9:\n"); printf("请输入命令字以继续:"); } /*建立样表*/ void creatSample(linker *linkdata) { int i; for(i = 0; i < sampleNo; i++) { insertData(linkdata, (i+1),(i+1)); } } /*命令相关*/ void cmd0(linker *linkdata)//加载样表 { creatSample(linkdata); printData(linkdata); } void cmd1(linker *linkdata)//添加新数据 { elemtype data; int no; printf("请输入要插入数据:");scanf("%d",&data); printf("请输入要插入位置:");scanf("%d",&no); insertData(linkdata, (no),(data)); printData(linkdata); } void cmd2(linker *linkdata)//按位置查找 { linker *temp; int no; printf("请输入要查找的位置:");scanf("%d",&no); temp = scanforNo(linkdata, no); if(temp != NULL) { printf("第%d位的数据是:%d。\n", no, temp->data); }else { printf("输入位置超出当前链表长度!\n"); } printData(linkdata); } void cmd3(linker *linkdata)//按数据查找 { linker *temp; int no; elemtype data; printf("请输入要查找的数据:");scanf("%d",&data); no = scanforData(linkdata, data); if(no != 0) { printf("数据%d在链表中第%d位。\n", data, no); }else { printf("链表中没有%d!\n", data); } printData(linkdata); } void cmd4(linker *linkdata)//删除数据 { int no; printf("请输入要删除数据位置:");scanf("%d",&no); deleteData(linkdata, no); printData(linkdata); } int cmd9(void) { return 0; } /*主函数*/ int main(void) { linker *header; linker *finder; int cmd; int holdOn = 1; header = (linker *)calloc(1, sizeof(linker)); header->next = NULL; printf("加载样表请输入0:\n"); while( holdOn ) { drawUI(); scanf("%d", &cmd); switch(cmd) { case 0:cmd0(header);break;//加载样表 case 1:cmd1(header);break;//添加新数据 case 2:cmd2(header);break;//按位置查找 case 3:cmd3(header);break;//按数据查找 case 4:cmd4(header);break;//删除数据 case 9:holdOn = cmd9();break; default:printf("无此命令,请重新输入!\n"); printf("------------------------------\n");break; } }//endof while return 0; }//endof main
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |