/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目:已知半径为5,圆心为(6,9)的圆,字符串s给出一组以空格为分隔符的点的
坐标,每个坐标的横、纵坐标值以逗号分隔,并以二进制字符串表示。
例如:char s[]= {" 101,10 11,101 1001,1010 "};
表示的坐标为:(5,2), (3,5), (9,10), 它们与圆的位置关系如下:
点(5,2)在圆外
点(3,5)在圆上
点(9,10)在圆内
编写程序:
1.编写 int change(char s[],int num[][3])函数,将s中所有二进制数字字符子
串转换为用整数表示的点的坐标,存放在num数组的同一行前2列。
函数返回坐标的个数。如果s的格式错,返回0。
2.编写 void calc(int num[][3],int n)函数,根据num数组中每行前2个元素所对
应的点,判断点在圆的位置,其结果存放在第三列,若在圆上为0,圆外为1,
圆内为2。
---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
-------------------------------------------------------*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
int change(char s[],int num[][3])
{
/**********Program**********/
/********** End **********/
}
void calc(int num[][3],int n)
{
/**********Program**********/
/********** End **********/
}
int main()
{
char s[]= {" 101,10 11,101 1001,1010 "};
int num[10][3],i,n;
char disp[][10]= {"上","外","内"};
FILE *fp;
if((fp=fopen("DATA.dat","w"))==NULL)
{
printf("File open error\n");
exit(0);
}
n=change(s,num);
if (n==0)
{
printf("参数错\n") ;
fprintf(fp,"参数错\n") ;
}
else
{
calc(num,n);
for(i=0; i<n; i++)
{
printf("点(%d,%d)在圆%s\n",num[i][0],num[i][1],disp[num[i][2]]);
fprintf(fp,"点(%d,%d)在圆%s\n",num[i][0],num[i][1],disp[num[i][2]]);
}
}
fclose(fp);
return 0;
}
c程序设计题,对于有空行的二进制字符串转十进制怎么转?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 随缘|为而不争 2021-03-12 18:10关注
int change(char s[],int num[][3]) { /**********Program**********/ int i=0; int point=0; int x_hex, y_hex; int x, y; int count = 0; int ret = 0; int x_temp = 0; int y_temp = 0; while(s[i]) { if(s[i] == ' '){ //找到坐标的起始位置, 忽略空格是为了方便查找下一个坐标 i++; continue; } //通过sscanf函数读取XY坐标值 ret = sscanf(&s[i], "%x,%x", &x_hex, &y_hex); //以十六进制读取,坐标的二进制字符"101"读取后为"0x101"。目的是方便用位移来转换成十进制数值 if(ret == 1)//格式错误。正常情况要么2要么0。 return 0; if(ret == 0 )//后面没有坐标了 return count; printf("x hex=0x%x, y hex=0x%x\n", x_hex, y_hex); //将十六进制表示的X坐标转换成十进制数值 point = 0;//二进制数值的位置 x = 0; while(x_hex) { if(x_hex & 0xf)//判断后4位是否为1,这里每4位是一个二进制位的值 x += pow(2, point);//当为1时,累加2^point,point是二进制字符位置 x_hex = x_hex >>4;//右移4位 point ++; } //将十六进制表示的Y坐标转换成十进制数值 point = 0;//二进制数值的位置 y = 0; while(y_hex) { if(y_hex & 0xf)//判断后4位是否为1,这里每4位是一个二进制位的值 y += pow(2, point);//当为1时,累加2^point,point是二进制字符位置 y_hex = y_hex >>4; //右移4位 point ++; } //保存坐标数值 num[count][0] = x; num[count][1] = y; num[count][2] = 0;//位置默认0 count ++; printf("x=%d, y=%d\n", x, y); //查找下一个坐标,以空格为标记 while(s[i]) { if(s[i] == ' ') break; i++; } } return count; /********** End **********/ }
看起来比较复杂,或许会有更好的方案!
解决 无用评论 打赏 举报
悬赏问题
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境
- ¥30 关于#java#的问题,请各位专家解答!