c语言程序设计题 跪求高人的复杂版~ 慢步不要紧 主要是要对~

作者&投稿:连沸 (若有异议请与网页底部的电邮联系)
c语言程序设计题 跪求高人的复杂版~ 慢不要紧 主要是要对~~

恩,完工了,你看看吧:


//注:本程序因涉及到引用即“&”,所以得保存为.cpp的后缀名再用c++编译器进行编译
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>//用来得到当前时间
typedef struct student
{
char stuNumber[20];
char classNumber[20];
double score[10];
struct student *next;
}stuNode,*stuList;

void cre_node(stuList &L)//createNode,创建节点
{
int i;
L=(stuList)malloc(sizeof(stuNode));
L->next=NULL;
for(i=0;i<10;i++)
L->score[i]=0;
}

void add_node(stuList &L,char stuNumber[],char classNumber[],stuList &p)//增加节点
{
stuList q,prior;
prior=L;
p=L->next;
while(p && strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
while(p && !strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
cre_node(q);
strcpy(q->stuNumber,stuNumber);
strcpy(q->classNumber,classNumber);
q->next=prior->next;
prior->next=q;
p=q;
}

int check_list(stuList L,char stuNumber[])
{
stuList p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if(p)
{
puts("学号不能重复,请重新输入:");
return 0;
}
return 1;
}

void cre_cla_info(stuList &L)//create class infomation
{
int i=0,j=0;
char classNumber[20],stuNumber[20];
stuList p;
puts("开始创建班级信息(输入0结束):");
while(1)
{
printf("
请输入第%d个班级班号:
",i+1);
fflush(stdin);
gets(classNumber);
if( !strcmp(classNumber,"0"))
break;
printf("开始创建%s班的学生信息(输入0结束):
",classNumber);
j=0;
while(1)
{
printf("请输入第%d个学生学号:
",j+1);
fflush(stdin);
while(1)
{
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
j++;
}
i++;
}
p=L->next;
system("cls");
puts("班级信息为:");
while(p)
{
strcpy(classNumber,p->classNumber);
printf("%s班:
",classNumber);
while(p && !strcmp(p->classNumber,classNumber))
{
puts(p->stuNumber);
p=p->next;
}
}
puts("
按任意一个键继续:");
getch();
}

int get_stu_info(stuList &L,char stuNumber[],stuList &p)//get student infomation
{
char ch,classNumber[20];
p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if( !p)
{
puts("无该学生记录,你要增加该学生记录吗?(是则输入Y或y,不是输入则输入其他字符):");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该学生所在班级班号:");
fflush(stdin);
gets(classNumber);
add_node(L,stuNumber,classNumber,p);
return 2;
}
else
return 0;
}
return 1;
}

void print_cla_info(stuList &L,char classNumber[])
{
double average;
int i=0,flag=0;
char ch,stuNumber[20];
stuList p=L->next;
while(p)
{
if( !strcmp(p->classNumber,classNumber))
{
flag=1;
printf("学生%s作业完成情况为:
",p->stuNumber);
average=0;
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次:%g
",i+1,p->score[i]);
}
average/=10;
printf("
该学生期末成绩为: %g

",average);
}
p=p->next;
}
if( !flag)
{
puts("无该班级信息,要创建一个吗?是输入Y或y,不是则输入其他字符:");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该班学生学号,输入0结束:");
i=1;
while(1)
{
printf("请输入第%d个学生学号:
",i++);
while(1)
{
fflush(stdin);
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
}
}
}
puts("
按任意一个键继续:");
getch();
}

void print(void)
{
puts("请选择一个操作进行(输入一个数字):
");
puts("(1)录入某位学生某次作业的分数:
");
puts("(2)给定学号,显示某位学生的作业完成情况:
");
puts("(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况:
");
puts("(4)给定某位学生的学号,修改该学生的作业完成情况:
");
puts("(5)给定某位学生的学号,删除该学生的作业完成情况:
");
puts("(6)提供一些统计各类信息的功能:
");
puts("输入其他数字退出:
");
}

void count(stuList L)
{
time_t cur_time;//time_t在time.h头文件中被定义为long型
double average,m;
int n,i,flag1,flag2,sum1,sum2;
stuList p;
char classNumber[20];
cur_time=time(NULL);//得到当前系统时间
FILE *fp;
fp=fopen("d:\\统计.txt","a+");
fputs("

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
",fp);
fputs("时间格式:星期,月,日,小时:分:秒,年
存档时间:",fp);
fputs(ctime(&cur_time),fp);
while(1)
{
system("cls");
puts("统计查询:");
puts("如若显示内容超过窗口所容,你可以到d:\\统计.txt文本中查看:
");
puts("请选择一个操作进行(输入一个数字):
");
puts("(1)显示全部班级学生作业完成情况,并显示总人数:
");
puts("(2)显示所有满足某次作业分数不大于m的学生,并显示学生人数(m值由你输入,且范围为0~100):
");
puts("(3)显示所有满足某次作业分数不小于m的学生,并显示学生人数(m说明同上)::
");
puts("(4)显示满足第i次作业分数不大于m的学生,并显示人数(i范围1~10,m范围0~100):
");
puts("(5)显示满足第i次作业分数不小于m的学生,并显示人数(i范围1~10,m范围0~100):
");
puts("输入其他数字返回:
");
scanf("%d",&n);
if(n<1 || n>5)
break;
p=L->next;
if(n==1)
{
system("cls");
while(p)
{
sum1=0;
strcpy(classNumber,p->classNumber);
printf("
%s班所有学生作业完成情况为:
",classNumber);
fprintf(fp,"
%s班所有学生作业完成情况为:
",classNumber);
while( p && !strcmp(classNumber,p->classNumber))
{
average=0;
printf("
学生%s:
",p->stuNumber);
fprintf(fp,"学生%s:
",p->stuNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数:%g
",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数:%g
",i+1,p->score[i]);
}
average/=10;
printf("该学生期末成绩为: %g
",average);
fprintf(fp,"该学生期末成绩为: %g
",average);
p=p->next;
sum1++;
}
printf("
~%s班总人数为: %d~
",classNumber,sum1);
fprintf(fp,"
~%s班总人数为: %d~
",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
}
puts("
按任意一个键继续:");
getch();
}
else if(n==2 || n==3)
{
system("cls");
puts("请输入m值(0~100):");
fputs("
请输入m值(0~100):",fp);
while(1)
{
scanf("%lf",&m);
fprintf(fp,"%g
",m);
if(m<0 || m>100)
{
puts("输入有误,请重新输入:");
fputs("输入有误,请重新输入:",fp);
continue;
}
break;
}
if(n==2)
{
printf("所有满足某次作业分数不大于%g的学生为:
",m);
fprintf(fp,"所有满足某次作业分数不大于%g的学生为:
",m);
}
else
{
printf("所有满足某次作业分数不小于%g的学生为:
",m);
fprintf(fp,"所有满足某次作业分数不小于%g的学生为:
",m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("
%s班:
",classNumber);
fprintf(fp,"
%s班:
",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
flag2=0;
for(i=0;i<10;i++)
if(n==2 && p->score[i] <= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("
学生%s:
",p->stuNumber);
fprintf(fp,"学生%s:
",p->stuNumber);
}
printf("第%d次作业分数: %g
",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g
",i+1,p->score[i]);
}
else if(n==3 && p->score[i] >= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("
学生%s:
",p->stuNumber);
fprintf(fp,"学生%s:
",p->stuNumber);
}
printf("第%d次作业分数: %g
",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g
",i+1,p->score[i]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:
");
fprintf(fp,"%NULL:
");
}
printf("
%s班满足条件人数为:%d
",classNumber,sum1);
fprintf(fp,"
%s班满足条件人数为:%d
",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("
一共满足条件人数为:%d
",sum2);
fprintf(fp,"
一共班满足条件人数为:%d
",sum2);
puts("
按任意一个键继续:");
getch();
}
else if(n==4 || n==5)
{
system("cls");
puts("输入i和m的值,用空格键分开(i:1~10,m:0~100):");
fputs("输入i和m的值,用空格键分开(i:1~10,m:0~100):",fp);
while(1)
{
scanf("%d%lf",&i,&m);
if(i<1 || i>10 || m<0 || m>100)
{
puts("输入错误,请重新输入:");
fputs("输入错误,请重新输入:",fp);
continue;
}
break;
}
if(n==4)
{
printf("所有满足第%d次作业分数不大于%g的学生为:
",i,m);
fprintf(fp,"所有满足第%d次作业分数不大于%g的学生为:
",i,m);
}
else
{
printf("所有满足第%d次作业分数不小于%g的学生为:
",i,m);
fprintf(fp,"所有满足第%d次作业分数不小于%g的学生为:
",i,m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("
%s班:
",classNumber);
fprintf(fp,"
%s班:
",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
if(n==4 && p->score[i-1] <= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g
",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g
",p->stuNumber,p->score[i-1]);
}
else if(n==5 && p->score[i-1] >= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g
",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g
",p->stuNumber,p->score[i-1]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:
",classNumber);
fprintf(fp,"NULL:
",classNumber);
}
printf("
%s班满足条件人数为:%d
",classNumber,sum1);
fprintf(fp,"
%s班满足条件人数为:%d
",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("
一共满足条件人数为:%d
",sum2);
fprintf(fp,"
一共班满足条件人数为:%d
",sum2);
puts("
按任意一个键继续:");
getch();
}
}
fclose(fp);
}

void destroy_list(stuList &L)
{
stuList p;
while(p=L->next)
{
L->next=p->next;
free(p);
}
free(L);
}

int main()
{
int m,n,i;
double average;
char stuNumber[20],classNumber[20];
stuList L,p;
cre_node(L);
cre_cla_info(L);
while(1)
{
system("cls");
print();
scanf("%d",&n);
if(n<1 || n>6)
break;
if(n==1)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生%s所在班级为:%s
",p->stuNumber,p->classNumber);
puts("只录入该学生某一次的作业请输入1,要一起录入该学生10次作业请输入其他数字:");
scanf("%d",&m);
if(m==1)
{
puts("录入该学生第几次的作业?");
while(1)
{
scanf("%d",&i);
if(i<1 || i>10)
{
puts("范围只能是1~10,请重新输入:");
continue;
}
break;
}
printf("该学生第%d次作业分数为:%g,你要修改为?:",i,p->score[i-1]);
scanf("%lf",&p->score[i-1]);
puts("本次操作结果:");
printf("%s班%s学生第%d次作业分数为%g:
",p->classNumber,p->stuNumber,i,p->score[i-1]);
puts("
按任意一个键继续:");
getch();
}
else
for(i=0;i<10;i++)
{
printf("第%d次作业分数: ",i+1);
scanf("%lf",&p->score[i]);
}
}
else if(n==2)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
i=get_stu_info(L,stuNumber,p);
if( !i)
continue;
average=0;
if(i==1)
{
printf("该学生所在班级班号为:%s,10次作业完成情况为:
",p->classNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数: %g
",i+1,p->score[i]);
}
average/=10;
printf("
该学生期末成绩为: %g

",average);
}
puts("
按任意一个键继续:");
getch();
}
else if(n==3)
{
system("cls");
puts("输入班级的班号:");
fflush(stdin);
gets(classNumber);
print_cla_info(L,classNumber);
}
else if(n==4)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:
",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:%g
",i+1,p->score[i]);
while(1)
{
puts("要修改第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
printf("修改该学生分数%g为:",p->score[m-1]);
scanf("%lf",&p->score[m-1]);
}
}
else if(n==5)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:
",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:%g
",i+1,p->score[i]);
while(1)
{
puts("要删除第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
p->score[m-1]=0;
}
}
else
{
system("cls");
count(L);
}
}
destroy_list(L);
puts("谢谢使用!按任意键退出:");
getch();
return 0;
}


哪里不懂可追问:
另外,团IDC网上有许多产品团购,便宜有口碑

选择题:
1.d
2a
3b
4a
5b
6a
7d
8c
9a
10d

填空:
1.循环结构
2.4
3.非0
4.if
5.跳出本次循环
6.char
7.假
8.for
9.0
10.switch
问答题:
1,不与回答填空有。
2.int ,long,char, double, float
3.++i是在i的寄存器中直接加1,i++是把i放到临时寄存器中,再临时寄存器中加1,然后临时寄存器中的i值返回个i的寄存器。
4.不是任何时候,当值小于255的时候可以的。因为char是1一个字节,最大255,int4个字节最大65535.
读程题:
1。a=10,b=8,c=16
2。a=65 a=A b=66 b=66
x=67 x=C y=65 y=65
z=67
编程题:
1#include
#include
#include
#include

#define LINE 1024
void main()
{
int i = 5;
int sum=1;
for( ; i > 0; --i)
sum *= i;
printf("%d
", sum);
return 0;
}
2#include
#include
#include
#include

#define LINE 1024
int main(void)
{
int a[3];
int min, max;
int i=0;
scanf("%d%d%d", &a[0], &a[1], &a[2]);
min = max = a[0];
for (i = 1; i<3;++i)
{
if (min > a[i])
min = a[i];
if (max < a[i])
max = a[i];
}
printf("max=%d min=%d
", max, min);
return 0;
}
3#include
#include
#include
#include

#define LINE 1024
int main(void)
{
int i=100;
int a,b,c;
for (;i<999;++i)
{
a = i / 100;
b = i / 10 % 10;
c = i % 10;
if(a*a*a+b*b*b+c*c*c == i)
printf("%d
", i);
}
return 0;
}
4:

#include
#include
#include
#include

int main(void)
{
int line, i, j;
scanf("%d", &line);
int a[line][line];
int len = 1;
int h;
for(i = 0; i < line; ++i)
for(j = 0; j < line; ++j)
a[i][j] = 0;

for(i = 0; i < line; ++i)
{
for(j = 0; j < len; ++j)
{
if (len == 1)
a[i][j] = 1;
else
{
a[i][0] = 1;
for(h = len - 1; h > 0; --h)
{
a[i][h] = a[i-1][h]+a[i-1][h-1];
}
}
}
len ++;
}
for(i = 0; i < line; ++i)
{
for(j = 0; j < line; ++j)
if (a[i][j] != 0)
printf("%d ",a[i][j]);
printf("
");
}
return 0;
}

给你升级了,自己输入行数,比如输入10行,就是你想要的。

呵呵,就完了,晚上就给你答案哈,你多等等~~~

恩,完工了,你看看吧:

//注:本程序因涉及到引用即“&”,所以得保存为.cpp的后缀名再用c++编译器进行编译
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>//用来得到当前时间
typedef struct student
{
char stuNumber[20];
char classNumber[20];
double score[10];
struct student *next;
}stuNode,*stuList;

void cre_node(stuList &L)//createNode,创建节点
{
int i;
L=(stuList)malloc(sizeof(stuNode));
L->next=NULL;
for(i=0;i<10;i++)
L->score[i]=0;
}

void add_node(stuList &L,char stuNumber[],char classNumber[],stuList &p)//增加节点
{
stuList q,prior;
prior=L;
p=L->next;
while(p && strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
while(p && !strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
cre_node(q);
strcpy(q->stuNumber,stuNumber);
strcpy(q->classNumber,classNumber);
q->next=prior->next;
prior->next=q;
p=q;
}

int check_list(stuList L,char stuNumber[])
{
stuList p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if(p)
{
puts("学号不能重复,请重新输入:");
return 0;
}
return 1;
}

void cre_cla_info(stuList &L)//create class infomation
{
int i=0,j=0;
char classNumber[20],stuNumber[20];
stuList p;
puts("开始创建班级信息(输入0结束):");
while(1)
{
printf("\n请输入第%d个班级班号:\n",i+1);
fflush(stdin);
gets(classNumber);
if( !strcmp(classNumber,"0"))
break;
printf("开始创建%s班的学生信息(输入0结束):\n",classNumber);
j=0;
while(1)
{
printf("请输入第%d个学生学号:\n",j+1);
fflush(stdin);
while(1)
{
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
j++;
}
i++;
}
p=L->next;
system("cls");
puts("班级信息为:");
while(p)
{
strcpy(classNumber,p->classNumber);
printf("%s班:\n",classNumber);
while(p && !strcmp(p->classNumber,classNumber))
{
puts(p->stuNumber);
p=p->next;
}
}
puts("\n按任意一个键继续:");
getch();
}

int get_stu_info(stuList &L,char stuNumber[],stuList &p)//get student infomation
{
char ch,classNumber[20];
p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if( !p)
{
puts("无该学生记录,你要增加该学生记录吗?(是则输入Y或y,不是输入则输入其他字符):");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该学生所在班级班号:");
fflush(stdin);
gets(classNumber);
add_node(L,stuNumber,classNumber,p);
return 2;
}
else
return 0;
}
return 1;
}

void print_cla_info(stuList &L,char classNumber[])
{
double average;
int i=0,flag=0;
char ch,stuNumber[20];
stuList p=L->next;
while(p)
{
if( !strcmp(p->classNumber,classNumber))
{
flag=1;
printf("学生%s作业完成情况为:\n",p->stuNumber);
average=0;
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次:\t%g\n",i+1,p->score[i]);
}
average/=10;
printf("\n该学生期末成绩为: %g\n\n",average);
}
p=p->next;
}
if( !flag)
{
puts("无该班级信息,要创建一个吗?是输入Y或y,不是则输入其他字符:");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该班学生学号,输入0结束:");
i=1;
while(1)
{
printf("请输入第%d个学生学号:\n",i++);
while(1)
{
fflush(stdin);
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
}
}
}
puts("\n按任意一个键继续:");
getch();
}

void print(void)
{
puts("请选择一个操作进行(输入一个数字):\n");
puts("(1)录入某位学生某次作业的分数:\n");
puts("(2)给定学号,显示某位学生的作业完成情况:\n");
puts("(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况:\n");
puts("(4)给定某位学生的学号,修改该学生的作业完成情况:\n");
puts("(5)给定某位学生的学号,删除该学生的作业完成情况:\n");
puts("(6)提供一些统计各类信息的功能:\n");
puts("输入其他数字退出:\n");
}

void count(stuList L)
{
time_t cur_time;//time_t在time.h头文件中被定义为long型
double average,m;
int n,i,flag1,flag2,sum1,sum2;
stuList p;
char classNumber[20];
cur_time=time(NULL);//得到当前系统时间
FILE *fp;
fp=fopen("d:\\统计.txt","a+");
fputs("\n\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n",fp);
fputs("时间格式:星期,月,日,小时:分:秒,年\n存档时间:",fp);
fputs(ctime(&cur_time),fp);
while(1)
{
system("cls");
puts("统计查询:");
puts("如若显示内容超过窗口所容,你可以到d:\\统计.txt文本中查看:\n");
puts("请选择一个操作进行(输入一个数字):\n");
puts("(1)显示全部班级学生作业完成情况,并显示总人数:\n");
puts("(2)显示所有满足某次作业分数不大于m的学生,并显示学生人数(m值由你输入,且范围为0~100):\n");
puts("(3)显示所有满足某次作业分数不小于m的学生,并显示学生人数(m说明同上)::\n");
puts("(4)显示满足第i次作业分数不大于m的学生,并显示人数(i范围1~10,m范围0~100):\n");
puts("(5)显示满足第i次作业分数不小于m的学生,并显示人数(i范围1~10,m范围0~100):\n");
puts("输入其他数字返回:\n");
scanf("%d",&n);
if(n<1 || n>5)
break;
p=L->next;
if(n==1)
{
system("cls");
while(p)
{
sum1=0;
strcpy(classNumber,p->classNumber);
printf("\n%s班所有学生作业完成情况为:\n",classNumber);
fprintf(fp,"\n%s班所有学生作业完成情况为:\n",classNumber);
while( p && !strcmp(classNumber,p->classNumber))
{
average=0;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数:\t%g\n",i+1,p->score[i]);
}
average/=10;
printf("该学生期末成绩为: %g\n",average);
fprintf(fp,"该学生期末成绩为: %g\n",average);
p=p->next;
sum1++;
}
printf("\n~%s班总人数为: %d~\n",classNumber,sum1);
fprintf(fp,"\n~%s班总人数为: %d~\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
}
puts("\n按任意一个键继续:");
getch();
}
else if(n==2 || n==3)
{
system("cls");
puts("请输入m值(0~100):");
fputs("\n请输入m值(0~100):",fp);
while(1)
{
scanf("%lf",&m);
fprintf(fp,"%g\n",m);
if(m<0 || m>100)
{
puts("输入有误,请重新输入:");
fputs("输入有误,请重新输入:",fp);
continue;
}
break;
}
if(n==2)
{
printf("所有满足某次作业分数不大于%g的学生为:\n",m);
fprintf(fp,"所有满足某次作业分数不大于%g的学生为:\n",m);
}
else
{
printf("所有满足某次作业分数不小于%g的学生为:\n",m);
fprintf(fp,"所有满足某次作业分数不小于%g的学生为:\n",m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("\n%s班:\n",classNumber);
fprintf(fp,"\n%s班:\n",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
flag2=0;
for(i=0;i<10;i++)
if(n==2 && p->score[i] <= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
}
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);
}
else if(n==3 && p->score[i] >= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
}
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:\n");
fprintf(fp,"%NULL:\n");
}
printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);
fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("\n一共满足条件人数为:%d\n",sum2);
fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);
puts("\n按任意一个键继续:");
getch();
}
else if(n==4 || n==5)
{
system("cls");
puts("输入i和m的值,用空格键分开(i:1~10,m:0~100):");
fputs("输入i和m的值,用空格键分开(i:1~10,m:0~100):",fp);
while(1)
{
scanf("%d%lf",&i,&m);
if(i<1 || i>10 || m<0 || m>100)
{
puts("输入错误,请重新输入:");
fputs("输入错误,请重新输入:",fp);
continue;
}
break;
}
if(n==4)
{
printf("所有满足第%d次作业分数不大于%g的学生为:\n",i,m);
fprintf(fp,"所有满足第%d次作业分数不大于%g的学生为:\n",i,m);
}
else
{
printf("所有满足第%d次作业分数不小于%g的学生为:\n",i,m);
fprintf(fp,"所有满足第%d次作业分数不小于%g的学生为:\n",i,m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("\n%s班:\n",classNumber);
fprintf(fp,"\n%s班:\n",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
if(n==4 && p->score[i-1] <= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
}
else if(n==5 && p->score[i-1] >= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:\n",classNumber);
fprintf(fp,"NULL:\n",classNumber);
}
printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);
fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("\n一共满足条件人数为:%d\n",sum2);
fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);
puts("\n按任意一个键继续:");
getch();
}
}
fclose(fp);
}

void destroy_list(stuList &L)
{
stuList p;
while(p=L->next)
{
L->next=p->next;
free(p);
}
free(L);
}

int main()
{
int m,n,i;
double average;
char stuNumber[20],classNumber[20];
stuList L,p;
cre_node(L);
cre_cla_info(L);
while(1)
{
system("cls");
print();
scanf("%d",&n);
if(n<1 || n>6)
break;
if(n==1)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生%s所在班级为:%s\n",p->stuNumber,p->classNumber);
puts("只录入该学生某一次的作业请输入1,要一起录入该学生10次作业请输入其他数字:");
scanf("%d",&m);
if(m==1)
{
puts("录入该学生第几次的作业?");
while(1)
{
scanf("%d",&i);
if(i<1 || i>10)
{
puts("范围只能是1~10,请重新输入:");
continue;
}
break;
}
printf("该学生第%d次作业分数为:%g,你要修改为?:\t",i,p->score[i-1]);
scanf("%lf",&p->score[i-1]);
puts("本次操作结果:");
printf("%s班%s学生第%d次作业分数为%g:\n",p->classNumber,p->stuNumber,i,p->score[i-1]);
puts("\n按任意一个键继续:");
getch();
}
else
for(i=0;i<10;i++)
{
printf("第%d次作业分数: ",i+1);
scanf("%lf",&p->score[i]);
}
}
else if(n==2)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
i=get_stu_info(L,stuNumber,p);
if( !i)
continue;
average=0;
if(i==1)
{
printf("该学生所在班级班号为:%s,10次作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
}
average/=10;
printf("\n该学生期末成绩为: %g\n\n",average);
}
puts("\n按任意一个键继续:");
getch();
}
else if(n==3)
{
system("cls");
puts("输入班级的班号:");
fflush(stdin);
gets(classNumber);
print_cla_info(L,classNumber);
}
else if(n==4)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
while(1)
{
puts("要修改第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
printf("修改该学生分数%g为:\t",p->score[m-1]);
scanf("%lf",&p->score[m-1]);
}
}
else if(n==5)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
while(1)
{
puts("要删除第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
p->score[m-1]=0;
}
}
else
{
system("cls");
count(L);
}
}
destroy_list(L);
puts("谢谢使用!按任意键退出:");
getch();
return 0;
}

哪里不懂可追问:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
typedef struct
{
char num[10];//学生学号
char classnum[10];//学生所在班级班号
char name[20];//学生姓名
}Stu;
typedef struct stuscore
{
Stu pupil;
float score[10];//10次作业的完成得分情况
struct stuscore*next;
}student;
void initscore(float score[10])
{
int i;
for(i=0;i<10;i++)
score[i]=0;
}
student* insert(student *head)//录入某位学生某次作业的分数;
{
student *p,*q,*pf;
Stu stu;
int n;
float score;
q=(student*)malloc(sizeof(student));
printf("请输入该学生的基本信息:\n");
printf("学号\t班号\t姓名\n");
scanf("%s %s %s",stu.num,stu.classnum,stu.name);
printf("请输入该学生的第几次成绩、以及分数\n");
scanf("%d%f",&n,&score);
strcpy(q->pupil.num,stu.num);
strcpy(q->pupil.classnum,stu.classnum);
strcpy(q->pupil.name,stu.name);
initscore(q->score);
q->score[n-1]=score;
if(head==NULL)
{
q->next=head;
head=q;
}
else
{
for(p=head; p!=NULL&&strcmp(p->pupil.num,stu.num)!=0 ;pf=p,p=p->next);
if(p!=NULL)
p->score[n-1]=score;
else
{
q->next=pf->next;
pf->next=q;
}
}
return head;
}
void displaystu(student *head)//给定学号,显示某位学生的作业完成情况
{
student *p;
int i;
char num[10];
printf("请输入准备显示的学生学号:\t");
scanf("%s",num);
p=(student*)malloc(sizeof(student));
for(p=head;strcmp(p->pupil.num,num)!=0;p=p->next);
printf("该学生学号为:%s\t班号为:%s\t姓名为:%s\n",p->pupil.num,p->pupil.classnum,p->pupil.name);
for(i=0;i<10;i++)
printf("第%d次成绩为:%.2f\n",i+1,p->score[i]);
printf("\n\n");
}
void displayclass(student *head)//给定某个班级的班号,显示该班学生所有学生的作业完成情况
{
student *p;
int i;
char classnum[10];
printf("请输入准备显示的班号:\t");
scanf("%s",classnum);
fflush(stdin);
printf("班号为%s的学生有:\n",classnum);
for(p=head;p!=NULL;p=p->next)
{
if(strcmp(p->pupil.classnum,classnum)==0)
{
printf("该学生学号为:%s\t姓名为:%s\n",p->pupil.num,p->pupil.name);
for(i=0;i<10;i++)
printf("第%d次成绩为:%.2f\n",i+1,p->score[i]);
printf("\n\n");
}
}
}
void modify(student *head)//给定某位学生的学号,修改该学生的作业完成情况
{
student *p;
int n;
float score;
char num[10];
printf("请输入准备修改成绩的学生学号:\t");
scanf("%s",num);
p=(student*)malloc(sizeof(student));
for(p=head;p!=NULL&& strcmp(p->pupil.num,num)!=0;p=p->next);
printf("请输入n,n表示修改第几次的作业:\n");
scanf("%d",&n);
printf("请输入修改的成绩:\n");
scanf("%f",&score);
p->score[n-1]=score;
}
void deletestu(student *head)//给定某位学生的学号,删除该学生的作业完成情况
{
student *p;
int n;
char num[10];
printf("请输入准备删除成绩的学生学号:\t");
scanf("%s",num);
p=(student*)malloc(sizeof(student));
for(p=head;p!=NULL&& strcmp(p->pupil.num,num)!=0;p=p->next);
printf("请输入n,n表示删除第几次的作业:\n");
scanf("%d",&n);
p->score[n]=0;
}
void functionselect()
{
int k;
student *head;
head=NULL;
loop: printf("请输入一个数值:\n");
printf("1表示录入成绩\n2表示显示某个学生的作业情况\n");
printf("3表示显示某个班级学生作业情况\n4表示修改某个学生的作业情况\n");
printf("5表示删除某个学生的作业情况\n6表示退出\n");
scanf("%d",&k);
switch (k)
{
case 1:head=insert(head);goto loop;
case 2:displaystu(head);goto loop;
case 3:displayclass(head);goto loop;
case 4:modify(head);goto loop;
case 5:deletestu(head);goto loop;
case 6:break;
}
}
void main()
{
functionselect();
}

这个不难吧,学过C应该能完成。

好复杂啊


芝罘区18249082519: 比较复杂的C语言程序设计题目1111 -
弋春复方: 第一题void func(char *w,char x,int *n){int i, p=0;w[*n]=x;while (x>w[p]) p++;for (i=*n;i>p;i--) w[i]=w[i-1];w[p]=x;++ *n;}

芝罘区18249082519: C语言程序设计..题目..找高手帮忙 -
弋春复方: 正确率90% CBDDB BDCAD DCABD1. 无限次2. 93. 64. 35. 26. 17. 268. 69. 210. auto11. 612. 指针函数是指带指针的函数,即本质是一个函数.13. x(这里题目有误,应该为**p2=&p1)14. 10次15. 7

芝罘区18249082519: 求一道高难度的c语言程序设计题,望各位大侠多多指教!
弋春复方: 如果你想要的是分几次输入单词,然后求出最长的,上面的可以满足你要求啦,不过如果你想要一次输入,然后求出最长的单词,下面这个可以解决, #include <stdio.h> #include <string.h> #include <conio.h> void main() {char ch[100]; char a[...

芝罘区18249082519: 真诚的向各位高人求做一个C语言作业(编程题)
弋春复方: #include <stdio.h> void countvalue(); void writedat(int cnt,int sum); int cnt,sum;void countvalue() { int a,b,c; cnt=0; sum=0; for(a=1;a<13;a++) for(b=1;b<13;b++) for(c=1;c<13;c++) { if((a+b+c)==13) if((a-c)==5) { cnt++; sum+=a+b+c; } } } void writedat(...

芝罘区18249082519: C语言程序设计题··急!大家进来帮帮忙!!跪求高人!!跪求解!! -
弋春复方: 半调水啊:本程序运用的万年历的计算公式: d=a-1+(a-1)/4-(a-1)/100+(a-1)/400+c; 其中a为年c为该日期在本年中的天数,d取整数,当d/7余数0时是星期天,余数1时是星期一依此类推. #includeint m_day(int year,int month)/*此函数是给定年...

芝罘区18249082519: C语言编程题求高手 ...
弋春复方: 你好,程序如下: #include<stdio.h> void main() { int a,b,c; int n; for(n=100;n<=999;n++) { a=n/100; b=n/10%10; c=n%10; if(n==(a*a*a+b*b*b+c*c*c)) printf("%d\n",n); } }有疑问提出. 望采纳.

芝罘区18249082519: C语言的几道题目不懂.感觉蛮复杂的.C高手进啊.谢谢~ -
弋春复方: 1局部静态变量的值,会默认初始化为0.而且在下一次...

芝罘区18249082519: c语言编程题,求高手! -
弋春复方: 少年,先帮你分析一下吧.初始状态:f1=1,f2=1 i=1时,f1=f1+f2=1+1=2(第一项和第二项相加,f1变为第三项) f2=f2+f1=1+2=3(第二项和第三项相加,f2变为第四项) 下次循环就分别算出了第五项和第六项 也就是说,一个循环里面就算了数...

芝罘区18249082519: 用C语言编写一个复杂程序 急需 -
弋春复方: #include <stdio.h> #include <stdlib.h> #include <time.h> /**快速排序版本1*/ int PARTITION(int A[],int p,int r)///p,r是数组下标 { int x=A[r]; int i=p-1; int j; int tmp; for(j=p;j<r;j++) { if(A[j]<x) { i++; tmp=A[i]; A[i]=A[j]; A[j]=tmp; } } i++; tmp=A[i]; A[i]=A[r]; A[r]=...

芝罘区18249082519: C语言编程题,求助高手!!! -
弋春复方: /*用scanf()无法输入空格,就用getchar了*/ #include<stdio.h> int main(void) {char ch;static char str[128];int i=0;int j=0;printf("input the string: \n");while(1){ch=getchar();if(ch=='\n'||i>127)break;str[i]=ch;i++;}for(i=0;str[i];i++){for(j=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网