C语言程序设计报告 (2)

C语言程序设计报告 (2)
C语言程序设计报告 (2)

C语言课程设计报告《计算机程序设计基础》课程设计题目学生信息管理系统

学生姓名胡乔楠

学号

指导教师汤哲

学院信息科学与工程学院

专业班级电气0821班

完成时间七月四号

目录

第一章项目概述

1.1 问题的要求分析与描述

1.2 问题的要求和限制

第二章项目设计

2.1系统程序的组成框图

2.2 :程序的流程图

2.3 详细设计

第三章调试与结果

3.1调试方法

3.2 测试结果(见附录A、B)

第四章工作总结

附录A、B;

源代码;

参考文献;

第一章项目概述

1.1 问题的要求分析与描述

我设计一个学生信息管理系统。首先学生的信息包括:学号、姓名、年龄、性别、出生年月、家庭地址、电话号码、电子邮件、毕业学校等等。

这个管理系统需要实现以下功能:

1.系统以菜单的方式工作;

2.实现学生信息的录入功能,学生的信息保存在文件中;

3.实现学生信息的输出功能,输出功能应包括如下算法:

3_1:单个学生按学号查询功能;

3_2:单个学生按姓名查询功能;

3_2:全部学生的浏览功能;

3_3:全部学生按学号排序浏览功能;

4.实现学生信息的删除和修改;

1.2 问题的要求和限制

1:系统要美观,有欢迎界面;

2:在输入信息时要有一定的容错能力,比如年龄输入为负数或者大于150就提示有错,要求重新输入;

第二章项目设计

2.1系统程序的组成框图如下:

此变量来记录学生的个数。

2.3.2 main函数

所有的函数都写在main函数中并给他调用。Main函数中首先定义了一些整型数据,ch1、ch2、j、长整型数据“number”,字符数组“name”,文件指针。接着“printf”函数打印出一个欢迎界面。用死循环进入一个选择菜单,用户输入选项来运行系统。用“scanf”函数来给ch1赋值。接着程序就进入一个多分支if语句中。通过判断,程序运行进入相应的功能区。Ch1=0就会跳出此模块,返回上一模块。Ch1=1时,函数进入学生信息录入功能,用户输入学生的信息。在输入信息时会有容错能力。比如输入性别不是男或女,就会提示输入错误,要求用户重新输入;使用“fwrite”函数,使学生的信息保存在C盘中名为“INFORMATION.txt”的文档中。ch1=2时,函数进入学生信息查询功能。用户根据菜单输入信息进入相应的子功能。用户可以更具菜单选择相应的功能。Ch3=0,系统就会返回上一个功能。Ch3=1,系统就会按学生学号来查询学生信息,用户输入学号。若学号正确,则系统输出相应的学生信息。若错误,系统就提示用户学号错误,请重新输入。Ch3=2,系统就会按学生姓名来查询学生信息,用户输入姓名。若姓名正确,则系统输出相应的学生信息。若错误,系统就提示用户姓名错误,请重新输入。Ch3=3,系统进入学生信息浏览功能,同样有一个菜单供用户选择,1为浏览所有学生的信息。用“for”循环把所有学生的信息从文本中用“fread”函数读出来,在把所有结构体成员一一打

印出来。这时调用了一个“print(int l)”函数。在主函数中,把“i”传给“n”。2为按学号的顺序来浏览所有学生的信息,调用“paixu(int n)”函数。主函数把“i”的值传给“n”,实现学生的信息排序,并打印出来。同样,选择为0时就返回上一级菜单。若ch1=3,系统进入删除功能模块。此时调用了“deletes(int n)”,主函数把“i”的值传给“n”,实现学生信息的删除功能。若ch1=4,系统进入修改功能模块,此时调用了“changes()”,主函数实现学生信息的修改功能。(欢迎界面、开始菜单、容错能力、单个查询功能见附录A)

2.3.3print函数

“print(int l)”函数中,从主函数接收变量“i”,并把其值赋给“l”。“print(int l)”函数用“struct students *p1”,定义了一个结构体指针。接着用“printf”函数打印各个结构体的成员,“p1->num”等来表示成员。

2.3.4paixu函数

“paixu(int n)”从主函数接收变量“i”,并把其值赋给“n”。“paixu(int n)”中定义了两个整型数据,用来作为循环时的变量。以及两个结构体数组u[100]和v[100],一个文件指针。函数先用for循环和“fread”函数把文件中的数据读出来并赋值给u[100]。接着对u[100]来进行冒泡排序,v[100]作为中间变量来实现排序。排完后,把u[100]中的数据用“printf”函数打印出来。

2.3.5deletes 函数

“deletes(int n)”从主函数接收变量“i”,并把其值赋给“n”。“deletes(int n)”中定义了三个整型变量“j”、“k”和“chioce”,一个长整型变量“number”,一个结构体数组“struct students u[100]”,一个文件指针。函数先判断有没有学生信息被录入,如果没有,系统则自动返回。如果有,则要求用户输入要删除学生的学号。用“scanf”函数给“number”赋值,并判断文本中是否有此学生的信息,如果此学生的信息不存在,则系统会提示用户学生不存在,并自动返回。如果学生信息存在,则系统将打印学生的全部信息,并再一次提示用户是否要删除此学生。当用户选择1时,系统删除此学生信息,选择否时,系统将自动返回,学生信息改变。

2.3.6changes函数

“changes()”函数没有形参,直接对文件中的结构体进行修改。“changes()”函数中定义了两个文件指针“fp1”和“fp2”,一个长整型数据“number”,三个整形数据“j”“flag”“choice”。函数先判断有没有学生信息被录入,如果没有,系统则自动返回。如果有,则要求用户输入要修改学生的学号。“fp1”指向文本“INFORMATION.txt”,“fp2”在c盘中重新建立一个文本“change.txt”。用“fread”读出文本中的学生信息。用“scanf”函数给“number”赋值,并用“for”循环来判断文本中是否有此学生的信息,如果此学生的信息

