求一C语言源程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一C语言源程序相关的知识,希望对你有一定的参考价值。

1、必须完成的功能:
(1)成绩管理系统至少能储存十位以上学生的成绩
(2)每位学生至少要记录三门或以上的成绩
(3)输入学生的学号,就能搜索到该学生的成绩
(4)能计算各门成绩的平均分
(5)能找出每一门成绩中最高分和最低分的学生

楼上的是c++呀!楼主要c的
这是我以前做的课程设计,和你的题目基本一样,你看看吧!

题一:输入10个学生记录(包括学号、姓名、成绩),所有学生以学号从小到大排序。要求编程序实现输入、查询、排序、插入、删除诸功能。具体要求如下:
A.要求显示如下界面

****************************************
1--------------输入
2--------------查询
3--------------排序
4--------------插入
5--------------修改
****************************************
通过选择1-5来确定要做哪一个操作。
B.输入:程序运行初始化,即首先输入5-10个学生记录的数组
C.查询:按学号查询用二分法实现,若查无此人,输出相关信息。
D.排序:排序结果输出另一数组,按成绩从大到小排序,姓名,学号顺序也随之调整。
D.插入:将一个新学生记录按学号顺序插入原来的数组。
E.修改:修改指定学号的学生的姓名或成绩。
F.以上各个功能均编写成子函数,由主函数调用实现。

模块图和NS图(略)

用户文档:(1)每次输入一个代号,执行一个操作,执行完后都回到界面,第一次执行操作时要先输入若干个学升记录。
(2)输入时按学号由小到大以“学号,分数,名字”格式,学号在十位内,分数要是整数,名字不能有空格,每输入一个学生记录后按一次回车。
(3)加上插入的一共可存放20个学生。即:若一开始输入5个学生记录,则最多可插入15个学生记录。

源程序:
#include<stdio.h>
#include<string.h>
struct student
long num;
char name[20];
int score;
stu[20];
int n;int mid; /*保存学生记录数的全局变量n 与 修改时调用search函数用的全局变量mid*/

input(void) /*输入*/
int i;
printf("\n");
printf("How many students' records do you input?\n");
scanf("%d",&n);
printf("Input %d students' records:\n",n);
printf("number,score,name\n");
for(i=0;i<=n-1;i++)scanf("%ld,%d,%s",&stu[i].num,&stu[i].score,stu[i].name);
printf("\n");
printf("the records you input are:\n");
printf("number,score,name\n");
for(i=0;i<=n-1;i++)printf("%ld,%d,%s\n",stu[i].num,stu[i].score,stu[i].name);
printf("\n");
printf("Press any key to continue\n");
getch();


show(void) /*当前存放的学生记录输出以便核对*/
int i;
printf("The current records are:\n");
printf("number,score,name\n");
for(i=0;i<=n-1;i++)printf("%ld,%d,%s\n",stu[i].num,stu[i].score,stu[i].name);
printf("\n");
printf("Press any key to continue\n");
getch();


search(void) /*查找(二分法)*/
long a;
int first,last,sign;
printf("\n");
printf("Input the number of the student you want to find:\n");
scanf("%ld",&a);
first=0;last=n-1;mid=(first+last)/2;sign=0; /*first与last是两端点下标,mid是中点下标,sign是找到与否的标志*/
while((sign==0)&&(first<=last))
if(stu[mid].num==a)
printf("The student you want to find is:\n");
printf("number,score,name\n");
printf("%ld,%d,%s\n",stu[mid].num,stu[mid].score,stu[mid].name);sign=1;
else if(stu[mid].num>a)last=mid-1;mid=(first+last)/2;
else first=mid+1;mid=(first+last)/2;

if(sign==0)printf("The student is not in the list.\n");
printf("\n");
printf("Press any key to continue\n");
getch();


sort(void) /*按分数排名(选择法)*/
struct student stud[10];int i,j,max;long t1;char t2[]="name copy temporary string";int t3;
for(i=0;i<=n-1;i++)
stud[i].num=stu[i].num;strcpy(stud[i].name,stu[i].name);stud[i].score=stu[i].score; /*stu数组的信息传给stud数组,再对stud排序输出*/
for(i=0;i<=n-2;i++)
max=i;
for(j=i+1;j<=n-1;j++)if(stud[j].score>stud[max].score)max=j;
t1=stud[max].num;stud[max].num=stud[i].num;stud[i].num=t1;
strcpy(t2,stud[max].name);strcpy(stud[max].name,stud[i].name);strcpy(stud[i].name,t2);
t3=stud[max].score;stud[max].score=stud[i].score;stud[i].score=t3;

printf("\n");
printf("The records sorted by scores:\n");
printf("number,score,name\n");
for(i=0;i<=n-1;i++)printf("%ld,%d,%s\n",stud[i].num,stud[i].score,stud[i].name);
printf("\n");
printf("Press any key to continue\n");
getch();


insert(void) /*插入*/

