printf("");
for(j=1;j<=7-k*2;j++)
printf("%d",j);
printf("\n");
}
}
七、实验中出现的问题及解决的方法
实验一:
阶乘的结果超出了int型的表达范围造成溢出。
int型表示正整数的极限是2的31次方减一,int可以正确表达所有9位及以下的整数,所以我在这里用longint代替int
实验二:
拼写错误外无其它错误
实验三:
无
实验二数组
一、实验学时:
2学时
二、实验目的
掌握二维数组、字符数组与字符串的关系以及字符串变量的表示,熟练字符串处理函数的应用
三、实验内容
1.用选择法对10整数排序
2.有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中的英文大写字母、小写字母、数字、空格以及其它字符的个数。
3.将两个字符串连接起来,不要用strcat函数。
4.(飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。
总裁要求您为新系统编制程序。
需要分配该航空公司的唯一一架飞机每个航班的座位(容量:
10个座位)。
提示:
程序应该轮流显示下列菜单:
Pleasetype1for“firstclass”
Pleasetype2for“economy”
如果输入1,则程序应该分配头等舱内的座位(座位1~5)。
如果输入2,则程序应该分配经济舱的座位(座位6~10)。
然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱,还是经济舱内。
使用一个数组来代表飞机的座位安排。
将数组的所有元素初始化为0,以说明所有座位都是空的。
当分配每个座位时,将数组的对应元素设置为1,以说明不能再次使用那个座位号。
当然,程序不应该分配已经分配过的座位。
当头等舱满员时,程序应询问是否可以安排在经济舱内(等等)。
如果可以,则进行适当的座位分配。
如果不可以,则输出信息“NextFlightleavesin3hours”.
四、主要仪器设备及耗材
硬件:
计算机一台
软件:
DEV-CPP或其他软件
五、实验步骤
1.复习数组相关内容,编写以上题目源程序
2.输入源程序,编译、连接直到没有错误
3.根据实验步骤,撰写实验报告
六、程序清单
1.用选择法对10整数排序
#include
voidmain()
{
inti,j,min,temp,a[11];
for(i=1;i<=10;i++){
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);输出带符号的整数,需要占用5个字符位置,不够则空格补齐.%5d是右对齐
printf("\n");
for(i=1;i<=9;i++){
min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
}
2.有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中的英文大写字母、小写字母、数字、空格以及其它字符的个数。
#include
#include
#include
voidfun(charstr[][80]){
intspace=0;
intcapital=0;
intlowercase=0;
intnum=0;
intother=0;
inti,j;
for(i=0;i<3;i++){
for(j=0;j<80;j++){
if(str[i][j]==''){
space++;//空格的个数加一
}
elseif(str[i][j]>64&&str[i][j]<91){
capital++;//大写字母加一
}
elseif(str[i][j]>96&&str[i][j]<123){
lowercase++;//小写字母加一
}
elseif(str[i][j]>47&&str[i][j]<58){
num++;//数字加一
}
elseif(str[i][j]!
='\0'){
other++;//其它加一
}
}
}
printf("大写字母个数为%d\n小写字母个数为%d\n空格个数为%d\n数字个数为%d\n其他字符个数为%d\n",capital,lowercase,space,num,other);
}
voidmain(){
charstr[3][80]={{"Mr.Johnsonhadneverbeenupinanaerophanebeforeandhehadreadalotabout"},
{"airaccidents,soonedaywhenafriendofferedtotakehimforarideinhis"},
{"wonsmallphane,Mr.Johnsonwasveryworriedaboutaccepting.Finally,123456"}};
printf("文章为:
\n");
inti;
for(i=0;i<3;i++){
printf("%s",str[i]);
}
printf("\n");
fun(str);
system("pause");
}
3.将两个字符串连接起来,不要用strcat函数
#include
intmain()
{
charstr1[80],str2[40];
inti=0,j=0;
gets(str1);//gets()函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量str所指向的内存空间
gets(str2);
while(str1[i]!
='\0')//运行到字符串结尾时结束
i++;
while(str1[j]!
='\0')
{
str1[i]=str2[j];
i++;
j++;
}
str1[i]='\0';
printf("\n%s\n",str1);
}
4.(飞机定票系统)一家小型航空公司刚刚购买了计算机,用于新的自动化定票系统。
总裁要求您为新系统编制程序。
需要分配该航空公司的唯一一架飞机每个航班的座位(容量:
10个座位)。
提示:
程序应该轮流显示下列菜单:
Pleasetype1for“firstclass”
Pleasetype2for“economy”
如果输入1,则程序应该分配头等舱内的座位(座位1~5)。
如果输入2,则程序应该分配经济舱的座位(座位6~10)。
然后,程序输出登机证,说明座位号,以及它位于飞机的头等舱,还是经济舱内。
使用一个数组来代表飞机的座位安排。
将数组的所有元素初始化为0,以说明所有座位都是空的。
当分配每个座位时,将数组的对应元素设置为1,以说明不能再次使用那个座位号。
当然,程序不应该分配已经分配过的座位。
当头等舱满员时,程序应询问是否可以安排在经济舱内(等等)。
如果可以,则进行适当的座位分配。
如果不可以,则输出信息“NextFlightleavesin3hours”.
#include
intmain()
{
inta=2;
intb=0;
inttic1=0;
inttic2=0;
intfi[6]={0,0,0,0,0,6};
intec[7]={0,0,0,0,0,0,6};
while(a!
=0)
{
/*code*/
printf("Pleasetype1for“firstclass”\n");
printf("Pleasetype2for“economy”\n");
scanf("%d",&b);
switch(b)
{
case1:
if(fi[tic1]==0)
{
/*code*/
fi[tic1]=1;
printf("你的座位号为%d\n",tic1+1);
tic1++;
}
Else
{
printf("NextFlightleavesin3hours\n");
}
break;
case2:
/*code*/
if(ec[tic2]==0)
{
ec[tic2]=1;
/*code*/
printf("你的座位号为%d\n",tic2+5);
tic2++;
}
Else
{
printf("NextFlightleavesin3hours\n");
}
break;
case3:
a=0;
break;
default:
printf("error,Pleasetypethecorrectnumber\n");
break;
}
}
printf("Programend\n");
}
七、实验中出现的问题及解决的方法
实验一:
无法确定两个数两两相比较的次数刚开始以为是比较10次,经过检测是比较9次。
实验二:
每组80个字符输入有问题有时候空格会没法计算。
实验三:
无。
实验四:
无。
实验三函数
一、实验学时:
4学时
二、实验目的
1.理解如何模块化地用函数来构建程序、全局变量和局部变量的概念及应用,进一步理解变量存储类别。
2.掌握如何创建新的函数。
3.理解在函数间传递信息的机制。
三、实验内容
1.求2~100间的素数,要求编写一个求素数的函数,在主函数中调用并输出2~100之间的素数。
2.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
3.写一个函数,使给定的一个3×3的二维数组转置,即行列互换。
4.写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。
5.输入10个学生5门课程的成绩,分别用函数求:
①每个学生平均分,并输出;②每门课的平均分,并输出。
四、主要仪器设备及耗材
硬件:
计算机一台
软件:
DEV-CPP或其他软件
五、实验步骤
1.创建空白新工程,向新工程中添加空文件
2.编写代码
3.编译、调试并运行
六、程序清单
1.求2~100间的素数,要求编写一个求素数的函数,在主函数中调用并输出2~100之间的素数。
#include
intisprime(inta)
{
inti;
for(i=2;iif(a%i==0){
break;
}
}
if(a==i)
return1;
else
return0;
}
intmain(void)
{
inti;
for(i=2;i<100;i++)
{
if(isprime(i))
{
printf("%d",i);
}
}
printf("\n");
}
#include
intmain()
{
sushu();
}
intsushu()
{
inti;
for(i=2;i<=100;i++)
{
/*code*/
inta=0;
intj;
for(j=2;j
{
/*code*/
if(i%j==0)
{
/*code*/
a++;
}
}
if(a==0)
{
printf("%d",i);
}
}
return0;
}
2.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
#include
intmain(){
inta,b,c,g;
printf("输入两个整数:
");
scanf("%d%d",&a,&b);
if(a!
=0&&b!
=0){
c=gcd(a,b);
g=lcd(a,b);
printf("最大公约数:
%d\n",c);
printf("最小公倍数:
%d\n",g);
}
else{
printf("Inputerror!
\n");
}
return0;
}
intgcd(inta,intb){
intt=0;
while
(1){
t=a%b;
if(t==0)
break;
a=b;
b=t;
}
returnb;
}
intlcd(inta,intb){
returna*b/gcd(a,b);//最大公约数等于两个数的乘积除以最小公倍数
}
3.写一个函数,使给定的一个3×3的二维数组转置,即行列互换
#include
voidchange(inta[3][3]){
inti,j,t;
for(i=0;i<3;i++){
for(j=0;j
t=a[i][j];//数组里面不能将行列互换,只能借助另外的参数;
a[i][j]=a[j][i];//即不能写成a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
intmain(){
inta[3][3];
inti,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
change(a);
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d",a[i][j]);
}
printf("\n");
}
return0;
}
4.写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。
#include
intmain()
{
inta[10];
inti,j,k;
printf("input10numbers:
\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]){
k=a[i];
a[i]=a[i+1];
a[i+1]=k;
}
printf("thesortednumber:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;
}
#include
intpaixu(intc[]);
intmain(){
intj,i;
inta[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
paixu(a);
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;
}
intpaixu(intc[]){
intk,j,m;
for(k=0;k<9;k++){
for(j=0;j<9-k;j++){
if(c[j]>c[j+1]){
m=c[j];
c[j]=c[j+1];
c[j+1]=m;
}
}
}
}
5.输入10个学生5门课程的成绩,分别用函数求:
①每个学生平均分,并输出;②每门课的平均分,并输出。
#include
#include
intxpj(inta[10][5]);
intkpj(inta[10][5]);
intmain(){
inta[10][5];
inti,j;
for(i=0;i<10;i++){
printf("第%d个同学的成绩:
",i+1);
for(j=0;j<5;j++){
scanf("%d",&a[i][j]);}}//**输入时数字之间用空格分隔**
printf("\n");
xpj(a);
printf