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等语句的应用也掌握较好,设计界面友好。但是在指针的应
用上还不太熟练,犯了很多错误,以后我将会改正。总之,这次实验让我获益良多。