long t1;char t2[]="name copy temporary string";int t3;int i;
printf("\n");
printf("Input the new student's records:\n");
printf("number,score,name\n");
scanf("%ld,%d,%s",&stu[n].num,&stu[n].score,stu[n].name);
for(i=n;i>=1;i--)if(stu[i].num<stu[i-1].num)
t1=stu[i].num;stu[i].num=stu[i-1].num;stu[i-1].num=t1;
strcpy(t2,stu[i].name);strcpy(stu[i].name,stu[i-1].name);strcpy(stu[i-1].name,t2);
t3=stu[i].score;stu[i].score=stu[i-1].score;stu[i-1].score=t3;

else break;
printf("After the insertion:\n");
printf("number,score,name\n");
for(i=0;i<=n;i++)printf("%ld,%d,%s\n",stu[i].num,stu[i].score,stu[i].name);
n++; /*插入后学生级录数加1*/
printf("\n");
printf("Press any key to continue\n");
getch();


change(void) /*修改*/
int i;
printf("\n");
search();
printf("Now input the new record of the student:\n");
printf("number,score,name\n");
scanf("%ld,%d,%s",&stu[mid].num,&stu[mid].score,stu[mid].name);
printf("Done! Now all the records are:\n");
printf("number,score,name\n");
for(i=0;i<=n-1;i++)printf("%ld,%d,%s\n",stu[i].num,stu[i].score,stu[i].name);

printf("\n");
printf("Press any key to continue\n");
getch();


main() /*输出主界面*/
int a;
printf("This is a program that can process students' records.\n\n");
printf("******************************************************\n\n");
printf(" 1----------input\n");
printf(" 2----------show the current records\n");
printf(" 3----------search\n");
printf(" 4----------sort by score\n");
printf(" 5----------insert\n");
printf(" 6----------change\n");
printf(" 0----------exit\n\n");
printf("******************************************************\n\n");
printf("input what you want to do : ");
scanf("%d",&a);
if(a==0)printf("Thank you for using this program.Press any key to leave\n");
while(a!=0)
switch(a)
case 1:input();break;
case 2:show();break;
case 3:search();break;
case 4:sort();break;
case 5:insert();break;
case 6:change();break;

printf("******************************************************\n\n");
printf(" 1----------input\n");
printf(" 2----------show the current records\n");
printf(" 3----------search\n");
printf(" 4----------sort by score\n");
printf(" 5----------insert\n");
printf(" 6----------change\n");
printf(" 0----------exit\n\n");
printf("******************************************************\n\n");
printf("input what you want to do : ");
scanf("%d",&a);
if(a==0)printf("The you for using this program. Press any key to leave\n");break;

getch();


测试:1、输入:101,90,Shengping 2、查询:104 结果:104,95,Zhuoyan
102,85,Minchao 查询:109 结果:The student is not in the list.
104,95,Zhuoyan
108,80,Xishan
112,91,Yimin
3、插入:109,92,Zhaojian 4、修改:输入:108
结果:101,90,Shengping 输入改的:108,88,Jack
102,85,Minchao 结果:101,90,Shengping
104,95,Zhuoyan 102,85,Minchao
108,80,Xishan 104,95,Zhuoyan
109,92,Zhaojian 108,88,Jack
112,91,Yimin 109,92,Zhaojian
112,91,Yimin

题二:有10个学生,每个学生有3门课程成绩,从键盘输入以上信息(包括学生学号、姓名、三门课程成绩),计算出平均成绩。并按平均成绩由高到低输出到屏幕(要求有学号、平均成绩、排名序号)

模块图和NS图(略)

用户文档:输入时按学号由小到大以“学号,分数,名字”格式,学号在十位内,分数要是整数,名字不能有空格,每输入一个学生记录后按一次回车。

源程序:
#include<stdio.h>
#include<string.h>
struct student
long num;
char name[20];
int score[3],average;
stu[5];

input(void)
int i;
printf("Input 5 students' records:\n");
printf("number,Chinese score,maths score,English score,name\n");
for(i=0;i<=4;i++)scanf("%ld,%d,%d,%d,%s",&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],stu[i].name);
printf("\n");


ave(void)
int i,j,s;
for(i=0;i<=4;i++)
for(j=0,s=0;j<=2;j++)s=s+stu[i].score[j];
stu[i].average=s/3;



sort(void)
int i,j,max;long t1;int t2;char t3[]="name copy temporary string";
for(i=0;i<=3;i++)
max=i;
for(j=i+1;j<=4;j++)if(stu[j].average>stu[max].average)max=j;
t1=stu[max].num;stu[max].num=stu[i].num;stu[i].num=t1;
strcpy(t3,stu[max].name);strcpy(stu[max].name,stu[i].name);strcpy(stu[i].name,t3);
t2=stu[max].average;stu[max].average=stu[i].average;stu[i].average=t2;



output(void)
int i;
printf("The students' records sorted by the average scores:\n");
printf("rank,average score,number,name\n");
for(i=0;i<=4;i++)printf("%d,%d,%ld,%s\n",i+1,stu[i].average,stu[i].num,stu[i].name);
printf("\n");


main()
input();
ave();
sort();
output();
getch();


