Ⅰ 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;
}
}