c语言程序设计

c语言程序设计,第1张

具体的设计方法,可以参考如下代码:

#include <stdioh>

#include <stringh>

#include <iostreamh>

#include <stdlibh>

#include <windowsh>

typedef struct studentinfo //结构体定义

{

int num;//学号

char name[64];//姓名

int sex;//性别,1为男性,0为女性

float math;//数学

float english;//英语

float politic;//政治

float chinese;//语文

float total;//总成绩

struct studentinfo next;

}STUDENT;

#define FILENAME "D:\\1txt"

//定义默认的数据库文件

#define DELAYTIME 1500

//显示信息,延时

void create_menu();

STUDENT new_student();

STUDENT create_linkbyfile(char );

STUDENT del_info(STUDENT );

int save_info(char ,STUDENT ,int);

int find_infile_printf(char );

int pri_whole_link(STUDENT );

STUDENT printf_sort(STUDENT );

void free_link(STUDENT );

void main() //主函数

{

create_menu();

}

void create_menu()

//功能:输出功能菜单,提供人-机接口

{

int menu_Num;

STUDENT head=NULL;

char ch;

char file_name[256];

while(1)

{

system("cls");

cout<<"\t\t学生成绩管理系统\n";

cout<<"##########################################\n";

cout<<"#\t\t 1新增学生信息\t\t #\n";

cout<<"#\t\t 2加载数据库\t\t #\n";

cout<<"#\t\t 3删除学生信息\t\t #\n";

cout<<"#\t\t 4保存学生信息\t\t #\n";

cout<<"#\t\t 5数据库查询\t\t #\n";

cout<<"#\t\t 6原序输出\t\t #\n";

cout<<"#\t\t 7排序输出\t\t #\n";

cout<<"#\t\t 8退出\t\t\t #\n";

cout<<"##########################################\n";

cout<<"请输入 *** 作编号:";

cin>>menu_Num;

switch (menu_Num)

{

case 1:

free_link(head);//释放链表空间

head=new_student();//新增学生信息

break;

case 2:

free_link(head);//释放链表空间

cout<<"请输入要加载的数据库文件的路径"<<endl;

cin>>file_name;

head=create_linkbyfile(file_name);//读取数据文件

if(head!=NULL)

{

cout<<"数据库"<<file_name<<"已加载"<<endl;

Sleep(DELAYTIME);

}

break;

case 3:

del_info(head);//删除学生信息

break;

case 4://保存学生信息

if (head==NULL)

{

cout<<"请先生成学生信息"<<endl;

Sleep(DELAYTIME);

}

else

{

cout<<"想将学生信息保存到哪个数据库文件?";

cin>>file_name;

cout<<"请选择保存方式:0追加到文件末尾 1覆盖文件\n";

cin>>menu_Num;

if(save_info(file_name,head,menu_Num)==0)//0表示追加,1表示覆盖

{

cout<<"信息保存失败\n";

}

else

{

cout<<"数据已保存到"<<file_name<<endl;

Sleep(DELAYTIME);

}

}

break;

case 5:

find_infile_printf(FILENAME);//数据库查询

break;

case 6://原序输出信息

pri_whole_link(head);

cout<<"返回主菜单? Y/N\t";

do

{

cin>>ch;

}while(ch!='Y'&&ch!='y');

break;

case 7://排序输出信息

do

{

if((head=printf_sort(head))==NULL)

{

cout<<"数据库未加载"<<endl;

Sleep(DELAYTIME);

break;

}

else

{

cout<<"选择其他方式排序? Y/N\t";

cin>>ch;

}

}while(ch=='Y'||ch=='y');

break;

case 8:

free_link(head);//释放链表空间

exit(0);

break;

default:

cout<<"输入有误!请重新输入!"<<endl;

break;

}

}

}

STUDENT new_student()

//功能:创建学生信息(通过链表)

//返回值:头结点指针

