c语言问题求指教啊。问题在代码中标记了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言问题求指教啊。问题在代码中标记了。相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#define NULL 0
struct student

long num;
float score;
struct student *next;//这个地方什么意思?
;
main()

struct student a,b,c,*head,*p;//这个地方什么意思?
a.num=99101; a.score=89.5;
b.num=99103; b.score =90;
c.num=99107; c.score =85;

head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do

printf("%ld%5.1f\n",p->num,p->score);//这个地方怎么表示的
p=p->next;
while(p!=NULL);

参考技术A 这是一个链表,*next用于存放下一个数据的地址,
*head是指针,用于存放数据a的地址值,
*p也是一个指针,初始化为a的地址,使用指针访问结构里的数据时,使用 -> 来操作,功能与p.num,p.score相同。这句是将一个student结构里的num和score显示在屏幕上。运行时通过 p=p->next;依次指向下一个数据的地址,输出所有的数据。
参考技术B struct student

long num;
float score;
struct student *next;//这个地方什么意思?
;
这是定义了一个结构体,而这个结构体除了前两个是存数据的变量处,最后一个,也就是你提问的地方,定义了一个指针变量,这个指针将指向当前变量类型相同的变量。其实,你这里是要建一个链表。
struct student a,b,c,*head,*p;//这个地方什么意思?,这个地方就是定义变量。其中a,b,c 是结构体变量,而head,p是指针变量。

printf("%ld%5.1f\n",p->num,p->score);//这个地方怎么表示的。这个地方就是输出。是对你前边已经赋值的结构体变量进行输出。本回答被提问者采纳
参考技术C struct student *next;//这个地方什么意思?

这是用于使用 student 结构构建链表时,指向下一个节点的指针。

struct student a,b,c,*head,*p;//这个地方什么意思?

声明了a,b,c三个student结构类型的变量。head p 则是三个student类型的指针。

printf("%ld%5.1f\n",p->num,p->score);//这个地方怎么表示的

使用指针访问结构里的数据时,使用 -> 来操作。这句是将一个student结构里的num和score显示在屏幕上。其中num作为整形显示(%ld),score则是可能带小数点。这时候score最多保留小数点后1位显示。

这个程序具体是将a,b,c三个student类型构建位一个链表,a作为头结点。a的后置是b,b后置是c。然后循环里遍历a,b,c三个数据。分别将其中的num和score显示出来。
参考技术D 1、实现单链表时用的,指向该结构体的指针,用来指向单链表下一个元素。
2、定义结构体student的变量a,b,c,指向该结构体的指针*head,*p
看结构体和单链表的定义和使用。
3、打印p->num,num是long型,所以用ld打印;
打印p->score,score是float型,打印形式5.1f表示以整数部分5位,小数部分1位形式打印。
多看书。~~!

为啥进不了for循环,得到的结果总是0? 求大神指教啊!!

#include<iostream>
#include<cmath>
using namespace std;
int main()

double a=0,pi=0,u=1.0;
int n=1,s=1;
cin>>a;
for(;fabs(u)<=a;)

pi=pi+s*u;
n=n+2;
s=-s;
u=1.0/n;

cout<<4*pi<<endl;
return 0;

你这个程序有问题,循环条件fabs(u)<=a,就是说只有这个条件成立,才能进入循环。
u=1,那a一定要输入一个大于1的数,才能进入循环。
可是如果a大于1的话,循环体中的u是越来越小的,于是成了死循环,再也不能退出了。

建议把这个改成大于号,然后在输入a时候输入一个小于1的数,比如0.0000001,这样会循环一段时间以后u<a,完成计算。追问

可是我在fabs(u)<=a前后都有个分号,表明这是结束条件,eps是个很小的数,表示精度的

追答

是啊,这个结束条件,一开始就满足了,所以就结束了,就不进去了。

追问

我 的a是个很小的数,u开始是1,u不会比a小啊,u后来等于1/n,只有在n很大时才会比a小

追答

结束条件的意思是,这个结果为真的时候进入循环。你正好搞反 了
比如for(i=0;i=10了,就结束循环了。

参考技术A 输入的a小于1吧!条件写反了吧教改成fabs(u)>a吧!否则第一次就不满足条件直接退出循环了!for(e0;e1;e2)…if(…)break;if(…)continue;的执行逻辑如下
e0;
startloop:
if(!e1)goto exitfor//for安排的退出测试

if(…)goto exitfor;//自己安排的退出测试

if(…)goto startloop;//自王

e2;

exitfor:追问

我写的是结束条件,前面没有开始条件,这样可以吗?

追答

c语言的循环都是当型循环,无一例外,只有条件符合,才执行相应的循环语句,条件不符退出。你写退出条件的话别用c,c x x!c,cxx只有当型循环,没有直到型循环,自己把条件取反不就行了!c语言已经流行这么多年了,都出好几个标准了,可是一直没有直到型循环,好象也没有几个程序员抱怨这一点!不习惯的话,将就用吧!cxx也是延用c的这一习惯,c井,java也一样吧!

以上是关于c语言问题求指教啊。问题在代码中标记了。的主要内容,如果未能解决你的问题,请参考以下文章

c语言删除学生信息函数 有问题求指教!

关于c语言超长正整数相加的问题,。求高手指教!!!!!

求大神指教C语言中的位域

求高手指教c语言函数怎么返回结构体

求指教,以下皆用数组在c语言里编写程序

C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为啥会出现这种情况?