设计报告一,实验目的:通过上机实习,熟练掌握循环语句、选择语句、指针以及结构体的运用技巧。在实习中通过实际操作,编写程序,发现问题,最后解决问题,提升对c语言实用性的理解,在实践中巩固各知识点。C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点,上机实习可以帮助我们更好地理解这种结构式的中级语言以及其各式各样的数据类型和高效率的运算程序,为我们进一步学习C++打下坚实基础。同时,在实习过程中,通过互相发现问题,共同解决问题,不仅锻炼了我们的合作能力,而且也让我们发现了一些自己的个人误区以及其他人容易犯的错误,从而在今后的学习中更加谨慎,达到事半功倍的效果;通过询问老师,也让我们养成了不耻下问的好习惯,这将很有利于以后的学习。闲乐-一个人闲。不如大家一块儿乐二,总体设计:1,学生成绩排名1,流程图:假?真?假?真?通过冒泡法对数组进行排序测试时由于循环语句循环次数的错误导致部分数据没有排序,修改FOR语言中的条件即可调试成功I=0I11??赋值I由0变到8执行9次循环进行9-I次比较真a[j]a[I+I]假a[j]a[j+1]输出a[0]到a[9]再输入一个学生的成绩冒泡法排序输出a[0]到a[10]shuI由0变到4进行5次循环a[i]a[10-i]I=0I10??输出结束2,程序:#includestdio.hintmain(){inta[11],i,j,t,b,c,temp1,temp2,temp3;//定义一个数组a[11],用以存放学生的成绩printf(从键盘输入10个学生成绩:\n);for(i=0;i10;i++)scanf(%d,&a[i]);//输入10个学生成绩for(i=0;i9;i++)for(j=0;j9-i;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}//采用冒泡法,将学生成绩按照从高到低进行排序printf(10个学生成绩数组:\n);for(i=0;i10;i++)printf(%5d,a[i]);printf(\n);printf(再输入一个学生的成绩\n);scanf(%d,&b);//再输入一个学生的成绩c=a[9];if(bc)//将此成绩按照排序规律插入原学生成绩数组a[10]=b;else{for(i=0;i10;i++){if(a[i]b){temp1=a[i];a[i]=b;for(j=i+1;j11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}}printf(11个学生成绩数组:\n);//输入11个学生成绩for(i=0;i11;i++)printf(%5d,a[i]);printf(\n);for(i=0;i5;i++)//排好序的成绩单进行反序存放{temp3=a[i];a[i]=a[10-i];a[10-i]=temp3;}printf(排好序的成绩单进行反序存放为:\n);for(i=0;i11;i++)//输出反序存放后的学生成绩数组printf(%5d,a[i]);printf(\n);return0;}3,运行结果:2,根据条件进行学生成绩排名1,流程图:Sort1sort2假?真?Sort3假?假?真?真?赋值I由0变到8执行9次循环进行9-I次比较真a[j]a[I+I]假a[j]a[j+1]输出a[0]到a[9]I10??I=0,i++输入nI=0,i++In赋值I由0变到n-1执行n次循环进行n-1-I次比较真a[j]a[I+I]假a[j]a[j+1]输出a[0]到a[n-1]输入nI=0,i++In赋值输入aordI由0变到n-1执行n次循环进行n-1-I次比较真a[j]a[I+I]假a[j]a[j+1]Style=97Style=100I由0变到n-1执行n次循环进行n-1-I次比较真a[j]a[I+I]假a[j]a[j+1]2,程序:#includestdio.hvoidsort1(inta[10])//定义函数{inti,j,t;printf(输入10个学生成绩:\n);for(i=0;i10;i++)scanf(%d,&a[i]);//输入n个学生成绩for(i=0;i10;i++)//冒泡法对n个数字排序for(j=0;j9-i;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf(10个学生成绩从高到低排名是:\n);for(i=0;i10;i++)//输出结果printf(%5d,a[i]);printf(\n);}voidsort2(inta[],intn)//定义函数{inti,j,t;printf(请输入学生个数n:\n);scanf(%d,&n);printf(输入n个学生成绩:\n);for(i=0;in;i++)scanf(%d,&a[i]);for(i=0;in;i++)//冒泡法对n个数字排序for(j=0;jn-i-1;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf(n个学生成绩从高到低排名是:\n);for(i=0;in;i++)//输出结果printf(%5d,a[i]);printf(\n);}voidsort3(inta[],intn,charstyle){charc;getchar(c);printf(请输入style类型:aord\n);style=getchar();printf(请输入学生个数n:\n);输出a[0]到a[n-1]scanf(%d,&n);printf(输入n个学生成绩:\n);inti,j,t;for(i=0;in;i++)scanf(%d,&a[i]);if(style==97){printf(对n个数字升序排列为:\n);for(i=0;in;i++)//冒泡法对n个数字升序排列for(j=0;jn-i-1;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}elseif(style==100){printf(对n个数字降序排列为:\n);for(i=0;in;i++)//冒泡法对n个数字降序排列for(j=0;jn-i-1;j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}printf(n个学生成绩排名是:\n);for(i=0;in;i++)//输出结果printf(%5d,a[i]);printf(\n);}intmain()//主函数{{printf(sort1:\n);//调用sort1函数inta[10];sort1(a);}{printf(sort2:\n);//调用sort2函数inta[30000],n;sort2(a,n);}{printf(sort3:\n);//调用sort3函数inta[30000],n;charstyle;sort3(a,n,style);}return0;}这个程序中输入字符时由于前面的程序的干扰,第一个输入字符语句会直接跳过,所以要另加一个空白的输入字符的语言,从而使程序中输入字符的语句能够正常运行由于数组的长度必须要定义,而且不能用变量定义,鉴于要进行比较的数据量n是一个整形的数,定义数组为一个较长数组即可3,运行结果:3,用指针优化学生成绩排名1,流程图:Sortcopymain2,程序:#includestdio.h#includestring.hvoidsort(int*p)//定义函数sort{//将成绩数组按照从高到低进行排序,要求用函数实现inti,j,t;for(i=0;i9;i++)for(j=0;j9-i;j++)if(*(p+j)*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}}voidcopy(char*a,char*b)//定义函数copy{for(;*a!='\0';a++,b++)//复制该字符串,用函数实现{*b=*a;}*b='\0';}intmain(){inti,j,t,stu[10],*p;//定义一个数组stu[10]存放10个学生的成绩p=stu;printf(请输入10个数据:\n);for(i=0;i10;i++)//从键盘输入数据,用指针实现scanf(%d,p+i);printf(数组stu[10]的内容为:\n);for(i=0;i10;i++)//将数组stu[10]的内容输出到屏幕上,用指针实现printf(%5d,*(p+i));printf(\n);for(i=0;i9;i++)//将成绩数组按照从高到低进行排序,用指针实现for(j=0;j9-i;j++)if(*(p+j)*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}printf(成绩数组按照从高到低进行排序为:\n);p=stu;for(i=0;i10;i++)printf(%5d,*(p+i));printf(\n);p=stu;sort(p);//调用函数sortprintf(第三步内容放在函数中实现为:\n);for(i=0;i10;i++)printf(%5d,*(p+i));printf(\n);printf(采用指针方法,输入字符串studentscore:\n);char*a=studentscore;charb[14];copy(a,b);//调用函数copyprintf(%s\n,b);return0;}指针的传递是双向的,在赋值中有多种方法,比如说对数组直接赋值,或者直接对指针变量进行赋值复制该字符串,用函数实现时是用循环语句把一个字符串的每一个字符赋值给另一个字符串3,运行结果:4,学生成绩单制作1,流程图:结构体语言具有简洁,方便,模块化的特点,在初始化及输出过程中要注意输入输出方式Return0在输入字符串的时候,输入语句中不应有&2,程序:#includestdio.hStructStudent//定义结构体{charnumber[10];charname[10];intscore[3];floataverage;}student[10];intmain(){inti,j,t;for(i=0;i10;i++)//初始化结构体{printf(\n输入student%d成绩:\n,i+1);printf(number:);scanf(%s,student[i].number);printf(name:);//存放10个学生的学号,姓名,三门课的成绩scanf(%s,student[i].name);for(j=0;j3;j++){printf(score%d:,j+1);scanf(%d,&student[i].score[j]);}student[i].average=(student[i].score[0]+student[i].score[1]+student[i].score[2])/3.0;printf(average:%f,student[i].average);}printf(\n);printf(输出数学成绩最高的学生的学号、姓名、以及该门课程的成绩:\n);//输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩intmax=0,max_math=0,max_chinese=0,max_english=0,max_average=0,max_i=0;for(i=0;i10;i++){if(max_mathstudent[i].score[0]){max_math=student[i].score[0];max_i=i;}}printf(num