c语言课程设计

c语言课程设计,第1张

这个 程序不光只统计了小写字母,还有大写字母,数字和空格的个数:

void fun(char s, int num)

{

int length;

int index;

int sum_number = 0;

int sum_char = 0;

int sum_spac = 0;

int sum_CHAR = 0;

length = strlen(s);

for (index = 0; index < length; index++)

{

if ((s >= '0') && (s <= '9') )

{

sum_number++;

}

if ((s >= 'a') && (s < 'z') )

{

sum_char++;

}

if ((s >= 'A') && (s <= 'Z') )

{

sum_CHAR++;

}

if (s == 0x20 )

{

sum_spac++;

}

s++;

}

num[0] = sum_number;

num[1] = sum_CHAR;

num[2] = sum_char;

num[3] = sum_spac;

}

int main()

{

char testarry[50];

int num[4];//用来放数字num[0],num[1]大写字母,num[2]小写字母,num[3]空格数字的个数

//num = (int )malloc(sizeof(int) 4);

printf("请输入字符串:");

gets(testarry);

fun(testarry,num);

// printf("%s",testarry);

printf("数字的个数:%d\n大写字母的个数:%d\n小写字母的个数:%d\n空格数字的个数:%d\n",

num[0],num[1],num[2],num[3]);

return 0;

}

这个程序设计其实很简单的。

(1)这个要求最简单,用prinf语句直接输出相关信息即可。

(2)这个要求也容易,用for语句实现循环,循环体用sanf语句,加system("pause");语句,就可以实现键盘输入回车确定。接受键盘数据的变量要用数组,这个关系到后面的统计排序。用if(ai==0) break; 即输入0回车就退出循环。

(3)通过for语句对数组a进行遍历,统计之前输入序号的个数(其实在(2)中就可以统计)保存另一个数组b中。然后对这个数组b的数据进行降序排列。

(4)这个要求只是考查C语言创建、读取和写入文件 *** 作的要求而已,熟悉一下相关代码使用方法即可,分别写入数组a、数组b就行了。

这是我做的,你看是否满意?可能有点大,但也没办法呀,你的题目也比较大,呵呵!所以,如果满意,多给我追加点分!

#include "stdioh"

#include "stdlibh"

#include "stringh"

typedef struct course

{

char number[15],name[25];

int kind,time,lessontime,practicetime,credit,term;

}type;

FILE fp1;

void overview(); //浏览函数,负责浏览整个课程信息

void seek(); //查询函数,负责查询课程信息

void choose_course();//选课函数,负责让用户选课

void out(type temp);

void input();

int main()

{

int n,i;

if((fp1=fopen("course_informationtxt","wb"))==NULL)

{printf("创建文件失败!\n");exit(0);}

printf("请输入要存储的课程数目:\n");

scanf("%d",&n);

printf("开始创建文件,请输入课程信息:\n\n");

for(i=0;i<n;i++)

{

printf("请输入第%d门课程的信息:\n",i+1);

input();

printf("\n");

}

printf("如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2; 如想进行选课,请输入3;如想结束选修课系统,请输入0!\n");

while((scanf("%d",&n))!=EOF)

{

if(n==1)

overview();

if(n==2)

seek();

if(n==3)

choose_course();

if(n==0)

exit(0);

printf("\n\n如想继续 *** 作,只要按规则输入你要进行的 *** 作即可!\n规则:如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2;如想进行选课,请输入3!\n");

}

printf("欢迎您使用此程序进行选课,谢谢!\n");

fclose(fp1);

return 0;

}

void input()

{

course c_a;

printf("请输入课程编码: ");

scanf("%s",c_anumber);

printf("请输入课程名: ");

scanf("%s",c_aname);

printf("请输入课程性质:限选课,请输入1;选修课,请输入2;必修课,请输入3! ");

scanf("%d",&c_aname);

printf("请输入课程总学时: ");

scanf("%d",&c_atime);

printf("请输入课程授课时间: ");

scanf("%d",&c_alessontime);

printf("请输入课程实验或实践时间: ");

scanf("%d",&c_apracticetime);

printf("请输入课程学分: ");

scanf("%d",&c_acredit);

printf("请输入课程所在的学期,比如第二学期,就输入2即可。");

scanf("%d",&c_aterm);

fwrite(&c_a,sizeof(struct course),1,fp1);//将一个结构体元素写入文件中

}

void out(type temp)

{

printf("课程代码: %s\n课程名: %s\n",tempnumber,tempname);

printf("课程名: %s\n",tempname);

if(tempkind==1)

printf("课程性质: Limited optional course\n");

else if(tempkind==2)

printf("课程性质: Optional course\n");

else if(tempkind==3)

printf("课程性质: Required Courses\n");

else

printf("该编码系统不认识,即无对应的课程性质存在!\n");

printf("课程总学时: %d\n课程授课学时: %d\n实验或上机学时: %d\n学分: %d\n课程开课学期: %d\n\n",temptime,templessontime,temppracticetime,tempcredit,tempterm);

}

void overview()

{

rewind(fp1);

course temp;

printf("整个课程信息如下:\n");

while((fread(&temp,sizeof(type),1,fp1))!=0)

out(temp);

}

void seek()

{

int judge,credit=0,kind=0;

char a='N';

course temp;

printf("如想按学分查询,请输入1;如想按课程性质,请输入2:\n");

scanf("%d",&judge);

rewind(fp1); //将文件指针位置置为开头

if(judge==1)

{

printf("请输入要查询的学分:\n");

scanf("%d",&credit);

while((fread(&temp,sizeof(type),1,fp1))!=0)

if(credit==tempcredit)

out(temp);

}

else if(judge==2)

{

printf("请输入你要查找课程的性质(限选课,请输入1;选修课,请输入2;必修课,请输入3):");

scanf("%d",&kind);

while((fread(&temp,sizeof(type),1,fp1))!=0)

if(tempkind==kind)

out(temp);

}

else

printf("不好意思,无此类查询!\n");

}

void choose_course()

{

rewind(fp1);

course temp;

int judge=1,n=0,time=0,credit=0;

char choose[20][20];

r1: printf("请开始填写课程编号进行选课:\n");

while(judge==1)

{

printf("请输入你所选课程的标号: ");

scanf("%s",choose[n]);

n++;

printf("如想继续选课,请输入1;如想提交,请输入0!\n");

scanf("%d",&judge);

}

while((fread(&temp,sizeof(type),1,fp1))!=0)

{

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

if(strcmp(tempnumber,choose[i])==0)

{time=time+temptime;credit=tempcredit;break;}

}

if(time<270||credit<40)

goto r1;

printf("你所选的课为:\n");

while((fread(&temp,sizeof(type),1,fp1))!=0)

{

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

if(strcmp(tempnumber,choose[i])==0)

{out(temp);break;}

}

}

C语言课程设计报告-------学生成绩简单管理程序

一、系统菜单的主要功能

(1)输入若干条记录

(2)显示所有记录

(3)按学号排序

(4)插入一条记录

(5)按姓名查找,删除一条记录

(6)查找并显示一条记录

(7)输出统计信息 (新增)

(8)从正文中添加数据到结构体数组中

(9)将所有数据写入文件中

(0)退出程序

二、题目分析

该题主要考察学生对结构体,指针,文件的 *** 作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:

功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的 *** 作,提前准备好数据。

三、程序正文部分

#include<stdioh> /引用库函数/

#include<stdlibh>

#include<ctypeh>

#include<stringh>

typedef struct /定义结构体数组/

{

char num[10]; /学号/

char name[20]; /姓名/

int score; /成绩/

}Student;

Student stu[80]; /结构体数组变量/

int menu_select() /菜单函数/

{

char c;

do{

system("cls"); /运行前清屏/

printf("\t\tStudents' Grade Management System\n"); /菜单选择/

printf("\t\t | 1 Input Records |\n");

printf("\t\t | 2 Display All Records |\n");

printf("\t\t | 3 Sort |\n");

printf("\t\t | 4 Insert a Record |\n");

printf("\t\t | 5 Delete a Record |\n");

printf("\t\t | 6 Query |\n");

printf("\t\t | 7 Statistic |\n");

printf("\t\t | 8 Add Records from a Text File|\n");

printf("\t\t | 9 Write to a Text file |\n");

printf("\t\t | 0 Quit |\n");

printf("\t\t\n");

printf("\t\t\tGive your Choice(0-9):");

c=getchar(); /读入选择/

}while(c<'0'||c>'9');

return(c-'0'); /返回选择/

}

int Input(Student stud[],int n) /输入若干条记录/

{int i=0;

char sign,x[10]; /x[10]为清除多余的数据所用/

while(sign!='n'&&sign!='N') /判断/

{ printf("\t\t\tstudent's num:"); /交互输入/

scanf("\t\t\t%s",stud[n+i]num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n+i]name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",&stud[n+i]score);

gets(x); /清除多余的输入/

printf("\t\t\tany more records(Y/N)");

scanf("\t\t\t%c",&sign); /输入判断/

i++;

}

return(n+i);

}

void Display(Student stud[],int n) /显示所有记录/

{

int i;

printf("\t\t\t-----------------------------------\n"); /格式头/

printf("\t\t\tnumber name score\n");

printf("\t\t\t-----------------------------------\n");

for(i=1;i<n+1;i++) /循环输入/

{

printf("\t\t\t%-16s%-15s%d\n",stud[i-1]num,stud[i-1]name,stud[i-1]score);

if(i>1&&i%10==0) /每十个暂停/

{printf("\t\t\t-----------------------------------\n"); /格式/

printf("\t\t\t");

system("pause");

printf("\t\t\t-----------------------------------\n");

}

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(Student stud[],int n) /按学号排序/

{ int i,j,p,q,s;

char t[10];

for(i=0;i<n-1;i++) /冒泡法排序/

for(j=0;j<n-1-i;j++)

if(strcmp(stud[j]num,stud[j+1]num)>0)

{strcpy(t,stud[j+1]num);

strcpy(stud[j+1]num,stud[j]num);

strcpy(stud[j]num,t);

strcpy(t,stud[j+1]name);

strcpy(stud[j+1]name,stud[j]name);

strcpy(stud[j]name,t);

p=&stud[j+1]score;

q=&stud[j]score;

s=p;

p=q;

q=s;

}

}

int Insert_a_record(Student stud[],int n) /插入一条记录/

{char x[10]; /清除多余输入所用/

printf("\t\t\tstudent's num:"); /交互式输入/

scanf("\t\t\t%s",stud[n]num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n]name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",&stud[n]score);

gets(x);

n++;

Sort_by_num(stud,n); /调用排序函数/

printf("\t\t\tInsert Successed!\n"); /返回成功信息/

return(n);

}

int Delete_a_record(Student stud[],int n) /按姓名查找,删除一条记录/

{ char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:"); /交互式问寻/

scanf("%s",s);

while(strcmp(stud[i]name,s)!=0&&i<n) i++; /查找判断/

if(i==n)

{ printf("\t\t\tnot find!\n"); /返回失败信息/

return(n);

}

for(j=i;j<n-1;j++) /删除 *** 作/

{

strcpy(stud[j]num,stud[j+1]num);

strcpy(stud[j]name,stud[j+1]name);

stud[j]score=stud[j+1]score;

}

printf("\t\t\tDelete Successed!\n"); /返回成功信息/

return(n-1);

}

void Query_a_record(Student stud[],int n) /查找并显示一个记录/

{ char s[20];

int i=0;

printf("\t\t\tinput his(her) name:"); /交互式输入/

scanf("\t\t\t%s",s);

while(strcmp(stud[i]name,s)!=0&&i<n) i++; /查找判断/

if(i==n)

{ printf("\t\t\tnot find!\n"); /输入失败信息/

return;

}

printf("\t\t\this(her) number:%s\n",stud[i]num); /输出该学生信息/

printf("\t\t\this(her) score:%d\n",stud[i]score);

}

void Statistic(Student stud[],int n) /新增功能,输出统计信息/

{ int i,j=0,k=0,sum=0;

float aver; /成绩平均值/

for(i=0;i<n;i++) /循环输入判断/

{

sum+=stud[i]score;

if(stud[j]score>stud[i]score) j=i;

if(stud[k]score<stud[i]score) k=i;

}

aver=10sum/n;

printf("\t\t\tthere are %d records\n",n); /总共记录数/

printf("\t\t\tthe hignest score:\n"); /最高分/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j]num,stud[j]name,stud[j]score);

printf("\t\t\tthe lowest score:\n"); /最低分/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k]num,stud[k]name,stud[k]score);

printf("\t\t\tthe average score is %52f\n",aver); /平均分/

}

int AddfromText(Student stud[],int n) /从文件中读入数据/

{ int i=0,num;

FILE fp; /定义文件指针/

char filename[20]; /定义文件名/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename); /输入文件名/

if((fp=fopen(filename,"rb"))==NULL) /打开文件/

{ printf("\t\t\tcann't open the file\n"); /打开失败信息/

printf("\t\t\t");

system("pause");

return(n);

}

fscanf(fp,"%d",&num); /读入总记录量/

while(i<num) /循环读入数据/

{

fscanf(fp,"%s%s%d",stud[n+i]num,stud[n+i]name,&stud[n+i]score);

i++;

}

n+=num;

fclose(fp); /关闭文件/

printf("\t\t\tSuccessed!\n");

printf("\t\t\t");

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) /将所有记录写入文件/

{

int i=0;

FILE fp; /定义文件指针/

char filename[20]; /定义文件名/

printf("\t\t\tWrite Records to a Text File\n"); /输入文件名/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))==NULL) /打开文件/

{

printf("\t\t\tcann't open the file\n");

system("pause");

return;

}

fprintf(fp,"%d\n",n); /循环写入数据/

while(i<n)

{

fprintf(fp,"%-16s%-15s%d\n",stud[i]num,stud[i]name,stud[i]score);

i++;

}

fclose(fp); /关闭文件/

printf("Successed!\n"); /返回成功信息/

}

void main() /主函数/

{

int n=0;

for(;;)

{

switch(menu_select()) /选择判断/

{

case 1:

printf("\t\t\tInput Records\n"); /输入若干条记录/

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); /显示所有记录/

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); /按学号排序/

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); /插入一条记录/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); /按姓名查找,删除一条记录/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); /查找并显示一个记录/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tStatistic\n");

Statistic(stu,n); /新增功能,输出统计信息/

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tAdd Records from a Text File\n");

n=AddfromText(stu,n); /新增功能,输出统计信息/

break;

case 9:

printf("\t\t\tWrite to a Text file\n");

WritetoText(stu,n); /循环写入数据/

printf("\t\t\t");

system("pause");

break;

case 0:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /结束程序/

printf("\t\t\t");

system("pause");

exit(0);

}

}

}

四、函数调用关系图

注:“→”代表调用

Input函数

打印链表记录

Display函数

输入若干条记录

menu_select()函数

选择菜单

Sort_by_num函数

显示所有记录

Delete_a_record函数

