㈠ 一個簡單c語言問題(關於逗號表達式的值)
c=(a=3,b=a--);
這個語態春歷句的執行森肆順序,相當於如下幾條語帆搜句:
a=3;
b=a;
c=b;
a--;
所以,
c=3,a=2,b=3
㈡ c語言關於指向結構體的指針的理解
Polynomial *p
那p就是一個指向「PolyNode結構體指針」的指針。
typedef struct {
...
}*Polynomial;
這說明Polynomial是定薯碰輪義指針類型的,指向對象是這個結構體。
Polynomial p;就是定義了一個指吵跡向這數信種結構體的指針。
㈢ 一個c語言的語句問題,高手看看
1.malloc原形void * malloc(size_t size)
前面的括弧表示強制轉為term型指針
裡面櫻褲的括弧代表申請大小和term一彎帆樣的內存空間
sizeof返回term型數據的佔用內存位元組數
2.P = P->next = (term*)malloc(sizeof(term)); 分解成以下二句:
P->next = (term*)malloc(sizeof(term));
表示先申請一塊term類型大小的內存,把地址給P->next
P = P->next;
表示P指向鏈表的下一元素
3.typedef就是申明變數的別名
所以sizeof(Lnode)和sizeof(node)一樣
4.(sizeof (struct polynode ))
這個不用寫,如果寫了,後面只能跟node,不能跟Lnode
5.(node *)malloc(sizeof(node));
我一般脊鬧簡不用typedef,感覺沒啥用
㈣ 如何用C語言實現一元多項式簡單計算器的設計
/*:--------------一元稀疏多項式計算(部分)--------------*
* 基本功能:(1)輸入並建立多項式; *
* (2)多項式輸出,以 c1,e1,c2,e2,...輸出 *
* 其中ci為系數,ei為指數; *
* (3)多項式相加,c=a+b。 *
* 說明: (1)多項式一指數升序排序,但輸入時不檢查; *
* (2)以帶頭指針的單鏈表存儲。 *
*-------------------------------------------------------*/
#define OK 1
#define FAILE 0
#define ERROR 0
#define OVERFLOW 0
#include <iostream>
using namespace std;
typedef struct PolynNode { /*某一項*/
double coef; /*系數*/
int expn; /*指數*/
} ElemType,term;
typedef struct LNode {
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef LinkList Polyn; /*帶頭結點*/
int init_polyn(Polyn head,int n)
{/*創建有n項的多項式,n應大於0,但不作檢查*/
/*指數e1<e2<e3...,但不作檢查,間隔地輸入系數與指數,即c1 e1 ...*/
Polyn p,q = head;
double coef;
int expn,count;
if(head == NULL)
return ERROR;
if((p = (Polyn)malloc(sizeof(LNode))) == NULL)
return OVERFLOW;
printf("Please input n pairs of coef and expn.\n");
for(count = 0;count < n;count++) {
q->next = p;
q = p;
scanf("%f%d",&coef,&expn);
p->data.coef = coef;
p->data.expn = expn;
if((p = (Polyn)malloc(sizeof(LNode))) == NULL)
return OVERFLOW;
}
q->next = NULL;/*尾*/
return OK;
}
int print_polyn(Polyn head)
{/*輸出*/
Polyn p=head->next;
int count;
if(head == NULL)
return ERROR;
while(p != NULL) {
printf("%.4lf % 3d",p->data.coef,p->data.expn);
count++;
if((count % 10 == 0) && (!count))
printf("\n");
p = p->next;
}
return OK;
}
int add_polyn(Polyn ha,Polyn hb,Polyn hc)
{/*多項式相加*/
Polyn p1 = ha,p2 = ha,q1 = hb,q2 = hb;
hc = ha;
while( (p1 != NULL) && (q1 != NULL)) {
if(p1->data.expn < q1->data.expn) { /*p1指數<q1指數*/
p2 = p1;
p1 = p1->next;
}
else {
if(p1->data.expn == q1->data.expn) { /*q1指數==p1指數*/
if(!(p1->data.coef + q1->data.coef)) {/*系數之和為0*/
p1 = p1->next;
free(p2->next);
p2->next = p1;
q1 = q1->next;
free(q2->next);
q2->next =q1;
}
else { /*系數之和不為0*/
p1->data.coef += q1->data.coef;
p2 = p1;
p1 = p1->next;
q1 = q1->next;
free(q2->next);
q2->next =q1;
}
}
else { /*q1指數<p1指數*/
p2->next = q1;
q1->next = p1;
p2 = p2->next;
q1 = q1->next;
q2->next = q1;
}
}
}
if(p1 == NULL) { /*p1結束了,q1未結束*/
p2->next = q1;
}
ha->next = NULL;
free(ha);
free(hb);
return OK;
}
int main()
{
int creat_polyn(Polyn head);
int init_polyn(Polyn head,int n);
int print_polyn(Polyn head);
int add_polyn(Polyn ha,Polyn hb,Polyn hc);
LNode polyn1,polyn2;
Polyn ha = &polyn1,hb = &polyn2,hc;
int n;
printf("How many terms do you want to initial the polynomial ha?Input a number.\n");
scanf("%d",&n);
init_polyn(ha,n);
print_polyn(ha);
printf("How many terms do you want to initial the polynomial hb?Input a number.\n");
scanf("%d",&n);
init_polyn(hb,n);
print_polyn(hb);
add_polyn(ha,hb,hc);
print_polyn(hc);
return 0;
}
㈤ C語言,數據結構,關於鏈表,求大佬幫我解釋幾個名詞
typedef 的用法是:typedef 數據類型 別名;第一個定義中,struct term{……}是一個數據類型,後面緊接著的term是一個別名,雖然同名,但是意義不一樣。再後面的*LinkList是也是一個別名,但是是指針類型的。這個整條定義同時定義了term類型和term類型的指針。
下一條typedef LinkList polynomial;中同樣定義了一個指針類型,polynomial與term的指針類型相同。
㈥ c語言 if與 if else的區別是什麼
1)if()
{
if()
} //這種是嵌套的從屬關系,只有滿足第一個if,才會開始判斷if裡面的第二個if。
2)if(){}
else if (){}
else{}
還有if(){}
else{}
這些是並列關系,比如先判斷if()的條件,如果不滿足,則判斷else if()里的條件。如果所有if()(包括else if,下同)的條件都不滿足時,則執行else裡面的操作。
else可以省略,如果else省略時,當所有if()都不滿足的時候,則無操作,繼續if()代碼塊後的程序。
例如我寫過的一個代碼:
if (BMI<18.5) //1如果變數BMI小於18.5,則輸出Category = Underweight
printf("Category = Underweight\n");
else if (BMI>=18.5&&BMI<25) //2如果變數BMI大於等於18.5,且小於25
printf("Category = Normalweight\n",BMI);//則輸出Category = Normalweight
else if (BMI>=25&&BMI<30) //3如果變數BMI大於等於25,且小於30 printf("Category = Overweight\n",BMI); //則輸出Category = Overweight\
else //其他情況,即上面所有if沒包含的情況,如BMI=35時
printf("Category = Obese\n",BMI);//則輸出Category = Obese
希望樓主能看懂~
㈦ c語言,求導
這位是在別人的地方來的,這是地址:
http://blog.csdn.net/qq_26816591/article/details/48690359
//一元多項式的求導
#include<stdio.h>
#include<malloc.h>//動態申請空間的函數的頭文件
typedef struct node //定義節點類型
{
float coef; //多項式的系數
int expn; //多項式的指數
struct node * next; //結點指針域
}PLOYList;
void insert(PLOYList *head,PLOYList *input) //查找位置插入新鏈節的函數,且讓輸入的多項式呈降序排列
{
PLOYList *pre,*now;
int signal=0;
pre=head;
if(pre->next==NULL) {pre->next=input;} //如果只有一個頭結點,則把新結點直接連在後面
else
{
now=pre->next;//如果不是只有一個頭結點,則設置now指針
while(signal==0)
{
if(input->expn < now->expn)
{
if(now->next==NULL)
{
now->next=input;
signal=1;
}
else
{
pre=now;
now=pre->next;//始終讓新輸入的數的指數與最後一個結點中的數的指數比較,小於則插在其後面
}
}
else if( input->expn > now->expn )
{
input->next=now;
pre->next=input;
signal=1;
}//若新結點中指數比最後一個結點即now中的指數大,則插入now之前
else//若指數相等則需合並為一個結點,若相加後指數為0則釋放該結點
{
now->coef=now->coef+input->coef;
signal=1;
free(input);
if(now->coef==0)
{
pre->next=now->next;
free(now);
}
}//else
} //while
}//else
}//void
PLOYList *creat(char ch) //輸入多項式
{
PLOYList *head,*input;
float x;
int y;
head=(PLOYList *)malloc(sizeof(PLOYList)); //創建鏈表頭
head->next=NULL;
scanf("%f %d",&x,&y);//實現用戶輸入的第一個項,包括其指數和系數
while(x!=0)//當用戶沒有輸入結束標志0時可一直輸入多項式的項,且輸入一個創建一個結點
{
input=(PLOYList *)malloc(sizeof(PLOYList)); //創建新鏈節
input->coef=x;
input->expn=y;
input->next=NULL;
insert(head,input); //每輸入一項就將其排序,是的鏈表中多項式呈降序排列
scanf("%f %d",&x,&y);
}
return head;
}
PLOYList *der(PLOYList *head)//多項式求導
{
PLOYList *p;
p = head -> next;
while (p)
{
p -> coef = p -> coef * p -> expn;
p -> expn = p -> expn--;
p = p -> next;
}
return head;
}//將多項式的每項系數和指數相乘得到新的系數,指數減一得到新的指數即完成求導
void print(PLOYList *fun) //輸出多項式,fun指要輸出的多項式鏈表的表頭
{
PLOYList *printing;
int flag=0;
printing=fun->next;
if(fun->next==NULL)//若為空表,則無需輸出
{
printf("0\n");
return;
}
while(flag==0)
{
if(printing->coef>0&&fun->next!=printing)
printf("+");
if(printing->coef==1);
else if(printing->coef==-1)
printf("-");
else
printf("%f",printing->coef);
if(printing->expn!=0) printf("x^%d",printing->expn);
else if((printing->coef==1)||(printing->coef==-1))
printf("1");
if(printing->next==NULL)
flag=1;
else
printing=printing->next;
}
printf("\n");
}
void main()
{
PLOYList *f;
printf(" 註:輸入多項式格式為:系數1 指數1 系數2 指數2 …… ,並以0 0 結束:\n");
printf("請輸入一個一元多項式:");
f = creat('f');
printf("這個多項式為:f(x)= ");
print(f);
printf("求導結果為:F(x)=f'(x)= ");
f=der(f);
print(f);
printf("\n\n");
}
㈧ 數據結構(C語言)
呵呵,碰巧到你網路空間看了下,看到了你想知道的這個問題,蒽蒽,下午就給你答案哈~~~
恩,可以了:
#include <stdio.h>
#include <stdlib.h>
typedef struct term
{
double coef;//系數
int expn; //指數
struct term *next;
}term,*polynomial;
//注:下面的head_p是頭指針,而非頭結點。其存放的是多項式的第一項
int depart_polyn(polynomial &head_p,polynomial &Odd_items,polynomial &Even_items)//奇數項,偶數項
{
int i=1,j=1;
polynomial odd,even,p;
Odd_items=Even_items=NULL;
p=head_p;
while(1)
{
if(p->expn%2)
{
if(i)
{
i=0;//使得奇數項頭指針只賦值一次
Odd_items=p;
odd=Odd_items;
}
else
{
odd->next=p;
odd=odd->next;
}
p=p->next;
odd->next=Odd_items;
}
else
{
if(j)
{
j=0;//作用同上
Even_items=p;
even=Even_items;
}
else
{
even->next=p;
even=even->next;
}
p=p->next;
even->next=Even_items;
}
if(p==head_p)
break;
}
return 1;
}
void print_polyn(polynomial head)//這函數只是針對main函數內給出的多項式例子編的,處理的系數均為正數。
{
polynomial p=head;
if( !head)
{
puts("該表為空:");
return;
}
while(1)
{
if(p->next!=head)
printf("%gm^%d + ",p->coef,p->expn);
else
printf("%gm^%d\n",p->coef,p->expn);
p=p->next;
if(p==head)
break;
}
putchar('\n');
}
int main()
{
int i;
polynomial head_p,head,Odd_items,Even_items,newbase;
head_p=(polynomial)malloc(sizeof(term));
head_p->coef=2.71;
head_p->expn=0;
head=head_p;
//隨意創建了一個稀疏多項式,以驗證
for(i=1;i<11;i++)
{
newbase=(polynomial)malloc(sizeof(term));
newbase->coef=2.71*i;
newbase->expn=i*13;
head->next=newbase;
head=head->next;
}
head->next=head_p;//構成循環鏈表
puts("原稀疏多項式:");
print_polyn(head_p);
if(depart_polyn(head_p,Odd_items,Even_items) )
{
puts("分解後的奇數項稀疏多項式:");
print_polyn(Odd_items);
puts("分解後的偶數項稀疏多項式:");
print_polyn(Even_items);
}
return 0;
}
哪裡不懂可追問:
㈨ 這段程序什麼意思啊!C語言求大神指導!!!
while(pa&&pb) //pa,pb指針都不為空,則進入循環
{
CreateItem(s); //創建一個新的項目s(不知道函數實現調用的是不是malloc)
i=ItemComp(*pa,*pb); //兩個項目之間的比較,返回值的意思需要根據函數代碼來看
if(i==0){
s->coef=pa->coef+pb->coef; //將兩個項目中的coef元素之後給新的項目s的coef
s->expn=pa->expn;//給結構體的元素賦值
if(s->coef){last->next=s;s->next=NULL;last=s;}//如果項目s的coef不為零,那就把s插入到鏈表的尾部,同時把last指向新的尾節點
pa=pa->next;//指著向後移
pb=pb->next;//指著向後移
}
else if(i<0){s->coef=pa->coef;s->expn=pa->expn;//如果i<0,就值大的pa指針的兩個元素賦給s
last->next=s;//下面三句是把s插入到鏈表的尾部,同時把last指向新的尾節點
s->next=NULL;
last=s;
pa=pa->next;//值大的pa指針向後一位
}
else{ s->coef=pb->coef;s->expn=pb->expn;//下面的這個分支的功能同上,把值大的pb指針賦給s
last->next=s; s->next=NULL;
last=s;
pb=pb->next;
}
}
s0=pa?pa:pb;//如果pa是空指針就把pb指針賦給s0,反之,則把pa賦給s0
while(s0){
CreateItem(s);//創建新的項目節點s
*s=*s0;
last->next=s;//下面三句是把s插入到鏈表的尾部,同時把last指向新的尾節點
s->next=NULL;
last=s;
s0=s0->next;//s0指針向後移一位
}
認真解答的,及時採納。
㈩ C語言的題目。
這里涉及到條件運算符和逗號運算符。
條件運算符,C語言中唯一的三元運算符,一般形式是:Exp1?Exp2:Exp3
Exp1,Exp2,Exp3是三個表達式,條件運算符的計算規則是:首先計算Exp1的值,如果為真,計算Exp2的值作為表達式的結果;如果為假,計算Exp3的值作灶備為表達式的結果。
逗號運算符:Exp1,Exp2...Expn,依次計算,最後一個Expn的值作為表達式的結果。
看正悶第三行括弧中以第二個表達式的結果作為括弧內整個表達式的結果,根據運算符順序,<優先於=。m默認為靜態變數故初始值為零。m<y為真,取1,並把1賦值給m。根據條件運算符的規則,第三行得出的結果是m=1.
第四行因為條件為真所以m的值沒有變。所以m取隱清毀1