㈠ 一个简单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