按姓名查找,删除一条记录

Query_a_record查找并显示一条记录

Statistic函数

输出统计信息 (新增)

AddfromText函数

从正文中添加数据到结构体数组中

Main函数

Insert_a_record插入一条记录

WritetoText函数 将所有数据写入文件中

退出程序

Reverse(head)函数

按学号排序

五、设计测试流程

1、进入界面

2、输入选项1,回车;

按提示输入数据:

3、回到主菜单;

输入选项7,回车;

输入文件名:datatxt,回车;

出现成功提示,则读入文件 *** 作成功。

4、回到主菜单,输入2,回车

每10个暂停显示数据

5、回到主菜单,输入3,回车

出现排序成功信息。

6、回到主菜单,输入4,回车

按提示插入一组数据

7、回到主菜单,输入5,回车

按提示输入姓名,删除数据

出现删除成功的信息

8、回到主菜单,输入6,回车

输入姓名进行查询

9、回到主菜单,输入7,回车

出现统计信息

10、回到主菜单,输入9,回车

输入resulttxt,回车

出现成功写入文件的信息

11、回到主菜单,输入0,回车退出系统

回答者:kingkey001 - 试用期 一级 7-14 22:38

修改答复: kingkey001,您要修改的答复如下: 积分规则 关闭

C语言课程设计报告-------学生成绩简单管理程序

一、系统菜单的主要功能

(1)输入若干条记录

(2)显示所有记录

(3)按学号排序

(4)插入一条记录

(5)按姓名查找,删除一条记录

(6)查找并显示一条记录

(7)输出统计信息 (新增)

(8)从正文中添加数据到结构体数组中

(9)将所有数据写入文件中

(0)退出程序

二、题目分析

该题主要考察学生对结构体,指针,文件的 *** 作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:

功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的 *** 作,提前准备好数据。

三、程序正文部分

#include<stdioh> /引用库函数/

#include<stdlibh>

#include<ctypeh>

#include<stringh>

typedef struct /定义结构体数组/

{

char num[10]; /学号/

char name[20]; /姓名/

int score; /成绩/

}Student;

Student stu[80]; /结构体数组变量/

int menu_select() /菜单函数/

{

char c;

do{

system("cls"); /运行前清屏/

printf("\t\tStudents' Grade Management System\n"); /菜单选择/

printf("\t\t | 1 Input Records |\n");

printf("\t\t | 2 Display All Records |\n");

printf("\t\t | 3 Sort |\n");

printf("\t\t | 4 Insert a Record |\n");

printf("\t\t | 5 Delete a Record |\n");

printf("\t\t | 6 Query |\n");

printf("\t\t | 7 Statistic |\n");

printf("\t\t | 8 Add Records from a Text File|\n");

printf("\t\t | 9 Write to a Text file |\n");

printf("\t\t | 0 Quit |\n");

printf("\t\t\n");

printf("\t\t\tGive your Choice(0-9):");

c=getchar(); /读入选择/

}while(c<'0'||c>'9');

return(c-'0'); /返回选择/

}

int Input(Student stud[],int n) /输入若干条记录/

{int i=0;

char sign,x[10]; /x[10]为清除多余的数据所用/

while(sign!='n'&&sign!='N') /判断/

{ printf("\t\t\tstudent's num:"); /交互输入/

scanf("\t\t\t%s",stud[n+i]num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n+i]name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",&stud[n+i]score);

gets(x); /清除多余的输入/

printf("\t\t\tany more records(Y/N)");

scanf("\t\t\t%c",&sign); /输入判断/

i++;

}

return(n+i);

}

void Display(Student stud[],int n) /显示所有记录/

