C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。自考c程序设计课程对于没有基础的考生来说刚开始是有点难但是你要是入门了就简单了。一开始你可以先找些简单的例子看看,其中基本语法要多记,多动手勤练习。
自考c程序设计课程的学习方法
第一,兴趣最重要。一定要想办法培养自己对c语言的兴趣。
第二,基础知识一定要学好。反复的看一下c语言中最基本的知识,要求熟记于心。
第三,上机练习是关键。只看书本上的程序是不行的。虽然你可以看懂,但这只是肤浅的了解了。当你用到的时候就会发现脑子一片的空白。所有对于书本上的程序或是自己写出来的程序一定要上机练习一下。出现了问题要找出来,并总结自己的失误之处。
第四,不要太注重细枝末节,死扣知识。初学者要从大的方面着眼,从总体上了解c语言的知识。
自考/成考有疑问、不知道如何总结自考/成考考点内容、不清楚自考/成考报名当地政策,点击底部咨询官网,免费领取复习资料:>
#include <stdioh>
#define MAX 200
int main()
{
int a[MAX][MAX],n;
void initmatrix(int a[][MAX]);//初始化矩阵,将所有元素赋0
void creatematrix_2k1(int a[][MAX],int n);//生成2n+1阶幻方
void creatematrix_4k(int a[][MAX],int n);//生成4n阶幻方
void creatematrix_4k2(int a[][MAX],int n);//生成4n+2阶幻方
void outputmatrix(int a[][MAX],int n);//输出n阶幻方
initmatrix(a);
printf("please input a interger number:");
scanf("%d",&n);
if(n%2) creatematrix_2k1(a,(n-1)/2);
else {if(n%4==0) creatematrix_4k(a,n/4);
else creatematrix_4k2(a,(n-2)/4);}
outputmatrix(a,n);
return 0;
}
void initmatrix(int a[][MAX])
{
for(int i=0;i<MAX;i++)
for(int j=0;j<MAX;j++)
a[i][j]=0;
}
void outputmatrix(int a[][MAX],int n)
{
for(int i=0;i<n;i++)
{
printf("第%-3d行的数依次为:",i+1);
for(int j=0;j<n;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
}
void creatematrix_2k1(int a[][MAX],int n)
{
int col=-1,row=-1;
int p,q;
p=&col,q=&row;
void fillmatrix(int a[][MAX],int p,int q,int n,int i);//将i填入2n+1阶幻方中
for(int i=1;i<=((2n+1)(2n+1));i++)
fillmatrix(a,p,q,n,i);
}
void fillmatrix(int a[][MAX],int p,int q,int n,int i)
{
if(i==1)
{
a[0][n]=i;
p=0,q=n;
}
else
{
if((p==0&&q==2n)||a[(p+2n)%(2n+1)][(q+1)%(2n+1)])
{
a[(p+1)%(2n+1)][q]=i;
p=(p+1)%(2n+1);}
else{a[(p+2n)%(2n+1)][(q+1)%(2n+1)]=i;
p=(p+2n)%(2n+1),q=(q+1)%(2n+1);}
}
}
void creatematrix_4k(int a[][MAX],int n)
{
int temp;
for(int i=0;i<4n;i++)
{ for(int j=0;j<4n;j++)
a[i][j]=4ni+j+1;}
for(i=0;i<4n;i++)
for(int j=0;j<4n;j++)
if((i>j)&&((i-j)%4==0||(i+j+1)%4==0))
{temp=a[i][j];
a[i][j]=a[4n-1-i][4n-1-j];
a[4n-1-i][4n-1-j]=temp;}
for(i=0;i<2n;i++)
{temp=a[i][i];
a[i][i]=a[4n-1-i][4n-1-i];
a[4n-1-i][4n-1-i]=temp;}
}
void creatematrix_4k2(int a[][MAX],int n)//构造4n+2阶幻方
{
int col=-1,row=-1,i;
int exn=(2n+1)(2n+1);
int p,q;
p=&col,q=&row;
void fillmatrix_2(int a[][MAX],int p,int q,int cs, int rs,int n,int i);/将i填入以a[cs][rs]为起始的2n+1阶幻方中,用p,q返回的i-1行列值/
for(i=1;i<=exn;i++)
fillmatrix_2(a,p,q,0,0,n,i);
for(i=exn+1;i<=exn2;i++)
fillmatrix_2(a,p,q,2n+1,2n+1,n,i);
for(i=2exn+1;i<=3exn;i++)
fillmatrix_2(a,p,q,0,2n+1,n,i);
for(i=3exn+1;i<=4exn;i++)
fillmatrix_2(a,p,q,2n+1,0,n,i);
void lastswap(int a[][MAX],int n);//对4n+2阶幻方做最后的变换
lastswap(a,n);
}
void fillmatrix_2(int a[][MAX],int p,int q,int cs, int rs,int n,int i)
{
int exn=(2n+1)(2n+1);
if(i%exn==1)
{
a[cs+0][rs+n]=i;
p=0,q=n;
}
else {if((p==0&&q==2n)||a[(p+2n)%(2n+1)+cs][(q+1)%(2n+1)+rs])
{
a[(p+1)%(2n+1)+cs][q+rs]=i;
p=(p+1)%(2n+1);
}
else{
a[(p+2n)%(2n+1)+cs][(q+1)%(2n+1)+rs]=i;
p=(p+2n)%(2n+1),q=(q+1)%(2n+1);
}
}
}
void lastswap(int a[][MAX],int n)
{
int temp,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{temp=a[i][j];
a[i][j]=a[2n+1+i][j];
a[2n+1+i][j]=temp;}
for(i=1;i<=n;i++)
{temp=a[n][i];
a[n][i]=a[3n+1][i];
a[3n+1][i]=temp;}
for(i=n+1;i<2n+1;i++)
for(j=0;j<n;j++)
{temp=a[i][j];
a[i][j]=a[2n+1+i][j];
a[2n+1+i][j]=temp;}
for(i=0;i<2n+1;i++)
for(j=4n+1;j>3n+2;j--)
{temp=a[i][j];
a[i][j]=a[2n+1+i][j];
a[2n+1+i][j]=temp;}
}
求幻方的程序
#include <stdioh>
#include <stdlibh>
#define IO "%d"//和下面一行共同扩展数据成员的格式
typedef int ElemType;//同上
typedef struct LinkNode
{
ElemType data;
struct LinkNode next;
}LinkNode,Link;
Link creat();//建立带头结点的链表,并返回头指针
void print(Link);//输出链表所有结点
bool insert(Link,int ,ElemType);//向head为头指针的链表中插入元素e使之成为链表第i个元素成功返回TRUE否则FALSE
bool del(Link,int );//在head为头指针的链表中删除第i个结点,成功返回TRUE否则返回FALSE
void operate(Link);//在本程序中进行链表的插入,删除,输出 *** 作
Link creat()
{
Link head=(Link)malloc(sizeof(LinkNode));
Link pre=head,p;
int count=1;
char ch;
printf("是否终止建立链表(Y/N):");
scanf("%c",&ch);
while(ch=='n'||ch=='N')
{
p=(Link)malloc(sizeof(LinkNode));
printf("请输入第%d个结点内的数据:",count);
scanf(IO,&(p->data));
fflush(stdin);
pre->next=p;
pre=p;
printf("是否终止建立链表(Y/N):");
scanf("%c",&ch);
count++;
}
pre->next=NULL;
return head;
}
void print(Link head)
{
printf("链表目前情况为:\n");
Link p=head->next;
int count=1;
while(p)
{
printf("第%d个结点中数据为"IO" ",count,p->data);
p=p->next;
if((count++)%3==0)printf("\n");
}
if(count%3!=1)printf("\n");
}
bool insert(Link head,int i,ElemType e)
{
Link pre,p;
int k;
for(k=0,pre=head;k<i-1&⪯k++,pre=pre->next);//寻找第i-1个元素的指针
if(k!=i-1||(!pre))return false;
p=(Link)malloc(sizeof(LinkNode));
p->data=e;
p->next=pre->next;
pre->next=p;
return true;
}
bool del(Link head,int i)
{ Link pre,p;
int k;
for(k=0,pre=head,p=head->next;k<i-1&&p;k++,pre=p,p=p->next);//寻找第i-1个元素的指针
if(k!=i-1||(!p))return false;
pre->next=p->next;
free(p);
return true;
}
void operate(Link head)
{
int n,i;
ElemType e;
do
{
printf("\n");
printf("请输入想进行何种 *** 作\n1============插入结点\n2============删除结点\n3============输出链表\n");
scanf("%d",&n);
switch(n)
{
case 1:printf("现在进行结点插入\n");
printf("请输入欲插入到何位置:");scanf("%d",&i);
printf("请输入欲插入的数据:");scanf(IO,&e);
if(insert(head,i,e))printf("插入成功!\n");else printf("插入失败!\n");
break;
case 2:printf("现在进行结点删除\n");
printf("请输入欲删除结点位置:");scanf("%d",&i);
if(del(head,i))printf("删除成功!\n");else printf("删除失败!\n");
break;
case 3:print(head);break;
default:break;
}
}while(n<4&&n>0);
}
int main()
{
Link head=creat();
operate(head);
return 0;
}
链表的 *** 作
#include <stdioh>
#include <mathh>//求积分
int main()
{
double f1(double);
double f2(double);
double f3(double);
double f4(double);
double f5(double);
double (p)(double);
double integral(double a,double b,double(p)(double));
double a,b;//记录积分区间
printf("请输入积分区间:");
scanf("%lf %lf",&a,&b);
if(a>b){double temp=a;a=b;b=temp;}//确保a<b
printf("sin(x)在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,sin));
printf("cos(x)在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,cos));
printf("exp(x)在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,exp));
printf("x+1在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,f1));
printf("2x+3在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,f2));
printf("exp(x)+1在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,f3));
printf("(1+x)^2在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,f4));
printf("x^3在[%lf,%lf]上的积分值为%lf\n",a,b,integral(a,b,f5));
return 0;
}
double integral(double a,double b,double(p)(double))
{
double sum=0,l=b-a,pl;//sum保存积分和,l保存积分区间的长度,pl保存积分区间细分后每个小区间的长度
int n=2,i;//n保存划分的小区间数i用作累加指针
pl=l/n;
while(pl>1e-6)
{
sum=0;
for(i=0;i<n;i++)
sum+=(p)(a+ipl)pl;
n=2;
pl/=2;
}
return sum;
}
double f1(double x)
{
return x+1;
}
double f2(double x)
{
return 2x+3;
}
double f3(double x)
{
return exp(x)+1;
}
double f4(double x)
{
return (1+x)(1+x);
}
double f5(double x)
{
return xxx;
}
求积分
都是以前写的 便宜楼主了!!
#include <stdioh>
#define MAX 10
void main ()
{
void Course_aver (float a[][3], int n, int m);
void Student_aver (float a[][3], int n);
void Max (float a[][3], int n);
int num,cou,i,j;
float a[MAX][3];
printf ("输入%d个学生三门科的成绩:\n",MAX);
for (i=0; i<MAX; i++)
{
printf ("输入第 %d 个学生的成绩:",i+1);
for (j=0; j<3; j++)
scanf ("%f",&a[i][j]);
}
Max (a,3);
printf ("第二个同学的成绩是:\n");
for (i=0; i<3; i++)
printf ("%1f ",a[1][i]);
printf ("\n");
printf ("输入学生的学号:");
scanf ("%d",&num);
printf ("该学生各科成绩和平均分如下:\n");
Student_aver (a,num-1);
printf ("输入课程代号:");
scanf ("%d",&cou);
printf ("该课程中学生的成绩及课程平均分如下:\n");
Course_aver (a,MAX,cou-1);
}void Course_aver (float a[][3], int n, int m)
{
int i,j;
float aver,total = 00;
for (i=0; i<n; i++)
{
printf ("%1f ",a[i][m]);
total += a[i][m];
}
aver = total/100;
printf ("课程平均分:%1f\n",aver);
}void Student_aver (float a[][3], int n)
{
int i,j;
float aver,total = 00;
for (i=0; i<3; i++)
{
printf ("%1f ",a[n][i]);
total += a[n][i];
}
aver = total/30;
printf ("平均分:%1f\n",aver);
}void Max (float a[][3], int n)
{
int i,j;
float max;
max = a[0][0];
for (i=0; i<n; i++)
for (j=0; j<3; j++)
if (max < a[i][j])
max = a[i][j];
printf ("最高分是:%1f\n",max);
}
这种东西很多了,随便搜索一大堆:这是个学生成绩的!
#include <iostreamh>
#include <iomaniph>
#include <fstream>
#include <vector>
#include <malloch>
#include <stdlibh>
#include <string>
#include <processh>
#include <stdioh>
//#define NULL 0
int const Q=20;
#define LEN sizeof(struct student)
using namespace std;
int n=0; //定义一个全局变量统计学生人数
//——--------->定义一个学生考试信息的结构体
struct student
{
char name[Q]; //用来存放姓名的
char sex[Q]; //用来存放性别的
long int id; //用来存放准考证号的
int score[4]; //用来存放分数的
int total; //用来存放总分数的
struct student next;
};
//student向量容器
vector <student> stu;
//-------------->学生类
class Information
{
public:
Information() ; //构造函数
~Information() ; //析构函数
student creat();//建立链表函数。
void output(student head);
int count(student head);//定义函数count()统计考生总数
student insert(studenthead);//指针函数insert()用来添加考生信息
student cancel(student head,long int num);//指针函数cancel()用来删除考生信息
student find(student head,long int num); //指针函数find()用来查找考生信息
void inorder(student head);//定义inorder()函数将考生的总分从大到小排列并输出
void average( student head);//求学生成绩的平均分的函数
void save(student head);//保存函数
student Read();//读取函数
private:
student p1,p2,p3,head,st;
};
Information::Information()
{
cout<<" \n";
cout<<" ------------------------<<欢迎您使用学生成绩管理系统>>------------------------\n";
cout<<" \n\n";
}
Information::~Information()
{
cout<<" \n";
cout<<" ------------------------<<谢谢您使用学生成绩管理系统>>------------------------\n";
cout<<" \n";
}
student Information::creat(void)
{//定义一个指向struct student的结构体指针函数creat()用来增加考生信息
char ch[Q];n=0; //用来存放姓名的
p1=p2=(student )malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元
cout<<" -------------<<请建立学生考试信息表,在姓名处键以 ! 结束输入。>>--------------"<<endl;
cout<<" 姓名:";
cin>>ch;
head=NULL; //给指针head赋初值
while (strcmp(ch,"!")!=0)
{//调用字符比较函数strcmp()用来判断是否继续输入
char str[10];
int flag=0;
p1=(student )malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元
strcpy(p1->name,ch); //将循环结构前面输入的姓名复制到结构体名为p1的数组name中
cout<<" 性别:";
cin>>p1->sex;
cout<<" 准考证号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请正确输入!!!\n";
else
{
p1->id=atol(str); flag=1;
}
}while(flag==0);
flag=0;
cout<<" 计算机组成原理成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{
p1->score[0]=atoi(str); flag=1;
}
}while(flag==0);
flag=0;
cout<<" 概率统计成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[1]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 英语成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[2]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" C++成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[3]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//计算总分
if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head
else p2->next=p1;//否则将p1赋给p2所指结构体的next指针
p2=p1;//将指针p1赋给指针p2
n++; //将n的值加1
cout<<" 姓名:";
cin>>ch;//将输入的姓名存放到字符数组ch中
}
p2->next=NULL;//将p2所指结构体的next指针重新赋空值
return (head);//将输入的第一组学生考试信息返回
}
//--------------->定义output()函数将考生的信息从头指针所指内容开始输出
void Information::output(student head)
{
if(head==NULL) cout<<" 这是一个空表,请先输入考生成绩\n";
else{
cout<<"-------------------------------------------------------------------------------\n";
cout<<" 学生考试成绩信息表\n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<"准考证号 姓 名 性别 计算机组成原理 概率统计 英语 C++ 平均分 总分\n";
cout<<"-------------------------------------------------------------------------------\n";
p1=head;//将头指针赋给p
do
{
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/40
<<setw(11)<<p1->total<<endl;
cout<<"-------------------------------------------------------------------------------\n";
p1=p1->next;//将下一组考生信息的next指针赋给p
}while(p1!=NULL);//若指针p非空则继续,目的是把所有的考生信息都传给指针p然后输出
}
}
//------------>统计学生人数的函数
int Information::count(struct student head)//定义函数count()统计考生总数
{
if(head==NULL)
return(0);//若指针head为空返回值为0
else return(1+count(head->next));//函数的递归调用
}
//----------->插入学生的成绩的函数
student Information::insert( student head)
//插入新结点定义一个指向struct student的结构体指针函数insert()用来添加考生信息
{
char str[10];
int flag=0;
cout<<"\t----------------<<请输入新增学生成绩信息>>----------------\n"<<endl;
p1=(student )malloc(LEN); //使p1指向插入的新结点
cout<<" 姓名:";
cin>>p1->name; //将输入的姓名存放到结构体名为p1的数组name中
cout<<" 性别:";
cin>>p1->sex;
cout<<" 准考证号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请请正确输入!!!\n";
else
{p1->id=atol(str); flag=1; }
}while(flag==0);
flag=0;
cout<<" 计算机组成原理成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[0]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 概率统计成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[1]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 英语成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[2]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" C++成绩:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!!\n";
else
{ p1->score[3]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//计算总分
p2=head;//将头指针赋给p2
if(head==NULL) //若没调用次函数以前的头指针head为空
{
head=p1;p1->next=NULL;
}//则将p1赋给头指针head并将p1所指结构体成员指针next赋空值
else
{
while((p1->id>p2->id)&&(p2->next!=NULL))
{
p3=p2;//p3指向原p2指向的结点
p2=p2->next;
}//p2后移一个结点
if(p1->id<=p2->id)
{
if(head==p2)
{
p1->next=head;
head=p1;
} //插入到第一个结点之前
else
{
p3->next=p1;
p1->next=p2;
} //插入到p3所指结点之后
}
else
{
p2->next=p1;
p1->next=NULL;
} //插入到尾结点之后
}
n++;//将学生人数加1
cout<<"\t你输入的学生信息已经成功插入"<<endl;
return (head);
}
//------------>删除函数
student Information::cancel(student head,long int num)//定义一个指向struct student的结构体指针函数delete()用来删除考生信息
{
if(head==NULL)//若调用次函数以前的头指针head为空
{
return(head);
}
else
{
p1=head;//否则将头指针赋给p1
while(num!=p1->id&&p1->next!=NULL)//寻找要删除的结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空
{
p2=p1;
p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(num==p1->id)//如果输入的学生准考证号是p1所指的学生准考证号//结点找到后删除
{
if(p1==head) head=p1->next;//如果head指针和p1指针相等则将下一个结点赋给指针head
else
p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去
cout<<" 删除准考证号为"<<num<<"的学生\n";
n--;//将学生人数减1
}
return(head);//将头指针返回
}
}
//------------>查找函数
student Information::find(student head,long int num)
//定义一个指向struct student的结构体指针函数find()用来查找考生信息
{
if(head==NULL)//若调用次函数以前的头指针head为空
{
cout<<" 这是一个空表,请先输入考生成绩\n";
return(head);
}
else
{
p1=head;//否则将头指针赋给p1
while(num!=p1->id&&p1->next!=NULL)
//寻找结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空
{
p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(num==p1->id)//如果要查找的学生准考证号是p1所指的学生准考证号
{
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考证号 姓名 性别 计算机组成原理 概率统计 英语 C++ 平均分 总分 \n";
cout<<"------------------------------------------------------------------------------\n";
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/40
<<setw(11)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
else
cout<<" 没找到准考证号为"<<num<<"的学生\n"; //结点没找到
return(head);
}
}
//------------定义inorder()函数将考生的总分从大到小排列并输出
void Information::inorder(student head)
{
int i,k,m=0,j;
student p[Q];//定义一个指向struct student的结构体指针数组p
if(head!=NULL)//如果头指针是空则继续
{ m=count(head);
cout<<"------------------------------------------------------------------------------\n";
cout<<"学生考试成绩统计表\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考证号 姓 名 性别 计算机组成原理 概率统计 英语 C++ 平均分 总分 名次\n";
cout<<"------------------------------------------------------------------------------\n";
p1=head;
for(k=0;k<m;k++)
{
p[k]=p1;
p1=p1->next;
}
for(k=0;k<m-1;k++) //选择排序法
for(j=k+1;j<m;j++)
if(p[k]->total<p[j]->total)
{
p2=p[k];
p[k]=p[j];
p[j]=p2;
} //从大到小排列的指针
for(i=0;i<m;i++)
{
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/40
<<setw(11)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
}
//------------>求各科平均分成绩的函数
void Information::average(student head)
{
int k,m;
float arg1=0,arg2=0,arg3=0,arg4=0;
if(head==NULL)//如果头指针是空则继续
{
cout<<" 这是一个空表,请先输入考生成绩\n";
}
else
{
m=count(head);
p1=head;
for(k=0;k<m;k++)
{
arg1+=p1->score[0];
arg2+=p1->score[1];
arg3+=p1->score[2];
arg4+=p1->score[3];
p1=p1->next;
}
arg1/=m;arg2/=m;arg3/=m;arg4/=m;
cout<<"全班单科成绩平均分\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<" 计算机组成原理平均分:"<<setw(7)<<arg1
<<" 概率统计平均分:"<<setw(7)<<arg2
<<" 英语平均分:"<<setw(7)<<arg3
<<" C++平均分:"<<setw(7)<<arg4<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
//------------------->保存函数
void Information::save(student head)
{
ofstream out("datatxt",ios::out);
out<<count(head)<<endl;
while(head!=NULL)
{ out<<head->name<<"\t"
<<head->id<<"\t"<<"\t"
<<head->sex<<"\t"
<<head->score[0]<<"\t"
<<head->score[1]<<"\t"
<<head->score[2]<<"\t"
<<head->score[3]<<"\t"
<<head->total<<endl;
head=head->next;
}
}
//———————————>读取函数的实现
student Information::Read()
{ int i=0;
p1=p2=( student )malloc(LEN);
head=NULL;
ifstream in("datatxt",ios::out);
in>>i;
if(i==0){cout<<" datatxt 文件中的数据为空,请先输入数据。"<<endl; return 0;}
else {
cout<<" …………………………………………………………………………………………"<<endl;
for(;i>0;i--)
{ p1=(student )malloc(LEN);
cin>>stname>>stid>>stsex
>>stscore[0]>>stscore[1]>>stscore[2]>>stscore[3]
>>sttotal;
strcpy(p1->name,stname);
p1->id=stid;
strcpy(p1->sex,stsex);
p1->score[0]=stscore[0];
p1->score[1]=stscore[1];
p1->score[2]=stscore[2];
p1->score[3]=stscore[3];
p1->total=sttotal;
if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head
else p2->next=p1;//否则将p1赋给p2所指结构体的next指针
p2=p1;//将指针p1赋给指针p2
n++; //将n的值加1
//显示读入数据
cout<<" "<<p1->name<<"\t"
<<p1->id<<"\t"<<"\t"
<<p1->sex<<"\t"
<<p1->score[0]<<"\t"
<<p1->score[1]<<"\t"
<<p1->score[2]<<"\t"
<<p1->score[3]<<"\t"
<<p1->total<<endl;
cout<<" …………………………………………………………………………………………"<<endl;
//
}
cout<<" 数据已经成功读取完毕。"<<endl;
p2->next=NULL;
return (head);
}
}
//------------------------------>主函数
int main(void)
{
Information person;
student head=NULL;
char str[10];
int flag=0;
int choice;
long int i;
head=personRead();
do{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃ 学生成绩管理系统主菜单界面 ┃";
cout<<"┃ 读取数据请输入数字零 ┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃ ①输入学生成绩 ┃";
cout<<"┃ ②显示学生成绩 ┃";
cout<<"┃ ③排序统计成绩 ┃";
cout<<"┃ ④查找学生成绩 ┃";
cout<<"┃ ⑤增加学生成绩 ┃";
cout<<"┃ ⑥删除学生成绩 ┃";
cout<<"┃ ⑦保存退出系统 ┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<"请输入您的选择(1--7):( )\b\b";
cin>>str;
if(atoi(str)>7 || atoi(str)<1)
cout<<"对不起,请输入1-7这几个数字!!\n";
else
{
choice=atoi(str);
switch(choice)
{
case 1:
head=personcreat();
break;
case 2:
personoutput(head);
break;
case 3:
personinorder(head);
personaverage(head);
cout<<" 参加考试的学生人数为:"<<personcount(head)<<"人\n";
break;
case 4:
cout<<" 请输入要查找的准考证号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请输入正确输入!!!\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
personfind(head,i);
break;
case 5:
head=personinsert(head);
personoutput(head);
break;
case 6:
cout<<" 请输入要删除的准考证号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请输入正确输入!!!h\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
head=personcancel(head,i);
personoutput(head);
break;
case 7:
personsave(head);
cout<<"文件已保存!可以安全退出!!!"<<endl;
break;
default :cout<<" 对不起,您的输入有误,请重新输入。\n";
break;
}
}
}while(choice!=7);
return 0;
}
以上就是关于自考c程序设计课程难吗全部的内容,包括:自考c程序设计课程难吗、什么是C语言程序设计、C语言程序课程设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)