汉字依然不能显示……
继续实践例程与做练习,发现我的电脑在使用\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| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |