程序设计基础C实验报告 2.docx
《程序设计基础C实验报告 2.docx》由会员分享,可在线阅读,更多相关《程序设计基础C实验报告 2.docx(49页珍藏版)》请在冰豆网上搜索。
![程序设计基础C实验报告 2.docx](https://file1.bdocx.com/fileroot1/2023-2/6/285e9085-c97f-4df7-be9f-5c6f8727e964/285e9085-c97f-4df7-be9f-5c6f8727e9641.gif)
程序设计基础C实验报告2
《程序设计基础C》
实
验
报
告
教学班级:
112160204学号:
11216020402姓名:
曹四川
课程教师:
______肖朝辉________
实验辅导教师:
_____肖朝辉__________
重庆理工大学计算机学院
2012年2月
实验6循环程序设计
教学班级:
112160204学号:
11216020402姓名:
曹四川实验日期:
___________实验地点:
_________(机房)
实验成绩:
___________
一、实验目的
1.了解C语言循环结构的使用范围。
2.学会正确使用逻辑运算符和逻辑表达式。
3.熟练掌握C语言的三种循环结构:
whilc语句、do_while语句、for语句的特点和使用方法。
4.能够编写一些有实际应用意义的循环结构程序。
二、实验内容
1.基本内容
题目1:
编写一个自然数1至n的累加程序(如:
1+2+3+…n)。
(使用goto语句)
(文件名:
f1.cpp):
#include
voidmain()
{inti,a,n;
a=i=0;
printf(“n=“);
scanf(“%d”,&n);
E:
i++;
a+=i;
if(igotoE;
else
printf(“\na=%d”,a);
}
①输入10,程序运行结果是:
a=55
②把该程序用for循环语句进行改写
程序代码:
#include
voidmain()
{inti,n,sum=0;
scanf(“n=%d”,&n);
for(i=0;i<=n;i++)
sum=sum+i;
printf(“sum=%d”,sum);
}
题目2:
计算1-3+5-7+......-99+101的值.(提示:
注意符号的变化)(文件名:
f2.cpp)
#include
voidmain()
{inti,t=1,s=0;/*t标识符号*/
for(i=1;i<101;i+=2)/*error*/
{s+=i*t;t=-t;}
printf(“s=%d\n”,s);
}
修改:
for(i=1;i<=101;i+=2)
以上程序运行结果不对,请将标有”erro”处改正。
改正后,程序执行结果s=51
题目3:
阅读下列程序,预测其输出结果,并上机验证。
(文件名:
f3.cpp)
#include
voidmain()
{inti=1,n;
longs=1;
scanf("%d",&n);
while(i)
{s*=i;
i++;
if(i>n)break;
}
printf("s=%ld\n",s);
}
①程序运行结果是:
n=5s=120
②不使用break语句,此程序应如何修改?
for(i=1;i<=n;i++)
题目4:
下面程序的功能是打印100以内个位数为6且能被3整除的所有数,选择合适的语句填入该空格中。
(文件名:
f4.cpp)
#include
voidmain()
{inti,j;
for(i=0;i<=10;i++)
{j=i*10+6;
if(j%3!
=0)
continue;
printf("%d",j);}
}
题目5:
编写一个把小写字母转换为大写字母的程序。
要求敲入”/”,则停止转换。
(文件名:
f5.cpp)
#include
voidmain()
{charc,d;
putchar(‘>‘);
do{
c=getchar();
c=(‘a’<=c)&&(c<=‘z’)?
c-32:
c;
putchar(c);
if(c==‘\n’);//error
putchar(‘>‘);
}while(c!
=‘/’);/*判断是否是”/”,则停止转换*/
}
①运行程序,输入2AabcEfgAB/
程序运行结果是:
2>A>A>B>C>E>
F>G>
A>B>/>
②将第9行改为:
if(c==‘\n’)
再运行程序,输入2AabcEfgAB/
程序运行结果是:
2>A>A>B>C>E>
F>G>
A>B>/>
2.选择内容
题目6:
根据公式
求e的近似值,精度要求为10-6
(文件名:
f6.cpp)
#include
voidmain()
{inti;
doublee,n;
e=1.0;n=1.0;
for(i=1;n>=1e-6;i++)
{n/=(double)i;
e+=n;}
printf(“e=%f\n”,e);
}
完善程序,运行结果:
e=2.718282
题目7:
打印出如下图案(文件名:
f7.cpp)
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
#include
voidmain()
{inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=8-i;j++)//理解数字8的作用
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}/*上面的程序输出上三角形*/
/*下面的程序输出下三角形*/
for(i=3;i>=1;i--)
{for(j=1;j<=8-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");}
}
①运行以上程序,验证实验结果。
②模仿上面程序,打印出如下图案
1
222
33333
程序代码:
#include
voidmain()
{inti,j;
for(i=1;i<=3;i++)
{for(j=1;j<=8-i;j++)
printf(““)
for(j=1;j<=2*i-1;j++)
print(“%d”,i);
Printf(“\n”);}
}
题目8:
编写程序:
打印出所有的“水仙花数”。
所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。
例如,153是一个“水仙花数”,因为153=13+53+33。
(文件名:
f6.cpp)
{inta,b,c,m,m;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{m=a*a*a+b*b*b+c*c*c;
n=100*a+10*b+c;
if(m==n)
printf(“%d”,m);}}
3、实验结果(用截图说明)
1
2
3
4
5
①
②
6
7
①
②
四、调试心得(选作)
实验7,8数组实验
教学班级:
_______学号:
__________姓名:
___________
实验日期:
___________实验地点:
_________(机房)
实验成绩:
___________
一、实验目的
1.理解数组与普通变量的区别及特点;
2.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
3.掌握字符数组和字符串函数的使用;
4.掌握与数组有关的程序与算法。
二、实验任务
1.基本内容
实验7:
题目1:
阅读以下程序(文件名:
g1.cpp)
#include
voidmain()
{inti,s=0,a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=3;i<7;i++)
s=s+a[i];
printf(“s=%d\n”,s);
}
①程序的功能:
求a[3]到a[6]数组的和
②程序运行结果:
s=18
题目2:
阅读以下程序(文件名:
g2.cpp)
#include
voidmain()
{intk,s,i,a[10]={1,2,3,4,5,6,7,8,9,10};
floatave;
for(k=s=i=0;i<10;i++)
{if(a[i]%2==0)continue;
s+=a[i];
k++;
}
if(k!
=0)
{ave=s/k;
printf(“k=%d,ave=%f\n”,k,ave);
}
}
①程序的功能:
求奇数的和以及其和的平均数
②程序运行结果:
k=5,ave=5.000000
题目4:
任意输入10个数,求其最大数和最小数。
(文件名:
g4.cpp)
程序代码:
#include
voidmain()
{
inta[10],max,min,i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=min=a[0];
for(i=1;i<=9;i++)
{
if(a[i]>max)max=a[i];
if(a[i]}
printf("max=%d",max);
printf("min=%d",min);
}
题目5:
冒泡法对10个数排序(从小到大)。
(文件名:
g5.cpp)
#include
voidmain()
{inta[10];inti,j,temp;
printf("Pleaseinput10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
printf("Thesortednumbers:
\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
①理解以上程序,并编辑运行程序。
②将程序中第7行的数字9改为10,编译运行程序,结果怎样?
③将程序中第8行的数字9改为10,编译运行程序,结果怎样?
实验8:
题目2:
输入一串字符,计算其中空格的个数。
(文件名:
h2.cpp)
#include
#include
voidmain()
{charc[30];
inti,sum=0;
gets(c);
for(i=0;iif(c[i]=='')
sum=sum+1;
printf("空格数为:
%d\n",sum);
}
题目3:
(文件名:
h3.cpp)
#include
voidmain()
{inti,j,row,col,min;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}};
min=a[0][0];
row=col=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]{min=a[i][j];row=i;col=j;}
printf(“min=%d,row=%d,col=%d\n”,min,row,col);
}
①程序的功能:
求数组中最小的数以及它的行标和列标
②程序运行结果:
min=-2,row=2,col=1
题目5:
预测程序结果,并编辑、运行。
(文件名:
h5.cpp)
#include
voidmain()
{chars[20],s1[20];
scanf(“%s”,s);
printf(“s=%s\n”,s);
scanf(“%s%s”,s,s1);
printf(“s=%s,s1=%s”,s,s1);
puts(“\n”);
gets(s);
puts(s);
}
2.选择内容
实验7:
题目6:
任意输入20个数在一维数组a中,求20个数的平均值。
(文件名:
g6.cpp)
程序代码:
#include
voidmain()
{
inta[20],s=0,i=0,ave;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
s=s+a[i];}
ave=s/20.0;
printf("ave=%d",ave);
}
题目7:
任意输入10个数,判断该哪些是素数,并输出该素数。
(文件名:
g7.cpp)
程序代码:
#include
voidmain()
{
inta[10],j,i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
for(j=2;j<=a[i]-1;j++)
if(a[i]%j==0)break;
if(a[i]==j)printf("%5d",a[i]);
}
printf("\n");
}
实验8:
题目8:
用字符数组存储任意输入的10字符,求该10字符中最大字符。
(文件名:
h8.cpp)
程序代码:
#include
voidmain()
{
charmax,str[11],i;
scanf(“%s”,str);max=str[0];
for(i=1;i<10;i++)
{if(str[i]>max)max=str[i];}
printf(“%c”,max);
}
题目9:
从键盘上任意键入一个3行4列的矩阵,要求输出其转置矩阵。
(文件名:
h9.cpp)
程序代码:
#include
voidmain()
{
inti,j,a[3][4],b[4][3];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%d”,&a[i][j]);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<4;i++)
{for(j=0;j<3;j++)
printf(“%5d”,b[j][i]);
printf(“\n”);
}
}
题目10:
有5个学生,考3门功课。
求出每一个学生的总分及平均分,统计平均成绩低于60分的学生人数。
(文件名:
h10.cpp)
程序代码:
#include
voidmain()
{
inta[5][3],sum[5],n=0,i,j;
floatave[5];
for(i=0;i<5;i++)
{sum[i]=0;
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);
sum[i]+=a[i][j];}//i个同学总成绩
ave[i]=sum[i]/3.0;
}
for(i=0;i<5;i++)
{printf("第%d个同学的总分是:
%d,平均分是%f\n",i+1,sum[i],ave[i]);
if(ave[i]<60)n++;}
printf("不及格的人数是:
%d",n);}
3、实验结果(用截图说明)
1、
2、
4、
5、
①
②
③
2、
3、
5、
6、
7、
8、
9、
10、
四、调试心得(选作)
实验9,10函数实验
教学班级:
_______学号:
__________姓名:
___________
实验日期:
___________实验地点:
_________(机房)
实验成绩:
___________
一、实验目的
1.理解函数定义的方法。
2.掌握函数实参与形参的对应关系,以及”参数传递”的方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法。
二、实验任务
1.基本内容
实验9:
题目1:
以下程序是求3个数中的最大值(文件名:
i1.cpp)
#include
voidmain()
{inta,b,c,m;
intmax(intx,inty);/*函数声明*/
printf(“inputa,b,c=“);
scanf(“%d,%d,%d”,&a,&b,&c);
M=(max(a,b)>c)?
max(a,b):
c;
printf(“m=%d\n”,m);
}
intmax(intx,inty)/*函数定义*/
{intz;
z=(x>y)?
x:
y;
returnz;
}
①完善程序,如果输入4,2,6,程序运行结果:
m=6
题目2:
(文件名:
i2.cpp)
#include
voidmain()
{inta[][3]={0,2,4,6,8,10,12,14,16},sum;
intfunc(inta[][3]);/*函数声明*/
sum=func(a);
printf(“\nsum=%d\n”,sum);
}
intfunc(inta[][3])/*函数定义*/
{inti,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)sum+=a[i][j];
returnsum;
}
①程序的功能:
数组a[][3]求和
②程序运行结果:
sum=24
题目3:
用子函数计算10名学生1门课成绩的平均分。
(文件名:
i3.cpp)
#include
floataverage(floatarray[10])/*注意数据类型的一致*/
{inti;floataver,sum=0;
for(i=0;i<10;i++)sum+=array[i];
aver=sum/10;
return(aver);
}
voidmain()
{floatscore[10],aver;
inti;
printf(“\ninput10scores:
”);
for(i=0;i<10;i++)scanf(“%f”,&score[i]);
aver=average(score[10]);/*error*/
printf(“\naveragescoreis%5.2f\n”,aver);
}
程序中有“error”标注处有错误,请改正,并调试运行程序。
aver=average(score)
题目4:
子函数中判断一个大于1的整数是否是素数,数据由主函数中输入,并在主函数中显示结果。
(文件名:
i4.cpp)
#include
voidmain()
{intnumber;
printf(“请输入一个正整数:
\n”);scanf(“%d”,&number);
if(prime(number))
printf(“\n%d是素数:
”,number);
else
printf(“\n%d不是素数:
”,number);}
intprime(intnumber)
{intflag=1,n;
for(n=2;flag==1&&n<=number/2;n++)
if(number%n==0)flag=0;
return(flag);
}
完善以上程序,并调试运行。
实验10:
题目4:
该程序使用了局部变量与全局变量,理解它们的使用方式。
(文件名:
j4.cpp)
#include
inta=3,b=5;
intmax(inta,intb)
{intc;
c=a>b?
a:
b;
returnc;
}
voidmain()
{inta=8;
printf(“%d”,max(a,b));
}
①局部变量:
inta=9和inta,intb,intc全局变量:
inta=4,b=6
②程序运行结果:
8
题目5:
以下是一个求1-10累加和的错误程序,请改正。
(文件名:
j5.cpp)
#include
voidmain()
{inti,s;
for(i=1;i<=10;i++)
s=sum(i);
printf("s=%d\t",s);
}
sum(intj)
{intx=0;/*error*/
x+=j;
return(x);
}
改正为:
staticintx=0;
2.选择内容
实验9:
题目5:
子函数实现一个字符串按反序存放,在主函数中输入和输出字符串。
(文件名:
i5.cpp)#include
#include
voidmain(){voidinverse(charstr[]);
charstr[100];
printf(“输入字符串:
\n”);scanf(“%s”,str);
inverse(str);
printf(“转换后的字符串是:
%s\n”,str);
}
voidinverse(charstr[])
{chart;
inti,j;
for(i=0,j=strlen(str);istr[i]=str[j-1];
str[j-1]=t;
}
}
①运行以上程序,输入1234567*,程序运行结果是:
7654321。
②将inverse函数中的for语句改为
for(i=0,j=strlen(str);i1234567*。
题目6:
在一个数组A中存放100个数据,用子函数判断该数组中那些是素数,并统计该素数的个数