计算机.docx
《计算机.docx》由会员分享,可在线阅读,更多相关《计算机.docx(25页珍藏版)》请在冰豆网上搜索。
![计算机.docx](https://file1.bdocx.com/fileroot1/2023-2/8/6d339681-f255-4c64-893e-babf68f7987f/6d339681-f255-4c64-893e-babf68f7987f1.gif)
计算机
第一章循环
1.1实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法。
1.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
1.3实验基本内容
1.3.1题目一
打印出以下图案
*
***
*****
*******
*****
***
*
(1)题目分析:
本题主要是用for循环来实现,通过for循环的嵌套,分别控制行数,空格以及*,把图形分成上下两部分来处理。
(2)程序:
#include
main()
{
inti,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=8-2*i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=1;i<=3;i++)
{
for(k=1;k<=2*i;k++)
printf("");
for(j=1;j<=7-2*i;j++)
printf("*");
printf("\n");
}
}
(3)运行结果:
1.3.2题目二
编写程序实现输入整数n,输出如下所示由数字组成的菱形。
(图中n=5)
1
121
12321
1234321
123454321
1234321
12321
121
1
(1)题目分析:
这个题也用到for循环的嵌套,通过逐项运算达到。
程序:
#include"stdio.h"
main()
{
inti,j,n;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
for(i=1;i<=j;i++)
printf("%d",i);
for(i=j-1;i>=1;i--)
printf("%d",i);
printf("\n");
}
for(j=n-1;j>=1;j--)
{
for(i=1;i<=j;i++)
printf("%d",i);
for(i=j-1;i>=1;i--)
printf("%d",i);
printf("\n");
}
return0;
}
}
(3)结果:
2思考题
1.以下不是死循环的语句是D。
A)for(y=1,x=9;x>++y;x=i++)i=x;
B)for(;;x++=i);
C)while
(1){x++;}
D)for(i=10;;i--)sum+=i;
2.下面程序段的运行结果是B。
x=y=0;
while(x<15)y++,x+=++y;
printf(“%d,%d”,y,x);
A)20,7B)6,12C)20,8D)8,20
3.以下for循环的执行次数是C。
for(x=0,y=0;(y=123)&&(x<4);x++);
A)无限循环B)循环次数不定C)4次D)3次
4.写出下面程序运行的结果。
2,0
main()
{inti,b,k=0;
for(i=1;i<=5;i++){
b=i%2;
while(b--==0)k++;
}
printf(“%d,%d”,k,b);
5.写出下面程序运行的结果。
8
main()
{inta,b;
for(a=1,b=1;a<=100;a++){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
printf(“%d\n”,a);
}
6.写出下面程序运行的结果。
36
main()
{intk=1,n=263;
do{k*=n%10;n/=10;}while(n);
printf(“%d\n”,k);
}
第二章数组
2.1实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法。
2.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
2.3实验基本内容
第二次实验数组
1编程
1.1打印以下图案:
*****
*****
*****
*****
*****
(1)题目分析:
这个题与第一次实验的编程一题类似,只要用for控制行数·空格和*,就可以了。
(2)程序
#include
main()
{
inti,j,k;
for(i=0;i<5;i++)
{
for(k=0;k<=2*i;k++)
printf("");
for(j=1;j<=5;j++)
printf("*");
printf("\n");
}
}
实验结果:
1.2输入4×4的数组,编写程序实现:
(1)求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积;
(3)找出对角线上其值最大的元素和它在数组中的位置。
程序
#include
voidmain()
{
inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
inti,j,m,n,Sum,Product,Max;
Sum=Max=m=n=0;
Product=1;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(i==j)
{
Sum+=a[i][j];
if((i+1)%2==0&&(j+1)%2==0)
Product*=a[i][j];
if(a[i][j]>Max)
{
Max=a[i][j];
m=i+1;
n=j+1;
}
}
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
printf("%d\t",a[i][j]);
if(j==3)
printf("\n");
}
printf("\n和:
%d\n积:
%d\n最大元素:
a[%d][%d]=%d\n",Sum,Product,m,n,Max);
}
实验结果:
2思考题
1.下面程序的输出结果是A。
main()
{charch[7]=”12ab56”;
inti,s=0;
for(i=0;ch[i]>’0’&&ch[i]<=’9’;i+=2)
s=10*s+ch[i]-‘0’;
printf(“%d\n”,s);
}
A)1B)1256C)12ab56D)ab
2.下面程序段的输出结果是B。
charc[5]={‘a’,’b’,’\0’,’c’,’\0’}
printf(“%s”,c);
A)’a’’b’B)abC)abcD)abc
3.mian()
{intm[][3]={1,4,7,2,5,8,3,6,9};
inti,j,k=2;
for(i=0;i<3;i++)
printf(“%d”,m[k][i]);
}
上程序输出的结果是:
C
A)456B)258C)369D)789
4.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为__C____.
(假设a[0][0]位于数组的第一个位置上。
)
a)i*m+jb)j*m+ic)i*m+j-1d)i*m+j+1
5.当运行下面程序时,从键盘上输入748915↙,则写出下面程序的运行结果。
main()
{inta[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--){
k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
第三章函数
3.1实验目的
(1)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
(5)学习对多文件程序的编译和运行。
3.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
3.3实验基本内容
1编程
1.1写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。
如输入1990,应输出“1└┘9└┘9└┘0”。
(1)题目分析:
这个题主要是通过摸运算,除法运算把一个四位数各个位数分开。
(2)程序:
#include
main()
{
intx,i,j,k,l;
scanf("%d",&x);
if(x>999&&x<10000)
{
i=x/1000;
j=(x/100)%10;
k=(x%100)/10;
l=x%10;
printf("%d%d%d%d",i,j,k,l);
}
}
(3)运行结果:
输入1990后的截图为:
1.2用递归法将一个整数n转换成字符串。
例如,输入483,应输出字符串“483”。
n的位数不确定,可以是任意位数的整数。
(1)题目分析:
输入的数的范围在0~255,输出的是字符,超过这个就是原样输出了。
(2)程序:
#include
voidmain()
{
voidexchange(intn);
intn;
printf("输入一个整数\n\n");
scanf("%d",&n);
printf("输出是:
\n\n");
if(n<0)
{
putchar('-');
n=-n;
}
exchange(n);
printf("\n\n");
}
voidexchange(intn)
{
inti;
if((i=n/10)!
=0)exchange(i);
putchar(n%10+'0');
}
(3)运行结果
2思考题
1.fun(inta,intb)
{if(a>b)return(a);
elsereturn(b);
}
main()
{intx=3,y=8,z=6,r;
r=fun(fun(x,y),2*z);
printf(“%\d\n”,r);
}
程序运行后的输出结果是D
A)3B)6C)8D)12
2.以下不正确的说法是D。
A)全局变量,静态变量的初值是在编译时指定的
B)静态变量如果没有指定初值,则其初值为0
C)局部变量如果没有指定初值,则其初值不确定
D)函数中的静态变量在函数每次调用时,都会重新设置初值
3.写出下面程序的运行结果。
#defineMAX10
inta[MAX],i;
sub1()
{for(i=0;i}
sub2()
{inta[MAX],i,max;
max=5;
for(i=0;i}
sub3(inta[])
{inti;
for(i=0;iprintf(“\n”);
}
main()
{sub1();sub3(a);sub2();sub3(a);
}
4.若输入的值是-125,写出下面程序的运行结果。
#include
fun(intn)
{intk,r;
for(k=2;k<=sqrt(n);k++){
r=n%k;
while(!
r){
printf(“%d”,k);n=n/k;
if(n>1)printf(“*”);
r=n%k;
}
}
if(n!
=1)printf(“%d\n”,n);
}
main()
{intn;
scanf(“%d”,&n);
printf(“%d=”,n);
if(n<0)printf(“-”);
n=fabs(n);fun(n);
}
5.写出下面程序的运行结果。
inti=0;
fun1(inti)
{i=(i%i)*(i*i)/(2*i)+4;
printf(“i=%d\n”,i);
return(i);
}
fun2(inti)
{i=i<=2?
5:
0;
return(i);
}
main()
{inti=5;
fun2(i/2);printf(“i=%d\n”,i);
fun2(i=i/2);printf(“i=%d\n”,i);
fun2(i/2);printf(“i=%d\n”,i);
fun1(i/2);printf(“i=%d\n”,i);
}
6.写出下面程序的功能。
func(intn)
{inti,j,k;
i=n/100;j=n/10-i*10;k=n%10;
if(i*100+j*10+k)==i*i*i+j*j*j+k*k*k)returnn;
return0;
}
main()
{intn,k;
for(n=100;n<1000;n++)
if(k=func(n))printf(“%d”,k);
}
功能是:
找出一个三位数,使它各位数的3次方的和等于这个数。
第四章指针
4.1实验目的
(1)掌握指针的概念,掌握定义和使用指针变量的方法。
(2)掌握使用数组的指针和指向数组的指针变量。
(3)掌握使用字符串的指针和指向字符串的指针变量。
(4)学习对多文件程序的编译和运行。
4.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
4.3实验基本内容
1编程
1.1编一程序,输入月份号,输出该月的英文月名。
例如,输入“3”,则输出“March”,要求用指针数组处理。
(1)题目分析:
这道题通过指针数组完成,把输入的月份对应的找到它的地址,然后输出。
(2)程序:
#include
voidmain(){
intn;
char*name[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
scanf("%d",&n);
printf("%s\n",name[n+1]);
}
(3)运行结果
1.2有一字符串,包含n个字符。
写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
(1)程序:
#include
#include
#include
intstr(char*str1,char*str2,intn,intm)
{
char*p;
p=&str1[m-1];
if(m>n)
{
str2[0]='\0';
return1;
}
do
{
*str2++=*p++;
}
while(*p!
='\0');
*str2='\0';
return1;
}
intmain()
{
chara[9]="abcdefsf",b[80];
str(a,b,8,3);
printf("%s\n",b);
system("pause");
return0;
}
(2)运行结果
2思考题
1.若要对a进行自减运算,则a应有下面说明A。
A)intp[3];B)intk;C)char*a[3]D)intb[10];
int*a=p;int*a=&k;int*a=b+1;
2.以下选项中,对指针变量p的不正确操作是C。
A)inta[3],*p;B)inta[5],*p;C)inta[5];D)inta[5]
p=&a;p=a;int*p=a=100;int*p1,*p2=a;
*p1=*p2;
3.下面程序段的输出是C。
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;
for(k=01k<4;k++)q[k]=&a[k*3];
printf(“%d\n”,q[3][0]);
A)8B)16C)20D)输出不合法
4.下面程序的运行结果是B。
main()
{intx[5]={2,4,6,8,10},*p,**pp;
p=x,pp=&p;
printf(“%d”,*(p++));
printf(“%3d”,**pp);
}
A)44B)24C)22D)465.写出下面程序的运行结果。
5
func(char*s,chara,intn)
{intj;
*s=a;j=n;
while(*s
returnj;
}
main()
{charc[6];
inti;
for(i=1;i<=5;i++)*(c+1)=’A’+i+1;
printf(“%d\n”,fun(c,’E’,5));
}
第五章综合练习
5.1实验目的
(1)掌握指针的概念,掌握定义和使用指针变量的方法。
(2)掌握使用数组的指针和指向数组的指针变量。
(3)掌握使用字符串的指针和指向字符串的指针变量。
(4)学习对多文件程序的编译和运行。
5.2实验要求
(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
5.3实验基本内容
1编程
1.1编写一个程序计算下式之和。
1+(1+2)+(1+2+3)+(1+2+3+4)+…...+(1+2+3+4+5+6+7+8+9+10)
(1)题目分析:
(3)程序:
#include
main()
{
inti,j;
intsum=0;
for(i=1;i<=10;i++)
{
for(j=1;j<=i;j++)
sum+=j;
}
printf("%d",sum);
}
(3)运行结果
1.2在主函数中输入一个字符串,然后删除该字符串里面所有的空格,并打印删除空格后的字符串。
(用指针)
(1)程序:
#include
#include
#include
char*fun(char*str)
{
inti=0;
intj=0;
for(;i {
if(str[i]!
='')
{
str[j++]=str[i];
}
}
str[j]='\0';
returnstr;
}
voidmain()
{
chars[81],*ds;
printf("\nPleaseenterastring:
");
gets(s);
ds=fun(s);
printf("\nResult:
%s\n",ds);
}
(3)运行结果
2.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是B。
A)c=*p1+*p2B)p2=cC)p1=p2D)c=*p1*(*p2)
3.若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是A。
A)(*p)max(a,b)B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);
4.写出下面程序的运行结果:
6
fun(char*s)
{char*p=s;
while(*p)p++;
return(p-s);
}
main()
{char*a=”abcdef”;
printf(“%d\n”,fun(a));
}
5.当运行以下程序时,写出输入6↙的程序运行结果。
:
976531
sub(char*a,charb)
{while(*(a++)!
=’\0’);
while(*(a-1)
*(a--)=*(a-1);
*(a--)=b;
}
main()
{chars[]=”97531”,c;
c=getchar();
fun(s,c);puts(s);
}