第一篇:《C语言程序设计》综合实习报告封面及正文格式
《C语言程序设计》
综 合 实习报 告
学号
姓名 班级 指导教师
课题一: XXXXXXXXXXXXXXXXX
一、目的1.2.3.二、实习环境
个人计算机,Windows操作系统,Turbo C 2.0或 WinTC或Visual C++等编译开发环境
三、实习内容与步骤
1.在函数中进行10个学生成绩从高到低排名 sort(int a[10])
2.改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名,3.改进第二步的函数为sort(int a[],int n, char style), 将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如style为‘a’按升序排,style为’d’按降序排。(a:ascending升,d:descending 降)
四、程序流程图、算法及运行结果
五、知识点、难点及解决办法。
六、编程小结或体会。
第二篇:C语言程序设计实习报告
实习报告
题
目: C语言程序设计 所属系、部 : 电气工程学院 班
级: 电子商务131 姓
名:
贺道君 学
号: 20***5 指 导 教 师: 费 玲 玲
2014年6月
一、实习目的
加深理解C语言基础知识及其编程技术,了解高级程序设计语言的结构,熟练掌握程序设计方法和技巧,掌握基本的分析和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
二、实习时间、地点
6月16日(星期一)上午:微机室5
下午:微机室5
6月17日(星期二)
3、4:微机室5
下午:微机室3
6月18日(星期三)上午:微机室5
下午:学校
6月19日(星期四)上午:微机室5
下午:微机室3
6月20日(星期五)上午:C101
下午:学校
三、实习内容
综合
四、实习总结
在学C语言的一个学期后,我们进行了C语言实训阶段,尝试自己编写一个比较复杂的程序系统。在为期一周周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。在这里,我作为其中的参与者,自然感触良多
刚开始接触到C的时候,我已经学过一些有关VB的内容,这个在算法和思维上稍微有点帮助。回想本学期的学习,首先,最基本的,是C的数据格式,让我们知道整数,浮点数以及字符常量在C中的运用。然后,在学会了数据转化,以及熟练的可以对各种数据处理之后,我开始进行有关数据结构,像数组,结构体等的学习,因为有的东西从现有的知识来看都是非常简单的,还没有联系到指针等等一些复杂的概念。可是,仅仅学会这些是远远不够的,C语言中,还有很多更加经典、重要、实用的知识。
说说函数。虽说很多程序语言都有函数这一内容,但我觉得C语言的函数是最有魅力的了。学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,学习C语言的“高人”都说,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。比如,大家可以作一个比较字符串的实验,用C语言中的strcmp()函数只要一句话,而自己编写的话,30句都很难实现,可想而知函数的实用和快捷。在我们C语言实训的代码中,函数更是得到了充分的应用,可以说,实训题目的复杂代码,就是用无数个函数的调用和嵌套积累出来的。要注意的是,有的同学刚刚开始的时候,都是被一些大的程序激励的,所以当开始的时候看到繁琐的数据转化和简单的算法,都觉得很无聊,都想自己做几个自己满意的程序来看看,虽然这种想法很好,但是,我们说,没有基础,纯粹是搬照一些现成设计方法,是不足取的。要知道,程序设计讲究的是个人的思维的,假如刚开始就被一些现成的思想束缚住,以后就会觉得很无趣。
我们知道,指针其实是C语言的灵魂,许多的数据结构在我们学到这里之前都可以说是精通了。所以我们的任务就是,让数据结构在指针中运行。当然,刚刚开始接触到这些新的东西,是一件非常痛苦的事情,所以我们一定要用非常形象的思维去看待指针,不能太固化。所以,新的东西,比如结构体在指针中的表现方法,数组及多维数组在结构体中的运用,都一点一点的加了进来,同时丰满了我们对原来C的数据机构,数据表示的理解。当我们完成了这三步的学习,我们已经可以自豪的说,我们的基础都扎实了,可以进一步的学习有关算法,设计概念等等深层次的东西了。
但是,指针,结构体,这些太抽象的东西,在学习C语言的时候我们就有点“似懂非懂”,可是在眼下的C语言实训中,像这么重要的C语言知识,一定要达到能熟练掌握,实际运用的程度。在实训的大程序中,结构体在指针中的表现方法,数组及在结构体中的运用等具体的技术环节,都得到了体现,不会指针,我们的工作是没法展开的。所以,在实训期间,大家在巩固基本知识的基础上,逐块攻克实训课题,克服了困难,自信心得到了提高。
最后,谈谈我们组的程序软件。商店商品管理系统,是一个比较利于应用,解决实际问题,方便实际管理的程序。设计代码比较复杂,结构比较严谨。在程序编写的1周左右的时间里,组员们遇到了上述的困难,包括程序设计构思,甚至是指针等某些知识点的欠缺,导致的工作中出现的困难。但是,当大家一起团结协作,解决了这些困难之后,发现自己也可以编写复杂的、应用性的程序了,更发现自己对C语言这门学科的兴趣也提高了。
当然,我们编写的商店商品管理系统,还存在很多疏漏和不合理之处。比如,程序复杂冗长,如果时间充裕,我们将在不改变程序运行结果的基础上,简化程序,使每一句更加精辟,总体上更加简化。另外,在程序的外观上,我们由于时间问题,没有做更多的修饰,运行起来显得比较死板、枯燥乏味。如果增添一些色彩和其他效果,我们的程序也许会更加完美。以上就是我的C语言实训个人总结
第三篇:C语言程序设计报告(精选)
C语言程序设计报告
(二)第一章:使用数组和指针统计成绩
1.设计题目:假设给定班级各科考试平均成绩的原始资料如下
数学:75 物理:80 外语:83 政治:85 体育:86 人数:30
要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩。要求的输出结果如下:
全班各科平均成绩如下: 数学:75 物理:80 外语:83 政治:85 体育:86 人数:30 统计结果如下: 人数:30
平均成绩:81
最低分数科目的成绩:75 最低分数的科目:数学
2.设计要求
对存放原始数据的要求如下:
(1)、使用整形数组a数学、物理、外语、政治、体育、人数、平均成绩、最低科目成绩 ;
(2)、使用字符串数name存放数学、物理、外语、政治、体育、最低分数的科目
(3)、使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。
实现本设计功能的方法很多,这里给出4种难易成度不同的要求,以便加深对数组和指针知识的理解。
1.使用数组实现
使用数组和指针数组实现。2..使用分配的内存实现
要求将数组a的内容存入到分配的内存中,使用指针实现对内存的存取和计算。
3.将数组内容全部存入内存
为字符分配内存,并将字符数组的内容存入所分配的内存中,使用指针来实现。
源程序:
int pingjun(int *x);int zuidi(int *x);
int kemu(int *y,int n);#include
int kemu(int *y,int n){int i, t=y[0],m=0;for(i=1;i {if(t>y[i]){t=y[i];m++;} } return m;} int pingjun(int *x){int sum=0 ,i,aver;for(i=0;i<5;i++)sum=sum+x[i];aver=sum/5;return aver;} void main() {int a[9]={75,80,83,85,86,30},i,x; char *name[5]={“数学”,“物理”,“外语”,“政治”,“体育”}; char *meanlow[4]={“人数”,“平均成绩”,“最低分数科目成绩”,“最低分科目”}; printf(“原始信息如下:n”);for(i=0;i<5;i++) printf(“%s:%dn”,name[i],a[i]);for(i=0;i<4;i++) printf(“%s:%dn”,meanlow[i],a[i+5]);printf(“全班各科平均成绩如下:n”);for(i=0;i<5;i++) printf(“%s:%dn”,name[i],a[i]);printf(“统计结果如下:n”); printf(“%s:%dn”,meanlow[0],a[5]); printf(“%s:%dn”,meanlow[1],pingjun(a));printf(“%s:%dn”,meanlow[2],zuidi(a));x=kemu(a,5); printf(“%s:%sn”,meanlow[3],name[x]);} #include “stdio.h” /*定义学生结构体*/ struct Student { char ID[20]; char Name[20]; float Mark1;/*计算机*/ float Mark2;/*英语*/ float Mark3;/*数学*/ float Zongfen;/*总分*/ float Average;};/*平均分*/ /*声明学生数组及学生数量*/ struct Student students[2000];int num=0;/*求总分*/ float Zong(struct Student stu){ return(stu.Mark1+stu.Mark2+stu.Mark3);} /*求平均值*/ float Avg(struct Student stu){return(stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/ int Student_SearchByIndex(char id[]){ int i; for(i=0;i int i; for(i=0;i {if(strcmp(students[i].Name,name)==0) {return i;}} return-1;} /*通过学号返回数组下标*/ int Student_SearchID(char id[]){ int i; for(i=0;i {if(strcmp(students[i].ID,id)==0) {return i;}} return-1;} /*显示单条学生记录*/ void Student_DisplaySingle(int index){printf(“%10s%10s%8s%8s%8s%8s%10sn”,“学号”,“姓名”,“计算机”,“英语”,“数学”,“总分”,“平均成绩”);printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);}void Student_DisplaySingle1(int index){printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);} /*插入学生信息*/ void Student_Insert(){while(1){printf(“请输入学号:”);scanf(“%s”,&students[num].ID);getchar();printf(“请输入姓名:”);scanf(“%s”,&students[num].Name);getchar();printf(“请输入计算机成绩:”);scanf(“%f”,&students[num].Mark1);getchar();printf(“请输入英语成绩:”);scanf(“%f”,&students[num].Mark2);getchar();printf(“请输入数学成绩:”);scanf(“%f”,&students[num].Mark3);getchar(); students[num].Average=Avg(students[num]); students[num].Zongfen=Zong(students[num]); num++; printf(“是否继续?(y/n)”); if(getchar()=='n'){break;} }} void exit();/*修改学生信息*/ void Student_Modify(){ float mark1,mark2,mark3; while(1) { char id[20]; int index; printf(“请输入要修改的学生的学号:”); scanf(“%s”,&id); getchar(); index=Student_SearchByIndex(id); if(index==-1) { printf(“学生不存在!n”); } else { printf(“你要修改的学生信息为:n”); Student_DisplaySingle(index); printf(“--请输入新值--n”); printf(“请输入学号:”); scanf(“%s”,&students[index].ID); getchar(); printf(“请输入姓名:”); scanf(“%s”,&students[index].Name); getchar(); printf(“请输入成绩:”); scanf(“%f”,&students[index].Mark1); getchar(); printf(“请输入成绩:”); scanf(“%f”,&students[index].Mark2); getchar(); printf(“请输入成绩:”); scanf(“%f”,&students[index].Mark3); getchar(); students[index].Zongfen=Zong(students[index]); students[index].Average=Avg(students[index]); printf(“是否继续?(y/n)”); if(getchar()=='n') { break; } } } /*删除学生信息*/ void Student_Delete(){ int i; while(1) { char id[20]; int index; printf(“请输入要删除的学生的学号:”); scanf(“%s”,&id); } getchar(); index=Student_SearchByIndex(id); if(index==-1) { printf(“学生不存在!n”); } else { printf(“你要删除的学生信息为:n”); Student_DisplaySingle(index); printf(“是否真的要删除?(y/n)”); if(getchar()=='y') { for(i=index;i { students[i]=students[i+1]; } num--; } getchar(); } printf(“是否继续?(y/n)”); if(getchar()=='n') { break; } } } /*按姓名或学号查询*/ void Student_Select(){ int sel; printf(“1--------------------按姓名查询n”); printf(“2--------------------按学号查询n”); scanf(“%d”,&sel); if(sel==2){ while(1) { char id[20]; int index; printf(“请输入要查询的学生的学号:”); scanf(“%s”,&id); getchar(); index=Student_SearchID(id); if(index==-1) { printf(“学生不存在!n”); } else { printf(“你要查询的学生信息为:n”); Student_DisplaySingle(index); } printf(“是否继续?(y/n)”); if(getchar()=='n') { break; } }}else if(sel==1) {while(1) { char name[20]; int index; printf(“请输入要查询的学生的姓名:”); scanf(“%s”,&name); getchar(); index=Student_SearchByName(name); if(index==-1) { printf(“学生不存在!n”); } else { printf(“你要查询的学生信息为:n”); Student_DisplaySingle(index); } printf(“是否继续?(y/n)”); if(getchar()=='n') { break; } }} else printf(“信息错误!n”);} /*排序*/ void Student_SortByAverage(){ int a,sel; printf(“1--------------------按学号排序n”); printf(“2--------------------按姓名排序n”); printf(“3--------------------按计算机排序n”); printf(“4--------------------按英语排序n”); printf(“5--------------------按数学排序n”); printf(“6--------------------按总分排序n”); printf(“7--------------------按平均分排序n”); scanf(“%d”,&sel); if(sel==1) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(strcmp(students[j-1].ID,students[j].ID)>0) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==2) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(strcmp(students[j-1].Name,students[j].Name)>0) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==3) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark1>students[j].Mark1) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==4) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark2>students[j].Mark2) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==5) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark3>students[j].Mark3) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==6) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Zongfen>students[j].Zongfen) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==7) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Average>students[j].Average) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else printf(“信息错误!n”);} /*显示学生信息*/ void Student_Display(){ int i; printf(“%10s%10s%8s%8s%8s%8s%10sn”,“学号”,“姓名”,“计算机”,“英语”,“数学”,“总分”,“平均成绩”); printf(“------------------------------n”); for(i=0;i { printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Zongfen,students[i].Average); } } /*将学生信息从文件读出*/ void IO_ReadInfo(){ FILE *fp; int i; if((fp=fopen(“Database.txt”,“rb”))==NULL) { printf(“不能打开文件!n”); return; } if(fread(&num,sizeof(int),1,fp)!=1) { num=-1; } else { for(i=0;i { fread(&students[i],sizeof(struct Student),1,fp); } } fclose(fp);} /*将学生信息写入文件*/ void IO_WriteInfo(){ FILE *fp; int i; if((fp=fopen(“Database.txt”,“wb”))==NULL) { printf(“不能打开文件!n”); return; } if(fwrite(&num,sizeof(int),1,fp)!=1) { printf(“写入文件错误!n”); } for(i=0;i { if(fwrite(&students[i],sizeof(struct Student),1,fp)!=1) { printf(“写入文件错误!n”); } } fclose(fp);} /*统计不同分数段的学生*/ void Student_TJ(){ while(1) { int a,sel; float m,n; printf(“1--------------------按计算机统计不同分数段的学生n”); printf(“2--------------------按英语统计不同分数段的学生n”); printf(“3--------------------按数学统计不同分数段的学生n”); printf(“4--------------------按总分统计不同分数段的学生n”); printf(“5--------------------按平均分统计不同分数段的学生n”); scanf(“%d”,&sel); printf(“输入所需查询的分数段[m,n]”); scanf(“%f%f”,&m,&n); printf(“%10s%10s%8s%8s%8s%8s%10sn”,“学号”,“姓名”,“计算机”,“英语”,“数学”,“总分”,“平均成绩”); if(sel==1) {int j; for(j=0;j<=num;j++) { if(students[j].Mark1>=m&&students[j].Mark1<=n) Student_DisplaySingle1(j); }} else if(sel==2) {int j; for(j=0;j<=num;j++) { if(students[j].Mark2>=m&&students[j].Mark2<=n) Student_DisplaySingle1(j); }} else if(sel==3) {int j; for(j=0;j<=num;j++) { if(students[j].Mark3>=m&&students[j].Mark3<=n) Student_DisplaySingle1(j); }}else if(sel==4) {int j; for(j=0;j<=num;j++) { if(students[j].Zongfen>=m&&students[j].Zongfen<=n) Student_DisplaySingle1(j); }}else if(sel==5) {int j; for(j=0;j<=num;j++) { if(students[j].Average>=m&&students[j].Average<=n) Student_DisplaySingle1(j); }} else printf(“信息错误!n”); printf(“是否继续?(y/n)”); a=getchar(); if(getchar()=='n'){break;} } } /*主程序*/ main(){ int choice; IO_ReadInfo(); fflush(stdin);while(1) { /*主菜单*/ printf(“ ~~~~~~~~~~~~~~~~~~~~~&欢迎进入学生成绩管理系统&~~~~~~~~~~~~~~~~~~~~~ n”);printf(“ * 1.输入学生记录 *n”);printf(“ * 2.添加学生记录 *n”);printf(“ * 3.修改学生记录 *n”);printf(“ * 4.删除学生记录 *n”);printf(“ * 5.按姓名或学号查询学生记录 *n”);printf(“ * 6.排序 *n”);printf(“ * 7.统计不同分数段的学生 *n”);printf(“ * 8.输出学生记录 *n”);printf(“ * 9.退出 *n”);printf(“ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ n”);printf(“ 请选择(1-9):”);scanf(“%d”,&choice);getchar();switch(choice){ case 1:Student_Insert();break;case 2:Student_Insert();break;case 3:Student_Modify();break;case 4:Student_Delete();break;case 5:Student_Select();break;case 6:Student_SortByAverage();Student_Display();break;case 7:Student_TJ();break;case 8:Student_Display();break;} IO_WriteInfo(); } } 1.Problem A: Hello world!Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。 Input 无 Output 请输出: Hello Da_min, Hello Er_min, Hello Xiao_ming! Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming! HINT 请注意换行符 Append Code #include printf(“Hello Da_min,n”); printf(“Hello Er_min,n”); printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。 Input 输入一个浮点型数据,有效数字不会超过十进制的6位。 Output 输出为两行。 第一行为圆的面积,第二行为圆的周长,格式见sample。 Sample Input 3 Sample Output Area: 28.260000 Perimeter: 18.840000 HINT 了解浮点类型的输入、输出和算术运算符 Append Code 法一 #include #include double r; scanf(“%d”,&r); printf(“Area: %lfn”,pi*r*r); printf(“Perimeter: %lfn”,2*pi*r); } 3.Problem C:平均值 Description 求3个数的平均值。 Input 输入只有一行,为3个较小的整数。 Output 输出为这3个整数的平均值,保留3位小数。 Sample Input 1 2 3 Sample Output 2.000 HINT 注意除法运算对整型数据和浮点型数据是不一样的。 Append Code #include 4.Problem D: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。 Input 输入为3个字符。 Output 输出为3行。 每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。 Sample Input 0 A Sample Output 048 060 030 032 040 020 065 101 041 HINT 了解字符值的存储和整型的关系。 Append Code #include 5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。 Input 无 Output Hello world! Sample Input Sample Output Hello world! HINT Append Code #include printf(“Hello world!”);} 6.Problem B: 算术基本运算 Description 计算两整数x和y(0 Input 输入只有一行,格式见sample。 Output 输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自减运算 Description C语言中有自增运算++、自减运算--,并且可以前置和后置。 编写一个程序:对输入的一个整数a,输出a++、a--、++a、--a的值。 Input 一个整数a,a是很小的整数。 Output 输出为5行,第一行为a的值,后面依次为--a、a--、a++、++a的值。 5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 绝对值 Description 求整型数据和浮点型数据的绝对值。 Input 输入两个数,第一个是整数,第二个是浮点数。 Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。 Sample Input-1 1 Sample Output 1 1 HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。 Input 输入只有一行,为一个100以内的正整数。 Output 输出为一行。 若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30 Sample Output even HINT 用整数运算可以解决,练习“?:”表达式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。 Input 输入只有一行,三个整数m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判断闰年 Description 输入一个正整数的年份,判断是否为闰年。 Input 输入只有一行,为一个10000以内的正整数。 Output 输出为一行。 若输入为闰年偶数则输出“Yes”,否则输出“No”。 Sample Input 2010 Sample Output No HINT 了解逻辑运算符和关系运算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。 Input 一个整数x,100<=x<=999。 Output x是水仙花数,则输出“YES”,否则为“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 Input 输入只有一行,为三个整数。 Output 按从小到大输出这三个数。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if语句判断各种情况可以解决这个问题。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 给定3个正整数a、b和c,按照如下规则求和: 如果这个数字是偶数,则累加到和中; 如果这个数字是奇数,则将大于该数的最小偶数累加到和中。 Input 三个正整数,均在100以内。 Output 一个和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不会使用分支语句,可使用条件运算符判断到底将哪个数累积到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你过线了吗? Description 经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗? Input 输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。 Output 如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的和,顺序与输入对应。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N给出了测试样例数,用for循环处理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判断是否是元音字母 Description 输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 输入一个英文字母 Output 是元音字母,输出“yes”,否则输出“no”,行尾没有回车。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按顺序输出三个数 Description 对于输入的3个整数,按照从小到大的顺序输出。 Input 输入3个int类型内的整数,两两之间用一个空格隔开。 Output 按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判断输入整数的奇偶性。 判断奇偶数 Input 输入为一个整数。 Output 输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出: n is an even number.否则输出: n is an odd number.见样例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判断两个整数的大小关系 Description 输入2个整数a和b,如果a>b,则输出1,否则输出0。 Input 两个整数a和b,均不超过int类型的表示范围。 Output 表示a>b的结果:如果a>b,则输出1,否则输出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之间的输入是非法数据,输出“Error”。 Input 输入多行,每行一个整数。 Output 输入所对应的成绩等级。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 输出是m的倍数或n的倍数、但不是 m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n Input 输入三个整数,依次为k、m、n。 Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 两整数相加减 Description 计算a+b和a-b。 Input 输入为一对整数a和b。a,b用空格分开。 Output 输出a+b和a-b的计算结果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它满足条件吗? Description 需要判断给定的一个整数是否同时满足如下三个条件: 1.它是一个完全平方数。2.它是一个偶数。3.它是一个正数。 注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一个int范围内的整数。 Output 如果输入的数字满足条件,则输出yes,否则输出no。 Sample Input 100 Sample Output yes HINT 注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 库函数sqrt()可以用于求一个数的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 编写一个完整的程序,运行时向用户提问”你考试考了多少分?(0-100)“接受输入后判断其等级并显示出来等级: 优:90<=分数<=100 良:80<=分数<90 中:60<=分数<80 差:0<=分数<60 Input 输入任意一个整数分数值,显示等级;再输入任意一个整数分数值,显示等级;....直到测试数据较充分,可输入-1止。 Output 对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 优 优 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”优n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生? Input 一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。 Output 所有可能的学生数,每个数占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正负数各有几个? Description 输入若干个整数,求其中正数、负数的个数。 Input 输入分为2行:第一行是一个数字N>0,表示下面有N个整数。第2行是N个整数,都是int类型的。 Output 输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似还有一种叫做0的数。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 练习break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。 Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。 Output 输出为两行,格式见sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(”%d“)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n];第四篇:c语言程序设计实习报告程序
第五篇:C语言程序设计