C语言上机试验报告

  • 格式:pdf
  • 大小:952.87 KB
  • 文档页数:13

西安交通大学

电子与信息工程学院

程序设计方法专题实验

实验报告

学号10052087

姓名冯伯阳

班级信息04

实验指导老师吴茜媛

实验地点计算机教学实验中心

实验结束日期2010年12月07日实验题目一

1.题目要求:

有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,

数字,空格以及其他字符的个数。2.问题分析:

首先利用for循环输入三行十个字符,定义指针变量a表示每一行字符的首地址。利用for循环使数组下标【i】【j】增加,从而使*a表示从第一行第一个元素到第三那行的最后一个元素。

再利用大写字母的ASCII码在A与Z之间,小写字母在a与z之间等,统计出每种字符的个数。3.实验内容:

#include

voidmain()

{

charm[3][80];

char(*a)[80];/*定义指针变量a*/

inti,j,s1,s2,s3,s4,s5;

s1=0;s2=0;s3=0;s4=0;s5=0;

printf("请输入240个字符(若超过,则统计前240字符)。\n");

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

{

for(j=0;j<80;j++)

scanf("%c",&m[i][j]);

}

a=m;/*指针变量取m数组的首地址*/

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

{

for(j=0;j<80;j++)

{

if(*(a[i]+j)>64&&*(a[i]+j)<91)

s1++;

elseif(*(a[i]+j)>96&&*(a[i]+j)<123)

s2++;

elseif(*(a[i]+j)>47&&*(a[i]+j)<58)

s3++;

elseif(*(a[i]+j)=='')

s4++;

else开始

输入数据定义指针变量

用if语句判断字

符类型并用自增统计数量

输出统计

结果

结束s5++;

}

}

printf("大写字母有%d个\n",s1);

printf("小写字母有%d个\n",s2);

printf("数字有%d个\n",s3);

printf("空格有%d个\n",s4);

printf("其他字符有%d个\n",s5);

}程序运行结果:

实验题目二

1.题目要求:

用选择法和冒泡法对10个整数按从大到小顺序排列。2.问题分析:

题目要求程序提供两种排序方法并且由用户选择。首先分别编码两个函数——一个是冒泡排序,一个是选择排序。要实现的功能是用户选择函数。可以定义一个字符组变量,由用户输入“p”

或者“c”,若为“p”,则调用第一个函数,若为“c”,则调用第二个函数。冒泡法:原方法是根据流程图写出程序,进行9次循环,实现9趟比较,在每一趟中进行9-j

次比较,相邻两个数比较。应用指针编写程序,添加定义*a【10】指针,依旧执行原方法的循环节,调用指针完成程序,输出结果。3.实验内容:

主函数程序:#include

voidmain()

{

char_m;

printf("欢迎使用本程序进行数字的排序!使用冒泡排序法,请输入‘p’;使用

选择排序法,请输入‘c’,并按回车键。\n");scanf("%c",&_m);back:if(_m=='p')

paopaopao();

elseif(_m=='c')

choose();

else

{

printf("您输入了错误的语句。\n");

gotoback;

}

printf("排序结束,谢谢您的使用。晚安!\n");

}

冒泡排序法:#include

voidpaopaopao()

{

int*a[10],*t;

inti,j;

printf("输入十个数字(每输入一个数字按一下

回车):\n");for(i=0;i<10;i++)

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

printf("\n");

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

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

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

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

printf("排列后的数字为:\n");

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

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

printf("\n");

}

选择排序法:#include

voidchoose()

{

inti,j,k,*t,*a[10];

printf("输入十个数字(每输入一个数字按一下回车):\n");开始

用冒泡

函数进

行排序

输出排

序后的

结果

结束输入

数据选择冒泡排序法或选择

排序法

用选择

函数进

行排序输入

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

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

printf("\n");

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

{

k=i;

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

{

if(a[j]

k=j;

t=a[k];a[k]=a[i];a[i]=t;

}

}

printf("排列后的数字为:\n");

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

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

printf("\n");

}程序运行结果:

实验题目三

1.题目要求:

有10个学生,每个学生包括他的学号姓名3门课程的成绩。从键盘上输入10个学生的数据,要求打出3门课程的总平均成绩,以及最高分的学生数据。2.问题分析:

需要定义求和函数,求平均值函数及选择最大值。利用for循环输入学生信息。1,输入数据,定义数据结构。2,调用函数进行统计,计算第i个学生总分、平均分、利用if语句找出分数最高者,将此学生

的下标保存在maxi,计算总平均数,3,Max为当前最好成绩;maxi为当前最好成绩所对应的下标序号,sum为第i个学生的总成

绩。4,调试运行,输入数据,显示结果。3.实验内容:开始

用宏定义、结构体数据#include

#defineN10

structstdent

{

charnum[6];

charname[8];

floatscore[3];

floatavr;

}stu[N];

voidmain()

{

inti,j,maxi;

floatsum,max,average;

for(i=0;i

{

printf("inputscoresofstdent%d:\n",i++);

printf("No.:");

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

printf("name:");

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

for(j=0;j<3;j++)

{

printf("score%d:",j+1);

scanf("%f",&stu[i].score[j]);

}

}

average=0;

max=0;

maxi=0;

for(i=0;i

{sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{

max=sum;

maxi=i;

}

}

average/=N;

printf("No.namescore1score2score3average\n");

for(i=0;i

printf("%5s%10s",stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf("%9.2f",stu[i].score[j]);

printf("%8.2f\n",stu[j].avr);

}

printf("average=%5.2f\n",average);

printf("Thehighestscoreis:student%s,%s.\n",stu[maxi].num,stu[maxi].name);

printf("Hisscore

are:%6.2f,%6.2f.\n",stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].a

vr);

}程序运行结果:

实验总结:这次实验使用指针对以前做过的题重新编程,还是有一定难度的。总的来说,程序

的框架没有问题,对if等语句的应用也掌握较好,设计界面友好。但是在指针的应

用上还不太熟练,犯了很多错误,以后我将会改正。总之,这次实验让我获益良多。