不存在,则系统会提示用户学生不存在,并自动返回。如果学生信息存在,则系统将调用“print(int n)”函数打印学生的全部信息,并给用户选择要修改的具体内容。用“switch”分支语句来判断并修改用户所指定的项。不管每个结构体是否修改,都会用“fwrite”函数把读出来的结构体写进“change.txt”中。For循环终止后,再把所有的结构体从“change.txt”中写进空的“INFORMATION.txt”中。这样就能很好的完成修改了。(其中浏览、按学号排序浏览、学生删除、学生修改的具体的执行结果见附录B)

第三章调试与结果

3.1调试方法:visual studio c++有很好的调试与查错功能,写好代码后首先按“build”键来查错。程序会把所有错误和警告显示出来,找到程序有错的地方,参考错误的原因,仔细查看程序改写代码,确认无误后,再按“build”键。若有错误就再看错误并改写原代码。若无误就再纠正下一个错误。很多错误就是这样一个一个慢慢地解决。

调试结果分析与讨论:开始写的代码是实现学生信息录入与单个查询功能,在查询结果时,发现毕业学校的信息被重复打印到了电子邮件里面。接着就查找打印是否有错,确认无误后,结果没有变。就查找程序开始的赋值是否有错,最终发现了错误,在“scanf(“%s”,&s[j].graduateschool);”中

误加了“&”这个符号。修改后,打印结果正确。对所有学生的信息按照学号的顺序来浏览功能中,要用到冒泡排序法,用两个“for”循环来完成,其中的变量有固定的形式要求。并且终止条件也很严格的要求。刚开始我用了错误的算法,后来通过问老师,得到正确的方法,再经过反复的推敲,实现了排序功能。在实现修改功能中,我找不到算法,从书上的找了一个算法,书写完后,发现程序直接跳出修改的选择信息模块。经检查后发现“getchar()”这个函数出了问题,最后修改了代码,删除“getchar()”函数。得到了正确结果。

主要问题及解决方法1。在书写长代码时,要用到很多“{}”这样的符号,有时会漏掉这个符号,导致错误;所以书写时一定要非常细心,严格按照语法来写 2.“}”花括号在某些地方有很多,在修改程序或者添加程序时会很麻烦,不知道应该在哪个地方添加,或者该删除哪个“}”。所以,凡是有“{}”的都要用“/*文字*/”来标记,以后就不用一个个找原来语句了。3。在修改过程中修改了一个变量,却没有发现其他地方的相应程序也要修改,导致查出许多错误。4。我曾经用两个指针指向同一个文件,visual studio c++并不报错,但是我的排序和修改功能一直实现不了。最后问老师,才知道一个指针只能指向同一个文件。修改了指针及相应的程序后,我的功能实现了。5. 使用冒泡排序法时,结构体的个数控制得很严格,最终发现for循环多走了一步。

把“n”减一就解决了问题。

3.2 测试结果:输入了学生的信息后能正确打印。有时候在字符数组里面输入整型数据时,后面的“scanf”函数就不再正确执行。把整型数据改为字符型后,就能正确运行程序了。有时候排序功不正确,是在终止结果里面出了错误。所有的程序运行数据和结果都在附录A、B中。

第四章工作总结

这次课程设计的任务原本要求是以十个人为一组一起合作完成,但是作为一个已经选了计算机科学与技术专业的学生,应该具备很强的编程能力。为了好好锻炼自己的编程能力,我毅然决定一个人独立完成此次课程设计。

刚开始我只知道要用文件来做这个课程设计,但是我的文件那块掌握得不好,就看老师给我们讲的文件的程序。先是复习,再去写程序。按照课程设计的要求,我先定义结构体,再把所有的知识都运用上去。前四天,我把学生信息录入功能、学生信息按学号当个查询功能做好了。在按学生姓名查询的时候,要用到“#include ”这个函数。并且字符串处理函数都忘了,接着就看书把“strcmp”这个函数的功能及用法掌握。最后完成了按学生姓名查询功能。看着自己完成的程序,心中很高兴。还拿了同学的信息来做实验。当时信心大增,想着用一个星期就能完成任务。

没想到后面的程序是如此的困难。因为前四天我写的程序还不长,所用到的知识和算法都还相对简单。到了浏览学生信息的哪一个功能,我就几天都实现不了了。在这之前,我编写的程序都没有用模块化编写,一个主函数就包括了上述所有的功能。我就开始编写功能函数。把排序功能全写到一个“paixu(int n)”中。我到处查阅资料,向老师请教,问同学。终于搞清楚了算法。就是用冒泡排序法。我按照这个思路去做也没有得出正确结果。一连两三天,我都找不出错误的原因,反复修改也不行。编译环境也没有报错。在找老师查看我的源代码之后,发现我用了两个文件指针指向了同一个文件,书上没有这样讲过,但也没有说这样不对。我自认为是对的,却花了我这么多时间去改他。这次教训中,我深刻的体会到。要想运用一个新知识,必须的问问老师或者在行的人是否能用,不能擅作主张。我经快修改完程序,并且调试、查错。实现了排序的功能,我当时高兴的跳起来。这就是编程中的快乐。

参考文献很重要。在做修改的功能时,我找不到算法。但在一本书中,我找到类似的算法,经过反复推敲。我决定引用其中的算法。编写的函数很长,并且那段代码必须经过修改才能在我的程序中实现修改功能。因为有参考,这个功能还是相对容易实现的。最后就是删除功能了,算法了解后,就直接开始编程。找到要删除的学生,接着把所有的结构体

都后移一位。但是在循环体中,哪个变量因该是多少,会不会多了一1,或者少了一个1,这需要自己去耐心调试。

