计算机作业.docx
《计算机作业.docx》由会员分享,可在线阅读,更多相关《计算机作业.docx(30页珍藏版)》请在冰豆网上搜索。
![计算机作业.docx](https://file1.bdocx.com/fileroot1/2023-1/8/024d498c-d7d4-4b96-8532-622662c97b8f/024d498c-d7d4-4b96-8532-622662c97b8f1.gif)
计算机作业
《程序设计基础C》
实
验
报
告
教学班级:
2学号:
姓名:
刘易培
课程教师:
张建勋实验辅导教师:
张建勋
重庆理工大学计算机学院
2014年2月
实验5循环程序设计
教学班级:
2学号:
姓名刘易培
实验日期:
__2014-04-09__实验地点:
___四教312___(机房)
实验成绩:
___________
一、实验目的
(1)了解C语言循环结构的使用范围。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握C语言的三种循环结构:
whilc语句、do……whilc语句、for语句的特点和使用方法。
(4)能够编写一些有实际应用意义的循环结构程序。
二、实验内容
1.基本内容
题目1:
计算1-3+5-7+......-99+101的值。
(提示:
注意符号的变化)
#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);
}
1请改错,并运行程序。
(i<101改为i<=101)
②分别用do……while语句和while语句改写以上程序。
#include
voidmain()
{inti=1,t=1,s=0;/*t标识正负符号*/
do/*error*/
{s+=i*t;
t=-t;
i=i+2;
}while(i<=101);
printf("s=%d\n",s);
}
#include
voidmain()
{inti=1,t=1,s=0;/*t标识正负符号*/
while(i<=101)/*error*/
{s+=i*t;
t=-t;
i=i+2;
}
printf("s=%d\n",s);
}
题目2:
分析程序,运行时输入:
24579(注:
表示回车换行)。
#include
voidmain()
{intc;
while((c=getchar())!
='\n')
{switch(c-'2')
{case0:
case1:
putchar(c+4);
case2:
putchar(c+4);break;
case3:
putchar(c+3);
case4:
putchar(c+2);break;
default:
putchar(c);
}
}
printf("\n");
}
题目3:
下面程序的功能是打印100以内个位数为3且能被3整除的所有数,选择合适的语句填入该空格中。
#include
voidmain()
{
inti,j;
for(i=0;i<10;i++)
{j=i*10+3;
if(j%3!
=0)
continue;
printf("%4d",j);
}
}
题目4:
编程输出:
用0~4任意组成无重复数字的三位数?
都是多少?
每行输出10个数。
#include
voidmain()
{
inti,j,k,count=0;
printf("\n");
for(i=1;i<5;i++)/*以下为三重循环*/
for(j=0;j<5;j++)
for(k=0;k<5;k++)
{
if(i!
=j&&j!
=k&&i!
=k)/*确保i、j、k三位互不相同*/
{
printf("%6d",i*100+j*10+k);
count++;
if(count%10==0)
printf("\n");
}
}
printf("\n");
}
题目5:
根据公式
求e的近似值,精度要求为10-6。
题目6:
输入一行字符,将小写字母转换为大写字母显示,其它字符原样输出。
2.选择内容
题目7:
打印出如下图案
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
#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
三、实验结果(用截图说明)
四、调试心得(选作)
实验6数组实验
教学班级:
2学号:
姓名刘易培
实验日期:
__2014-04-09__实验地点:
___四教312___(机房)
实验成绩:
___________
一、实验目的
(1)理解数组的特点及其与普通变量的区别及特点;
(2)掌握一维数组的定义、赋值和输入输出的方法;
(3)掌握二维数组的定义、赋值和输入输出的方法;
(4)掌握字符数组和字符串函数的使用;
(5)掌握与一维数组和字符数组有关的程序与算法;
(6)理解与二维数组有关的程序与算法。
二、实验任务
1.基本内容
【题目1】读程序,写结果。
(18)
#include
voidmain()
{
inti,s=0,a[10]={1,2,3,4,5,6,7,8,9,10};
for(i=4;i<7;i++)
s=s+a[i];
printf("s=%d\n",s);
}
【题目2】下面程序给数组a输入数据,以每行4个数据形式输出,请填空。
##include
#defineN8
voidmain()
{
inti,a[N];
for(i=0;iscanf("%d",&a[i]);
for(i=0;i{
if(i%4==0)
printf("\n");
printf("%11d",a[i]);
}
printf("\n");
}
【题目3】用简单选择法对10个整数排序,将程序补充完整。
#defineN10
#include
voidmain()
{
inti,j,min,temp,a[N]={1,5,4,3,7,0,9,8,2,6};
for(i=0;i{
min=i;
for(j=i+1;j<10;j++)
if(a[min]>a[j])
min=j;
if(min!
=i)
{temp=a[i];a[i]=a[min];a[min]=temp;}
}
printf("\n排序结果为:
\n");
for(i=0;iprintf("%5d",a[i]);
printf("\n");
}
【题目4】下面的程序用冒泡法对10个数排序(从小到大),将程序补充完整。
#defineN10
#include
voidmain()
{
inti,j,min,temp,a[N]={1,5,4,3,7,0,9,8,2,6};
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
printf("\n排序结果为:
\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
【题目5】任意输入20个数到一维数组a中,求这20个数的平均值。
#include
intmain()
{
inta[20],i,j=0;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
j=j+a[i];
}
j=j/20;
printf("%d\n",j);
}
【题目6】编程:
任意输入10个数,判断该哪些是素数,并输出这些素数。
【题目7】以下程序是求二维数组中的最小数及其下标(设最小数是唯一的),请填空完成程序,并上机验证。
#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];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(min>a[i][j])
{
min=a[i][j];
row=i;
col=j;
}
printf("min=%d,row=%d,col=%d\n",min,row,col);
}
【题目8】以下程序是实现输出杨辉三角(最多十行),请将程序补充补充完整。
1
11
121
1331
14641
15101051
…
#defineN11
#include
voidmain()
{
inti,j,a[N][N];
for(i=1;i{
a[i][1]=1;
a[i][i]=1;
}
for(i=3;ifor(j=2;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i{
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
}
【题目9】从键盘上任意键入n阶方阵,求它的两条对角线元素之和。
【题目10】分析以下读程序,写的运行结果,并上机验证。
(?
#*&)
#include
voidmain()
{
charc,s[]="BABCDCBA";
intk;
for(k=1;(c=s[k])!
='\0';k++)
{
switch(c)
{
case'A':
putchar('?
');continue;
case'B':
++k;break;
default:
putchar('*');
case'C':
putchar('&');continue;
}
putchar('#');
}
putchar('\n');
}
【题目11】输入一串字符,计算其中字母的个数。
#include
#include
#defineN81
voidmain()
{
charch[N];
inti,count=0;
puts("请输入一串字符:
");
gets(ch);/*提示:
使用字符串输入函数*/
for(i=0;iif(ch[i]>='a'&&ch[i]<='z'||ch[i]>='A'&&ch[i]<='Z')
count++;
printf("字母个数为:
%d\n",count);
}
【题目12】编程:
输入一串字符,要求逆序输出。
#include"stdio.h"
voidreverse()
{
charch;
ch=getchar();
if(ch=='#')
printf("%c",ch);
else
{
reverse();
printf("%c",ch);
}
}
voidmain()
{
reverse();
printf("\n");
}
2.选择内容
【题目13】将两个字符串连接起来,不使用strcat字符函数
#include
#defineN80
voidmain()
{
chars1[2*N],s2[N];
inti=0,j=0;
printf("\n请输入两个字符串,以空格或回车键作字符串结束标志:
\n");
scanf("%s",&s1);
scanf("%s",&s2);
while(s1[i]!
='\0')
i++;
while(s2[j]!
=0)
s1[i++]=s2[j++];
s1[i]='\0';
printf("\n连接后的两个字符串为:
\n%s\n",s1);
}
【题目14】在字符串str中查找字符ch首次出现的位置,若str字符串中不包含字符ch,则输出0。
【题目15】有4位学生,考4门功课。
求出每位学生的总分和平均分,及所有学生每门功课平均分和所有功课的平均分。
#include
intmain()
{
inta[4][4];
ints[4]={0,0,0,0};
intb[4]={0,0,0,0};
intc[4];
intd=0,i,j;
printf("请分别输入四个学生的四科成绩:
");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
s[i]=s[i]+a[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
b[i]=b[i]+a[j][i];
}
c[i]=b[i]/4;
}
for(i=0;i<4;i++)
d=d+s[i];
d=d/4;
printf("每位学生的总分和平均分,所有学生每门功课平均分分别为:
");
for(i=0;i<4;i++)
{printf("%d",s[i]);}
printf("\n");
for(i=0;i<4;i++)
{printf("%d",s[i]/4);
}
printf("\n");
for(i=0;i<4;i++)
{
printf("%d",c[i]);
}
printf("\n");
printf("所有功课的平均分:
");
printf("%d\n",d);
}
【题目16】找出一个二维数组的”鞍点”,即该位置上的元素在该行上最大,在该列上最小,如无”鞍点”,则给出提示。
三、实验结果(用截图说明)
15题图:
四、调试心得(选作)
实验7函数实验
教学班级:
2学号:
姓名刘易培
实验日期:
__2014-04-09__实验地点:
___四教312___(机房)
实验成绩:
___________
一、实验目的
(1)理解函数定义的方法。
(2)掌握函数实参与形参的对应关系,以及函数”参数传递”的方式。
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法。
二、实验任务
1.基本内容
【题目1】以下程序是求3个数中的最大值,请完善程序并上机验证。
#include
voidmain()
{
inta,b,c,m;
intmax(intx,inty);/*函数声明*/
printf("inputa,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
m=max(a,b);
m=max(m,c);
printf("最大值是:
%d\n",m);
}
intmax(intx,inty)/*函数定义*/
{
intz;
z=(x>y)?
x:
y;/*如果x>y为真,那么把x的值赋给Z,否则把Y的值赋给Z。
*/
returnz;
}
【题目2】程序填空:
子函数中判断一个大于1的整数是否是素数,数据由主函数中输入,并在主函数中显示结果。
#include
voidmain()
{
intnumber;
printf("请输入一个正整数:
\n");
scanf("%d",&number);
if(prime(number)==0)
printf("\n%d是素数:
",number);
else
printf("\n%d不是素数:
",number);
}
intprime(intnumber)/*请注意区别main函数和prime函数中的number变量*/
{
intflag=1,n;
for(n=2;flag==1&&n<=number/2;n++)
if(number%n!
=0)
flag=0;
return(flag);
}
【题目3】读程序,验证结果。
#include
voidmain()
{
inti=2,p;
p=f(i,i+=1);
printf("%d\n",p);
}
intf(inta,intb)
{
intc;
if(a>b)
c=1;
elseif(a==b)
c=0;
else
c=-1;
return(c);
}(0)
①将程序中第4行语句:
p=f(i,i+=1);改为以下语句,比较程序结果:
(1)
p=f(i+=1,i);
②实践说明,函数的参数求值顺序是:
____(i+=1)先调用i的值,再执行i=i+1____________________
【题目4】编程在主函数中输入和输出字符串,在子函数中实现一个字符串按反序存放。
【题目5】用子函数计算4名学生的平均分。
标注“error”处有错误,请改正。
#include
#defineN4
floataverage(floatarray[])/*注意数据类型的一致*/
{
inti;floataver,sum=0;
for(i=0;isum+=array[i];
aver=sum/N;
return(aver);
}
voidmain()
{
floatscore[N],aver;
inti;
printf("\ninput%dscores:
\n",N);
for(i=0;iscanf("%f",&score[i]);
aver=average(score[N]);/*error*/(改为aver=average(score))
printf("\naveragescoreis%5.2f\n",aver);
}
【题目6】改正标注“error”语句行的错误,理解本程序的功能。
#include
voidmain()
{
inta[][3]={0,2,4,6,8,10,12,14,16},sum;
intfunc();/*函数声明*/
sum=func(a[][3]);/*error*/(改为sum=func(a[0]))数组名作为实参传递,传递的是数组起始地址)
printf("\nsum=%d\n",sum);
}
intfunc(inta[][])/*error*/(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;
}
【题目7】在主函数中定义数组A[3][4]、B[4],用子函数对数组A每一行求和,其值放在数组B中,在主函数中输出数组B的值。
【题目8】输入两个正整数,求其中最大公约数和最小公倍数。
将程序补充完整。
#include
intfun1(x,y)
{
inttemp;
if(x{
temp=x;
x=y;
y=temp;
}
while(y!
=0)
{
temp=x%y;
x=y;
y=temp;
}
returnx;
}
intfun2(x,y)
{
returnx*y/fun1(x,y);
}/*函数的嵌套调用*/
voidmain()
{
inta,b;
printf("请输入两个正整数:
\n");
scanf("%d,%d",&a,&b);
printf("它们的最大公约数为:
%d\n",________________);
printf("它们的最小公倍数为:
%d\n",________________);
}
【题目9】阅读以下程序,若输入为ABCDE#时,写出程序的执行结果。
(#EDCBA)
#include"stdio.h"
voidreverse()
{
charch;
ch=getchar();
if(ch=='#')
printf("%c",ch);
else
{
reverse();
printf("%c",ch);
}
}
voidmain()
{
reverse();
printf("\n");
}
【题目10】编程计算猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,只剩下一个桃子了,求第一天共摘了多少桃子?
【题目11】