{

STUDENT pnew,p,head;

float pfloat;

char ch;

head=NULL;

do

{

system("cls");

pnew=(STUDENT )malloc(sizeof(STUDENT)1);

cout<<"请输入学生的学号(0表示取消): ";

cin>>pnew->num;

if(0>=pnew->num)

{

break;

}

cout<<"请输入学生的姓名:";

cin>>pnew->name;

while(1)

{

cout<<"请输入学生的性别:0/1\t";

cin>>pnew->sex;

if(pnew->sex&&pnew->sex-1)

{

cout<<"性别输入错误,0表示女性,1表示男性,请重新输入"<<endl;

}

else

{

break;

}

}

cout<<"请依次输入学生的数学、英语、政治、语文成绩:"<<endl;

for(pnew->total=0,pfloat=&pnew->math;pfloat<&pnew->math+4;)

{

cin>>pfloat;

if(pfloat<0||pfloat>150)

{

cout<<"成绩输入错误,只能为0~150"<<endl;

}

else

{

pnew->total+=pfloat;

pfloat++;

}

}

if(head==NULL)

{

head=pnew;

}

else

{

p->next=pnew;

}

p=pnew;

pnew->next=NULL;

cout<<"##########################该学生信息已生成#########################\n";

cout<<"建立另一个学生的信息? Y/N\t";

cin>>ch;

}while(ch=='Y'||ch=='y');

return head;

}

STUDENT create_linkbyfile(char filename)

//功能:读取文件,创建链表

//参数:如果filename不为空,则打开该文件,如果filename为空,要求输入文件位置

//创建的链表的所有结点的next全部修改,指向物理地址上的下一个结点

{

system("cls");

FILE fp;

STUDENT head,ptemp,pnew;

head=NULL;//初始化head为空

if(filename==NULL)//若filename为空,要求输入文件绝对地址

{

char file_name[256];

cout<<"请输入数据库文件的路径:"<<endl;

cin>>file_name;

if(NULL==(fp=fopen(file_name,"rb")))

{

cout<<"数据库连接失败\n";

return 0;

}

}

else

{

if(NULL==(fp=fopen(filename,"rb")))

{

cout<<"数据库连接失败\n";

return 0;

}

}

for(ptemp=NULL;;)

{

pnew=(STUDENT )malloc(sizeof(STUDENT)1);

if(fread(pnew,sizeof(STUDENT),1,fp)!=NULL)

{

if(ptemp!=NULL)

{

ptemp->next=pnew;

}

else

{

head=pnew;

}

ptemp=pnew;

}

else

{

if(ptemp!=NULL)

{

ptemp->next=NULL;

}

else

{

head=NULL;

}

free(pnew);

break;

}

}

fclose(fp);

return head;

}

STUDENT del_info(STUDENT head)

//根据学号,删除链表的结点

{

system("cls");

STUDENT p1,p2;

int num;

if (head==NULL)

{

cout<<"数据库未加载"<<endl;

Sleep(DELAYTIME);

return 0;

}

cout<<"请输入要删除学生的学号:";

cin>>num;

for(p1=head;p1!=NULL;)

{

if(p1->num==num)/到

{

if(p1==head)//要删除的结点是头结点

{

head=p1->next;

}

else

{

p2->next=p1->next;

}

cout<<"成功删除!!";

}

p2=p1;

p1=p1->next;

}

return head;

}

int save_info(char filename,STUDENT head,int flag)

//功能:将链表按Binary写入文件末尾

//参数:

//1filename文件名,绝对地址

//2head指向链表的头结点

//3flag 0追加或1覆盖数据

//返回值:失败则返回0

{

system("cls");

FILE fp;

STUDENT p;

char openmethod[8];

if(flag==0)

{

strcpy(openmethod,"ab+");//追加

}

else

{

strcpy(openmethod,"w");//覆盖

}

if(NULL==(fp=fopen(filename,openmethod)))//

{

cout<<"数据库连接失败"<<endl;

Sleep(DELAYTIME);

return 0;

}

else

{

for(p=head;p;p=p->next)

{

if((fwrite(p,sizeof(STUDENT),1,fp))==NULL)

{

cout<<"数据库创建失败"<<endl;

return 0;

}

}

}

fclose(fp);

return 1;

}

int find_infile_printf(char filename)

//功能:根据学号和姓名来查询某个学生

//参数:filename数据库文件

//返回值:失败返回0

//直接搜索文件,缺点是速度慢

//也可先根据文件创建链表,再搜索链表,缺点是如果文件较大,占用内存多

