#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char num[20]
char name[20]
int score1
int score2
int score3
}stu[100]={"01","zhangmingming"饥州,67,78,82,"02","lichengyou",78,91,88,"03","zhanghuican",68,82,56,"04","wanglu",56,45,77,"05","chendongming",67,38,47}
int main()
{
int i
int s=5
void cjtj()
void xxwh()
void xxcx()
void cjpx()
FILE *fp1
if((fp1=fopen("stu_list","w"))==NULL) /*以只写的方式打开一个文件烂渗蔽stu_list*/
{
printf("Can not open file!\n")
exit(1)
}
fwrite(&stu,sizeof(struct student),5,fp1)/*将stu中的数据写到文件中*/
fclose(fp1)
do
{
printf("\n")
printf("\n")
printf(" +--------------------+\n")
printf(" |欢迎使用学生管理系统|\n")
printf(" ||\n")
printf(" | 请按照步骤 *** 作 |\n")
printf(" | 1.信息维护 |\n")
printf(" | 2.信息查询 |\n")
printf(" | 3.成绩统计 |\n")
printf(" | 4.成绩排序 |\n")
printf(" | 0.退出程序 |\n")
printf(" +--------------------+\n")
printf(" 请选择您要进行的 *** 作:")
scanf("%d",&i)
if(i==1)
{
xxwh()
}
else if(i==2)
{
xxcx()
}
else if(i==3)
{
cjtj()
}
else if(i==4)
{
cjpx()
}
else
break
}while(i!=0)
printf("谢谢使用!\n")
return 0
}
void cjtj() /*成绩统计子函数*/
{
char name[20]
system("cls")
printf("请输入您想统计的课程名称:\n")
scanf("%s",name)
int q,w,u,s,g,p,k,l,m
if(strcmp(name,"yuwen")==0)
{
printf("请输入您想统计的分数段(例60,70):\n")
scanf("%d,%d",&q,&w)
for(u=0u<5u++)
{
if((stu[u].score1>=q)&&(stu[u].score1<=w))
printf("%s %s %d %d %d\n",stu[u].num,stu[u].name,stu[u].score1,stu[u].score2,stu[u].score3)
}
}
if(strcmp(name,"shuxue")==0)
{
printf("请输入您想统计的分数段(例60,70):\n")
scanf("%d,%d",&s,&g)
for(p=0p<5p++)
{
if(stu[p].score2>=s&&g>=stu[p].score2)
printf("%s %s %d %d %d\n",stu[p].num,stu[p].name,stu[p].score1,stu[p].score2,stu[p].score3)
}
}
if(strcmp(name,"yingyu")==0)
{
printf("请输入您想统计的分数段(例喊宽60,70):\n")
scanf("%d,%d",&k,&l)
for(m=0m<5m++)
{
if(stu[m].score3>=k&&stu[m].score3<=l)
printf("%s %s %d %d %d\n",stu[m].num,stu[m].name,stu[m].score1,stu[m].score2,stu[m].score3)
}
}
return
}
void xxwh() /* 信息维护子函数*/
{
int y
int s=5
void zengjia()
void shanjian()
void xiugai()
do
{
printf(" --------------------\n")
printf(" 欢迎进入信息维护模块\n")
printf(" 1.增加学生信息 \n")
printf(" 2.删减学生信息 \n")
printf(" 3.修改学生信息 \n")
printf(" 4.退出本模块 \n")
printf(" --------------------\n")
printf(" 请输入您要进行的 *** 作(1-4):")
scanf("%d",&y)
if(y==1)
{
zengjia()
s=s+1
}
else if(y==2)
{
shanjian()
s=s-1
}
else if(y==3)
{
xiugai()
}
else
break
}while(y!=4)
printf("谢谢使用!\n")
return
}
void zengjia() /*增加学生信息*/
{
struct student student1
FILE *fp1
int n=5
printf("输入您想添加的学生信息:\n")
scanf("%s %s%d%d%d",student1.num,student1.name,&student1.score1,&student1.score2,&student1.score3)
strcpy(stu[n+1].num,student1.num)
strcpy(stu[n+1].name,student1.name)
stu[n+1].score1=student1.score1
stu[n+1].score2=student1.score2
stu[n+1].score3=student1.score3
if((fp1=fopen("stu_list","r+"))==NULL) /*以读写的方式打开一个文件stu_list*/
{
printf("Can not open file!\n")
exit(1)
}
fwrite(&stu,sizeof(struct student),6,fp1)/*将stu中的数据写到文件中*/
fclose(fp1)
printf("\n")
printf("添加成功!\n")
printf("\n")
printf("\n")
return
}
void shanjian() /*删除学生信息*/
{
char a[20]
int h,j,e
FILE *fp1
printf("请输入您想删除的学生学号:\n")
scanf("%s",a)
for(h=0h<5h++)
{
if(strcmp(a,stu[h].num)==0)
j=h
}
if(j!=4)
{
for(e=h-1e<5e++,j++)
{
strcpy(stu[j].num,stu[j+1].num)
strcpy(stu[j].name,stu[j+1].name)
stu[j].score1=stu[j+1].score1
stu[j].score2=stu[j+1].score2
stu[j].score3=stu[j+1].score3
}
}
if((fp1=fopen("stu_list","r+"))==NULL) /*以读写的方式打开一个文件stu_list*/
{
printf("Can not open file!\n")
exit(1)
}
fwrite(&stu,sizeof(struct student),6,fp1)/*将stu中的数据写到文件中*/
fclose(fp1)
printf("\n")
printf("删除成功!\n")
printf("\n")
printf("\n")
return
}
void xiugai() /*修改学生信息*/
{
char b[20]
int c,n=5
FILE *fp1
struct student student2
printf("请输入您想修改的学生学号:\n")
scanf("%s",b)
for(c=0c<nc++)
{
if(strcmp(b,stu[c].num)==0)
{
printf("请输入修改后的学生信息:\n")
scanf("%s %s%d%d%d",student2.num,student2.name,&student2.score1,&student2.score2,&student2.score3)
strcpy(stu[c].num,student2.num)
strcpy(stu[c].name,student2.name)
stu[c].score1=student2.score1
stu[c].score2=student2.score2
stu[c].score3=student2.score3
}
} if((fp1=fopen("stu_list","r+"))==NULL) /*以读写的方式打开一个文件stu_list*/
{
printf("Can not open file!\n")
exit(1)
}
fwrite(&stu,sizeof(struct student),6,fp1)/*将stu中的数据写到文件中*/
fclose(fp1)
fclose(fp1)
printf("\n")
printf("修改成功!\n")
printf("\n")
printf("\n")
return
}
void cjpx() /*排序函数*/
{
int z,x,c,v,o
struct student t
do
{
printf("\n")
printf("\n")
printf("[1]按升序排序:\n")
printf("[2]按降序排序:\n")
printf("[3]返回\n")
printf("请选择:")
scanf("%d",&z)
if(z==1)
{
printf("选择的科目:")
printf("[1]语文:[2]数学:[3]英语:")
scanf("%d",&x)
if(x==1)
{
for(c=1c<5c++)
for(v=0v<5-cv++)
if(stu[v].score1>stu[v+1].score1)
{
t=stu[v]
stu[v]=stu[v+1]
stu[v+1]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
else if(x==2)
{
for(c=1c<5c++)
for(v=0v<5-cv++)
if(stu[v].score2>stu[v+1].score2)
{
t=stu[v]
stu[v]=stu[v+1]
stu[v+1]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
else if(x==3)
{
for(c=1c<5c++)
for(v=0v<5-cv++)
if(stu[v].score3>stu[v+1].score3)
{
t=stu[v]
stu[v]=stu[v+1]
stu[v+1]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
}
else
if(z==2)
{
printf("选择的科目:")
printf("[1]语文:[2]数学:[3]英语:")
scanf("%d",&x)
if(x==1)
{
for(c=1c<5c++)
for(v=0v<5-cv++)
if(stu[v].score1<stu[v+1].score1)
{
t=stu[v+1]
stu[v+1]=stu[v]
stu[v]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
else
if(x==2)
{
for(c=1c<5c++)
for(v=0v<5-cv++)
if(stu[v].score2<stu[v+1].score2)
{
t=stu[v+1]
stu[v+1]=stu[v]
stu[v]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
else
if(x==3)
{
for(c=1c<5c++)
for(v=0v<5-cc++)
if(stu[v].score3<stu[v+1].score3)
{
t=stu[v+1]
stu[v+1]=stu[v]
stu[v]=t
}
for(o=0o<5o++)
printf("%s %s %d %d %d\n",stu[o].num,stu[o].name,stu[o].score1,stu[o].score2,stu[o].score3)
}
}
else
break
}while(z!=3)
printf("\n")
printf("\n")
return
}
void xxcx() /*信息查询子函数*/
{
int g,i
char m[20]
system("cls")
do
{
printf("[1]查询学生信息:\n")
printf("[2]退出查询:\n")
printf("请选择:")
scanf("%d",&g)
if(g==1)
{
printf("请输入学号:")
scanf("%s",m)
for(i=0i<5i++)
{
if(strcmp(m,stu[i].num)==0)
{
printf("*********\n")
printf("学号:%s\n",stu[i].num)
printf("姓名:%s\n",stu[i].name)
printf("语文:%d\n",stu[i].score1)
printf("数学:%d\n",stu[i].score2)
printf("英语:%d\n",stu[i].score3)
printf("\n")
printf("\n")
}
}
}
else
break
}while(g!=2)
printf("查找完毕!\n")
system("pause")
return
}
输出缓冲区只有300行,再多了就把最前面的覆盖了,这是正常现象。当然可以扩大输出缓冲区,但考虑没有:扩大到400行你的需求满足了,另一程序侍蔽需要输出1000行又怎么办?所以不管输出缓冲区有多老缺州大,但总是有限的扮镇,不能要求把所有输出都在屏幕上显示出来……供参考。源代码——C语言实现打印杨辉三角(源代码)杨辉三角形是形如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。这个题目常用于程序设计的练习。
下面给出六种不同的解法。
解法一
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0}
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:"雀差)
scanf("%d",&n)
}
for(i=0i<ni++)
a[i][0]=1
for(i=1i<ni++)
for(j=1j<=ij++)
a[i][j]=a[i-1][j-1]+a[i-1][j]
for(i=0i<ni++)
{ for(j=0j<=ij++)
printf("%5d",a[i][j])
printf("\n")
}
}
点评:解法一是一般最容易想到的解法,各部分功能独立,程序浅显易懂。
解法二
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={1}
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:")
scanf("%d",&n)
}
for(i=1i<ni++)
{ a[i][0]=1
for(j=1j<=ij++)
a[i][j]=a[i-1][j-1]+a[i-1][j]
}
for(i=0i<ni++)
{ for(j=0j<=ij++)
printf("%5d",a[i][j])
printf("\n")
}
}
点评:解窢二是顷隐皮在解法一的基础上,把第一列置为1的命令移到下面的双重循环中,减少了一个循环。注意初始化携丛数组的变化。
解法三
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1}
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:")
scanf("%d",&n)
}
for(i=1i<=ni++)
for(j=1j<=ij++)
a[i][j]=a[i-1][j-1]+a[i-1][j]
for(i=1i<=ni++)
{ for(j=1j<=ij++) printf("%5d",a[i][j])
printf("\n")
}
}
点评:解法三是在解法一、二的基础上,把第一列置为1的命令去掉了,注意初始化数组的变化。
解法四
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1}
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:")
scanf("%d",&n)
}
for(i=1i<=ni++)
{ for(j=1j<=ij++)
{ a[i][j]=a[i-1][j-1]+a[i-1][j]
printf("%5d",a[i][j])
}
printf("\n")
}
}
点评:解法四是在解法三的基础上,把计算和打印合并在一个双重循环中。
解法五
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={1},b[17]
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:")
scanf("%d",&n)
}
for(i=0i<ni++)
{ b[0]=a[0]
for(j=1j<=ij++)
b[j]=a[j-1]+a[j]
for(j=0j<=ij++)
{ a[j]=b[j]
printf("%5d",a[j])
}
printf("\n")
}
}
点评:解法一到解法四都用了二维数组,占用的空间较多。而解法五只使用了两个一维数组。
解法六
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={0,1},l,r
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:")
scanf("%d",&n)
}
for(i=1i<=ni++)
{ l=0
for(j=1j<=ij++)
{ r=a[j]
a[j]=l+r
l=r
printf("%5d",a[j])
}
printf("\n")
}
}
点评:解法六只使用了一个一维数组和两个临时变量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)