Ⅰ c语言代码问题 double d1 = 3.6,d2=7.2 printf("sizeof(d1+d2)=%d\n",sizeof(d1+d2))
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
用于变量
sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。
int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。
由此可知,sizeof( double)=8
Ⅱ 简单的C语言题
对于第一个表达式 d1=(a<b)||(++a==5)&&(c>b--),由于&&的优先级高于||所以是后两个表达式是一组相当于是
d1=(a<b)||((++a==5)&&(c>b--));
由于||和&&都会发生短路现象(表达式1||表达式2),即当表达式1能确定这个表达式结果时就结束计算。
对于d1 = (a<b)||((++a==5)&&(c>b--)); a<b结果为1,无论后面表达式的结果为多少,这个表达式的结果都为1,所以后面的表达式不会被计算。(这里发生了算路)
所以输出结果为d1=1,a=4,b=8,c=5
第二个表达式d2=(a>b)&&(++a==5)&&(c>b--),a>b结果为0,不用计算后面的表达式,整个表达式的结果为0,所以输出结果如下图
Ⅲ c语言的问题
demo是一个联合体去最大的那个变量为长度,在任何系统中,float都要比int型变量大或者相等,因此a对。
结构体,各个成员起始地址肯定是相同的,因此b对。
demo的地址与各个成员的地址肯定是一样的,原因同上,所以C对。
D错了。demo.d1是整型,在内存中以整型数据存储。而demo.d2是以浮点数据类型存储,在存储规则上不同,因此从内存读出时按照浮点数据类型读出,不可能是99.0。浮点数据内存中存储前面是小数部分,中间为E,后面是指数部分,因此d错了。
Ⅳ C语言中输入一个两位数 前一个数字可以代表不同的句子 后一个代表另外一些句子 要怎么表达呀
你可以读入这个2位数,例如:
int dd;
int d1,d2;
printf("input a two digit muber\n");
scanf("%d",&dd);
用:
d1=dd%10;
d2=dd/10;
获得 个位数 d1, 十位数 d2.
如果你已有句型定义,例如 甲类,乙类:
char a[10][20]={"Aa", "Ab","Ac", "Ad","Ae","Af","Ag", "Ax","Ay","Az"};
char b[10][20]={"Ba", "Bb","Bc", "Bd","Be","Bf","Bg", "Bx","By","Bz"};
那么:
printf("%s\n", a[d1]); 就输出 d1 表示的甲类某型
printf("%s\n", b[d2]); 就输出 d2 表示的乙类某型。
Ⅳ c语言中 double 数值 怎么转换成 字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1,s2;
double d1,d2;
int i,j;
while(cin>>d1)
{
/*初始化 清空*/
s1.clear();
s2.clear();
/*负数情况*/
if(d1<0)
{
s2+='-';
d1=-d1;
}
/*处理整数部分*/
j=i=d1;//除去小数部分
while(j>0)
{
s1+=j%10+'0';
j/=10;
}
/*获得的s1是i的倒序,所以得整序*/
for(j=s1.size()-1;j>=0;j--)
s2+=s1[j];
if(d1-i>0)//如果d1不是整数
{
s2+='.';//补上小数点
/*处理小数部分*/
d2=d1-i;//获得小数部分
/*因为是浮点型,所以结束判断不易,
使得计算结果的最后一位不准确,敬谅
!*/
while(d2>(1e-10))//d2>0.0000000001
{
d2*=10;
i=d2;
s2+=i+'0';
d2-=i;
}
}
/*输出*/
cout<<s2<<endl;
}
return 0;
}
Ⅵ C语言菜鸟求助。
#include<stdio.h>
main()
{
int
a=4,b=8,c=5;//定义整型变量a,b,c,并赋初值a=4,b=8,c=5
int
d1,d2,d3,d4;//定义四个整型变量d1,d2,d3,d4
d1=(a<b)||(++a==5)||(c>b--);//a<b为真,d1=1,后面的++a和b--不再执行,所以a,b的值不变
printf("d1=%d,a=%d,b=%d,c=%d\n",d1,a,b,c);//输出1,4,8,5
d2=(a>b)&&(++a==5)||(c>b--);//a>b为假,++a不执行,b--执行,c>b--相当于c>b,b=b-1,c>b为假,所以d2=0,b=7,a不变,c不变
printf("d2=%d,a=%d,b=%d,c=%d\n",d2,a,b,c);//输出0,4,7,5
d3=(a<b)||(++a==5)&&(c>b--);//a<b为真,++a不执行,b--不执行,c>b为假,所以d3=1,b不变,a不变,c不变
printf("d3=%d,a=%d,b=%d,c=%d\n",d3,a,b,c);//输出1,4,7,5
d4=(a>b)&&(++a==5)&&(c>b--);//a>b为假,后面不执行,即a,b,c的值不变还是4,7,5
,d4=0
printf("d4=%d,a=%d,b=%d,c=%d\n",d4,a,b,c);//输出0,4,7,5
}
//说明:&&的优先级大于||的优先级。如果在一个式子中,只出现||,程序从左往右执行,一旦出现真值,程序不再执行后面的式子
//如果在一个式子中,只出现&&,程序从左往右执行,一旦出现假值,程序不再执行后面的式子
//如果在一个式子中同时出现&&和||,则先执行&&,再执行||
希望能够帮到你,如还有疑问,可发到我的邮箱[email protected],我会尽我所能回答。互助互学。
Ⅶ 一道C语言的题目,看程序写结果!谢谢啦!
d1++ + d2--其实是d1++之后再d2--,但是++,--在后面的话,都是先执行再自加/自减,所以
d1++后,在执行后面d2--时,d1=2.2,但是这里d2--还没有完成,所以d2 = 1.5
那么d1 = 2.2+1.5 = 3.7
这么语句执行完之后,d2--才做完,也就是d2 = 0.5
Ⅷ c语言的那个b值为什么d1的时候为8,d2的时候为7
因为是“||”表达式啊,如果前面有为‘真’的表达式,后面的就不会进行了
d1: a<b 为真 后面的b--没有执行,所以b还是8
同理,d2中前面两个表达式都为‘假’,所以b--执行了,然后b为7
Ⅸ C语言编程求c=sqrt(a*b),d=sqrt(a*c),d2=sqrt(c*b),即新生成的数和前后数开根,依次类推n次
先把数学问题描述清楚,你里边有 n 吗? 你求谁?
“新生成的数和前后数开根” 这什么意思呀? 和你前边 算式描述的一致吗?
a 1
b 9
c sqrt(1*9)
d1 d2
sqrt(c*a) sqrt(c*b)
d3 d4
sqrt(d2*a) sqrt(d3*b)
d5 d6
sqrt(d4*a) sqrt(d5*b)
****
d(2n+1) d(2n+2)
sqrt(d2n * a) sqrt(d(2n+1) * b)
是不是这样的
========
#include <math.h>
#include <iostream.h>
double A;
double B;
double fun(int n,double * arr)
{
double an;
double E;
int i=1;
while(i<=n){
E=(i%2)?A;B;
arr[i]=sqrt(arr[i-1]*E]);
i++;
}
return arr[n];
}
int man()
{
int n;
cin>>A>>B;
cin>>n;
double *D;
D=new double[n+1];
D[0]=sqrt(A*B); // C=sqrt(A*B)
fun(n,Arr);
int m=0;
do {
cout<<D[m]<<endl;m++;
}while(m<=n);
}
如果 你用的 是 C 编译 器 只需要把
#include <iostream.h> 改成 #include <stdio.h>
输入输出 cin>> cout<< 改用 scanf 和printf
============================================
你的问题出在数学描述上,只要能把数学模型描述清楚实现起来很容易。
你补充描述中 d3=sqrt(a*d1),d4=sqrt(d1*c),d5=sqrt(c*d2),d6=aqrt(d2*b) 还是没有看出规律 有没有打错?
看是不是这样:
a 1 = d(-2)
b 9 = d(-1)
c sqrt(1*9) = d0
d1 d2 k=0
sqrt(d0*d(-2)) sqrt(d0*d(-1))
d3 d4 k=1
sqrt(d1*d(-1)) sqrt(d1*d0)
d5 d6 k=2
sqrt(d2*d0) sqrt(d2*d1)
d7 d8 k=3
sqrt(d3*d1) sqrt(d3*d2)
***
d(2k+1) d(2k+2) k
sqrt(dk * d(k-2)) sqrt(dk * d(k-1))
是不是这样的
========================================================
终于搞明白你的意思了
下面的程序通过了测试
运行结果::
please input a , b & n :1 100 3
0 1
3 1.77828
2 3.16228
3 5.62341
1 10
3 17.7828
2 31.6228
3 56.2341
0 100
说明
a--0 b--0 初始端点
c--1 第一次插值点
d--2 第二次插值点
e--3 第三次插值点
f--
...
#include <iostream.h>
#include <math.h>
class List { //用链表数据结构来实现
public:
float data; //节点的值
int lev; //节点的级别
List * next;
List * prev;
List(){next=NULL;prev=NULL;lev=0;};
List(float a,int m){data=a;next=NULL;prev=NULL;lev=m;}
void setdata(float a){data=a;};
void insert(List * nod); //链表插入节点
void add(List *nod); //添加节点
};
void List::add(List * nod)
{
List *p=this;
while((p->next)!=NULL){
p=p->next;
}
p->next=nod;
nod->prev=p;
}
void List::insert(List *nod)
{
List * p;
p=next;
next=nod;
nod->prev=this;
List * p1=nod;
while((p1->next)!=NULL){
p1=p1->next;
}
p1->next=p;
}
int main()
{
float a,b;
int m,n;
cout<<"please input a , b & n :";
cin>>a>>b>>n;
List * list,* tmp,* p,*q;
list= new List(a,0);
tmp = new List(b,0);
list->add(tmp);
m=1;
while(m<=n){ //第 m 次 插值
p=list;
while((p->next)!=NULL){ //连中每两个节点之间插入一个节点
//值为前后两节点积平方根
tmp=new List(sqrt((p->data)*(p->next->data)),m);
//申请节点,计算节点值
q=p->next;;
p->insert(tmp); //插入节点
p=q;
}
m++; //下一次
}
p=list;
while(p){
cout<<p->lev<<"\t"<<p->data<<endl;
p=p->next;
}
}