C语言实习报告
设计报告
一,
实验目得:
通过上机实习, , 熟练掌握循环语句、选择语句、指针以及结构体得运用技巧。在实习中通过实际操作, , 编写程序, , 发现问题,最后解决问题, ,对 提升对 c c 语言实用性得理解, , 在实践中巩固各知识点。
C C 语言就是一种计算机程序设计语言。它既具有高级语言得特点, , 又具有汇编语言得特点, ,上机实习可以帮助我们更好地理解这种结构式得中级语言以及其各式各样得数据类型与高效率得运算程序,为我们进一步学习C ++ 打下坚实基础。
同时, , 在实习过程中,通过互相发现问题,共同解决问题, , 不仅锻炼了我们得合作能力 ,而且也让我们发现了一些自己得个人误区以及其她人容易犯得错误, , 从而在今后得学习中更加谨慎, , 达到事半功倍得效果; ; 通过询问老师, , 也让我们养成了不耻下问得好习惯,这将很有利于以后得学习。
闲乐-一个人闲。不如大家一块儿乐 二,总体设计:
1,学生成绩排名
1 1 ,流程图: :
?假ﻩ
真?
假?
真?
<通过冒泡法对数组进行排序> 〈测试时由于循环语句循环次数得错误导致部分数据没有排序,修改FOR语言中得条件即可调试成功> 2, 程序:
#include〈stdio、h> int main()
{ ,]11[a 组数个一义定//
;3pmet,2pmet,1pmet,c,b,t,j,i,]11[a tniﻩ用以存放学生得成绩
printf("从键盘输入10 个学生成绩:\n");
)++i;01<i;0=i(rofﻩ ﻩ scanf("%d”,&a[i]);
//输入10 个学生成绩
for(i=0;i<9;i++)
ﻩ for(j=0;j〈9—i;j++)
ﻩ)]1+j[a<]j[a(fiﻩ
ﻩ {t=a[j];a[j]=a[j+1];a[j+1]=t;}
//采用冒泡法,将学生成绩按照从高到低进行排序
printf("10 个学生成绩数组:\n");
for(i=0;i〈10;i++)
printf("%5d”,a[i]);
printf(”\n");
;)"n\绩成得生学个一入输再"(ftnirpﻩ
scanf("%d",&b);
//再输入一个学生得成绩
;]9[a=cﻩ if(b<c)
//将此成绩按照排序规律插入原学生成绩数组
;b=]01[aﻩﻩ else
{for(i=0;i<10;i++)
I=0 I<11?赋值 I 由 0 变到 8 执行 9 次循环
进行 9-I 次比较
真
a[j]>a[I+I]假
a[j]
a[j+1] 输出 a[0]到 a[9] 再输入一个学生得成绩 冒泡法排序 输出 a[0]到 a[10] I 由 0 变到 4 进行 5 次循环 a[i]
a[10-i] I=0 I<10?输出 结束
{if(a[i]〈b)
{
;b=]i[a;]i[a=1pmetﻩ
)++j;11〈j;1+i=j(rofﻩ
{temp2=a[j];a[j]=temp1;temp1=temp2;
}break;
}ﻩ }ﻩ }
printf(”11 个学生成绩数组:\n”);
//输入 11 个学生成绩
for(i=0;i<11;i++)
;)]i[a,"d5%"(ftnirpﻩ
printf("\n”);
for(i=0;i〈5;i++)
//排好序得成绩单进行反序存放
{
;]i[a=3pmetﻩﻩ
;]i—01[a=]i[aﻩ ;3pmet=]i—01[aﻩﻩ }
printf(”排好序得成绩单进行反序存放为:\n");
for(i=0;i<11;i++)
//输出反序存放后得学生成绩数组
;)]i[a,"d5%"(ftnirpﻩ
printf(”\n");
return 0; } 3, 运行结果:
2,根据条件进行学生成绩排名 1, 流程图: Sort1
sort2
?假ﻩ
真?
赋值 I 由 0 变到 8 执行 9 次循环
进行 9-I 次比较
真
a[j]>a[I+I]假
a[j]
a[j+1] 输出 a[0]到 a[9] I<10?I=0,i++ 输入 n I=0,i++ 赋值 I 由 0 变到 n-1 执行 n 次循环
进行 n-1-I 次比较
真
a[j]>a[I+I]假
a[j]
a[j+1] 输出 a[0]到 a[n-1] I<n
Sort3
假? ﻩ
假? 真?
?真ﻩ
2 ,程序:
#include〈stdio、h〉 void sort1(int a[10])
//定义函数 {
int i,j,t;
;)"n\:绩成生学个01入输"(ftnirpﻩ
for(i=0;i<10;i++)
scanf(”%d”,&a[i]);
//输入 n 个学生成绩
for(i=0;i 〈10;i++)
//冒泡法对n个数字排序
for(j=0;j<9-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;i〈10;i++)
//输出结果
;)]i[a,”d5%"(ftnirpﻩ ;)”n\”(ftnirpﻩ } void sort2(int a[],int n)
//定义函数 {
int i,j,t;
printf(”请输入学生个数 n:\n");
scanf("%d",&n);
printf("输入 n 个学生成绩:\n");
for(i=0;i<n;i++)
;)]i[a&,"d%"(fnacsﻩﻩ
for(i=0;i<n;i++)
//冒泡法对 n 个数字排序 I<n 输入 n I=0,i++ 赋值 输入 a or d I 由 0 变到 n-1 执行 n 次循环
进行 n-1-I 次比较
真
a[j]>a[I+I]假
a[j]
a[j+1] Style=97 Style=100 I 由 0 变到 n-1 执行 n 次循环
进行 n-1-I 次比较
真
a[j]<a[I+I]假
a[j]
a[j+1] 输出 a[0]到 a[n-1]
)++j;1-i-n〈j;0=j(rofﻩ
)]1+j[a<]j[a(fiﻩﻩ
ﻩ {t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("n 个学生成绩从高到低排名就是:\n”);
for(i=0;i<n;i++)
//输出结果
printf(”%5d",a[i]);
printf(”\n"); } void sort3(int a[],int n, char style) {
char c; getchar(c);
printf(”请输入 style 类型:a or d\n");
;)(rahcteg=elytsﻩ printf("请输入学生个数n:\n");
scanf("%d”,&n);
;)"n\:绩成生学个 n 入输"(ftnirpﻩ
int i,j,t;
for(i=0;i〈n;i++)
ﻩ scanf("%d",&a[i]);
)79==elyts(fiﻩ {
printf("对 n 个数字升序排列为:\n”);
数个n对法泡冒//
)++i;n〈i;0=i(rofﻩ字升序排列
)++j;1—i-n〈j;0=j(rofﻩﻩ ﻩ
if(a[j]〉a[j+1])
{ﻩ };t=]1+j[a;]1+j[a=]j[a;]j[a=tﻩ }ﻩ
else if(style==100)
{
printf(”对 n 个数字降序排列为:\n”); 数个 n 对法泡冒//
)++i;n<i;0=i(rofﻩﻩ字降序排列
for(j=0;j〈n-i-1;j++)
)]1+j[a<]j[a(fiﻩ
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}ﻩ printf("n 个学生成绩排名就是:\n”);
for(i=0;i<n;i++)
//输出结果
printf("%5d”,a[i]);
;)"n\”(ftnirpﻩ} int main()
//主函数 {
{printf(”sort1:\n”);
//调用sort1 函数
int a[10];
};)a(1trosﻩ{函 2tros 用调//
;)"n\:2tros"(ftnirpﻩ数
int a[30000],n;
};)n,a(2trosﻩ{
数函 3tros 用调//
;)”n\:3tros"(ftnirpﻩ int a[30000],n;
;elyts rahcﻩ sort3(a,n,style);}
;0 nruterﻩ} <这个程序中输入字符时由于前面得程序得干扰,第一个输入字符语句会直接跳过,所以要另加一个空白得输入字符得语言,从而使程序中输入字符得语句能够正常运行〉 <由于数组得长度必须要定义,而且不能用变量定义,鉴于要进行比较得数据量n就是一个整形得数,定义数组为一个较长数组即可> 3 ,运行结果:
3,用指针优化学生成绩排名 1 , 流程图:
So rt
copy
main
2, 程序:
#include<stdio、h> #include<string、h> v o id s o r t ( i n t
* p )
//定义函数 sort {
//将成绩数组按照从高到低进行排序,要求用函数实现
int i,j,t;
for(i=0;i<9;i++)
)++j;i-9<j;0=j(rofﻩﻩ ﻩ
))1+j+p(*〈)j+p(*(fiﻩ
{ };t=)1+j+p(*;)1+j+p(*=)j+p(*;)j+p(*=tﻩ} v o i d
c opy(c h ar
* a,cha r
*b )
//定义函数copy
{
for(;*a!=’\0’;a++,b++)
// 复制该字符串,用函数实现
{ *b=*a;} * ;’0\’=bﻩ} int main()
{ 义定 //
;p*,]01[uts,t,j,i tniﻩ一个数组 stu[10]存放 10 个学生得成绩
p=stu;
;)”n\:据数个 01 入输请”(ftnirpﻩ键从//
)++i;01<i;0=i(rofﻩ盘输入数据,用指针实现
ﻩ scanf("%d",p+i);
printf("数组stu[10]得内容为:\n"); 将//
)++i;01<i;0=i(rofﻩ数组stu[10]得内容输出到屏幕上,用指针实现
ﻩ printf("%5d",*(p+i));
printf(”\n”); 成将//
)++i;9<i;0=i(rofﻩ绩数组按照从高到低进行排序,用指针实现
for(j=0;j<9—i;j++)
if(*(p+j)<*(p+j+1))
{ﻩ};t=)1+j+p(*;)1+j+p(*=)j+p(*;)j+p(*=tﻩ printf(”成绩数组按照从高到低进行排序为:\n");
p=stu;
for(i=0;i〈10;i++)
printf("%5d",*(p+i));
;)”n\"(ftnirpﻩ ;uts=pﻩ sort(p);
//调用函数 sort
;)”n\:为现实中数函在放容内步三第"(ftnirpﻩ
for(i=0;i〈10;i++)
printf(”%5d",*(p+i));
;)"n\”(ftnirpﻩ printf(”采用指针方法,输入字符串 student score: \n");
char *a=”student score”;
char b[14]; 调//
;)b,a(ypocﻩ用函数 copy
;)b,”n\s%”(ftnirpﻩ return 0; } <指针得传递就是双向得,在赋值中有多种方法,比如说对数组直接赋值,或者直接对指针变量进行赋值> 〈复制该字符串,用函数实现时就是用循环语句把一个字符串得每一个字符赋值给另一个字符串〉 3 , 运行结果:
4,学生成绩单制作 1 , 流程图:
〈结构体语言具有简洁,方便,模块化得特点,在初始化及输出过程中要注意输入输出方式> 〈在输入字符串得时候,输入语句中不应有&〉 2 , 程序: #include<stdio、h> St r uctS t u d ent
//定义结构体
{ Return 0
;]01[rebmun rahcﻩ
;]01[eman rahcﻩ 3[erocs tniﻩﻩ
ﻩ ];
;egareva taolfﻩ }student[10]; int main()
{
;t,j,i tniﻩfﻩ o r(i=0;i<10;i + + )
//初始化结构体
{printf(”\n 输入student%d 成绩:\n",i+1);
;)":rebmun"(ftnirpﻩ ;)rebmun、]i[tneduts,"s%”(fnacsﻩﻩ p ri n tf ( "name:") ;
//存放 10 个学生得学号,姓名,三门课得成绩
;)eman、]i[tneduts,"s%"(fnacsﻩ )++j;3<j;0=j(rofﻩ {printf("score %d:",j+1);
;)]j[erocs、]i[tneduts&,"d%”(fnacsﻩ }
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");
;)"n\:绩成得程课门该及以、名姓、号学得生学得高最绩成学数出输"(ftnirpﻩ//输出单门课成绩最高得学生得学号、姓名、以及该门课程得成绩 gareva_xam,0=hsilgne_xam,0=esenihc_xam,0=htam_xam,0=xam tniﻩe=0,max_i=0;
for(i=0;i<10;i++)
{ﻩ )]0[erocs、]i[tneduts<htam_xam(fiﻩﻩ { ;]0[erocs、]i[tneduts=htam_xamﻩﻩ };i=i_xamﻩﻩ }
printf(”number=%s,name=%s,max_math=%d\n",student[max_i]、number,student[max_i]、name,student[max_i]、score[0]);
printf(”输出中文成绩最高得学生得学号、姓名、以及该门课程得成绩:\n");
for(i=0;i<10;i++)
{
if(max_chinese〈student[i]、score[1])
ﻩ{ ;]1[erocs、]i[tneduts=esenihc_xamﻩ };i=i_xamﻩﻩ
}
printf(”number=%s,name=%s,max_chinese=%d\n",student[max_i]、number,student[max_i]、name,student[max_i]、score[1]);
printf("输出中文成绩最高得学生得学号、姓名、以及该门课程得成绩:\n");
for(i=0;i<10;i++)
{
)]2[erocs、]i[tneduts〈hsilgne_xam(fiﻩ { ;]0[erocs、]i[tneduts=hsilgne_xamﻩ
max_i=i;}
}ﻩ
printf("number=%s,name=%s,max_english=%d\n”,student[max_i]、number,student[max_i]、name,student[max_i]、score[2]);
printf("输出三门课程得平均分数最高得学生得学号、姓名及其平均分:\n");
//输出三门课程得平均分数最高得学生得学号、姓名及其平均分
for(i=0;i〈10;i++)
{
if(max_average〈student[i]、average)
ﻩ{ ;egareva、]i[tneduts=egareva_xamﻩ
};i=i_xamﻩ }
printf(”number=%s,name=%s,max_average=%f\n",student[max_i]、number,student[max_i]、name,student[max_i]、average);
for ( i=0 ; i<9; i ++)
//将 10 个学生按照平均分数从高到低进行排序
)++j;i-9<j;0=j(rofﻩﻩ ﻩﻩ if(student[j]、average<student[j+1]、average)
{t=student[j]、average;student[j]、average=student[j+1]、average;student[j+1]、average=t;}
printf("
number
name
math
Chinese
English
average\n");
for( i =0;i 〈 10;i+ + )
//输出排序后得结果
printf("%8s%8s%9d%9d%9d
%6、2f\n",student[i]、number,student[i]、name,student[i]、score[0],student[i]、score[1],student[i]、score[2],student[i]、average);
return 0; 3, 运行结果: