
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0/* */
struct student
{
char num[10]/* 学号 */
char name[20]
char sex[4]
char yuan
int ban
char neartime[10]/* 最近更新时间 */
}
typedef struct node
{
struct student data
struct node *next
}Node,*Link
void menu()
{
printf("********************************************************************************")
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n")
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n")
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n")
printf("********************************************************************************\n")
}
void printstart()
{
printf("-----------------------------------------------------------------------\n")
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n")
}
void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n")
}
void printc() /* 本函数用于输出中文 */
{
printf("学号\t 姓如做名性别 学院 班级\n")
}
void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%c\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.yuan,p->data.ban)
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r
r=r->next
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r
r=r->next
}
}
return 0
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s
char num[10]
r=l
s=l->next
while(r->next!=NULL)
r=r->next/* 将指针置于最拍芹末尾 */
while(1)
{
printf("请你输入学号(以'渣贺衡0'返回上一级菜单:)")
scanf("%s",num)
if(strcmp(num,"0")==0)
break
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num)
printstart()
printc()
printe(s)
printstart()
printf("\n")
return
}
s=s->next
}
p=(Node *)malloc(sizeof(Node))
strcpy(p->data.num,num)
printf("请你输入姓名:")
scanf("%s",p->data.name)
getchar()
printf("请你输入性别:")
scanf("%s",p->data.sex)
getchar()
printf("请你输入学院:")
scanf("%c",&p->data.yuan)
getchar()
printf("请你输入班级:")
scanf("%d",&p->data.ban)
getchar()
/* 信息输入已经完成 */
p->next=NULL
r->next=p
r=p
shoudsave=1 }
}
void Qur(Link l) /* 查询学生 */
{
int sel
char findmess[20]
Node *p
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n")
return
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n")
scanf("%d",&sel)
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{
printf("\t\t\t\t查找结果\n")
printstart()
printc()
printe(p)
printstart()
}
else
Nofind()
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:")
scanf("%s",findmess)
p=Locate(l,findmess,"name")
if(p)
{
printf("\t\t\t\t查找结果\n")
printstart()
printc()
printe(p)
printstart()
}
else
Nofind()
}
else
Wrong()
}
void Del(Link l) /* 删除 */
{
int sel
Node *p,*r
char findmess[20]
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n")
return
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n")
scanf("%d",&sel)
if(sel==1)
{
printf("请你输入要删除的学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{
r=l
while(r->next!=p)
r=r->next
r->next=p->next
free(p)
printf("\n=====>提示:该学生已经成功删除!\n")
shoudsave=1
}
else
Nofind()
}
else if(sel==2)
{
printf("请你输入要删除的姓名:")
scanf("%s",findmess)
p=Locate(l,findmess,"name")
if(p)
{
r=l
while(r->next!=p)
r=r->next
r->next=p->next
free(p)
printf("\n=====>提示:该学生已经成功删除!\n")
shoudsave=1
}
else
Nofind()
}
else
Wrong()
}
void Modify(Link l)
{
Node *p
char findmess[20]
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n")
return
}
printf("请你输入要修改的学生学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num)
scanf("%s",p->data.num)
printf("请你输入新姓名(原来是%s):",p->data.name)
scanf("%s",p->data.name)
getchar()
printf("请你输入新性别(原来是%s):",p->data.sex)
scanf("%s",p->data.sex)
printf("请你输入新的学院:",p->data.yuan)
scanf("%c",&p->data.yuan)
getchar()
printf("请你输入新的班级(原来是%d):",p->data.ban)
scanf("%d",&p->data.ban)
getchar()
printf("\n=====>提示:资料修改成功!\n")
shoudsave=1
}
else
Nofind()
}
void Save(Link l)
{
FILE* fp
Node *p
int flag=1,count=0
fp=fopen("c:\\student","wb")
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n")
exit(1)
}
p=l->next
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next
count++
}
else
{
flag=0
break
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count)
shoudsave=0
}
fclose(fp)
}
void main()
{
Link l/* 连表 */
FILE *fp/* 文件指针 */
int sel
char ch
char jian
int count=0
Node *p,*r
printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t-------建筑电气及智能化0801\n")
l=(Node*)malloc(sizeof(Node))
l->next=NULL
r=l
fp=fopen("C:\\student","rb")
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n")
scanf("%c",&jian)
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb")
else
exit(0)
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n")
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node))
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL
r->next=p
r=p/* 将该接点挂入连中 */
count++
}
}
fclose(fp)/* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count)
while(1)
{
menu()
printf("请你选择 *** 作:")
scanf("%d",&sel)
if(sel==0)
{
if(shoudsave==1)
{ getchar()
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n")
scanf("%c",&ch)
if(ch=='y'||ch=='Y')
Save(l)
}
printf("\n=====>提示:你已经退出系统,再见!\n")
break
}
switch(sel)
{
case 1:Add(l)break/* 增加学生 */
case 2:Del(l)break/* 删除学生 */
case 3:Qur(l)break/* 查询学生 */
case 4:Modify(l)break/* 修改学生 */
case 5:Save(l)break/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n")break
default: Wrong()getchar()break
}
}
}
第二个:
#include<stdio.h>
//定义结构体
struct student
{
int number
char name[20]
float score1
float score2
float score3
float ave
}
//单个学员录入函数
void input(struct student *st)
{
printf("\n学号: ")
scanf("%d",&st->number)
printf("姓名: ")
fflush(stdin)
gets(st->name)
printf("三门课成绩:\n成绩1: ")
scanf("%f",&st->score1)
printf("成绩2: ")
scanf("%f",&st->score2)
printf("成绩3: ")
scanf("%f",&st->score3)
st->ave=(st->score1+st->score2+st->score3)/3
}
//显示学员信息函数
void display(struct student *st,int n)
{
int i
printf("\n\t学号\t姓名\t平均成绩\n")
for(i=0i<ni++)
{
printf("\t%d\t%s\t%5.2f\n",st->number,st->name,st->ave)
st++
}
}
//排序函数,大到小
void sorting(struct student stu[],int n)
{
struct student temp
int i,j
for(i=0i<n-1i++)
{
for(j=0j<n-i-1j++)
{
if(stu[j].ave<stu[j+1].ave)
{
temp=stu[j]
stu[j]=stu[j+1]
stu[j+1]=temp
}
}
}
}
//插入函数
void insertinfo(struct student stu[], struct student *st1, int n)
{
int i,j
for(i=0i<ni++)
{
if(stu[i].ave<st1->ave)
break
}
for(j=nj>ij--)
stu[j]=stu[j-1]
stu[i]=*st1
}
//删除学员信息函数
void deleteinfo(struct student stu[], int num, int n)
{
int i,j
for(i=0i<ni++)
{
if(stu[i].number==num)
break
}
for(j=ij<nj++)
stu[j]=stu[j+1]
}
void main()
{
struct student stu[50],stu1
char ch
int i=0,num
//通过调用函数录入学员的信息
printf(" 请输入学员信息: \n\n")
do
{
input(&stu[i++])
printf("是否继续(Y/N)? ")
fflush(stdin)
ch=getchar()
}while(ch=='Y'||ch=='y')
//显示学员信息
printf("\n排序前学员的信息如下: \n")
display(stu,i)
//排序函数
sorting(stu,i)
//显示学员信息
printf("\n排序后学员的信息如下: \n")
display(stu,i)
//插入函数
printf("\n是否要插入新学员(Y/N)? ")
fflush(stdin)
ch=getchar()
while(ch=='Y'||ch=='y')
{
printf("\n请输入要插入学员的信息: \n")
input(&stu1)
insertinfo(stu,&stu1,i)
i++
printf("\n是否继续插入新学员(Y/N)? ")
fflush(stdin)
ch=getchar()
}
//显示学员信息
printf("\n插入后学员的信息如下: \n")
display(stu,i)
//删除函数
printf("\n是否要删除某个学员(Y/N)? ")
fflush(stdin)
ch=getchar()
while(ch=='Y'||ch=='y')
{
printf("\n请输入要删除学员的学号: \n")
scanf("%d",&num)
deleteinfo(stu,num,i)
i--
printf("\n是否继续删除某个学员(Y/N)? ")
fflush(stdin)
ch=getchar()
}
//显示学员信息
printf("\n删除后学员的信息如下: \n")
display(stu,i)
}
1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1^3+5^3+3^3。
#include
#include
int main()
{
int bai_wei,shi_wei,ge_wei,i,sum=0
for(i=100i<1000i++)
{
bai_wei=i/100
shi_wei=(i%100)/10
ge_wei=i%10
if(i==pow(bai_wei,3)+pow(shi_wei,3)+pow(ge_wei,3))
{
printf("%d ",i)
sum++
if(sum%5==0)
printf(" ")
}
}
printf(" ")
return 0
}
2.请输入任意两个整数x和y,求其最大公约数和最小公倍数。
#include
int main()
{
int x,y,min,max,i
printf("请输入任意两个整数:")
scanf("%d%d",&x,&y)
min=x>y?y:x
max=x>y?x:y
for(i=mini>0i--)
if(x%i==0&&y%i==0)
{
printf("这升李两个整数的最大公约数为:%d ",i)
break
}
for(i=maxi<=x*yi++)
if(i%x==0&&i%y==0)
{
printf("这两个整数的最小公倍数为:%d ",i)
break
}
return 0
}
3.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include
#include
#define N 50
int main()
{
int sum1=0,sum2=0,sum3=0,sum4,i=0
char str[N]
printf("请输入一串字扒芹符串:")
scanf("%s",str)
for(i=0i<strlen(str)i++) p=""></strlen(str)i++)>
{
if((str[i]>='a'&&str[i]='A'&&str[i]<='Z'))
sum1++
if(str[i]==' ')
sum2++
if(str[i]>='0'&&str[i]<='9')
sum3++
}
sum4=strlen(str)-sum1-sum2-sum3
printf("英文字母的个数:%d ",sum1)
printf("空格的个数:%d ",sum2)
printf("数字的个数:%d ",sum3)
printf("其他符号的个数:%d ",sum4)
return 0
}
4.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
#include
#include
int main()
{
int a,n,s=0,i,x=0,y=0
printf("请输入整数a的值:")
scanf("%d",&a)
printf("请输入相加的个数n:")
scanf("%d",&n)
for(i=0i<ni++) p=""></ni++)>
{
x=y+2*pow(10,i)
y=x
s=s+x
}
printf("s=%d ",s)
return 0
}
5.一个数如果恰好等于它的因子之和吵此迟,这个数就称为“完数”。例如6=1+2+3。编程找出1000以内的所有完数。
#include
int main()
{
int sum=0,i,j
printf("在1000以内的完数有:")
for(i=2i<=1000i++)
{
for(j=1j<ij++) p=""></ij++)>
if(i%j==0)
sum=sum+j
if(sum==i)
printf("%d ",i)
sum=0
}
printf(" ")
return 0
}
6.输入一个不多于5位的正整数,要求:1、求它是几位数;2、逆序打印出个位数字。
#include
int pows(int a,int n)
{
int sum=1,i
for(i=0i<ni++) p=""></ni++)>
sum=sum*a
return sum
}
int main()
{
int n,i,k,x
printf("n=")
scanf("%d",&n)
for(i=1i<6i++)
if(n/pows(10,i)==0)
{
printf("%d ",i)
k=i
break
}
for(i=0i<ki++) p=""></ki++)>
{
x=n/pows(10,i)%10
printf("%d",x)
}
printf(" ")
return 0
}
7.输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#include
int main()
{
int n,a[5],i=0
printf("请输入一个5位数:")
scanf("%d",&n)
while(n!=0)
{
a[i]=n%10
n=n/10
i++
}
if(a[0]==a[4]&&a[1]==a[3])
printf("这个数是回文数 ")
else
printf("这个数不是回文数 ")
return 0
}
8.利用递归算法,将所输入的5个字符,以相反顺序打印出来。
#include
void digui(char a[],int n)
{
if(n==1)
printf("%c",a[0])
else
{
printf("%c",a[n-1])
digui(a,n-1)
}
}
int main()
{
char str[5]
printf("请输入5个字符:")
scanf("%s",str)
digui(str,5)
printf(" ")
return 0
}
9.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…球出这个序列的前20项之和。
#include
int main()
{
int i,a=1,b=1
float sum=0.0
for(i=1i<=20i++)
{
sum=sum+(float)(a+i)/b
b=a+i
a=i
}
printf("sum=%f ",sum)
return 0
}
10.利用递归算法求5!。
#include
int digui(int n)
{
if(n==1)
return 1
else
return n*digui(n-1)
}
int main()
{
int n,sum
printf("n:")
scanf("%d",&n)
sum=digui(n)
printf("sum=%d ",sum)
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)