{

system("cls");

FILE fp;

STUDENT stu;

int num;

char stu_name[64];

char ch;

if(filename==NULL)

{

return 0;

}

do

{

memset(stu_name,0,sizeof(stu_name));

cout<<"查询学号或查询姓名? 1查询学号 0查询姓名";

//flag=1根据学号来查询,flag=0根据姓名来查询

cin>>num;

if(num==1)

{

cout<<"输入要查询的学号:";

cin>>num;

cout<<"正在为您查询学号为"<<num<<"的学生……"<<endl;

}

else if(num==0)

{

cout<<"输入要查询的姓名:";

cin>>stu_name;

cout<<"正在为您查询姓名为"<<stu_name<<"的学生……"<<endl;

}

else

{

cout<<"输入有误"<<endl;

return 0;

}

if(NULL==(fp=fopen(filename,"rw")))

{

cout<<"数据库连接失败\n";

return 0;

}

else

{

while(fread(&stu,sizeof(STUDENT),1,fp)!=NULL)

{

if(strcmp(stuname,stu_name)==0||stunum==num)

{

cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";

//输出该学生的所有信息

cout<<stunum<<"\t"<<stuname<<"\t"<<stusex<<"\t"<<stumath<<"\t"<<stuenglish<<"\t"<<stupolitic<<"\t"<<stuchinese<<"\t"<<stutotal<<endl;

//不加break;可支持多个相同数据的索引

}

}

}

cout<<"##########################查询完毕#########################\n";

cout<<"查询另一个学生的信息? Y/N\t";

cin>>ch;

}while(ch=='Y'||ch=='y');

fclose(fp);

return 1;

}

int pri_whole_link(STUDENT head)

//功能:显示整条链表的学生信息

//参数:head 头结点指针,如果head为空,返回空

{

system("cls");

STUDENT p;

if (head==NULL)

{

cout<<"数据库未加载"<<endl;

Sleep(DELAYTIME);

return 0;

}

cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";

for(p=head;p;p=p->next)

{

cout<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->math<<"\t"<<p->english<<"\t"<<p->politic<<"\t"<<p->chinese<<"\t"<<p->total<<endl;

}

return 1;

}

STUDENT printf_sort(STUDENT head)

//功能:根据学号|某科目成绩|总成绩对链表进行排序,然后输出

//参数:head链表头指针,如果head为空,返回空

//返回值:返回新的链表的头结点指针

{

system("cls");

STUDENT p1,p2,ptemp,pfinished=NULL;

int num;

int flag;

if (head==NULL)

{

return 0;

}

cout<<"选择排序依据 0数学成绩1英语成绩2政治成绩3语文成绩4总成绩\n";

cin>>num;

// cout<<"升序/降序输出? 0升序1降序";

// cin>>flag;

for(p1=head;p1->next!=pfinished;)//对链表进行从大到小排序(这里用冒泡法)

//p1使之总是指向头结点,pfinished使之总是指向已排序好的最前面的结点

//ptemp作为中介,保存p2的上一个结点

{

for(p2=p1;p2->next!=pfinished;)

{

if((&(p2->math)+num)<(&(p2->next->math)+num))//p2的值小于p2->next的值,交换 ptemp p2 p2->next

{

if(p2==p1)//头结点要交换

{

p1=p2->next;

p2->next=p1->next;

p1->next=p2;

ptemp=p1;

}

else

{

ptemp->next=p2->next;

ptemp=p2->next;

p2->next=ptemp->next;

ptemp->next=p2;

}

}

else//不需要交换,则p2、ptemp前进1位

{

ptemp=p2;

p2=p2->next;

}

}

pfinished=p2;

}

// if(flag==1)

// {

pri_whole_link(p1);

// }

// else

// {

// }

cout<<"##########################信息显示完毕#########################\n";

return p1;

}

void free_link(STUDENT head)

//释放链表空间,如果head,什么都不做

{

STUDENT p1,p2;

for(p1=head;p1;p1=p2)

{

p2=p1->next;//先保存,否则

free(p1);//free后 p1->next数据丢失

}

}

#include <iostreamh>

class sc

{

public:

    sc();

