文档库 最新最全的文档下载
当前位置:文档库 › C语言实习报告

C语言实习报告

C语言实习报告
C语言实习报告

设计报告

一,实验目的:

通过上机实习,熟练掌握循环语句、选择语句、指针以及结构体的运用技巧。在实习中通过

实际操作,编写程序,发现问题,最后解决问题,提升对c语言实用性的理解,在实践中巩固各知

识点。

C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点,上

机实习可以帮助我们更好地理解这种结构式的

中级语言以及其各式各样的数据类型和高效率

的运算程序,为我们进一步学习C++打下坚实基

础。

同时,在实习过程中,通过互相发现问题,共同解决问题,不仅锻炼了我们的合作能力,而

且也让我们发现了一些自己的个人误区以及其

他人容易犯的错误,从而在今后的学习中更加谨

慎,达到事半功倍的效果;通过询问老师,也让

我们养成了不耻下问的好习惯,这将很有利于以

后的学习。

闲乐-一个人闲。不如大家一块儿乐https://www.wendangku.net/doc/5610489874.html,

二,总体设计:

1,学生成绩排名

1,流程图:

<通过冒泡法对数组进行排序>

<测试时由于循环语句循环次数的错误导致部分数据没有排序,修改FOR语言中的条件即

可调试成功>

2,程序:

#include

int main()

{

int a[11],i,j,t,b,c,temp1,temp2,temp3; //定义一个数组a[11],用以存放学生的成绩

printf("从键盘输入10个学生成绩:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]); //输入10个学生成绩

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(a[j]

{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");

printf("再输入一个学生的成绩\n");

scanf("%d",&b); //再输入一个学生的成绩

c=a[9];

if(b

a[10]=b;

else

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

{if(a[i]

{temp1=a[i];a[i]=b;

for(j=i+1;j<11;j++)

{temp2=a[j];a[j]=temp1;temp1=temp2;

}break;

}

}

}

printf("11个学生成绩数组:\n"); //输入11个学生成绩

for(i=0;i<11;i++)

printf("%5d",a[i]);

printf("\n");

for(i=0;i<5;i++) //排好序的成绩单进行反序存放{

temp3=a[i];

a[i]=a[10-i];

a[10-i]=temp3;

}

printf("排好序的成绩单进行反序存放为:\n");

for(i=0;i<11;i++) //输出反序存放后的学生成绩数组printf("%5d",a[i]);

printf("\n");

return 0;

}

3,运行结果:

2,根据条件进行学生成绩排名1

Sort1 sort2

Sort3

2,程序:

#include

void sort1(int a[10]) //定义函数

{ int i,j,t;

printf("输入10个学生成绩:\n");

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]

{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");

}

void sort2(int a[],int n) //定义函数

{

int i,j,t;

printf("请输入学生个数n:\n");

scanf("%d",&n);

printf("输入n个学生成绩:\n");

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

if(a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

printf("n个学生成绩从高到低排名是:\n");

for(i=0;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");

style=getchar();

printf("请输入学生个数n:\n");

scanf("%d",&n);

printf("输入n个学生成绩:\n");

int i,j,t;

for(i=0;i

scanf("%d",&a[i]);

if(style==97)

{ printf("对n个数字升序排列为:\n");

for(i=0;i

for(j=0;j

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

else if(style==100)

{ printf("对n个数字降序排列为:\n");

for(i=0;i

for(j=0;j

if(a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

printf("n个学生成绩排名是:\n");

for(i=0;i

printf("%5d",a[i]);

printf("\n");

}

int main() //主函数

{

{printf("sort1:\n"); //调用sort1函数

int a[10];

sort1(a);}

{printf("sort2:\n"); //调用sort2函数

int a[30000],n;

sort2(a,n);}

{printf("sort3:\n"); //调用sort3函数

int a[30000],n;

char style;

sort3(a,n,style);}

return 0;

}

<这个程序中输入字符时由于前面的程序的干扰,第一个输入字符语句会直接跳过,所以要另加一个空白的输入字符的语言,从而使程序中输入字符的语句能够正常运行>

<由于数组的长度必须要定义,而且不能用变量定义,鉴于要进行比较的数据量n是一个整形的数,定义数组为一个较长数组即可>

3,运行结果:

3,用指针优化学生成绩排名

1,流程图:

Sort copy

main

2,程序:

#include #include

void sort(int *p) //定义函数sort

{ //将成绩数组按照从高到低进行排序,要求用函数实现 int i,j,t; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(*(p+j)<*(p+j+1)) {t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;} }

void copy(char *a,char *b) //定义函数copy { for(;*a!='\0';a++,b++) // 复制该字符串,用函数实现 { *b=*a;}

*b='\0';

}

int main()

{

int i,j,t,stu[10],*p; // 定义一个数组stu[10]存放10个学生的成绩

p=stu;

printf("请输入10个数据:\n");

for(i=0;i<10;i++) //从键盘输入数据,用指针实现

scanf("%d",p+i);

printf("数组stu[10]的内容为:\n");

for(i=0;i<10;i++) //将数组stu[10]的内容输出到屏幕上,用指针实现

printf("%5d",*(p+i));

printf("\n");

for(i=0;i<9;i++) //将成绩数组按照从高到低进行排序,用指针实现

for(j=0;j<9-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;i<10;i++)

printf("%5d",*(p+i));

printf("\n");

p=stu;

sort(p); //调用函数sort

printf("第三步内容放在函数中实现为:\n");

for(i=0;i<10;i++)

printf("%5d",*(p+i));

printf("\n");

printf("采用指针方法,输入字符串student score: \n");

char *a="student score";

char b[14];

copy(a,b); //调用函数copy

printf("%s\n",b);

return 0;

}

<指针的传递是双向的,在赋值中有多种方法,比如说对数组直接赋值,或者直接对指针变量进行赋值>

<复制该字符串,用函数实现时是用循环语句把一个字符串的每一个字符赋值给另一个字符串>

3,运行结果:

4,学生成绩单制作1,流程图:

Return 0

<结构体语言具有简洁,方便,模块化的特点,在初始化及输出过程中要注意输入输出方式>

<在输入字符串的时候,输入语句中不应有&>

2,程序:

#include

StructStudent

//定义结构体

{

char number[10];

char name[10];

int score[3

];

float average;

}student[10];

int main()

{

int i,j,t;

for(i=0;i<10;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;j<3;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"); //输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩

int max=0,max_math=0,max_chinese=0,max_english=0,max_average=0,max_i=0;

for(i=0;i<10;i++)

{

if(max_math

{ max_math=student[i].score[0];

max_i=i;}

}

printf("number=%s,name=%s,max_math=%d\n",student[max_i].number,student[max_i].name,stude nt[max_i].score[0]);

相关文档