{

int i;

printf("\t\t\t-----------------------------------\n"); /格式头/

printf("\t\t\tnumber name score\n");

printf("\t\t\t-----------------------------------\n");

for(i=1;i<n+1;i++) /循环输入/

{

printf("\t\t\t%-16s%-15s%d\n",stud[i-1]num,stud[i-1]name,stud[i-1]score);

if(i>1&&i%10==0) /每十个暂停/

{printf("\t\t\t-----------------------------------\n"); /格式/

printf("\t\t\t");

system("pause");

printf("\t\t\t-----------------------------------\n");

}

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(Student stud[],int n) /按学号排序/

{ int i,j,p,q,s;

char t[10];

for(i=0;i<n-1;i++) /冒泡法排序/

for(j=0;j<n-1-i;j++)

if(strcmp(stud[j]num,stud[j+1]num)>0)

{strcpy(t,stud[j+1]num);

strcpy(stud[j+1]num,stud[j]num);

strcpy(stud[j]num,t);

strcpy(t,stud[j+1]name);

strcpy(stud[j+1]name,stud[j]name);

strcpy(stud[j]name,t);

p=&stud[j+1]score;

q=&stud[j]score;

s=p;

p=q;

q=s;

}

}

int Insert_a_record(Student stud[],int n) /插入一条记录/

{char x[10]; /清除多余输入所用/

printf("\t\t\tstudent's num:"); /交互式输入/

scanf("\t\t\t%s",stud[n]num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n]name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",&stud[n]score);

gets(x);

n++;

Sort_by_num(stud,n); /调用排序函数/

printf("\t\t\tInsert Successed!\n"); /返回成功信息/

return(n);

}

int Delete_a_record(Student stud[],int n) /按姓名查找,删除一条记录/

{ char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:"); /交互式问寻/

scanf("%s",s);

while(strcmp(stud[i]name,s)!=0&&i<n) i++; /查找判断/

if(i==n)

{ printf("\t\t\tnot find!\n"); /返回失败信息/

return(n);

}

for(j=i;j<n-1;j++) /删除 *** 作/

{

strcpy(stud[j]num,stud[j+1]num);

strcpy(stud[j]name,stud[j+1]name);

stud[j]score=stud[j+1]score;

}

printf("\t\t\tDelete Successed!\n"); /返回成功信息/

return(n-1);

}

void Query_a_record(Student stud[],int n) /查找并显示一个记录/

{ char s[20];

int i=0;

printf("\t\t\tinput his(her) name:"); /交互式输入/

scanf("\t\t\t%s",s);

while(strcmp(stud[i]name,s)!=0&&i<n) i++; /查找判断/

if(i==n)

{ printf("\t\t\tnot find!\n"); /输入失败信息/

return;

}

printf("\t\t\this(her) number:%s\n",stud[i]num); /输出该学生信息/

printf("\t\t\this(her) score:%d\n",stud[i]score);

}

void Statistic(Student stud[],int n) /新增功能,输出统计信息/

{ int i,j=0,k=0,sum=0;

float aver; /成绩平均值/

for(i=0;i<n;i++) /循环输入判断/

{

sum+=stud[i]score;

if(stud[j]score>stud[i]score) j=i;

if(stud[k]score<stud[i]score) k=i;

}

aver=10sum/n;

printf("\t\t\tthere are %d records\n",n); /总共记录数/

printf("\t\t\tthe hignest score:\n"); /最高分/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j]num,stud[j]name,stud[j]score);

printf("\t\t\tthe lowest score:\n"); /最低分/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k]num,stud[k]name,stud[k]score);

printf("\t\t\tthe average score is %52f\n",aver); /平均分/

}

int AddfromText(Student stud[],int n) /从文件中读入数据/

{ int i=0,num;

FILE fp; /定义文件指针/

char filename[20]; /定义文件名/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename); /输入文件名/

if((fp=fopen(filename,"rb"))==NULL) /打开文件/

{ printf("\t\t\tcann't open the file\n"); /打开失败信息/

printf("\t\t\t");

system("pause");

return(n);

}

fscanf(fp,"%d",&num); /读入总记录量/

while(i<num) /循环读入数据/

{

fscanf(fp,"%s%s%d",stud[n+i]num,stud[n+i]name,&stud[n+i]score);

i++;

}

n+=num;

fclose(fp); /关闭文件/

printf("\t\t\tSuccessed!\n");

printf("\t\t\t");

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) /将所有记录写入文件/

{

int i=0;

FILE fp; /定义文件指针/

char filename[20]; /定义文件名/

printf("\t\t\tWrite Records to a Text File\n"); /输入文件名/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))==NULL) /打开文件/

{

printf("\t\t\tcann't open the file\n");

system("pause");

return;

}

fprintf(fp,"%d\n",n); /循环写入数据/

while(i<n)

{

fprintf(fp,"%-16s%-15s%d\n",stud[i]num,stud[i]name,stud[i]score);

i++;

}

fclose(fp); /关闭文件/

printf("Successed!\n"); /返回成功信息/

}

void main() /主函数/

{

int n=0;

for(;;)

{

switch(menu_select()) /选择判断/

{

case 1:

printf("\t\t\tInput Records\n"); /输入若干条记录/

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); /显示所有记录/

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); /按学号排序/

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); /插入一条记录/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); /按姓名查找,删除一条记录/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); /查找并显示一个记录/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tStatistic\n");

Statistic(stu,n); /新增功能,输出统计信息/

printf("\t\t\t");

#include <stdioh>

#include <stdlibh>

#include <timeh>

void main()