    sc(int);

    sc(const sc &);

    ~sc(){}

    void setradius(int);

    int getradius()const;

private:

    int itsradius;

};

sc::sc()

{

    itsradius=new int;

    itsradius=0;

}

sc::sc(int radius)

{

    itsradius=new int;

    itsradius=radius;

}

sc::sc(const sc &rhs)

{

    int val=rhsgetradius();

    itsradius=new int;

    itsradius=rhsitsradius;

}

int sc::getradius()const{return itsradius;}

int main()

{

    sc one,two(9),tree(two);

    cout<<"one"<<onegetradius()<<endl;

    cout<<"two"<<twogetradius()<<endl;

    cout<<"two"<<treegetradius()<<endl;

    return 0;

}

itsradius=new int(5)语句的意思是为itsradius开辟能存放5个int型的空间,而你想要的应该是为itsradius开辟一个int的空间,在将5存放进去吧……不知道怎么回事,字体出了问题,有不懂的追问吧

#include <iostream>

#include______ //看见下面的fstream没 所以这里是#include <QStream>

using namespace std;

void main( )

{

fstream fin,fout;

fout.open("my.txt",ios::out); //打开文件

if(! fout.is_open( ))

return;

for(int i=0;i<3;i=i+1) //输出line的号

fout<<"This is line"<<i+1<<endl;

fout.close( );

fin.open("my.txt",ios::in); //打开文件

if(! fin.is_open( ))

return;

char str[100];

while(______) /把文件东西读入到str知道文件结束 所以 判断文件结束的一个东东忘记是什么函数了,哥又不是百度,哥可以查msdn至此,后面不看了,出这道题的人傻逼,肯定不是一个公司程序员!/

{

fin.getline(str,100);

cout<<str<<endl;

}

fin.close( );

}

50.求两个浮点数之差的cha函数的原型声明、调用方法。

#include <iostream>

using namespace std;

void main( )

{

float a,b;

______;∥函数cha的原型声明 float cha( float x, float y );

a=12.5;

b=6.5;

float c=__________;∥调用函数cha cha( a, b );

cout<<c<<endl;

}

float cha(float x,float y)

{

float w;

w=x-y;

return w;

}

后面的不看了,上面两道题第一道题够二,第二道题你自己看书就能解决

/

题目1:

输入一批字符串(不超过30条),以字符串“end”作为输入结束标志,请按要求编程完成下述功能:

1)字符串输入;

2)输出最大、最小的字符串及其位置;

3)对字符串进行升序排列;

4)插入一条字符串,结果仍按升序排列;

5)查找指定字符串的位置;

6)删除指定的字符串。

要求:

1)上述各功能请分别用函数实现;

2)输入输出要有必要的提示说明

/

#include <iostream>

#include<string>

#include<stdlibh>

using namespace std;

void input();//字符串输入

void outputMaxMinAndItsLocation();//输出最大、最小的字符串及其位置

void orderByAesc();//对字符串进行升序排列

void insertString();//插入一条字符串,结果仍按升序排列

bool selectString();//查找指定字符串的位置

void deleteString();//删除指定的字符串

void print(); //输出所有字符串

string str[30];//定义一个不超过30个字符串的字符串数组

int size=0;

void input()

{

size=0;

int i=0;

cout<<endl<<"输入字符串,以输入'end'结束:"<<endl;

while(i<30)

{

cout<<"字符串"<<i+1<<":";

cin>>str[i];

if(str[i]=="end")

{

break;

}

size++;

i++;

}

}

void outputMaxMinAndItsLocation()

{

string max=str[0],min=str[0];

int maxLocation=0,minLocation=0;

int i=1;

while(i<size)

{

if(minlength()>str[i]length())

{

min=str[i];

minLocation=i;

}

else if(maxlength()<str[i]length())

{

max=str[i];

maxLocation=i;

}

i++;

}

cout<<endl<<"最大字符串:"<<max<<" "<<"位置:"<<maxLocation<<endl;

cout<<"最小字符串:"<<min<<" "<<"位置:"<<minLocation<<endl;

}

void orderByAesc()