总体来说,变成是很麻烦的。中途我就又放弃的念头,因为那是连程序的一般都没有完成,但是一个功能就花了我几个下午的时间,却没有一点进展。还好我没有放弃,毕竟大学里面的学习机会十分宝贵。四年也只有一次这样系统的C语言编程技巧的时间。这次独立完成,对以后的学习和编程也会有很大的帮助。自己感到惭愧的是,老师教C语言的时候没有把它学得很通。在写程序的时候经常有很多与发行的错误,还有在运用一些简单的语句时,忘记了其中的格式。语法中经常有笔误,都是平时训练少,对自己要求不严格的结果。还有参考文献,虚心向别人请教。很多问题,也许看看书,问问老师之后就会迎刃而解。读程序多了之后,就会对编程很有感觉,编程的速度会提高、质量会变高、思路也会越来越清晰。

附录A:

欢迎界面和开始菜单:

输入信息时的容错能力:

学生信息的录入功能:

按学号来查询学生,以及选择菜单时的容错能力:

按姓名来单个查询的功能:

附录B:

按时间顺寻来浏览所有学生的信息:

按学号的大小来浏览所有学生的信息:

对学生的姓名进行修改:

紧接着修改学生的年龄

修改完后,查询学生的信息是否被修改:

查询结果

删除学生信息的功能:

查看是否已经被成功删除:

以下是源代码:

#include

#include

void printstarts(){printf("*************************************************\n");} struct students{

long num;

char name[15];

int age;

char sex[4];

char birthdate[15];

char address[30];

char phonenumber[15];

char email[20];

char graduateschool[20];

struct students *next;

} s[100],*p; /*定一个有一百个成员的结构体数组*/

int i=0; /*定义一个全局变量,记录被录入学生的个数*/

void print(int l);

void paixu(int n);

void deletes(int n);

void changes(); /*先定义所有的功能函数,供主函数中调用*/