{

int a,b,op,term;

int x,i=0;

int counter = 0; /初始答对题数为0/

char opchar;

srand(time(NULL)); /为函数rand()设置随机数种子/

a= rand()%10+1;

b= rand()%10+1;

for(i= 0;i < 10;i++)

{

a= rand()%10+1;

b= rand()%10+1;

op=rand()%4+1;

switch(op) /根据运算符号不同进行不同的运算/

{

case1:opchar='+';

term=a+ b;

break;

case2: opchar='-';

term=a - b;

break;

case3: opchar='';

term=a

b;

break;

case

4:

opchar='/';

term=a/b;

break;

default:

printf("Wrong

operator!");

}

printf("%d%c%d=",a,opchar,b);

scanf("%d",&x);

if(x==term)

{

printf("Right!\n");

counter++;

}

else

printf("Wrong!\n");

}

printf("Total

score is %d\n",counter10);

printf("Rate

of correctness is %d%%\n",counter10);

}

这个其实不是很难 就是输出日历 仔细看每一句话就明白了

#include <stdioh>

int leap (int year)

{if(year%4==0&&year%100!=0||year%400==0) //判断是否是闰年

return 1;

else return 0;

}

int days_month (int month,int year) //判断大月和小月

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月

return 31;

if(month==4||month==6||month==9||month==11) //找出小月

return 30;

if(month==2&&leap(year)==1) return 29; //判断二月是29天还是29天

else return 28;

}

int firstday(int month,int year)

{int w;

w=(1+2month+3(month+1)/5+year+year/4+year/400-year/100)%7+1; //判断每个月开始的第一天是星期几

return w;

}

main()

{int i,j=1,k=1,a,b,month,year;

printf("\n input month and year:\n");

scanf("%d%d",&month,&year); //输入月和年

b=days_month(month,year);

a=firstday (month,year);

printf(" Sun Mon Tue Wed Thu Fri Sat \n"); //输出对应当月的日历

if(a==7)

{for(i=1;i<=b;i++)

{printf("%4d",i);

if(i%7==0)

{printf("\n");

}

}

}

if(a!=7)

{while (j<=4a)

{printf(" ");

j++;

}

for(i=1;i<=b;i++)

{printf("%4d",i);

if(i==7k-a)

{printf("\n");

k++;

}

}

}

printf("\n");

}

/ 计算24是流行的扑克游戏。其方法是任意取出4张牌,A J Q K 王牌 算 1,其它牌按点数计算,花色不计。

目标是通过加、减、乘、除和括号最终算出24。设计一个程序,输入4个数字(1~10),则列出所有可能计算

结果为24的方案。要求:

方案不能重复(加法乘法交换律等算不同方案)。

计算中局部可以为分数,结果为整数即可(如 3 3 7 7 算法: (3 + 3/7)7)

如果没有找到方案输出:无解。

在某些可不用括号的地方不用括号(即去掉括号后等式的解不变)

待完善:

1)除数不能为零没考虑(不用考虑可正常运行)

/

#include<stdioh>

#include<malloch>

int zuheshu(float s[],int n); // 组合数的函数

float zuhe[4]={0}; // 暂时存放组合

int sum=0; // 用于计数

// 动态分配n个float变量的数组

float fsz(int n)

{

return (float )malloc(sizeof(float)n);

}

int zuhefu(); //符号组合

int yunsuan(float s[],char p[],int k0[],int k1[]); // 算式组合

float qiujie(float suanshi[],int n); // 算式求解

int hefa(float suanshi[],int r); // 算式正确性检查

float jianjie(float suanshi[],int r); // 算式简洁性检查

int fuhe=0; // 计数符合算式数

void main()

{

// 输入四个数

/float shu[4]={0};

printf("请输入4个数字(1~10):\n");

scanf("%f",&shu[0]);

scanf("%f",&shu[1]);

scanf("%f",&shu[2]);

scanf("%f",&shu[3]);

//float shu[4]={1,2,3,4};

printf("输入的4个数字依此是: %0f %0f %0f %0f\n",shu[0],shu[1],shu[2],shu[3]);/

float s[4]={3,3,3,3},shu[4]={0};

printf("请输入四个数(0-9):\n");

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

{

scanf("%f",&s[i]);

for(int j=i;j>0;j--)

{

if(s[j]<=s[j-1])

{

float s0=s[j-1];

s[j-1]=s[j];

s[j]=s0;

}

}

}

printf("四个数是:");

for(i=0;i<4;i++)

{

printf("%0f ",s[i]);

}

printf("\n");

zuheshu(s,4);

printf("有%d个算式符合\n",fuhe);

}

// 组合数,并调用yunsuan

int zuheshu(float s[],int n)

{

if(n==1)

{

zuhe[4-n]=s[0];

zuhefu();

return 1;

}

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

{

if(i==0)

{

// 直接填入s[0],数组和候选数中去除该数,递归

zuhe[4-n]=s[i];

float p=fsz(n-1);

int o=0;

for(int k=0;k<n;k++)

{

if(k!=i)

p[o++]=s[k];

}

zuheshu(p,n-1);

free(p);

}

else if(s[i]!=s[i-1])

{

// 直接填入s[0],数组和候选数中去除该数,递归

zuhe[4-n]=s[i];

float p=fsz(n-1);

int o=0;

for(int k=0;k<n;k++)

{

if(k!=i)

p[o++]=s[k];

}

zuheshu(p,n-1);

free(p);

}

}

}

// 组合运算符号,并调用yunsuan

int zuhefu()

{

// 对 *** 作符'+','—','','/'组合

char opter[4]={'+','-','','/'};

for(int h=0;h<4;h++) // 第一个 *** 作符

{

for(int i=0;i<4;i++) // 第二个 *** 作符

{

for(int j=0;j<4;j++) // 第三个 *** 作符

{

char op[3]; // 放置 *** 作符

op[0]=opter[h];

op[1]=opter[i];

op[2]=opter[j];

// 对括号组合

/ 0 1 1 1 2 2 2 3/

int khzh[8][3]={{0,0,0},{0,0,1},{0,1,0},{1,0,0},{0,1,1},{1,0,1},{1,1,0},{1,1,1}}; // 正或反括号

for(int k=0;k<=3;k++)

{

switch(k)

{

case 0: // 有0个括号

{

yunsuan(zuhe,op,khzh[0],khzh[0]);

}

break;

case 1: // 有1个括号

{

for(int m=1;m<=3;m++) // 正括号

{

for(int n=1;n<=3;n++) //反括号

{//代码将算式组合,并判断正确性;其中(括号)010和100为错误组合,010和010无错误组合,001和100为错误组合,同时100和001可视做无括号应过滤(即正括号后接 *** 作数, *** 作符,不能是 *** 作数,反括号)

//正确组合有六组

if((m==2&&n==3)||(m==1&&n==2)||(m==3&&n==1)||(m==1&&n==3))

continue;

yunsuan(zuhe,op,khzh[m],khzh[n]);

}

}

}

break;

case 2: // 有2个括号

{

//代码将算式组合,并判断正确性;其中(括号)1和1为错误组合,1和1为错误组合,应过滤(即正括号后接 *** 作数, *** 作符,不能是 *** 作数,反括号)同时出现1和1也应视为0和0

//正确括法只有一种即101和101

yunsuan(zuhe,op,khzh[5],khzh[5]);

}

break;

case 3: //有3个括号,不可能

//利用khzu[7]代码将算式组合,并判断正确性(不正确)

break;

}

}

}

}

}

return 1;

}

// 对s[]中的四个数按照p[]和k[]中的运算符进行组合并调用qiujie()函数运算判断结果是否为24

int yunsuan(float s[],char p[],int k0[],int k1[])

{

float suanshi0[13]={'0'}; // 合成等式

int r=0; // 等式的长度

// 组合等式

for(int q=0;q<13;q++)

{

switch(q)

{

case 0:

{

if(k0[0]==1)

suanshi0[r++]='(';

}

break;

case 1:

{

suanshi0[r++]=s[0];

}

break;

case 2:

{

suanshi0[r++]=p[0];

}

break;

case 3:

{

if(k0[1]==1)

suanshi0[r++]='(';

}

break;

case 4:

{

suanshi0[r++]=s[1];

}

break;

case 5:

{

if(k1[0]==1)

suanshi0[r++]=')';

}

break;

case 6:

{

suanshi0[r++]=p[1];

}

break;

case 7:

{

if(k0[2]==1)

suanshi0[r++]='(';

}

break;

case 8:

{

suanshi0[r++]=s[2];

}

break;

case 9:

{

if(k1[1]==1)

suanshi0[r++]=')';

}

break;

case 10:

{

suanshi0[r++]=p[2];

}

break;

case 11:

{

suanshi0[r++]=s[3];

}

break;

case 12:

{

if(k1[2]==1)

suanshi0[r++]=')';

}

break;

}

}

float suanshi=fsz(r); // 动态空间申请

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

{

suanshi[i]=suanshi0[i];

}

// 组合算式的正确性检查

float f=hefa(suanshi,r);

if(f==0)

{

return 0;

}

// 组合算式的简洁性检查

f=jianjie(suanshi,r);

if(f==0)

{

return 0;

}

// 调用函数求解结果为24则输出等式

float sum0=qiujie(suanshi,r);

if(sum0==24)

{

fuhe++;

for(int t=0;t<r;t++)

{

if(suanshi[t]>10)

printf("%c",char(suanshi[t]));

else

printf("%00f",suanshi[t]);

}

printf("=%00f\n",sum0);

}

free(suanshi);

return 1;

}

// 算式正确性检查

int hefa(float suanshi[],int r)

{

float p=&suanshi[0]; // 为当前指针

float q=&suanshi[1]; // 为下一指针

int flag=1; // 等式正确标记

while(1)

{

if(p==40) // 判断是否为'('

{

if((q>=0)&&(q<=9))

{

p++;

q++;

}

else

{

flag=0;

break;

}

}

if((p>=0)&&(p<=9)) // 判断是否为数

{

if((p-suanshi)>=(r-1))

{

break;

}

if(q==')'||((q>41)&&(q<48))) // '+','-','','/'在次范围内

{

p++;

q++;

}

else

{

flag=0;

break;

}

}

if(p==41) // 判断是否为')'

{

if((p-suanshi)>=(r-1))

{

break;

}

if((q>41)&&(q<48)) // '+','-','','/'在次范围内

{

p++;

q++;

}

else

{

flag=0;

break;

}

}

if((p>41)&&(p<48)) // // 判断是否为符号

{

if(q==40||((q>=0)&&(q<=9)))

{

p++;

q++;

}

else

{

flag=0;

break;

}

}

}

return flag;

}

// 算式简洁性检查

float jianjie(float suanshi[],int r)

{

float re=1; // 是否括号不影响算式求解

float p=&re,q=&re;

int k=0; // 括号数目

int k1=0; // 运算符的个数

float r0=0; // '('前的运算符优先级

float r2=1; // 算式运算符优先级

float r1=0; // ')'后的运算符优先级

int r3=0;

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

{

if(suanshi[i]=='(')

{

k++;

if(p!='('||k==1)

{

p=&suanshi[i];

if(i!=0)

{

if((p-1)=='+'||(p-1)=='-')

{

r0=1;

}

else if((p-1)==''||(p-1)=='/')

{

r0=2;

}

if((p-1)=='-')

{

r0+=100;

}

else if((p-1)=='/')

{

r0+=1000;

}

}

}

}

else if(suanshi[i]==')')

{

if(k--==1)

{

q=&suanshi[i];

if(i!=r-1)

{

if((q+1)=='+'||(q+1)=='-')

{

r1=1;

}

else if((q+1)==''||(q+1)=='/')

{

r1=2;

}

}

//递归

re=jianjie(p+1,q-p-1); // 返回括号内的优先级

if(int(r0/100)>=1) // 括号'('外出现减号或除号

{

if((int(r0/100))==1&&(int(re/100))==1) // 括号'('外出现减号,括号内出现+或-

{

continue;

}

else if((int(r0/1000))==1&&(int(re/1000))==1) // 括号'('外出现除号,括号内出现或/

{

continue;

}

}

if(int(re/100)==1)

re-=100;

if(int(re/1000)==1)

re-=1000;

if(int(r0/100)==1)

r0-=100;

else if(int(r0/1000)==1)

r0-=1000;

if(re==0)

return 0;

if(re>=r0&&re>=r1)

return 0;

}

}

else if(k==0)

{

if(suanshi[i]=='+'||suanshi[i]=='-')

{

r2=((r2k1)+1)/(++k1);

r3=r3/10+1;

}

else if(suanshi[i]==''||suanshi[i]=='/')

{

r2=(r2k1+2)/(++k1);

r3=r3%10+10;

}

}

}

if(r3%10==1)

r2+=100;

if(r3/10==1)

r2+=1000;

return r2;

}

// 调用函数求解结果为24则输出等式

float qiujie(float suanshi[],int n)

{

if(n==3)

{

float a=0;

switch(char(suanshi[1]))

{

case '+':

return (suanshi[0]+suanshi[2]);

case '-':

return (suanshi[0]-suanshi[2]);

case '':

return (suanshi[0]suanshi[2]);

case '/':

return (suanshi[0]/suanshi[2]);

}

}

// 过滤掉括号项

float pq='0';

float p=&pq; // 指向算式的第一个正括号

float q=&pq; // 指向算式的与第一个正括号配对的反括号

int k=0;

float suanshi1[7]={'0'}; // 除去括号后的算式

int s=0; // 用来记录suanshi1数组的长度

float sum=0; // 算式的值

for(int m=0;m<n;m++)

{

if(suanshi[m]=='(')

{

k++;

if((p)!='(')

{

p=&suanshi[m];

}

continue;

}

if(suanshi[m]==')')

{

if(k--==1)

{

q=&suanshi[m];

suanshi1[s++]=qiujie(p+1,q-p-1);

p=&pq;

q=&pq;

}

continue;

}

if(k==0)

{

suanshi1[s++]=suanshi[m];

continue;

}

}

if(s==3)

{

sum=qiujie(suanshi1,s);

}

else

{

p=&suanshi1[0]; // 指向第一个数

q=&suanshi1[2]; // 只想第二个数

for(m=0;m<(s-1)/2;m++)

{

switch(char(suanshi1[2m+1]))

{

case '+':

if((s-1)/2!=1&&(suanshi1[2(m+1)+1]==''||suanshi1[2(m+1)+1]=='/'))

{

q=qiujie(p+2,3);

int ws=&suanshi1[s-1]-&suanshi1[2(m+1)];

for(int w=1;w<=ws;w++)

{

if(((q+w+2)-(q+ws))>0)

{

(q+w)=-1;

}

else

{

(q+w)=(q+w+2);

}

}

s=s-2;

m--;

}

else

{

if(m==0)

{

sum+=p+q;

}

else

{

sum+=q;

}

p=p+2;

q=q+2;

}

break;

case '-':

if((s-1)/2!=1&&(suanshi1[2(m+1)+1]==''||suanshi1[2(m+1)+1]=='/'))

{

q=qiujie(p+2,3);

int ws=&suanshi1[s-1]-&suanshi1[2(m+1)];

for(int w=1;w<=ws;w++)

{

if(((q+w+2)-(q+ws))>0)

{

(q+w)=-1;

}

else

{

(q+w)=(q+w+2);

}

}

s=s-2;

m=-1;

}

else

{

if(m==0)

sum+=p-q;

else

sum-=q;

p=p+2;

q=q+2;

}

break;

case '':

if(m==0)

sum+=(p)(q);

else

sum=q;

p=p+2;

q=q+2;

break;

case '/':

if(m==0)

{

sum+=(p)/(q);

}

else

{

sum/=q;

}

p=p+2;

q=q+2;

break;

}

}

}

return sum;

}

以上就是关于c语言课程设计全部的内容,包括:c语言课程设计、c语言的课程设计问题该怎么做、C语言程序设计 (学生选修课程设计)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存