求大神指教一个自定义函数,C语言

#include
#include
#include
struct score
{
int sno;
int cno;
int score;
};
struct Node_sc
{
score data;
Node_sc next;
};
Node_sc *create(int n);
void fileOutput(Node_sc *phead);
void traversal(Node_sc
phead);
int main()
{
int n;
printf ("输入数据个数:");
scanf ("%d",&n);
printf("\n");

Node_sc* phead=create(n);
fileOutput(phead);
traversal(phead);
return 0;
}

Node_sc create(int n)

{
Node_sc *pnew;
Node_sc *phead;
Node_sc *ptail;
for (int i=0;i<n;i++)

{
pnew=(Node_sc
)malloc(sizeof(Node_sc));
printf("学号:");scanf ("%d",&pnew->data.sno);
fflush (stdin);
printf ("课程号:");scanf("%d",&pnew->data.cno);
printf ("成绩:");scanf ("%d",&pnew->data.score);
pnew->next=NULL;
if (i==0)
{
phead=pnew;
ptail=pnew;
}
else
{
ptail->next=pnew;
ptail=ptail->next;
}
}
return phead;

}

void fileOutput(Node_sc *phead)
{
Node_sc *p=phead;
FILE *fp1;
fp1=fopen("studentscore.dat","wb");
if(fp1==NULL)
{
printf("文件无法打开!\n");
exit(1);
}
else
{
while(p!=NULL)
{
fwrite(p,sizeof(score),1,fp1);
p=p->next;

}
fclose(fp1);
}
}

void traversal(Node_sc* phead)
{
Node_sc *p;
p=phead;
while(p!=NULL)

{
printf ("学号:%d 课程号:%d 成绩:%d\n",p->data.sno,p->data.cno,p->data.score);
p=p->next;

}
}
对于这样一个程序,我要怎么编写一个自定义函数求平均分不及格的学生数据呢?

9个回答

声明一个数组,遍历这个链表,记录不及格学生所在链表的位置。
这个代码结构混乱,还有很多错误,建议好好看一下数据结构

summeraaaaaaaa
summeraaaaaaaa 回复did_you: 谢谢
一年多之前 回复
did_you
did_you 回复summeraaaaaaaa: 把题目描述发我邮箱:1349178119@qq.com 有空帮你做下
一年多之前 回复
ckpckp
深情稻草人 用排序法对链表按学号sno进行排序,然后循环遍历链表,对sno相同的求平均分,不及格的输出。
一年多之前 回复
summeraaaaaaaa
summeraaaaaaaa 可以具体的解释一下下吗?
一年多之前 回复

按照你定义的结构体,只能遍历整个链表去求

用排序法对链表phead按学号sno进行重新排序,然后循环遍历链表,对sno相同的求平均分,不及格的输出。

你可以自己遍一个选择函数,然后遍历整个链表,对关键字进行遍历,需要的话也可以遍历的同时进行排序。最后再写个显示函数就可以啦

数据结构先好好看看吧,感觉逻辑不是很清晰。
其实也可以用数据库,觉得数据库还简单些,输进去数字以后直接划分筛选范围就可以直接得到筛选结果,及格不及格一目了然

你可以自己遍一个选择函数,然后遍历整个链表,对关键字进行遍历,需要的话也可以遍历的同时进行排序。最后再写个显示函数就可以啦

数据结构先好好看看吧,感觉逻辑不是很清晰。
其实也可以用数据库,觉得数据库还简单些,输进去数字以后直接划分筛选范围就可以直接得到筛选结果,及格不及格一目了然

你可以遍历整个链表,对sno相同的求平均分,不及格的输出

用排序法对链表phead按学号sno进行重新排序,然后循环遍历链表,对sno相同的求平均分,不及格的输出。

#include
#define MAXLINE 1000 //定义一个最大行
int glefc(char line[], int max); //声明一个glefc函数,此函数可以接受两个值,一个是char类型,一个是int类型
int strindex(char source[], char searchfor[]); //声明一个strindex函数,可以接受两个值,都是char类型
char pattern[] = "culd"; //定义一个全局char变量,这个作为被find的字符串

main() //主main函数
{
char line[MAXLINE];

int found = 0;

while (glefc(line, MAXLINE) > 0) //用while循环,调用glefc函数,此函数接受两个值,第一个line char类型,第二个定义的常量MAXLINE 为int类型 如果getchar函数获取的这个字符串不为空,则返回字符串长度的值,所以大于0
if (strindex(line, pattern) >= 0) { //如果line char的长度大于0,则用strindex函数进行查找line字符串中包不包含全局变量pattern的字符串,如果包含,则返回pattern字符串在line字符串中的位置,如果不包含,则返回-1
fprintf(stdout, "%s", line); //如果以上都成立,则打印此行
found++;
}
return found;
}

int glefc(char s[], int lim) //声明glefc函数,这个函数返回一个int类型的值,接受两个值,第一char类型,第二个是int类型
{
int c, i = 0;
while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
s[i++] = c;
if (c == '\n')
s[i++] = c;
s[i] = '\0';
return i;
}

int strindex(char s[], char t[]) //strindex函数返回一个int类型的值 接受两个char类型的值
{ //char s和char t只在当前函数中使用,别的函数中也可再次声明名字叫t或者s的变量
int i, j, k;
for (i = 0; s[i] != '\0'; i++) {
for (j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++,k++)
;
if (k > 0 && t[k] == '\0')
return i;
}
return -1;
}
[root@CWG hc]# ./gep //执行结果如下
culd
culd
ddddddddddculdddddddddddd
ddddddddddculdddddddddddd
bbbbbbbb
eeeeeeee
这个就是返回int类型值的函数,和函数的基本调用方法

################
迷途小运维学习C程序语言笔记
作者:john
转载请注明出处

summeraaaaaaaa
summeraaaaaaaa 抱歉呢,我不怎么看得懂
一年多之前 回复

#include

int shuXianHua(int num)
{
int a, b, c;
a = num/100;
b = (num/10)%10;
c = num%10;
if ((a*a*a+b*b*b+c*c*c) == num)
{
return 1;
}

return 0;

}

int main()
{
for (int i = 200; i<=400; i++)
{
if (1 == shuXianHua(i))
{
printf("%d ", i);
}
}

printf("\n");
return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!