void main(){

int ch1,ch2,ch3,ch4,ch5,ch6,ch7,flag1=0;

int flag2=0,j,choice=1;

int ch0=0;

long number;

char name[20];

FILE *fp;

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

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

printf("\t\t◆欢迎进入学生信息管理系统◆\n");

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

printf("\t\t◆胡乔楠◆\n");

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

printf("\t\t◆2009年7月3日◆\n");

printf("\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); /*美观的欢迎界面*/

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

while(1){

printf("\n");

printf("\n");

printf("\n");

printf("\t\t 学生信息管理系统\n");

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

printf("\t\t 1.添加学生信息\n");

printf("\t\t 2.查询学生信息\n");

printf("\t\t 3.删除学生信息\n");

printf("\t\t 4.修改学生信息\n");

printf("\t\t 0.退出系统\n");

printf("\n");

printf("\n\n\t 请按键选择功能(0~4):");

scanf("%d",&ch1);

if(ch1==0){break;}

else if(ch1==1){

while(choice==1){

fp=fopen("c:\\INFORMA TION.txt","a+");

printf("请输入学号:");scanf("%ld",&s[i].num);

printf("请输入姓名:");scanf("%s",s[i].name);

printf("请输入年龄:");scanf("%d",&s[i].age); /*加入容错能力*/

if(s[i].age<=0||s[i].age>=150){printf("输入错误,请重新输入\n");

break;

}

printf("请输入性别(男/女):");

scanf("%s",s[i].sex);

if(strcmp(s[i].sex,"男")!=0&&strcmp(s[i].sex,"女")!=0){

printf("输入错误,请重新输入\n");

break;

}

printf("请输入出生日期:");scanf("%s",s[i].birthdate);

printf("请输入家庭地址:");scanf("%s",s[i].address);

printf("请输入电话号码:");scanf("%s",s[i].phonenumber);

printf("请输入电子邮件:");scanf("%s",s[i].email);

printf("请输入毕业学校:");scanf("%s",s[i].graduateschool);

fwrite(&s[i],sizeof(struct students),1,fp);

fclose(fp);

printf("\t\t 添加成功!\n");

i++; /*输入一个学生就加一次*/ printf("\n");

printf("\t\t 是否再添加?\n");

printf("\t\t 1:添加\n");

printf("\t\t 0:不添加\n");

scanf("%d",&choice);

if(choice==0){break;}

else if(choice==1){continue;}

else{ choice=2;

printf("选择错误!!系统自动返回\n");

break;

}

}

/*ch1==1*/ }

else if(ch1==2){

/*check*/ while(1){ /*此处是查询功能的菜单*/ printf("\t\t 1.按单个学号来查询\n");

printf("\t\t 2.按学生姓名来查询\n");

printf("\t\t 3.查询所有学生信息\n");

printf("\t\t 0.返回上一级菜单\n");

scanf("%d",&ch2);

if(ch2==0){ break;}

else if(ch2==1){

while(1){

printf("\t\t 1.继续服务\n");

printf("\t\t 0.返回上一级菜单\n");

printf("\n\n\t 请按键选择:");

scanf("%d",&ch3);

if(ch3==0){break;}

else if(ch3==1){

fp=fopen("c:\\INFORMA TION.txt","r"); /*用学号来查*/

printf("请输入学号:");

scanf("%ld",&number);

for(j=0;j

fread(&s[j],sizeof(struct students),1,fp);

if(s[j].num==number){

flag1=1;

print(j);

fclose(fp);

if(flag1==0){printf("号码不存在!\n");break;}

/*if*/ }

/*for*/ }

/*ch3==1*/ }

else{printf("选择错误!!系统自动返回\n");

}

/*while(1)*/}

/*ch2==1*/}

else if(ch2==2){

/*ch4*/ while(1){

printf("\t\t 1.继续服务\n");

printf("\t\t 0.返回上一级菜单\n");

printf("\n\n\t 请按键选择:");

scanf("%d",&ch4);

if(ch4==0){break;}

else if(ch4==1){

printf("请输入名字:"); /*用学生姓名来查询*/

scanf("%s",name);

fp=fopen("c:\\INFORMA TION.txt","r");

for(j=0;j<=i;j++){

fread(&s[j],sizeof(struct students),1,fp);

if(strcmp(name,s[j].name)==0){

flag2=1;

printf("查询成功!!\n");

print(j);

fclose(fp);

if(flag2==0){printf("名字不存在!");break;}

/*if*/ }

/*for*/ }

/*ch4==1*/ }

else{printf("选择错误!!系统自动返回\n");

}

/*3while(1)*/ }

/*ch2=2*/ }

else if(ch2==3){

while(1){

printf("\t\t 1.按时间循序来查询所有学生信息\n");

printf("\t\t 2.按学号来查询所有学生信息\n");

printf("\t\t 0.返回上一级菜单\n");

printf("\n\n\t 请按键选择:");

scanf("%d",&ch5);

/*ch5*/ if(ch5==0){break;}

else if(ch5==1){

for(j=0;j

print(j); /*调用打印函数*/

}

/*ch5==1*/ }

/*by number*/ else if(ch5==2){ /*调用排序函数,按照学号的顺序来浏览*/

paixu(i);

/*ch5==2*/}

else {printf("选择错误!!系统自动返回\n");}

/*while(1)*/ }

/*ch2==3*/ }

/*2while(1)*/}

/*ch1==2*/}

else if(ch1==3){

while(1){

printf("\t\t 1.继续服务\n"); /*删除学生的菜单*/

printf("\t\t 0.返回上一级菜单\n");

printf("\n\n\t 请按键选择:");

scanf("%d",&ch6);

if(ch6==0){break;}

else if(ch6==1){

deletes(i); /*删除学生*/

}

else {printf("选择错误!!系统自动返回\n");

}

/*while*/ }

/*ch1==3*/}

else if(ch1==4){

while(1){

printf("\t\t 1.继续服务\n");

printf("\t\t 0.返回上一级菜单\n");

printf("\n\n\t 请按键选择:");

scanf("%d",&ch7);

if(ch7==0){break; }

else if(ch7==1){

changes();

} /*修改学生信息*/

else {

printf("选择错误!!系统自动返回\n");

}

}

}

else {

printf("选择错误!!系统自动返回\n");

}

/*1while(1)*/ }

/*main*/}

void print(int l){ /*此处是打印函数,用了指针*/

struct students *p1;

p1=&s[l];

printf("第%d 个是: 学号:%ld\n姓名:%s\n年龄:%d\n性别:%s\n出生日期:%s\n家庭地址:%s\n 电话号码:%s\n电子邮件:%s\n毕业学校:%s\n\n",

l,p1->num,p1->name,p1->age,p1->sex,p1->birthdate,p1->address,p1->phonenumber,p1-> email,p1->graduateschool);

}

void deletes(int n){ /*此处为删除函数*/

int j,k;

int choice=0;

long number;

struct students u[100];

FILE *fp1;

if((fp1=fopen("c:\\INFORMATION.txt","r"))==NULL){

printf("没有学生被记录,按任意键返回");

getchar();

return;

}

fp1=fopen("c:\\INFORMA TION.txt","r"); /*先赋值给u[k],再拿u[k]进行比较*/ for(k=0;k

fread(&s[k],sizeof(struct students),1,fp1);

u[k].num=s[k].num;

strcpy(u[k].name,s[k].name);

u[k].age=s[k].age;

strcpy(u[k].sex,s[k].sex);

strcpy(u[k].birthdate,s[k].birthdate);

strcpy(u[k].address,s[k].address);

strcpy(u[k].phonenumber,s[k].phonenumber);

strcpy(u[k].email,s[k].email);

strcpy(u[k].graduateschool,s[k].graduateschool);

}

fclose(fp1);

printf("输入学号:");

scanf("%ld",&number);

for(k=0;k

if(u[k].num==number){

printf("要删除的学生信息如下\n");

printf("第%d 个是: 学号:%ld\n姓名:%s\n年龄:%d\n性别:%s\n出生日期:%s\n家庭地址:%s\n电话号码:%s\n电子邮件:%s\n毕业学校:%s\n\n",

k ,u[k].num,u[k].name,u[k].age,u[k].sex,u[k].birthdate,u[k].address,u[k].phonenumber,u[k].email, u[k].graduateschool);

printf("是否要删除\n1:是\t\t2:否\n");

scanf("%d",&choice);

break;}

}

if (choice==0){ /*判断是否存在*/

printf("选择错误!!系统自动返回\n");

return;

}

else if(choice==2){

return;

}

else if(choice==1){

if(k!=n-1){

for(j=k;j

u[j].num=u[j+1].num;

strcpy(u[j].name,u[j+1].name);

u[j].age=u[j+1].age;

strcpy(u[j].sex,u[j+1].sex);

strcpy(u[j].birthdate,u[j+1].birthdate);

strcpy(u[j].address,u[j+1].address);

strcpy(u[j].phonenumber,u[j+1].phonenumber);

strcpy(u[j].email,u[j+1].email);

strcpy(u[j].graduateschool,u[j+1].graduateschool);

}

i--; /*学生删除,个数减少一个*/

}

else i--;

fp1=fopen("c:\\INFORMA TION.txt","r");

if(j!=n-1){for(j=0;j

fread(&s[j],sizeof(struct students),1,fp1); /*删除完后,在赋值给s[k]*/

s[j].num=u[j].num;

strcpy(s[j].name,u[j].name);

s[j].age=u[j].age;

strcpy(s[j].sex,u[j].sex);

strcpy(s[j].birthdate,u[j].birthdate);

strcpy(s[j].address,u[j].address);

strcpy(s[j].phonenumber,u[j].phonenumber);

strcpy(s[j].email,u[j].email);

strcpy(s[j].graduateschool,u[j].graduateschool);

/*for*/ }

fclose(fp1);

/*if*/}

else{fread(&s[j],sizeof(struct students),1,fp1);

s[j].num=u[j].num;

strcpy(s[j].name,u[j].name);

s[j].age=u[j].age;

strcpy(s[j].sex,u[j].sex);

strcpy(s[j].birthdate,u[j].birthdate);

strcpy(s[j].address,u[j].address);

strcpy(s[j].phonenumber,u[j].phonenumber);

strcpy(s[j].email,u[j].email);

strcpy(s[j].graduateschool,u[j].graduateschool);

fclose(fp1);

}

}

else {printf("选择错误!!系统自动返回\n");

}

}

void paixu(int n){ /*此为排序函数*/

int j,k;

struct students u[100],v[100];

FILE *fp1;

fp1=fopen("c:\\INFORMATION.txt","r");

for(k=0;k

u[k].num=s[k].num;

strcpy(u[k].name,s[k].name);

u[k].age=s[k].age;

strcpy(u[k].sex,s[k].sex);

strcpy(u[k].birthdate,s[k].birthdate);

strcpy(u[k].address,s[k].address);

strcpy(u[k].phonenumber,s[k].phonenumber);

strcpy(u[k].email,s[k].email);

strcpy(u[k].graduateschool,s[k].graduateschool);

}

fclose(fp1);

for(j=0;j

if(u[k].num>u[k+1].num){

v[k].num=u[k].num;

u[k].num=u[k+1].num;

u[k+1].num=v[k].num;

strcpy(v[k].name,u[k].name);

strcpy(u[k].name,u[k+1].name);

strcpy(u[k+1].name,v[k].name);

v[k].age=u[k].age;

u[k].age=u[k+1].age;

u[k+1].age=v[k].age;

strcpy(v[k].sex,u[k].sex);

strcpy(u[k].sex,u[k+1].sex);

strcpy(u[k+1].sex,v[k].sex);

strcpy(v[k].birthdate,u[k].birthdate);

strcpy(u[k].birthdate,u[k+1].birthdate);

strcpy(u[k+1].birthdate,v[k].birthdate);

strcpy(v[k].address,u[k].address);

strcpy(u[k].address,u[k+1].address);

strcpy(u[k+1].address,v[k].address);

strcpy(v[k].phonenumber,u[k].phonenumber);

strcpy(u[k].phonenumber,u[k+1].phonenumber);

strcpy(u[k+1].phonenumber,v[k].phonenumber);

strcpy(v[k].email,u[k].email);

strcpy(u[k].email,u[k+1].email);

strcpy(u[k+1].email,v[k].email);

strcpy(v[k].graduateschool,u[k].graduateschool);

strcpy(u[k].graduateschool,u[k+1].graduateschool);

strcpy(u[k+1].graduateschool,v[k].graduateschool);

}

}

}

for(k=0;k

printf("第%d 个是: 学号:%ld\n姓名:%s\n年龄:%d\n性别:%s\n出生日期:%s\n家庭地址:%s\n电话号码:%s\n电子邮件:%s\n毕业学校:%s\n\n",

k ,u[k].num,u[k].name,u[k].age,u[k].sex,u[k].birthdate,u[k].address,u[k].phonenumber,u[k].email, u[k].graduateschool);

}

fclose(fp1);

}

