C语言课程设计报告
题目学生成绩管理系统
学院_____ 计算机_____ _____专业______网络工程_________ 年级班别08(1)________学号3108007044 学生姓名_____吴炎财___________ 指导教师谢光强 _ 成绩
2009年2 月
1、每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成
绩。
2、输入功能:可以一次完成若干条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名或学号查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按学号顺序插入一条学生记录。
7、将学生记录存在文件student.dat中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 二设计要求
一、已知有存储本班学生记录(包括学号、姓名、科目成绩、性别、)的文件student.dat,
所有学生以学号从小到大排序(该文件自行建立)。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下:
A.要求显示如下界面
****************************************
1--------------查询
2--------------排序
3--------------插入
4--------------删除
****************************************
通过选择1-4来确定要做哪一个操作。
B.若选1,则出现如下界面
****************************************
1.1----------按学号查询
1.2----------按姓名查询
1.3----------按成绩查询
****************************************
通过选择1.1-1.3来确定要做哪一个操作,其中:按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查
无此人,输出相关信息。(注:由于TC不支持中文,此程序界面作了一点点修改) C.若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。
D.若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。
E.若选4,删除指定学生的记录,并把结果保存到文件student.dat中。
G.不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等
F.以上各个功能均编写成子函数,由主函数调用实现。
G.利用结构体数组实现学生成绩的数据结构设计;
系统菜单的主要功能:
1输入学生信息
2删除学生信息
3查找学生信息
4显示全部学生信息
5显示班级信息
6根据学生总成绩排序
7保存学生信息
8退出程序
系统功能模块结构图
四详细设计
1输入学生信息
运用交叉输入法,输入学生信息(包括:学号,姓名,性别,语文成绩,数学成绩,英语成
绩,计算机成绩 流程图:
2 删除学生信息
输入要删除的学生的学号,程序自动将学生信息删除,如果输入学号不正确,程序会提醒找不到该学生,按任意键就可以回到菜单.例:
流程图:
3 查找学生信息
如果没有学生记录,程序会提醒没有记录,按任意键返回,如果有学生记录,就会进入二级菜单,如:
选择1,根据学号查找;选择2,根据名字查找;选择3,根据分数查找。
根据学号:
4 显示学生信息
此功能可以显示所有学生的信息,包括各门科目的成绩,总分数,排名。流程图:
Showstu函数流程图:
5 显示班级信息
此功能可以显示整个班级的信息。流程图:
6根据学生总成绩排序
用冒泡发对学生总成绩进行排序。
8退出程序。
五运行结果
菜单:
Student.dat文件:
六参考资料
<
七心得体会
学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。
看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。
而且,我觉得我还没有去做第一题的能力。以后在碰到像等级考试这样的事情我就再也不怕了。
该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
现在终于都发觉老师给我们讲的一句话是多么的正确,”语法错误并不难找,最难找的是逻辑错误”,刚开始设计这个小程序的时候,我用了一天的时间来写源程序,并在tc里通过了编译和连接,当时,我的心情特别高涨,自以为已经整个程序已经设计好了。
但是,当我进入可执行文件的时候,我发觉问题并不像我想的那么简单。数据储存不了,不可以输入浮点型数据,抗风险能力太弱…
问题接二连三的出现。之后的几天我都在不断的修改我的程序,但是问题同样存在。连续几天对着电脑,我身心感到特别疲惫,
我曾经想过放弃。后来,我咨询了一些师兄师姐,让他们看了我的程序,他们一眼就看出了我的程序问题所在。在他们的指导下我终于都把程序完成。
当局者迷,旁观者清。
自己一个人孤军作战,太辛苦了。有时候还需要借助别人的帮助!!
一个人永远都不可能开发一个大型软件,要相信自己的团队,相信自己的能力!
八源程序
头文件:
#include "stdio.h"
#include
#include
#define TotalMax 100
struct student
{
char stuId[TotalMax];/*学号*/
char stuName[TotalMax];/*姓名*/
int stuSex;/*1 表示男2表示女*/
float scoreCh; /* 语文成绩四门课程假设为语文,数学,英语,计算机*/ float scoreMath;/*数学成绩*/
float scoreEn; /*英语成绩*/
float scoreCO; /*计算机成绩*/
float scoreAll; /*总成绩*/
int rank; /*班级名次*/
}Student[TotalMax],*StudentTemp[TotalMax],*temp,stemp; /*定义全局学生数组*/
void CheckStudentRank();/*计算学生名次和全班各科的平均成绩和及格率*/
void AddStu(); /*输入学生信息*/
void DelStu();/*删除学生信息*/
void ShowStu(int i); /*显示学生信息*/
void ShowAllStu(); /*显示全部学生信息*/
void FindStuID(); /*根据学号查询*/
void FindStuName();/*根据姓名查询*/
void FindStudent();/*查询学生信息*/
void ShowClassInfo();/*显示班级信息*/
void SaveData();/*保存数据*/
void sortStudent()/*排序*/
int StuDex=0; /*学生下标*/
int StuTotal=0; /*班级学生个数*/
int StuFG[TotalMax]; /*学生标志*/
各函数:
void CheckStudentRank()/*计算学生名次和全班各科的平均成绩和及格率*/ {
int i=0,j=0,n=0;
if(StuTotal==0)return; /*如果没有学生,直接返回*/
if(StuTotal==1) /*只有一个学生,他只能是第一名*/
{
for(i=0;i if(StuFG[i]>0) { Student[i].rank=1; return; } } for(i=0;i if(StuFG[i]>0) StudentTemp[n++]=&Student[i]; for(i=0;i for(j=0;j { if((*StudentTemp[j]).scoreAll<(*StudentTemp[j+1]).scoreAll) { temp=StudentTemp[j]; StudentTemp[j]=StudentTemp[j+1]; StudentTemp[j+1]=temp; } } for(i=0;i (*StudentTemp[i]).rank=i+1; return; } void AddStu() /*输入学生信息*/ { printf("\nplease input the student's id:"); memset(Student[StuDex].stuId,0,TotalMax); scanf("%s",&Student[StuDex].stuId); printf("\nplease input the student's name:"); memset(Student[StuDex].stuName,0,TotalMax); scanf("%s",&Student[StuDex].stuName); while(1) { printf("\nplease input the student's sex (1 : man 2:woman):"); scanf("%d",&Student[StuDex].stuSex); if(Student[StuDex].stuSex==1 || Student[StuDex].stuSex==2) break; printf("error\n"); } printf("\nplease input the student's chinese score:"); scanf("%f",&Student[StuDex].scoreCh); printf("\nplease input the student's math score:"); scanf("%f",&Student[StuDex].scoreMath); printf("\nplease input the student's english score:"); scanf("%f",&Student[StuDex].scoreEn); printf("\nplease input the student's person computer score:"); scanf("%f",&Student[StuDex].scoreCO); Student[StuDex].scoreAll=Student[StuDex].scoreCh +Student[StuDex].scoreEn+Student[StuDex].scoreMath+Student[StuDex].scoreCO; Student[StuDex].rank=0; StuTotal++; StuFG[StuDex]=1; StuDex++; printf("Add success\n\n"); CheckStudentRank();/*计算名次*/ system("pause"); system("cls"); return; } void DelStu()/*删除学生信息*/ { char id[TotalMax]; int i; printf("\nplease input the student's id:"); scanf("%s",id); for(i=0;i { if(strcmp(Student[i].stuId,id)==0) break; } if(i>=StuDex) { printf("The student who that class does not have student serial id sought by you , comes back to soon\n"); } else { StuFG[i]=0; StuTotal--; printf("Delete success\n"); } CheckStudentRank(); system("pause"); system("cls"); } void ShowStu(int i)/*显示学生信息*/ { printf("\nstudent id:%s",Student[i].stuId); printf("\tstudent name:%s",Student[i].stuName); if(Student[i].stuSex==1) printf("\tsutdent sex:man\n"); else printf("\tsutdent sex:woman\n"); printf("chinese score:%f",Student[i].scoreCh);printf("\tmath score:%f\n",Student[i].scoreMath); printf("english score:%f",Student[i].scoreEn);printf("\tpc score:%f\n",Student[i].scoreCO); printf(" total score:%f",Student[i].scoreAll);printf("\trank is:%d\n\n",Student[i].rank); return; } void ShowAllStu() /*显示全部学生信息*/ { int i=0; printf("\nthe student's total number now is %d\n\n",StuTotal); for(i=0;i { if(StuFG[i]>0) { ShowStu(i); } } system("pause"); system("cls"); return; } void FindStuID()/*根据学号查询*/ { char id[TotalMax]; int i=0; printf("\nthe student's total number now is%d\n\n",StuTotal); printf("please input the student's id:"); scanf("%s",id); for(i=0;i { if(strcmp(Student[i].stuId,id)==0) break; } if(i>=StuDex) printf("sorry,no student which you find\n"); else ShowStu(i); system("pause"); system("cls"); return; } void FindStuName()/*根据姓名查询*/ { char name[TotalMax]; int i=0; printf("\nthe student's total number now is%d\n\n",StuTotal); printf("please input the student's name:"); scanf("%s",name); for(i=0;i { if(strcmp(Student[i].stuName,name)==0) break; } if(i>=StuDex) printf("sorry,no student which you find\n"); else ShowStu(i); system("pause"); system("cls"); return; } void FindStudentByScore()/*根据成绩查询*/ { float score=0.0; int i=0; int flag=0; printf("\nthe student's total number now is%d\n\n",StuTotal); printf("please input the student's score > :"); scanf("%f",&score); for(i=0;i { if(Student[i].scoreAll>score) { flag=1; ShowStu(i); } break; } if(flag==0) printf("sorry,no student which you find\n"); system("pause"); system("cls"); return; } void FindStudent()/*查询学生信息*/ { int choose=0; if(StuTotal<=0) { printf("\nnow have no student.\n"); system("pause"); system("cls"); return; } while(1) { system("cls"); printf("*************************************************************\n \n"); printf("------------------1: find by id\n\n"); printf("------------------2: find by name\n\n"); printf("------------------3: fine by score\n\n"); printf("------------------4: back\n\n"); printf("*************************************************************\n \n"); printf("you choose :"); scanf("%d",&choose); switch(choose) { case 1:FindStuID(); break; case 2:FindStuName(); break; case 3:FindStudentByScore(); break; case 4:return; default:break; } } return; } void ShowClassInfo()/*显示班级信息*/ { int i=0; float scoreSumCh=0.0; float scoreAvgCh=0.0; float ScoreFailChCount=0.0; float scoreSumMa=0.0; float scoreAvgMa=0.0; float ScoreFailMaCount=0.0; float scoreSumEn=0.0; float scoreAvgEn=0.0; float ScoreFailEnCount=0.0; float scoreSumPC=0.0; float scoreAvgPC=0.0; float ScoreFailPCCount=0.0; if(StuTotal<=0) { printf("\nnow have no student\n"); system("pause"); system("cls"); return; } printf("\nthe student's total number now is%d\n\n",StuTotal); for(i=0;i { if(StuFG[i]>0) { scoreSumCh+=Student[i].scoreCh; scoreSumMa+=Student[i].scoreMath; scoreSumEn+=Student[i].scoreEn; scoreSumPC+=Student[i].scoreCO; if(Student[i].scoreCh<60) ScoreFailChCount++; if(Student[i].scoreMath<60) ScoreFailMaCount++; if(Student[i].scoreEn<60) ScoreFailEnCount++; if(Student[i].scoreCO<60) ScoreFailPCCount++; } { printf("\nthe class chinese avg score is:%f\t and pass rate is:%f",scoreSumCh/(float)StuTotal,1-(ScoreFailChCount/StuTotal)); printf("\nthe class math avg score is:%f\t and pass rate is:%f",scoreSumMa/(float)StuTotal,1-(ScoreFailMaCount/StuTotal)); printf("\nthe class english avg score is:%f\t and pass rate is:%f",scoreSumEn/(float)StuTotal,1-(ScoreFailEnCount/StuTotal)); printf("\nthe class pc avg score is:%f\t and pass rate is:%f\n",scoreSumPC/(float)StuTotal,1-(ScoreFailPCCount/StuTotal)); } } system("pause"); system("cls"); return; } void SaveData()/*保存数据*/ { int i=0; FILE *pFile=NULL; char buf[100]={0}; memset(buf,0,100); if((pFile=fopen("student.dat", "w" ))!= NULL ) { sprintf(buf,"\n目前学生的总人数为%d个\n\n",StuTotal); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); for(i=0;i { if(StuFG[i]>0) { sprintf(buf,"\n学生学号:%s\t学生姓名%s",Student[i].stuId,Student[i].stuName); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); if(Student[i].stuSex==1) sprintf(buf,"学生性别:男\n"); else sprintf(buf,"\t学生性别:女\n"); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); sprintf(buf,"语文成绩:%f\t\t数学成绩:%f\n",Student[i].scoreCh,Student[i].scoreMath); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); sprintf(buf,"英语成绩:%f\t\t计算机成绩:%f\n",Student[i].scoreEn,Student[i].scoreCO); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); sprintf(buf," 总成绩:%f\t\t名次为:%d\n\n",Student[i].scoreAll,Student[i].rank); fwrite(buf,1,sizeof(buf),pFile);memset(buf,0,100); } } } fclose(pFile); printf("\nsave data success, \\student.dat\n"); system("pause"); system("cls"); return; } void sortStudent() { int i,j; for(i=0;i for(j=0;j { if((Student[j]).scoreAll<(Student[j+1]).scoreAll) { stemp=Student[j]; Student[j]=Student[j+1]; Student[j+1]=stemp; } } ShowAllStu(); printf("sore success!"); } 主函数: int main() { int choose=0; int i=0; for(i=0;i 游戏C语言实验报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】 嘉应学院计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班级:计算机1505 指导老师:陈广明 设计题目:游戏2048 学生姓名(学号):第3组:钟瞻宇 目录 一、实验目的和要求 (1)使用C语言编写2048这款游戏。 (2)能够正常运行,拥有游戏界面。 (3)能正常进行游戏从开始到结束。? (4)用户操作方便。 二、实验环境、内容和方法 实验内容:1、游戏开始时随机产生两个数值为2/4的方格,其中一个方格置于4个角中的一个位置,另一个方格随机的置于其他位置,其他方格置于0。 2、每次按方向键(w,s,a,d)后,逐行计算移动后的方格值。每行移动的算法是:先将所有值为0的数移至行首。能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。 3、每合并一次格子,将其值累计到游戏总分中。 4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值。 5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。 6、2出现的概率为70%,4出现的概率为30%。 实验方法: 通过上机操作完成各内容。 实验环境: 实验用PC机一台,使用操作系统为Windows 7/ Windows 8/ Windows10,安装 vc++或v2008等编译软件 三、程序设计 Y 四、源代码 #include<> #include<> #include<> #include<> #define M 2048 void up(); n"); printf(" 玩家可以选择上(w)下(s)左(a)右(d)四个方向,若棋盘内的数字出现位移或合并,视为有效移动.\n"); printf(" 若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并.\n"); printf(" 合并所得的所有新生成数字想加即为该步的有效得分.\n"); printf(" 玩家选择的方向行或列前方有空格则出现位移.\n"); printf(" 每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4).\n"); printf(" 棋盘被数字填满,无法进行有效移动,判负,游戏结束.\n"); printf(" 棋盘上出现2048,判胜,游戏结束"); printf("\n\n\n"); printf(" \t\t\t按回车开始游戏.\n"); getchar(\n); 《C语言程序设计》实验报告 专业:班级:学号:学生姓名:实验日期:成绩:指导老师: 实验单元一程序基本结构设计 一、实验题目 实验一熟悉VC++环境 二、实验目的 1. 熟悉C程序编辑环境,掌握主要菜单项的作用。 2. 熟悉编写一个C程序的上机过程(编辑、编译、链接和运行)。 3. 熟悉C程序的基本输入输出语句 三、实验内容 1. 书本第一章的例一程序。 2. 由键盘输入两个整数,求得它们的和并输出至屏幕。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2.软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: #include "stdio.h" int main() {int a,b,sum; a=2; b=3; sum=a+b; printf("007zhang\nsum=%d\n",sum); return 0; } 运行结果为: 2.源程序代码: 运行结果为: 六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进行简单总结) 《C语言程序设计》实验报告 专业:班级:学号:学生姓名: 实验日期:成绩:指导老师: 实验单元一程序基本结构设计 一、实验题目 实验二顺序结构程序设计 二、实验目的 (1)掌握C语言数据类型以及变量的声明。 (2)掌握C语言的赋值运算符、赋值表达式、赋值语句。 (3)掌握C语言的整型和字符型的混合运算。 (4)掌握C语言的输入、输出函数的使用格式。 三、实验内容 1.有人用温度计测量出华氏温度,现输入华氏温度f,请编写程序把它转换为摄氏温度c。 已知华氏温度和摄氏温度有如下关系:c=5/9(f-32)。 2.输入长方形的长和宽,编程求该长方形的周长和面积。(要求周长和面积保留两位小数) 3.将字符串“China”译成密码,译码规则是:用字母表顺序中原来字母后面的第5个字母 替代原来的字母。请编写程序实现译码并输出。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2.软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: 运行结果为: 2.源程序代码: 运行结果为: 3.源程序代码: 运行结果为: 六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进 丽水学院计算机实验报告 丽水学院计算机实验报告 一、实验目的 1.熟悉Visual C++和C-Free等集成环境,掌握运行一个C程序的基本步骤,包括编辑、编译、连接和运行。 2.掌握算术表达式和赋值表达式的使用。 3.掌握基本输入、输出函数的使用。 4.能够编程实现简单的数据处理。 二、实验环境 硬件:Pentium以上的计算机。 软件:Windows XP操作系统、Visual C++和C-Free等集成环境。 三、实验内容和结果 1.编程题1 在屏幕上显示一个短句“What is a computer?” 思考: (1)如何在屏幕上显示你自己的学号,姓名和班级? (2)如何在屏幕上显示数字、英文字母和汉字等信息?例如:“你在机房吗?” 编程题1源程序: #include<> void main() { printf("What is a computer?\n"); } 程序运行结果: What is a computer? 思考题(1): #include<> void main() { printf(",小王,班级\n"); } 思考题(2): #include<> void main() { printf("英文字母abcdefgABCDEFG\n"); printf("汉字:哇哈哈啊哈和\n"); } 2.编程题2 在屏幕上显示下列图形。 * * * * * * * * * * 思考:如何在屏幕上显示下列图形? A A A A 编程题2源程序: #include<> void main() { int i,j; for(j=1;j<5;j++) { for(i=5;i>j;i--) printf("*"); printf("\n"); } } 程序运行结果: * * * * * * * * * * 思考题: 《C语言程序设计实训1》报告 设计题目:基于数组的学生信息管理系统学院名称:信息科学技术学院 专业:计算机科学与技术 班级: 姓名:学号 指导教师: 提交日期: 2014年12月22日 一、实验内容 编写并调试程序,实现学校各专业班级学生信息的管理。10个学生的信息存储在文件中。在头文件中定义学生信息的结构体类型,包括: 学号、姓名、专业、班级、3门成绩;和符号常量N(学生数)。(同一班 级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级) 二、实验要求 (1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择, 调用相应的函数。 STU student[N]; 函数 #include "" void main() { int i,n,id,num,m,sub,corse;将从文件中读取10个人的信\n"); printf("\n2.您将从文件中随机读取第n(0<=n<=9)个学生的信息\n") printf("\n3.您将根据某一班级某一专业总分超过多少进行查找\n"); printf("\n4.您将求某一课程分数最高的学生序号的下标\n"); printf("\n5.您将对平均成绩由低到高进行简单选择排序法\n "); printf("\n6.您将对某一个班的平均成绩由低到高进行起泡排序法\n"); printf("\n7.您将对某门专业的学生的某门课程成绩由低到高进行直接插入排序法\n"); printf("\n8.您将把学生信息存入文件\n"); scanf("%d",&id); getchar(); switch(id){ case 1: { printf("\n从文件中读取信息\n"); Input(students,sizeof(students)/sizeof(STU));Sort_select 函数 #include "" void Sort_select(STU * p) { int i,j,k; float sum,ave[N],t; STU tem; for(i=0;i 成都工业学院·计算机工程学院 《程序设计基础》实验报告 1.实验目的 (1)熟悉C语言运行环境,了解和使用Visual6.0++集成开发环境(2)熟悉Visual6.0++环境的功能键和常用的功能菜单命令 (3)掌握C语言程序的书写格式和C语言程序的结构 (4)掌握C语言上机步骤,以及编辑、编译和运行一个C语言程序的方法 (5)熟悉Visual6.0++环境下的程序调试方法 2.实验内容 (1)按照实验步骤编辑、编译、运行第一个”Hello World”程序(2)利用实验指导中的第二个程序熟悉调试工具,在已知x,y值的情况下,计算出x和y的和、差、积、商,并显示出来(3)编写一个程序,输入a、b、c三个值,输出它们的和与平均值c 3.源程序 (1)#include (3)#include 篇一:《C语言上机实验心得》 C语言上机实验心得 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好C语言,这对我们以后的发展是十分重要的。 说到这,上机实验当然就是一个必不可少的环节了,C语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。 通过实验我也发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了C语言那就大错特错了。 我主要存在以下的这些缺点 1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。而在最后 输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。 2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解 题了。 3、 4、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够 深刻。 5、 6、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在 一点问题。 为了能更好地学好C语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。 实验中我深刻意识到完成程序的编写,决不意味着万事大吉。认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。所以程序的调试是一个技巧性很强的工作,它可能比编一个程序耗时更 多。由此可看出上机实践的重要性。 通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。编程的时候有因为顺利编出程序而开心过、有因为做得比人家慢而郁闷过、有因为不知从何入手而无奈过、有因为不知错出在哪而彷徨过但随着练习的增多,我对C语言比以前熟了很多,不再只是纸上谈兵,我都有能力独立做出一些程序,可能对于一些“高手来说这不算什么,或者他们早就会了,但我依然觉得很开心,因为我跟我自己比是进步了。 f r 《C 语言程序设计》实验报告 专业: 班级: 学号: 学生姓名: 实验日期: 成绩: 指导老师: 实验单元一 程序基本结构设计 一、实验题目 实验一 熟悉VC++环境 二、实验目的 1. 熟悉C 程序编辑环境,掌握主要菜单项的作用。 2. 熟悉编写一个C 程序的上机过程(编辑、编译、链接和运行)。 3. 熟悉C 程序的基本输入输出语句 三、实验内容 1. 书本第一章的例一程序。 2. 由键盘输入两个整数,求得它们的和并输出至屏幕。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2.软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: #include "stdio.h"int main(){int a,b,sum;a=2;b=3; sum=a+b; printf("007zhang\nsum=%d\n",sum);return 0;} 运行结果为: 2.源程序代码: 运行结果为: 六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进行简单总结) f r 《C 语言程序设计》实验报告 专业: 班级: 学号: 学生姓名: 实验日期: 成绩: 指导老师: 实验单元一 程序基本结构设计 一、实验题目 实验二 顺序结构程序设计 二、实验目的 (1)掌握C 语言数据类型以及变量的声明。 (2)掌握C 语言的赋值运算符、赋值表达式、赋值语句。(3)掌握C 语言的整型和字符型的混合运算。(4)掌握C 语言的输入、输出函数的使用格式。 三、实验内容 1.有人用温度计测量出华氏温度,现输入华氏温度f ,请编写程序把它转换为摄氏温度c 。已知华氏温度和摄氏温度有如下关系:c=5/9(f-32)。 2.输入长方形的长和宽,编程求该长方形的周长和面积。(要求周长和面积保留两位小数) 3. 将字符串“China ”译成密码,译码规则是:用字母表顺序中原来字母后面的第5个字母替代原来的字母。请编写程序实现译码并输出。 四、实验环境 1.硬件环境:当前所有电脑硬件环境均支持。 2. 软件环境:Visual C++ 6.0 五、实验代码及结果(程序运行结果请以截屏图给出) 1.源程序代码: 运行结果为: 2.源程序代码: 运行结果为: 3.源程序代码:运行结果为: 六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进 c语言实验报告及建议 实验6 数组 一、实验目的 (1)掌握一维数组和二维数组的定义、赋值和输入输出方法。 (2)掌握与数组有关的算法(特别是排序算法)。 (3)掌握字符数组和字符串的使用方法。 (4)能正确定义数组的指针,熟练使用指针访问数组元素。 (5)学会使用字符串的指针和指向字符串的指针变量。 (6)学会使用指针数组处理多个字符串数据。 二、实验预备知识: 三、实验内容 1.观察下面给一维数组赋值有什么错误,怎样修改,写出正确运行后的结果。 #include "stdio.h" main() { int i,a[3],sum=0; scanf(“%d,%d,%d”,a); for(i=0;i<=3;i++) sum=sum+a[i]; printf("sum=%d",sum); } 错误语句:scanf(“%d,%d,%d”,a);改正: scanf("%d,%d,%d",&a[0],&a[1],&a[2]); 运行结果: 1,1,1,sum=3 2.(1)补全下面的程序,程序的功能是求一位数组的中最小元素的值及其所在的下标号。#include "stdio.h" main() { int i,a[10],min,index; (1) for(i=0;i<10;i++) /*利用一充循环给数组a赋值*/ scanf(“%d”, (2)&a[i] ); for(i=0, (3)min-a[0] ;i<10;i++) /*求数组a中的最小值min及其对应的下标index*/ if(min>a[i]){ (4) min=a[i];index=i; } printf("MIN=%d,index=%d\n",min,index); } C语言实验报告 说明 1,所有程序均用VC6.0编译运行,文件名命名为姓名+日期,因为实验存在补做,所以并不是按照日期先后排列的。 2,为了使截图清晰,手动将运行窗口由“黑底白字”改为了“白底黑字”。 实验2 数据类型、运算符和表达式 一、实验目的: (1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量、以及对它们赋值的方法。 (2)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。 (3)掌握C语言的输入和输出函数的使用 (4)进一步熟悉C程序的编辑、编译、连接和运行的过程。 三、程序调试与问题解决: (1)输人并运行下面的程序 #include printf("%d %d\n",c1,c2); 再运行,并分析结果。 输出结果如图,编译成功,无错误。 ○3将第3行改为 int c1,c2; 再运行,并分析结果。 ○4再将第4、5行改为 c1=a; c2=b; 再运行,并分析结果。 a,b没有定义,编译报错。 ○5再将第4、5行改为 c1=‘’a‘’; c2=‘’b‘’; 再运行,并分析结果。 ○6再将第4、5行改为 c1=300; c2=400; 再运行,并分析结果。 以字符型输出时,输出的将是300,400对应的字符。 (2)输人并运行教材第3章习题3. 6给出的程序 #include C语言实习报告 题目:指针及其应用 系别: 专业: 姓名: 学号: 日期: 一实验名称:指针及其应用 二实验目的: (1)掌握变量的指针及其基本用法。 (2)掌握一维数组的指针及其基本用法。 (3)掌握指针变量作为函数的参数时,参数的传递过程及其用法。 三实验内容: (1)运行以下程序,并从中了解变量的指针和指针变量的概念。 (2)运行以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题: 1.程序的功能是什么? 2.在开始进入循环体之前,p指向谁? 3.循环每增加一次,p的值(地址)增加多少?它指向谁? 4.退出循环后,p指向谁? 5.你是否初步掌握了通过指针变量引用数组元素的方法? (3)先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。 (4)编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成: ①输入10个数; ②调用此函数进行重排; ③输出重排后的结果。 四分析与讨论: (1)指针的定义方法,指针和变量的关系。 定义方法: 数据类型 *指针变量名; 如定义一个指向int型变量的指针—— int *p; 则我们可以继续写如下代码—— int a = 4; p = &a; printf("%d", *p); 在这里,我们定义了一个变量a,我们把它理解为内存空间连续的4个字节(int型占用4字节),则这4个字节的空间保存着一个数4。&是取地址符号,即把变量a的地址(即这4个字节的首地址)赋给指针p (记住指针p的类型和变量a的类型要保持一致,否则的话,要进行类型转换)。这样子,指针p就保存着变量a的地址。我们如果把指针p当做内存空间里面另外一个连续的4个字节,那么这4个字节保存的数就是变量a的地址。printf("%d",*p)和printf("%d",a)的结果是一样的。这里的*是取变量符号(与&刚好作用相反,通过变量的地址找到变量),与定义时int *p的*号作用不同(定义时的*表示该变量是个 指针变量,而非是取它指向的变量)。 (2)数组和指针的关系。 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。 2.指向数组元素的指针 若有如下定义: int a[10], *pa; pa=a; 则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。 实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。 这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。 3.指针与一维数组 理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。 一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。 实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。 数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。 嘉应学院计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班级:计算机1505 指导老师:陈广明 设计题目:游戏2048 学生姓名(学号):第3组:钟瞻宇 目录 一、实验目的和要求 .................................................................................................................................................... 二、实验环境、内容和方法 ........................................................................................................................................ 三、程序设计 ................................................................................................................................................................ 四、源代码 .................................................................................................................................................................... 五、调试与运行结果.................................................................................................................................................... 六、总结........................................................................................................................................................................ C语言程序设计实验报告 实验序号:1 【实验目的】 (1) 熟悉 Microsoft Visual C++ 6.0 或 Code::Blocks 集成开发环境; (2) 掌握不同类型的变量的定义及赋值; (3) 能实现简单的程序结果的屏幕输出; (4) 初步了解 C 程序的基本结构。 【实验内容】 打开 Microsoft Visual C++ 6.0 或 Code::Blocks 集成开发环境,熟悉环境界面和有关菜单的使用方法。完成以下内容: 1. 屏幕输出在 Microsoft Visual C++ 6.0 或Code::Blocks 中编辑、编译、链接和运行程序。 #include C语言程序设计报告 日 程序主要内容 任务1. 程序首先随机产生一到十之间的正整数,在屏幕上打印出问题,例如6*7=?然后让学生输入答案,序检查学生输入的答案是否正确,若正确,则“RIGHT”,然后问下一个问题,否则打印“WRONG,PLEASE TRY AGAIN”,然后提示学生重做,直到答对为止。 程序如下: #include int x,int y; srand(time(NULL)); x=rand()%10+1; y=rand()%10+1; if(m==1) return x; if(m==2) return y; } int Answer() { int n; scanf("%d",&n); return n; } 任务2:在(1)的基础上,当学生回答错误时,最多给三次重做的机会。 :程序如下: #include 报告编号:YT-FS-4244-21 C语言程序设计实验报告 (完整版) After Completing The T ask According To The Original Plan, A Report Will Be Formed T o Reflect The Basic Situation Encountered, Reveal The Existing Problems And Put Forward Future Ideas. 互惠互利共同繁荣 Mutual Benefit And Common Prosperity C语言程序设计实验报告(完整版) 备注:该报告书文本主要按照原定计划完成任务后形成报告,并反映遇到的基本情况、实际取得的成功和过程中取得的经验教训、揭露存在的问题以及提出今后设想。文档可根据实际情况进行修改和使用。 实验名称计算出1000以内10个素数之和 实验目的 1、熟练掌握if、if…else、if…else if语句和 witch语句格式及使用方法,掌握if语句中的嵌套关 系和匹配原则,利用if语句和switch语句实现分支 选择结构。 2、熟练掌握while语句、do…while语句和for 语句格式及使用方法,掌握三种循环控制语句的循环 过程以及循环结构的嵌套,利用循环语句实现循环结 构。 3、掌握简单、常用的算法,并在编程过程中体验 各种算法的编程技巧。进一步学习调试程序,掌握语 法错误和逻辑错误的检查方法。 实验内容 计算并输出1000以内的10个素数以及它们的和。 要求: 在程序内部加必要的注释。 由于偶数不是素数,可以不考虑对偶数的处理。 虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。 输出形式为:素数1+素数2+素数3+…+素数10=总和值。 算法描述流程图 Main函数: 判断素数: 源程序 #include #include int sushu(int n)/* 判断素数的函数 */ { int t,i; 郑州轻工业学院 实践报告 实现内容: OJ1123最佳校友(数组)、OJ1158又是升序(指针)、OJ1180成绩统计(结构)、OJ1203做幻方(文件) 学号:541507020140 学生姓名:王红旭 专业班级:电子信息科学与技术15-01 所在院系:计算机与通信工程学院 指导教师:王秉政 成绩: 实践名称:上机实验课 来源课程:[0404230]C程序设计进阶 实践时间:2016.03-05 实践地点:科学校区实验楼301 报告撰写时间:2016.05.10 1123最佳校友(数组) 1实践目的 为了方便数组的管理和使用,提高程序设计的效率。 2 实践要求 熟练使用数组解决问题。 3 使用的技术、知识点、工具等 C语言程序设计书本教材,数组等。 4 需求分析和功能描述 要求;北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。 5 系统总体设计 #include 实验一进制转换一、实验要求 采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入。 二、实验目的 1、熟悉C 环境的安装、使用。 2、承上启下,复习《C 程序设计》等基础课程的知识。 3、掌握C 语言编程的方法。 三、预备知识 1、VC6.0的安装与使用。 2、C 程序设计基础知识。 四、实验内容 采用模块化程序设计完成进制转换。 五、程序框图 六、程序清单 1. 编写主函数:输入需转换的数与转换的进制 2. 编写子函数 (1)函数转换为除16进制以外的进制转换算数编程,使用while 循环实现计算进制 的转换,并输出转换后的数字; (2)函数转换为16进制,用while 函数实现16进制转换的计算并输出16进制转换后的数据; 3. 编写数组,关于16进制的一系列字符 4. 编写主函数加入do while 使函数可以循环。 七、实验步骤 #include } else { while(n) { a[++i]=num[n%16]; n/=16; } while(i!=-1) printf("%c",a[i--]); printf("\n"); } } int main() { int a, c; 实验编号:05四川师大实验报告2016年月日 计算机科学学院级06班实验名称:函数_ 姓名:仁青拉初_______学号:2014110637指导老师:_刘洪_实验成绩:_____ 实验五函数实验 (验证性综合性实验4学时) 1、目的要求: (1)学习函数的编程思想,编写一个包括3~4个函数的程序。 (2)掌握函数中参数传递的两种方式和函数的相互调用。 (3)编写实验报告。 2、实验内容(参考实验指导书): (1)写一个函数int digit(int n,int k),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。 (2)写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。 (3)写一个函数reverse(char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。 (4)写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。 (5)在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程。 提示:采用二分法求解本问题的基本思路是:设数列为a1,a2,…,a n,被查找的数为x,则查找首先对a m(m=(n+1)/2)进行,于是得到三种情形。 若x>a m,则x只可能在区间[a m+1,a n] 若x C语言程序设计实验报告 实验名称计算出1000以内10个素数之和 实验目的 1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。 2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。 3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。 实验内容 计算并输出1000以内的10个素数以及它们的和。 要求: 在程序内部加必要的注释。 由于偶数不是素数,可以不考虑对偶数的处理。 虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。 输出形式为:素数1+素数2+素数3+…+素数10=总和值。 算法描述流程图 Main函数: 判断素数: 源程序 #include #include int sushu(int n)/* 判断素数的函数*/ { int t,i; t=sqrt(n); for(i=2;i1;i-=2)/* x为奇数时,做函数计算*/ { n=sushu(i); /* 做判断素数的函数调用*/ ( 励志天下) if(n!=0)/* 对素数的处理*/ { a[j]=n;/* 把素数由大至小存入数组a[ ]中*/ j++; if(j<11) m+=n; /* 统计前10个素数之和*/ } } if(j<10)/* 当素数个数小于10个时,结果输出*/ { for(i=0;i { n=a[i]; printf("%d",n); printf("+"); C语言实验报告参考答 案 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】 长沙理工大学2010C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include <> main() { printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥\n"); } 2.编写程序: a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include<> main() { int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 3、编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 a/c的商=3 a/b的余数=10 a/c的余数=15 4. 编译、连接无错,运行后屏幕上显示以下结果: c =-10 实验二顺序结构程序设计 四、程序清单 1.键盘输入与屏幕输出练习 问题1 D 。游戏C语言实验报告完整版
C语言实验报告合集
c语言实验报告 ()
C语言实验报告
大一上期C语言实验报告1熟悉实验环境
c语言实验报告总结
C语言实验报告合集
c语言实验报告
c语言实验报告
c语言指针实验报告
游戏C语言实验报告
C语言程序设计实验报告1
c语言实验报告1
C语言程序设计实验报告(完整版)
C语言实验报告
C语言实验报告
C语言实验报告 C
C语言程序设计实验报告
C语言实验报告参考答案完整版