{

string temp;

for(int i=0;i<size;i++)

for(int j=i+1;j<size;j++)

{

temp=str[i];

if(str[i]>str[j])

{

str[i]=str[j];

str[j]=temp;

}

}

}

void insertString()

{

string temp;

cout<<"请输入想要插入的字符串:";

cin>>temp;

str[size]=temp;

size++;

orderByAesc();//升序排序

}

bool selectString()

{

cout<<"请输入想要查找的字符串:";

string temp;

cin>>temp;

for(int i=0;i<size;i++)

{

if(str[i]==temp)

{

cout<<"存在该字符串,位于"<<i<<endl;

return true;

}

else if(i==size-1)

{

cout<<"不存在该字符串"<<endl;

}

}

return false;

}

void deleteString()

{

cout<<"请输入想要删除的字符串:";

string temp;

cin>>temp;

for(int i=0;i<size;i++)

{

if(str[i]==temp)

{

for(int j=i;j<size;j++)

str[j]=str[j+1];

size--;

}

}

}

void print()

{

cout<<endl<<"输出所有字符串!!"<<endl<<endl;

for(int i=0;i<size;i++)

cout<<"字符串"<<i+1<<":"<<str[i]<<endl;

cout<<endl<<"输出完毕!!"<<endl<<endl;

}

int main()

{

int choice;

while(1)

{

cout<<endl<<""<<endl;

cout<<"\t1:输入字符串"<<endl;

cout<<"\t2:输出最大、最小的字符串及其位置"<<endl;

cout<<"\t3:对字符串进行升序排列"<<endl;

cout<<"\t4:插入一条字符串,结果仍按升序排列"<<endl;

cout<<"\t5:查找指定字符串的位置"<<endl;

cout<<"\t6:删除指定的字符串"<<endl;

cout<<"\t7:输出所有字符串"<<endl;

cout<<"\t0:退出"<<endl;

cout<<""<<endl;

cout<<"请输入你要进行的 *** 作:";

cin>>choice;

switch(choice)

{

case 0:cout<<"退出!!"<<endl;exit(0);break;

case 1:input();break;

case 2:outputMaxMinAndItsLocation();break;

case 3:orderByAesc();cout<<"升序排序完毕"<<endl;break;

case 4:insertString();break;

case 5:selectString();break;

case 6:deleteString();break;

case 7:print();break;

default:cout<<"输入错误!!!"<<endl;

}

}

return 0;

}

最简单的例子。#include <iostream>using namespace std;class Time //定义Time类{public : //数据成员为公用的int hour;int minute;int sec;};int main( ){Time t1;//定义t1为Time类对象cin>>t1hour;//输入设定的时间cin>>t1minute;cin>>t1sec;//输出时间:cout<<t1hour<<":"<<t1minute<<":"<<t1sec<<endl;return 0;}

运行情况如下:

1232 43↙

12:32:43

几点注意:

1) 在引用数据成员hour,minute,sec时不要忘记在前面指定对象名。

2) 不要错写为类名,如写成

Timehour,Timeminute,Timesec

是不对的。因为类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体,是占存储空间的,其数据成员是有值的,可以被引用的。

3) 如果删去主函数的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。

#include<iostream>

using namespace std;

int main(int argc,char argv[])

{

cout<<"long int: "<<sizeof(long int)<<" byte "<<sizeof(long int)8<<" bits"<<endl;

cout<<"int: "<<sizeof(int)<<" byte "<<sizeof(int)8<<" bits"<<endl;

cout<<"char: "<<sizeof(char)<<" byte "<<sizeof(char)8<<" bits"<<endl;

cout<<"bool: "<<sizeof(bool)<<" byte "<<sizeof(bool)8<<" bits"<<endl;

cout<<"float: "<<sizeof(float)<<" byte "<<sizeof(float)8<<" bits"<<endl;

cout<<"double: "<<sizeof(double)<<" byte "<<sizeof(double)8<<" bits"<<endl;

cout<<"long double: "<<sizeof(long double)<<" byte "<<sizeof(long double)8<<" bits"<<endl;

return 0;

}

以上就是关于c语言程序设计全部的内容,包括:c语言程序设计、c++程序设计、我有些C++程序设计的题不会做,请大仙帮我指点,我将不胜感激,跪谢!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10119027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存