void changes(){ /*此处为修改函数*/

FILE *fp1,*fp2;

long number;

int j,flag=0;

int choice;

if((fp1=fopen("c:\\INFORMATION.txt","r"))==NULL){

printf("学生信息没有被录入,按任意键返回:\n");

getchar();

return;

}

fp1=fopen("c:\\INFORMA TION.txt","r");

fp2=fopen("c:\\change.txt","w");

printf("请输入学号\n");

scanf("%ld",&number);

for(j=0;fread(&s[j],sizeof(struct students),1,fp1)!=0;j++){

if(s[j].num==number){ /*判断该学生是否出在*/ printf("学生的信息如下:\n");

print(j);

printf("\n");

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

printf("\t\t 1.修改学生姓名\n");

printf("\t\t 2.修改学生年龄\n");

printf("\t\t 3.修改学生性别\n");

printf("\t\t 4.修改学生出生日期\n");

printf("\t\t 5.修改学生家庭地址\n");

printf("\t\t 6.修改学生电话号码\n");

C语言程序设计第三版习题库答案

C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y);

}elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x);

c语言程序设计教程第二版课后习题答案

c 语言程序设计教程第二版课后习题 答 案 篇一: c 语言程序设计教程_李含光_ 郑关胜_ 清华大学 出版社习题答案习题答案[完美打印版]】1.单项选择题 (1)a (2)c(3)d (4)c (5)b 2.填空题(1)函数 (2)主函数(main )(3)printf(),scanf()第 2 章习题参考答案 1.单项选择题 1-5 cbccc 6-10 cdcdc 11-13 dbb 2 .填空题 (1)1(2)26 (3)6 , 4 , 2 (4)10 , 6 (5)3.000000 (6)双精度(double )(7)9 (8)字母,数字,下划线(9)13.700000 (10)11(11)((m/10 )%10 )*100+ (m/100 )*10+m%10 (12)0 (13)10 ,9 ,11(15) (x0y0)||(x0z0)||(y0||z0)(16 )double (17)x==0 (18)sqrt(fabs(a-b))/(3*(a+b))(19 )sqrt((x*x+y*y)/ (a+b)) 第 3 章习题参考答案 1.单项选择题 1-5 cccdd 6-10 bcdbc11-15 bcbbb16 a 2 .填空题 (1)用;表示结束(2){ } (3 )y=x0?1:x==0?0:-1 (4)y%4==0y%100!=0||y%400==0 (5)上面未配对(6)default 标号(7)while ,do while ,for (8)do while (9)本次(10)本层3.阅读程序,指出结果 (1)yes (2)*(3)abother (4)28 70 (5)2,0(6)8(7)36 (8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12 (11) i=6 ,k=4 (12)1,-2 4 .程序填空 (1)x:y ,u :z (2)m=n ,m !=0 ,m=m/10 (3)teps , t*n/(2*n+1) , printf( n”“,%2*lsf )(4)m%5==0 ,

C语言程序设计报告

河南理工大学万方科技学院 C语言课程设计报告题目简单计算器编程 姓名何美美 学号072130026 专业07通信 班级一班 指导教师董玉杰 2008年09 月05日

目录 一、设计目的 (1) 二、本组课题及本人任务 (2) 三、主体内容 (3) (1)流程图 (2)源程序 (3)上机调试 (4)实验结果 四、设计体会 (6)

设计目的 1 复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握; 2 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力; 3 培养学生在项目开发中团队合作精神、创新意识及能力 本组课题及本人任务 1 设计一个简单计算器能完成基本的加、减、乘、除计算,尽量模仿Windows计算器。系统界面不做强制要求。 2在本次设计中,由何永美、刘艳玲、贺清隆三人共同完成,由于知识掌握不牢,因此每一步都要共同商量,其中源程序由我们参考大量资料而成。 3本人负责程序调试及其他有关工作。

流程图主要内容 简单计算器

程序代码如下: /*代码文件名:E4_6.C*/ /*计算器的模拟*/ #include #include double add (double a,double b) {return a+b;} double sub (double a,double b) {return a-b;} double multi(double a,double b) {return a*b;} double divis(double a,double b) {return a/b;} Void main() { double x,y; int select; printf("input two numbers:"); scanf("%lf,%lf",&x,&y); printf("1------add\n"); printf("2------sub\n"); printf("3------multi\n");

C语言程序设计(第二版)课后答案 丁亚涛

习题二 一、选择题 二、填空题 1.18 2.int float double 3.10 11 4.8 16 10 5.% 三、阅读题 1. 10,10,9,10 2. j=1, i=2 k=3,i=3 i=3,i=2 k=1,i=1 习题三 一、选择题 二、填空题 1. 从键盘上读入一个字符在屏幕上输出一个字符 #include 2. 按十进制整数形式输出,有符号 按16进制整数形式输出,没有符号 按十进制小数形式输出,输出的数据长度为7位,有2位小数 按字符形式输出一个字符 3. 按十进制整数形式输入数据 按十进制整数形式输入三位数据 跳过3位十进制数据 按字符形式输入一个字符 4. 分程序;; 5. 大写字母L 6. -1 三、阅读题 1. 6 6 6.00 6.00

2. x=127,x= 127,x=177,x=7f y=123.4567,y= 123.46,y=123,45670 3. 2,1 4. 1234 5. 4,3 6. -6,-6 习题四一、选择题 二、填空题 1. 非0 0 、 2. k==0 3. n%7==0&&n%==0 else 三、阅读题 1. a=1,b=0 2. c=1 习题五一、选择题 二、填空题 1. for语句 do-while 语句 while 语句 2. a=14,y=26 3. k=14,n=-1 4. 39 5. s=19 6. 22222 7. 10 8. 7 9. 8 10. 5,5 三、改错题

1. for( i=0;i<5;i++);for控制部分用分号分隔 2. int j=0;while(j<10){j++;i=j} 分号是多余的,否则会造成死循环 3. int s=1,i=1; while(i<5) {s*=i; i++; } 两条语句需要加上花括号 4. while(j<10);(分号不能少) 5. continue改为break 习题六 一、选择题 二、填空题 1. 20 0 19 2. 数组名 3. 越界 4. 6 5. j==k a[j][k]=1; a[j][k]=0; 三、阅读题 1. 6 5 4 3 2 1 2. aaa bbb ccc ddd 3. 2,2,1 习题七 一、选择题 二、填空题 1. 整个函数体内局部 2. 整型 3. k<=b return y;

C语言程序设计试题集与答案解析

一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。

13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

第5章-C语言程序设计(第2版)教材习题答案

【教材】《C语言程序设计(第2版)》清华大学出版社,黄保和,江弋编著。2011年10月第二版。ISBN:978-7-302-26972-4。售价:35元。 【答案版本】本习题答案为2012年2月修订版本。 一、选择题 1. 设有程序段”int k=10; while(k=0) k=k-1;”,则下面叙述正确的是D)循环体语句一次也不执行。 A. while循环执行10次 B. 循环是无限循环 C. 循环体语句执行一次 D. 循环体语句一次也不执行 2. 设有程序段”int x=0,s=0;while(!x!=0) s+=++x; printf(“%d”,s);”则A)运行程序段后输出1。 A. 运行程序段后输出1 B. 程序段执行无限次 C. 运行程序段后输出0 D. 程序段中的控制表达式是非法的 3. 下面循环语句中,错误的是D) int a=1,b=2;do b-- while(b= =0);。 A. int a=1,b=2; while(b--); B. int a=1,b=2; do a++; while(a==b); C. int a=1,b=2; while(a=3); D. int a=1,b=2; do b-- while(b==0); 4. 已知”int i=5;”,下列do…while循环语句的循环次数为C) 5。 do{ printf(“%d\n”,i--); } while(i!=0); A. 0 B. 1 C. 5 D. 无限 5. 循环语句”for(int i=0,j=10; i==j; i++,j--)”的循环次数是A) 0。 A. 0 B. 5 C. 10 D. 无限 6. 下述有关break语句的描述中,不正确的是C) break语句用于if语句的内嵌语句内,它结束该if语句。 A. break语句用于循环体内,它将结束该循环 B. break语句用于开关语句,它结束该开关语句 C. break语句用于if语句的内嵌语句内,它结束该if语句 D. break语句在一个循环体内可使用多次 7. 下面关于循环语句的描述中,错误的是B)循环体内必须同时出现break语句和continue 语句。 A. 循环体内可以包含有循环语句 B. 循环体内必须同时出现break语句和continue语句 C. 循环体内可以出现选择语句 D. 循环体可以是空语句 8. 以下不是死循环的是D)for(;(c=getchar()!=’\n’);)printf(“%c”,c);。 A. for(; ; x+=i); B. while(1) { x++; } C. for( i=10; ; i--) sum+=i; D. for( ; (c=getchar() )!=’\n’ ; ) printf( “%c”,c); 9. 执行语句”for(i=0;i++<3;);”后,变量i的值为C) 4。 A.2 B. 3 C. 4 D. 5 10.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C)循环4次。 A. 无限循环 B. 循环次数不定 C. 循环4次 D. 循环3次

