c语言nr
‘壹’ 求十进制转换二进制c语言代码
求十进制转换二进制C语言代码代码如下:
#include<stdio.h>
#defineNR(sizeof(int)*8)//二进制位的个数
voiddeciToBin(intnum);//十进制转换为二进制函数声明
/*主函数*/
intmain(void)
{
intnum;
fprintf(stdout,"请输入一个正整数:");
/*获取并检查用户输入*/
while(1)
{
if(fscanf(stdin,"%d",&num)!=1)
{
fprintf(stderr,"输入错误!请重新输入:");
while(getchar()!=' ');//去掉多余的非法字符
continue;
}
elseif(num<0)//输入的数不能为负数
{
fprintf(stderr,"请输入错误!请输入正整数:");
continue;
}
else
break;
}
fprintf(stdout,"对应二进制为:");
#if1/*方法一:不使用递归*/
charbitArr[NR];
inti=-1;
/*算法:栈的数学模型*/
do{
i+=1;
bitArr[i]=num%2;
num/=2;
}while(num!=0);
/*逆序打印*/
for(i;i>=0;i--)
{
fprintf(stdout,"%d",bitArr[i]);
}
fputc(' ',stdout);
#else/*方法二:使用递归*/
if(num==0)
{
fprintf(stdout,"0 ");
}
else
{
deciToBin(num);//调用第归函数
fputc(' ',stdout);
}
#endif
return0;
}
/*
*@函数名:deciToBin
*@函数功能:实现十进制转换为二进制
*@参数:需要转换的十进制整数
*/
voiddeciToBin(intnum)
{
/*第归结束条件*/
if(num==0)
{
return;
}
/*第归调用*/
deciToBin(num/2);
/*逆序打印*/
fprintf(stdout,"%d",num%2);
}
(1)c语言nr扩展阅读:
使用C语言编程实现任意进制数(2-16进制)转换为其他任意进制数(2-16进制)方法:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intTenNum(chara[],intB);
voidNumchange(intm,intB);
intTenNum(chara[],intB)
{
intlen,i,num;
intsum=0;
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='0'&&a[i]<='9')
num=a[i]-'0';
elseif(a[i]>='A'&&a[i]<='F')
num=a[i]-'A'+10;
sum=sum*B+num;
}
returnsum;
}
voidNumchange(intm,intB)
{
intn;
if(m)
{
Numchange(m/B,B);
n=m%B;
if(n<10)
printf("%d",n);
else
printf("%c",n+55);
}
}
intmain()
{
intB,b;
chara[20];
printf("请输入待转换数的进制(2-16):");
do{
scanf_s("%d",&B);
}while(B<2&&B>16);
printf("请输入待转换数:");
getchar();
gets_s(a);
intm=TenNum(a,B);
printf("请输入需要转成几进制数(2-16):");
do{
scanf_s("%d",&b);
}while(B<2&&B>16);
printf("%d进制数%s转换为%d进制数的结果为:",B,a,b);
Numchange(m,b);
printf(" ");
system("pause");
return0;
}
‘贰’ C语言如何动态分配二维数组
动态分配二维数组:
void main(int argc, char * argv[])
{
int NC=100, NR=200;
int i,j;
char **a; // a[NR][NC] -- *a[NR] -- a[j][i]
a = (char **) malloc(sizeof(char *) * NR);
for (j=0;j<NR;j++){
a[j] = (char *) malloc(sizeof(char) * NC);
}
// 释放空间: free(a);
编译错误是因为p[j]=(char *)malloc,而不是题目的(char *)malloc(n*sizeof(char))。
(2)c语言nr扩展阅读:
二维数组的动态分配
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
‘叁’ 用C语言编写:输入半径R,求圆的周长、面积和球的体积。
#define PI 3.14
#include<stdio.h>
void main(void)
{ float r,l,s,v;
printf("please input r r=");
scanf("%f",&r);
l=2*PI*r;
s=PI*r*r;
v=4*PI*r*r/3;
printf("the result :");
printf(" l=%f s=%f v=%f",l,s,v);
getchar();
}
(3)c语言nr扩展阅读:
实例操作
// 设圆半径r = 1.5,圆柱高h = 3
// 要求:用scanf输入数据,取小数点后两位
#include <stdio.h>
int main()
{
float r,h;
float c,s,sq,vq,vz;
float pai = 3.1415926;
printf("请输入圆半径:");
scanf("%f",&r);
printf("请输入圆柱高:");
scanf("%f",&h);
c = 2 * pai * r;
s = pai * r * r;
sq = 4 * pai * r * r;
vq = ( 4 / 3 ) * pai * r * r * r;
vz = s * h;
printf("圆周长是:%4.2f ",c);
printf("圆面积是:%4.2f ",s);
printf("圆球表面积是:%4.2f ",sq);
printf("圆球体积是:%4.2f ",vq);
printf("圆柱体积是:%4.2f ",vz);
return 0;
}
‘肆’ C语言,语句 float **a 是什么意思
这是声明,声明 a 是变量,它 是指向 “浮点型 指针” 的 一个“指针”。
它不是二维数组。
要变2位数组,要做以下动态分配
int NC=5, NR=3; // 假定 5 列 3 行
int i,j;
float **a;
a = (float **) malloc(sizeof(float *) * NR);
for (j=0;j<NR;j++){
a[j] = (float *) malloc(sizeof(float) * NC);
}
接下来 可用 a[j][i] 了:
for (j=0;j<NR;j++)
for (i=0;i<NC;i++) {
a[j][i] = (j+1)*100.0 + i;
}
for (j=0;j<NR;j++){
for (i=0;i<NC;i++) printf("%g ",a[j][i]);
printf("\n");
}