测试:输入:101,80,70,60,Susaku 输出:rank,average score,number,name
103,90,85,70,CC 1,90,107,Vegeta
107,80,95,95,Vegeta 2,88,112,Goku
112,95,90,80,Goku 3,81,103,CC
126,75,85,65,Gohan 4,75,126,Gohan
5,70,101,Susaku
参考技术A 我把我们的作业发给你吧...呵呵!就是这个!做了很久啊!你的150分可不要吝啬啊!辛苦了好久的成果啊!
/*student.h* /头文件
/*用const 定义,可以方便以后更改*/
const int N = 3;
const int M = 3;
class student

public:
student(); //构造函数,创建对象
~student(); //析构函数,释放内存空间
void display();
double Get_Aver();
void No_Pass();
void sort(student *s);
static void print(); //print为静态成员函数
protected:
char name[20];
char Id[10];
double course[N];
double aver_score;
/*定义不及格的人数和总人数为静态变量*/
static int no_pass_num;
static int total_num;
;
/*student.cpp*/文件
/*要引入头文件*/
#include "student.h"
#include "iostream.h"
student::student()

cout<<"执行构造函数"<<endl;
cin>>name>>Id; //输入名字
for(int i =0;i<N;i++)
cin>>course[i]; //输入各科的成绩
total_num++; //每次利用构造函数创建一个对象,学生总人数num就加1

void student::display()

cout<<name<<" ";
cout<<Id<<" ";
for(int i =0;i < N;i++)
cout<<course[i]<<" ";
cout<<Get_Aver(); //调用求平均数的函数,返回每个人的平均成绩
cout<<endl;

/*求每个人的平均成绩*/
double student::Get_Aver()

aver_score = 0;
for(int i=0;i<N;i++)

aver_score+=course[i];

aver_score=aver_score/N;
return aver_score;

/*统计不及格的学生人数*/
void student::No_Pass()

for(int i =0;i<N;i++)
/*只要有一科不及格就算不及格*/
if(course[i]<60)

no_pass_num++; //静态变量加1,再次调用函数前,no_pass_num的值保持不变
break; //有一科成绩不及格,则退出循环,不再判断


void student::print()

cout<<"学生总数为:"<<total_num<<endl;
cout<<"不及格学生数为:"<<no_pass_num<<endl;

/*对学生每一科的成绩进行排名*/
void student::sort(student *s)
/*利用冒泡法按课程对学生成绩进行排序*/
for(int i =0;i<N;i++)
for(int j =0;j<M;j++)
for(int m=0;m<M-j;m++)

if(s[m].course[i] < s[m+1].course[i])
/*交换位置*/
double temp;
temp = s[m].course[i];
s[m].course[i]= s[m+1].course[i];
s[m+1].course[i] = temp;


/*输出成绩*/
for(i =0;i<N;i++)

cout<<"course"<<i<<": 从高到低为:"<<endl;
for(int k =0;k<M;k++)
cout<<s[k].course[i]<<" ";
cout<<endl;


/*释放对象占用的内存*/
student::~student()

cout<<"执行析构函数"<<endl;

/*main.cpp*/文件
/*引入student.h头文件*/
#include "iostream.h"
#include "student.h"
int student::no_pass_num = 0; //对静态变量进行初始化,要用类名
int student::total_num = 0; //对静态变量进行初始化,要用类名
void main()

cout<<"请输入学生的信息,不同数据之间以空格分隔:"<<endl;
cout<<"姓名 学号 程序设计 信号处理 数据结构"<<endl;
student s[M];//执行构造函数并接受输入
cout<<endl;
/*输出*/
cout<<endl<<"以下是输出信息与统计信息"<<endl;
cout<<"姓名 学号 程序设计 信号处理 数据结构 平均成绩"<<endl;
for(int i = 0;i<M;i++)

s[i].display();
s[i].No_Pass();

student::print(); //调用静态成员函数
s[i].sort(s); //进行排序
// cout<<"不及格人数为:"<<no_pass<<endl;


我都是运行了的,结果都是对的!呵呵。。。好不容易做出来的!
参考技术B 找出每一门成绩中最低分的学生,就是楼主,哈哈 参考技术C 这种程序一般都是要花钱的. 参考技术D 你给我150块都不可能给你答案

C语言求一个数的绝对值

//求一个数的绝对值
#include <stdio.h>
int absolute_value(int num)
{
	if (num < 0)
	{
		num = ~(num - 1);
	}
	return num;
}
int main()
{
	printf("%d\n", absolute_value(5));
	printf("%d\n", absolute_value(-5));
	printf("%d\n", absolute_value(0));
	return 0;
}

以上是关于求一C语言源程序的主要内容,如果未能解决你的问题,请参考以下文章

急!!![80分]求一C语言程序

求一c语言程序,输入两个数,判断他们是不是相等

求一份C语言程序设计的期末考试试题!!!谢谢了

c语言 求一组数的平均值及其均方差 写出程序,谢谢!

c语言求一百以内的奇数和?

求一段C语言程序,主要是比较两个数据组。