c语言程序设计第五版习题答案

习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch 语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么?它由哪几部分组成? 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤? 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 3.输入下面程序并运行。

#include main() { printf("******\n"); printf(" *****\n"); printf(" ****\n"); printf(" ***\n"); printf(" **\n"); printf(" *\n"); } 【解答】运行结果为:****** ***** **** *** ** * 思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。 三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* I love C programs! ************************* 【分析与提示】 ①要有文件包含语句#include 。C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。这些函数的说明都包括在stdio.h文件中。 ②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。 ③注意显示的信息有三行,所以要用到换行符“\n”。 参考代码: #include main() { printf("************************\n"); printf(" I love C programs! \n"); printf("************************\n"); }

《C语言程序设计教程(第二版)》习题答案

2 第1章程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10.可读性11.模块化12.对问题的分析和模块的划分 三、应用题(第24页) 2.源程序: main() {int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf("cock hen chick\n"); for(i=1;i<=20;i++) for(j=1;j<=33;j++) for(k=1;k<=33;k++) if (i+j+k*3==100&&i*5+j*3+k==100) printf(" %d %d %d\n",i,j,k*3);} 执行结果: cock hen chick 4 18 78 8 11 81 12 4 84 3.现计算斐波那契数列的前20项。 递推法源程序: main() {long a,b;int i; a=b=1; for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/ {printf("%8ld%8ld",a,b); a=a+b;b=b+a;}} 递归法源程序: main() {int i; for(i=0;i<=19;i++) printf("%8d",fib(i));} fib(int i) {return(i<=1?1:fib(i-1)+fib(i-2));} 执行结果: 1 1 2 3 5 8 13 21 3 4 55 89 144 233 377 610 987 1597 2584 4181 6765

(完整版)C语言程序设计练习及答案

《C语言程序设计》练习及答案 得分评卷人复查人 一、单选题,每小题1分,共60分(将正确答案的序号写在题目的括号中)。 1、结构化程序设计的三种基本控制结构是(D )。 A、主程序、子程序、函数 B、输入、处理、输出 C、调用,返回,转移 D、顺序、选择、循环 2、下列关于C程序变量的叙述, ( D )是错误的。 A、变量名必须由字母或下划线开头。 B、程序中的变量必须在被使用之前定义。 C、不同的基本类型的变量之间可以混合运算。 D、变量的数据类型决定变量的"作用域"。 3、能将C语言编写的源程序转换为目标程序的软件是(C )。 A、编辑程序 B、汇编程序 C、编译程序 D、解释程序 4、以下符号中,合法的用户标识符是( D )。 A、-p B、int C、3ab D、_xt_ 5、以下选项中,与m=n++完全等价的表达式是( C )。 A、m=++n B、m+=n+1 C、m=n, n=n+1 D、n=n+1,m=n 6、若有定义:int aa[8];。则以下表达式中不能代表数组元aa[1]的地址的是(C )。 A、&aa[0]+1 B、&aa[1] C、&aa[0]++ D、aa+1 7、表达式!5&(7+3)&&(4+5)的值是(A)。 A、0 B、1 C、5 D、9 8、以下选项中非法的C语言表达式是(A )。 A、x+1=x+1 B、0<=x<100 C、i=j==0 D、(char)(65+3) 9、在TURBO C中, int类型变量所占字节数是(B )。 A、1 B、2 C、4 D、8 10、C语言中基本的数据类型包括(B)。 A、整型,实型,逻辑型 B、整型,实型,字符型

c语言程序设计》课程设计报告

《C语言程序设计》课程设计报告 (2013—2014学年第3学期) 题目:C语言课程设计 专业:软件工程 班级:软件工程技术2班 姓名学号:1 林燕萍 指导教师:吴芸 成绩: 计算机科学与技术系 2014年6月23日

目录 一、课程设计的目的与要求 (1) 二、方案实现与调试 (3) 掷骰子游戏 (5) 射击游戏 (7) 计算存款本息之和 (8) 肇事逃逸 (10) 礼炮 (12) 汽车加油 (14) 大优惠 (16) 金币 (19) 三、课程设计分析与总结 (23) 附录程序清单 (25) 一、课程设计的目的与要求(含设计指标) C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了基知识,如概念,方法和语法规则之外更重要的是进行实训,以提高学习者的动手和编程能力,从应试课程转变为实践工具。这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;

2.让学生扎实掌握C程序设计语言的相关知识; 3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 编写程序要求遵循如下基本要求: ①模块化程序设计 ②锯齿型书写格式 ③必须上机调试通过 二、方案实现与调试 掷骰子游戏 2.1.1题目内容的描述 1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。 4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 2.1.2输入数据类型、格式和内容限制和输出数据的说明 数据类型:整型;内容限制:随机数的产生;输入数据结果:胜利的一方 2.1.3主要模块的算法描述 本算法的思路过程:首先要随机产生随机数,然后进行算法输出数值,执行条件判断输入结果,最后比较结果,判断胜利的一方。

C语言程序的设计习题参考答案(第二版_杜友福)

C 语言程序设计习题答案 习题一 C 语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S 流程图最大的区别是什么? 答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。 4. 求1×2×3×…×10的值。

5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 7. 求一元二次方程ax 2+bx+c=0的根。分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。 四、注释下面C 程序的各个组成部分。 main() /*主函数 */ { /*程序开始 */ int a,k,m; /*定义三个用来存放整数的变量 */ a=10; /*将整数10赋值给变量a */ k=2; /*将整数2赋值给变量k */ m=1; /*将整数1赋值给变量1 */ a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */ printf("%d\n",a); /*在屏幕上打印出变量a 的值 */ } /*程序结束 */ 习题二 数据类型、运算符与表达式 一、选择题 1~10:BCDCB DDBCA 11~20: ADDAA DBADC 21~28: DABAD CDD Y= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1

C语言程序设计第二版习题参考答案

C语言程序设计第二版 习题参考答案 Document serial number【LGGKGB-LGG98YT-LGGT8CB-LGUT-

C语言程序设计习题参考答案 习题 1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII 码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是 ___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。

C语言程序设计(第二版)习题参考答案

C语言程序设计习题参考答案 习题1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F 2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。 D. 每个函数执行时,按函数体中语句的先后次序,依次执行每条语句 解:1.C 2.C 3.D 4.B 5.B 6.B 7.B 三、填空题

c语言程序设计报告4

课程设计报告 课程名称C语言程序设计 课题名称运动会分数统计系统 专业机械设计及其自动化 班级1185班 学号201113090526 姓名谭信 指导教师王颖 2012年6月22日

湖南工程学院 课程设计任务书 课程名称C语言程序设计 课题运动会分数统计系统 专业班级机械设计1185 学生姓名谭信 学号201113090526 指导老师王颖 审批王颖 任务书下达日期2012年6月1日 任务完成日期2012年6月22日

现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。而C 语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。就现有知识水平、经验来看,对我来说,本程序的算法设计上已经是最精简的了。C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。

绪论 (1) 第一章需求分析 1.1程序的功能及要求 (5) 1.2系统的性能要求 (5) 1.3测试数据 (6) 第二章概要设计 2.1结构体 (6) 2.2主程序(main) (6) 2.3模块的功能 (6) 2.4程序模块机之间的调用关系 (7) 第三章详细设计 3.1宏定义 (8) 3.2数据类型定义 (8) 3.3函数之间的调用关系图 (8) 3.4算法设计 (9) 第四章调试分析 4.1不足之处 (10) 4.2错误规范 (10) 4.3算法的时空分析 (10) 4.4存在的问题 (10) 第五章测试结果 (11) 第六章用户使用手册 6.1运行环境 (12) 6.2用户界面 (12) 6.3操作过程 (13) 第七章参考文献 (14) 第八章设计体会 (15) 第九章附录 (17) 课程设计评分表 (29)

c语言课程设计报告

C语言程序设计B 课程设计报告 设计题目:学生成绩管理系统年级班级: 学号: 姓名: 指导教师: 2020 年 6 月 18 日

目录 一、设计目的 (3) 二、课程设计内容和要求 (4) 三、总体设计 (5) 四、主要步骤 (12) 五、功能实现 (13) 六、功能测试 (64) 七、评价程序 (83) 八、课程设计体会 (84)

一、设计目的 程序设计能力是当代理工类大学生的必备能力,当学生学习了C语言之后,编程能力远远不能达到开发实际应用程序的要求,特备是对其中的指针、结构体、链表和文件部分的理解和应用都比较弱。 程序设计的目的是通过对面向过程的学习,将C语言的主要知识点进行综合,针对提高学生C语言程序设计能力,强化编写较大的应用软件能力,熟练运用已掌握的知识解决实际需要解决的问题,以达到更加熟知指针、链表、结构体、文件读取、标准库的使用。 主要目的为以下几点: 1、熟练掌握面向过程(结构化)程序设计基本知识; 2、综合运用所学知识解决实际问题; 3、受到面向过程(结构化)程序设计的基本训练; 4、体会面向过程(结构化)开发程序的过程。

二、课程设计内容和要求 1.课程设计内容: 学生通过使用C语言进行编写算法,开发学生成绩管理系统,以实现对学生成绩的管理。 2.课程设计要求 1)具有菜单,可以在菜单上进行选择; 2)能实现学生数据录入、修改、删除、查询; 3)能实现数据排序; 4)有数据输出功能; 5)有数据读取与存储功能; 6)一个学生的数据(称为:每条记录)包含姓名、学号、语文、数 学、英语、总分、名次等信息; 7)以结构方式存储每条记录; 8)多条记录以链表方式存储到内存; 9)随时可将全部数据存储到磁盘文件中,方便下次从磁盘读取数据。

C语言程序设计习题参考答案!(第二版--杜友福)

C语言程序设计习题参考答案!(第二版--杜友福)

C语言程序设计习题答案 习题一 C语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1(3)机器语言P1(4)汇编程序P2 (5)高级语言P2(6)编译程序P3(7)解释程序P3(8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S流程图最大的区别是什么?

答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。 输入三个数给a,b,c 如果a

4. 求1×2×3×…×10的值。 5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 Y 3X (X<1) 输入一个数给x X<=1 Yes no

C语言程序设计第三版谭浩强课后习题答案完整版

C语言程序设计第三版谭浩强 课后习题答案完整版 第一章 1.5请参照本章例题,编写一个C程序,输出以下信息:************************** V ery Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“V ery Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max main() { char c1=?C?,c2=?h?,c3=?i?,c4=?n?,c5=?a?; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2)a-=2 (3)a*=2+3 (4)a/=a+a (5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII)