C语言程序设计应用第八章习题答案

合集下载

C++程序设计习题答案第八章

C++程序设计习题答案第八章

第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。

(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。

如果强制转换则要注意(6)。

答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。

公有派生可以使其类的(4),所以公有派生是主流。

答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.3 利用继承能够实现(1)。

这种实现缩短了程序开发的时间,VC++中的(2)很好地体现了这一点。

答案:(1)代码的复用(2)MFC编程8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。

继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。

答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.5 C++中多态性包括两种多态性:(1)和(2)。

前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。

答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。

如有任何不同,则认为是(5)而不是虚函数。

除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。

答案:(1)同虚函数名(2)同参数表(3)同返回类型。

如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。

C语言程序设计课后各章节习题答案

C语言程序设计课后各章节习题答案
答include"math.h"
main()
{
float x,y,d;
printf("Input x,y:");
scanf("%f,%f",&x,&y);
d=sqrt((x-2)*(x-2)+(y-2)*(y-2));
if(d>1)printf(ntf("inside");
}
12有一函数
x-1 -5<x<0
y= x x=0
x+1 0<x<8
编写一程序,要求输入x的值,输出y的值。分别用不嵌套的if语句,嵌套的if语句,switch语句编写。
答使用不嵌套的if语句程序如下:
main()
{
int x,y;
printf("Input x:");
scanf("%d",&x);
答main()
{
int x,a,b,c;
printf("Input number:");
scanf("%d",&x);
a=x/100;/*变量a中记录x的百倍数字*/
b=x/10%10;/*变量b中记录x的十位数字*/
c=x%10;/*变量c中记录x的个位数字*/
if(a*a*a+b*b*b+c*c*c==x)
if(m==2)
d=28+f;
else
d=31-(m==4)+(m==6)+(m==9)+(m==11);
printf("%d-%d is %d days.\n",y,m,d);

C++程序设计基础课后答案 第八章

C++程序设计基础课后答案  第八章

8.1 阅读下列程序,写出执行结果1.#include <iostream.h>class Bclass{ public:Bclass( int i, int j ) { x = i; y = j; }virtual int fun() { return 0 ; }protected:int x, y ;};class Iclass:public Bclass{ public :Iclass(int i, int j, int k):Bclass(i, j) { z = k; }int fun() { return ( x + y + z ) / 3; } private :int z ;};void main(){ Iclass obj( 2, 4, 10 );Bclass p1 = obj;cout << p1.fun() << endl;Bclass & p2 = obj ;cout << p2.fun() << endl;cout << p2.Bclass :: fun() << endl;Bclass *p3 = &obj;cout << p3 -> fun() << endl;}2.#include <iostream.h>class Base{ public:virtual void getxy( int i,int j = 0 ) { x = i; y = j; }virtual void fun() = 0 ;protected:int x , y;};class A: public Base{ public:void fun(){ cout<<"x = "<<x<<'\t'<<"y = x * x = "<<x*x<<endl; } };class B:public Base{ public:void fun(){ cout << "x = " << x << '\t' << "y = " << y << endl;cout << "y = x / y = " << x / y << endl;}};void main(){ Base * pb;A obj1;B obj2;pb = &obj1;pb -> getxy( 10 );pb -> fun();pb = &obj2;pb -> getxy( 100, 20 );pb -> fun();}8.2 思考题1.在C++中,使用类体系依靠什么机制实现程序运行时的多态?2.如果一个基类的虚函数被声明为私有成员函数,会有语法错误吗?可以在应用类体系时实现动态联编吗?请你验证一下。

C语言程序设计及实验指导练习及习题参考答案(8--10)

C语言程序设计及实验指导练习及习题参考答案(8--10)

C语言程序设计及实验指导练习及习题参考答案(8--10) 8练习参考答案1、练习8-1.如果有定义:intm,n=5,某p=&m;与m=n等价的语句是BA.m=某p;B.某p=某&n;C.m=&n;D.m=某某p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数um_diff(floatop1,floatop2,float某pum,float某pdiff),其中op1和op2是输入的两个数,某pum和某pdiff是计算得出的和与差。

解答:#includeintmain(void){floatop1,op2,um,diff;voidum_diff(floatop1,floatop2,float某pum,float某pdiff);printf(“inputop1andop2:“);canf(“%f%f”,&op1,&op2);um_d iff(op1,op2,&um,&diff);printf(“%f+%f=%f;%f-%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}voidum_diff(floatop1,floatop2,float某pum,float某pdiff){某pum=op1+op2;某pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:不能。

因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。

8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。

请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。

解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。

C语言程序设计8章

C语言程序设计8章

C语言程序设计8章《C语言程序设计》课程练习8章函数一、判断题1. 在函数定义中,形参变量有时也可以是全局变量。

( )√ ×正确2. 在C程序中,函数调用可以作为函数的形参。

√ ×正确3. 在C程序中,函数调用可以作为函数的实参。

√ ×正确4. 在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是指针类型。

√ ×正确5. 对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。

()√ ×正确6. C语言程序必须包含库函数。

()√ ×正确7. 如果被定义函数的返回值是整型,可以不必进行说明。

()√ ×正确8. 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量。

()√ ×正确9. return语句可以带有表达式也可以不带。

()√ ×正确10. 若某自定义函数中无return语句,则该函数一定没有返回值。

√ ×正确11. 在C语言中,变量的初始化都是在编译阶段完成的。

√ ×正确12. 在同一源文件中,全局变量与局部变量同名,在局部变量作用范围内,全局变量的值等于局部变量的值。

√ ×正确13. return语句作为函数的出口,在某一个函数体内必须唯一。

()√ ×正确14. C语言程序必须包含库函数。

()√ ×正确15. C语言中,任意两个函数间不能嵌套定义,但可以互相调用。

()√ ×正确16. 在函数的定义中,若函数没有参数,则可以省略函数名后的括号。

√ ×正确17. 函数返回值的数据类型取决于return语句中表达式的数据类型。

√ ×正确18. 函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。

√ ×正确19. 函数返回值的数据类型取决于函数定义时为函数指定的数据类型。

c语言第八章字符串编程答案

c语言第八章字符串编程答案

can be used to determine if it is a particular group&#39;s turn to go (who do you think names the comets?). The details of the matching scheme are given below; your job is to write a program which takes the names of a group and a comet and then determines whether the group should go with the UFO behind that comet.
355729288 输出样例:
10355618176
#include&lt;stdio.h&gt; #include&lt;string.h&gt; int main() { char str1[26],str2[26]; int s[27]; int i,min,max,t,n=0,a; gets(str1); gets(str2); for(i=0; i&lt;strlen(str1)/2+1; i++) if(i&lt;strlen(str1)-1-i) { t=str1[i]; str1[i]=str1[strlen(str1)-1-i]; str1[strlen(str1)-1-i]=t; } for(i=0; i&lt;strlen(str2)/2+1; i++) if(i&lt;strlen(str2)-1-i) { t=str2[i]; str2[i]=str2[strlen(str2)-1-i]; str2[strlen(str2)-1-i]=t; } if(strlen(str1)&gt;strlen(str2)) { max=strlen(str1); min=strlen(str2); for(i=min; i&lt;max; i++) str2[i]=&#39;0&#39;; str2[max]=&#39;\0&#39;; s[0]=0; for(i=0; i&lt;max; i++) { a=(str1[i]-&#39;0&#39;)+(str2[i]-&#39;0&#39;)+s[i]; s[i]=((str1[i]-&#39;0&#39;)+(str2[i]-&#39;0&#39;)+s[i])%10; s[i+1]=a/10; n++; } } else

C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案

C语言第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#include <stdio.h>void main(){ int a,b,num1,num2,temp;printf("请输入两个正整数:\n");scanf("%d,%d",&num1,&num2);if(num1<num2){temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf("它们的最大公约数为:%d\n",a);printf("它们的最小公倍数为:%d\n",num1*num2/a);}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数. 解:#include <stdio.h>void main(){char c;int letters=0,space=0,degit=0,other=0;printf("请输入一行字符:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z' || c>'A'&&c<='Z')letters++;else if(c==' ')space++;else if(c>='0'&&c<='9')digit++;elseother++;}printf("其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%d\n",letters,space, digit,other);}6.3求s(n)=a+aa+aaa+…+aa…a之值,其中a是一个数字,n表示a的位数。

《C语言程序设计(何钦铭 颜晖 主编)》习题8答案

#include<stdlib.h>
intmain(void)
{
inti,j,a,n,sum,average;
int*p;
printf("Enter n:");
scanf("%d",&n);
if((p=(int*)calloc(n,sizeof(int)))==NULL){
printf("Not able to allocate memory.\n");
else if(m==0)
printf("str1=str2\n");
else
printf("str1<str2\n");
return 0;
}
intstrcomp(char s1[80],char s2[80])
{
inta;
if(strcmp(s1,s2)>0)
a=1;
else if(strcmp(s1,s2)==0)
break;
}
}
void swap2(int*px,int*py)
{
intt;
t=*px;
*px=*py;
*py=t;
}
第五题
#include<stdio.h>
#include<string.h>
voidmcopy(char *s,intm);
intmain(void)
{
inti,m,l;
charstr[100];
}
第二题
#include<stdio.h>
intmain(void)
{
inta[10];

c程序设计第四版(谭浩强)第八章答案

#include<stdio.h>#include<stdlib。

h>#include〈string。

h>#include<math。

h>/*int main(){int *p1,*p2,*p3,*t,a,b,c;printf("enter three number:");scanf(”%d %d %d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(a〉b){t=p1;p1=p2;p2=t;}if(a>c){t=p1;p1=p3;p3=t;}if(b>c){t=p2;p2=p3;p3=t;}printf("sort number:%d %d %d\n”,*p1,*p2,*p3);}*//*#define N 20int main(){char *p1,*p2,*p3,*t,a[N],b[N],c[N];printf("enter three strings:”);scanf("%s %s %s",a,b,c);p1=a;p2=b;p3=c;if(strcmp(a,b)〉0){t=p1;p1=p2;p2=t;}if(strcmp(a,c)>0){t=p1;p1=p3;p3=t;}if(strcmp(b,c)〉0){t=p2;p2=p3;p3=t;}printf(”sort string:%s %s %s\n",p1,p2,p3);}*//*void input(int *p){int i;printf("enter 10 number:");for(i=0;i〈10;i++)scanf("%d",p+i);void output(int *p){int i;printf("new 10 number:");for(i=0;i<10;i++)printf("%-2d”,*(p+i));}void sort(int *p,int n){int i,t;for(i=0;i<n—1;i++){if(*(p+i)〉*(p+i+1)){t=*(p+i);*(p+i)=*(p+i+1);*(p+i+1)=t;}}for(i=n—2;i>0;i--){if(*(p+i-1)>*(p+i)){t=*(p+i);*(p+i)=*(p+i-1);*(p+i-1)=t;} }}int main(){int a[10],*p=a;input(p);sort(p,10);output(p);putchar(’\n');}*//*#define N 10void houyi(int *p,int m){int i,b[N]={0};for(i=0;i<N—m;i++)b[i+m]=*(p+i);for(;i〈N;i++)b[i—N+m]=*(p+i);for(i=0;i<N;i++)printf(”%3d”,b[i]);}int main()int a[N],i,m,*p=a;printf("enter number:");for(i=0;i〈N;i++)scanf("%d”,&a[i]);printf("enter m:");scanf("%d”,&m);printf("new number:”);houyi(p,m);putchar('\n');}*//*int main(){int count(int *p,int n);int n,*p,i;printf("enter number:");scanf(”%d”,&n);p=(int *)calloc(n,sizeof(int));for(i=0;i〈n;i++)*(p+i)=0;printf("the last number is %d\n",count(p,n)+1);free(p);}int count(int *p,int n){int i,j=1,k=0;for(i=0;i<n;i++){if(*(p+i)!=3){*(p+i)=j;if(*(p+i)==3)j=1;//数到3时将下一个重置为1elsej+=1;if(i==(n-1))i=-1; //轮到到最后一个人报数时,将i重置为-1,执行完for语句后自动加一变为0,从头开始k+=1; //报完一个数后加一}else{if(i==(n-1))i=—1; //检查到最后一个人是3时,将i重置为—1,执行完for语句后自动加一变为0,从头开始continue;//检查到这个人是3时,跳过报数}if(k==3*(n—1)) //报数的总个数达到3*(n—1)时,就只剩一个人了break;elsecontinue;}for(i=0;i〈n;i++)if(*(p+i)==3)continue;else return i;}*//*#define N 20int length(char *p){int n=0;while(*p!=0){p++;n+=1;}return n;}int main(){char a[N],*p=a;printf(”enter string:");gets(a);printf(”字符串长度为:%d\n”,length(p));}*//*#define N 10int main(){void copyn(char *p,int m);char *p=”abcdefghij”;int m;printf("%s\nenter m:",p);scanf(”%d",&m);copyn(p,m);}void copyn(char *p,int m){char b[N],i;for(i=m—1;*(p+i);i++)b[i—m+1]=*(p+i);b[i-m+1]='\0';printf("%s\n”,b);}*//*#define N 50void count(char *p){int d=0,x=0,k=0,s=0,o=0;while(*p)//不能写*(p++),否则计算出错,无法计算第一个字符{if(*p>='a'&&*p<='z’)x+=1;else if(*p>='A'&&*p〈='Z')d+=1;else if(*p>=’0'&&*p〈='9')s+=1;else if(*p==' ')k+=1;else o+=1;p++;}printf(”大写字母:%d\n小写字母:%d\n空格:%d\n数字:%d\n其他:%d\n",d,x,k,s,o);}int main(){char a[N],*p=a;printf("enter string:”);gets(a);count(p);}*//*void zhuangzhi(int (*p)[3]){int i,j,t;for(i=0;i<3;i++)for(j=0;j<3;j++)if(i<j){t=*(*(p+i)+j);//*(*(p+i)+j)代表a[i][j]*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=t;}}int main(){int (*p)[3],a[3][3],i,j;p=a;printf(”enter array:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d”,&a[i][j]);zhuangzhi(p);printf(”new array:\n”);for(i=0;i〈3;i++)for(j=0;j<3;j++){printf(”%-2d”,a[i][j]);if(j==2)putchar(’\n’);}}*//*void central(int (*p)[5]){int i,j,l=0,r=0,t; //r代表行,l代表列for(i=0;i〈5;i++)for(j=0;j〈5;j++)if(*(*(p+i)+j)〉*(*(p+r)+l)){r=i;l=j;}t=*(*(p+2)+2);*(*(p+2)+2)=*(*(p+r)+l);*(*(p+r)+l)=t;//最大元素放在中心l=0;r=0;for(i=0;i〈5;i++)//四个角放最小元素,每次从第二个元素开始对比for(j=1;j<5;j++)if(*(*(p+i)+j)〈*(*(p+r)+l)){r=i;l=j;//找出最小元素}t=*(*p);*(*p)=*(*(p+r)+l);*(*(p+r)+l)=t;//将最小元素与左上角元素交换,下同l=4;r=0;//换完重置r和l,下同for(i=0;i<5;i++)for(j=1;j<5;j++)if(*(*(p+r)+l)〉*(*(p+i)+j)){r=i;l=j;}t=*(*p+4);*(*p+4)=*(*(p+r)+l);*(*(p+r)+l)=t;r=4;l=0;for(i=0;i〈5;i++)for(j=1;j<5;j++)if(i==0&&j==4) //遇到右上角,跳过对比continue;else if(*(*(p+r)+l)〉*(*(p+i)+j)){r=i;l=j;}t=*(*(p+4));*(*(p+4))=*(*(p+r)+l);*(*(p+r)+l)=t;r=4;l=4;for(i=0;i〈5;i++)for(j=1;j〈5;j++)if(i==0&&j==4||i==4&&j==0)//遇到右上角和左下角,跳过对比continue;else if(*(*(p+r)+l)>*(*(p+i)+j)){r=i;l=j;}t=*(*(p+4)+4);*(*(p+4)+4)=*(*(p+r)+l);*(*(p+r)+l)=t;}int main(){int a[5][5],(*p)[5]=a,i,j;printf("enter array:\n”);for(i=0;i〈5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);central(p);printf(”new array:\n");for(i=0;i<5;i++){for(j=0;j〈5;j++)printf("%—3d”,*(*(p+i)+j));putchar(’\n’);}}*//*void sort(char *p[],int n) //指针数组处理{int i,j;char *k;for(i=1;i<n;i++)for(j=i;j〈n;j++)if(strcmp(p[i—1],p[j])〉0){k=p[i-1];p[i—1]=p[j];p[j]=k;}}int main(){char *p[10]={"gutsy","glory”,”gonad”,”girth","gaudy”,”gypsy",”gusto",”guppy”,"group","grope"}; //测试数据gutsy glory gonad girth gaudy gypsy gusto guppy group gropeint i;printf(”enter strings:");for(i=0;i<10;i++)printf(”%s ",p[i]);sort(p,10);printf("\nnew strings:”);for(i=0;i〈10;i++)printf(”%s ",p[i]);putchar(’\n’);}*//*#define N 20void sort(char *p,int n)//指针处理{int i,j;char k[N];for(i=1;i<n;i++)for(j=i;j<n;j++)if(strcmp(p+20*(i—1),p+20*j)〉0) //不能写为p+i—1,否则出错{strcpy(k,p+20*(i—1));strcpy(p+20*(i-1),p+20*j);strcpy(p+20*j,k);}}int main(){char a[10][N];char *p=a[0];//不能写为*p=a,这等价于是把行向量赋值给列向量int i;printf("enter strings:\n”);for(i=0;i<10;i++)scanf("%s”,&a[i]);//可写为gets(a[i]),这样写的话,每次输入字符串后按enter,或写为scanf(”%s",&a[i]),每输一个字符后按空格即可;sort(p,10);printf("new strings:\n");for(i=0;i<10;i++)printf(”%s ",a[i]);putchar(’\n');}*//*#define n 1000 //矩形法求定积分,n为区间分割数目double ding(double a,double b,double (*fun)(double)){double s=0;int i;for(i=1;i〈n;i++)s+=(*fun)(i*(b-a)/n);return s*=(b-a)/n;}int main(){double a,b,s1,s2,s3; //定义积分下限,上限,用double精度较高printf("输入积分下限,上限,分割区间数目:”);scanf("%lf %lf",&a,&b);s1=ding(a,b,sin);s2=ding(a,b,cos);s3=ding(a,b,exp);printf("sin(x)从%f到%f的积分为%f\n”,a,b,s1);printf(”cos(x)从%f到%f的积分为%f\n”,a,b,s2);printf(”exp(x)从%f到%f的积分为%f\n",a,b,s3); }*//*#define N 10void nixu(int *p){int i,m=N/2,t;for(i=0;i<m;i++){t=*(p+i);*(p+i)=*(p+N—1-i);*(p+N—1-i)=t;}}int main(){int a[N],*p=a,i;printf(”enter %d numbers:\n",N);for(i=0;i〈N;i++)scanf(”%d",&a[i]);nixu(p);printf("new numbers:\n");for(i=0;i〈N;i++)printf(”%d ”,a[i]);putchar('\n');}*//*void average1(float (*p)[6],int n){int i;float ave=0;for(i=0;i〈n;i++)ave+=*(*(p+i)+1)/4;printf(”第一门课程的平均分为:%4.2f\n",ave);}float average(float (*p)[6]){int i;float ave=0;for(i=1;i〈6;i++)ave+=*(*p+i)/5;return ave;}void out(float (*p)[6],int n){int i,j,k,l,s=0;printf(”两门课以上不及格的学生:\n");for(i=0;i<n;i++){k=0;for(j=1;j〈6;j++){if(*(*(p+i)+j)<60)k+=1;else continue;}if(k〉=2){s=1;printf("%4。

(word完整版)C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1—8参考答案习题1参考答案一、简答题1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么?答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。

运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。

数据运算包括算术运算和逻辑运算。

控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的.存储器是计算机中具有记忆能力的部件,用来存放程序和数据.输入设备是用来输入程序和数据的部件。

输出设备正好与输入设备相反,是用来输出结果的部件。

2、简述计算机的工作原理。

答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。

整个过程由控制器进行控制。

3、计算机软件系统分为哪几类?答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。

系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。

这类软件一般与具体应用无关,是在系统一级上提供的服务。

系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。

另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。

在操作系统的基础上运行。

4、什么叫软件?说明软件与硬件之间的相互关系。

答:软件是指计算机程序及有关程序的技术文档资料。

两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。

在不太严格的情况下,认为程序就是软件。

硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作.在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

练习与思考 88.1 选择题(1)有以下定义及语句,则对数组a元素的不正确引用的表达式是()。

int a[4][5];*p[2],j;for (j = 0 ; j <4 ; j++)p[j]=a[j];A)p[0][0] B)*(a+3)[4]C)*(p[1]+2) D)*(&a[0][0]+3)(2) 有以下程序#include <stdio.h>struct tt{int x;struct tt *y;} *p;struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main(){ int i;p=a;for(i=1;i<=2;i++) {printf("%d,",p->x); p=p->y;}}程序的运行结果是()。

A)20,30, B)30,17 C)15,30, D)20,15,8.2 填空题(1) 以下程序段的输出结果是()。

#include <stdio.h>#define F(a,b) printf("%d,%d\n",a,b)void main(){int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};F(a,a[0]);F(*a,*(a+0));F(a[1],*(a+1));F(*a[1],**(a+1));F(*(a[1]+1),*(*(a+1)+1));F(*a,**a);}(2) 以下程序的运行时,输入i=1,j=2(回车)结果是()。

#include <stdio.h>void main(){int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int (*p)[4],i,j;p=a;scanf("i=%d,j=%d",&i,&j);printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));}(3) 以下程序运行后的输出结果是()。

struct NODE{ int k;struct NODE *link;};main(){ struct NODE m[5],*p=m,*q=m+4;int i=0;while(p!=q){p->k=++i; p++;q->k=i++; q--;}q->k=i;for(i=0;i<5;i++) printf("%d",m[i].k);printf("\n");}(4) 以下程序运行后的输出结果是()。

struct NODE{ int num; struct NODE *next;} ;main(){ struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}}, *p, *q, *r; int sum=0;s[0].next=s+1; s[1].next=s+2; s[2].next=s;p=s; q=p->next; r=q->next;sum+=q->next->num; sum+=r->next->next->num;printf("%d\n", sum);}(5) 以下程序的输出结果是()。

#include <stdio.h>main(){char *s1,*s2,m;s1=s2=(char*)malloc(sizeof(char));*s1=15;*s2=20;m=*s1+*s2;printf("%d\n",m);}8.3 编程题(1) 27人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号(用链表方式实现)。

8.4 简答题(1) 调试运行下列程序,并回答问题。

int max, n;main ( ){int a[4][4], j, k;for (j=0; j<4; j++)for (k=0; k<4; k++)scanf("%d" ,&a[j][k]);printf ("\n");for (j=0; j<4; j++)printf ("%d %d %d %d\n" ,a[j][0], a[j][1] , a[j][2], a[j][3] );maxgs(a,4);printf ("max=%d , count=%d\n" ,max,n );}maxgs(b,m)int b[][4], m;{int j, k;max =b[0][0];for (j=0; j<m; j++)for (k=0; k<m; k++)if (max<b[j][k] ) max=b[j][k];n=0;for (j=0; j<m; j++)for (k=0; k<m; k++)if (b[j][k])==max) n++;}请回答:(1)该程序的功能是什么?(2)变量max 和n 是什么类型的变量?它们在该程序中的作用是什么?(3)函数main和函数maxgs中均有变量j 和k,它们是什么类型的变量?它们之间有什么了解?(2) 调试运行下列程序,并回答问题。

#include "string.h"void change (char,cs[ ]){int j=0, k, temp;printf ( "\n Input a string:" );scanf ("%s" ,cs);while (cs[j] !='\0')j++;for (k=0; k<j/2; k++){temp=cs[k];cs[k]=cs[j-k-1];cs[j-k-1]=temp;}printf ("%s\n" ,cs);}void fc (fstr, fs1, fs2, fs3,fs4)char fstr[ ], fs1[ ], fs2[ ], fs3[ ], fs4[ ];{char string[20];static int r ;r=strcmp(fs1, fs2);strcpy (fstr, fs3) ;strcat (fstr, fs4) ;printf ("\nstrcat(s3, s4)=%s" ,fstr);if (r= =0) printf ("\ns1=s2");else printf ("\ns1!=s2");change(string);main ( ){char str[30], s1[10], s2[10];static char s3[ ]="language1";static char s4[ ]="language2";printf ( "\n Input s1, s2:" );scanf("%s%s",s1,s2);fc(str, s1, s2, s3, s4);}请回答:(1)程序中属于“位置传递”的参数是哪些?(2)字符数组string的作用域在哪里?(3)变量r 的生存期是什么?(4)若将数组str[30] 定义为str[15]将会出现什么情况?(5)本程序的功能是什么?8.5 思考题(1)试分析下列程序的运行结果,并回答:变量i分别在两个程序中的作用。

程序1文档供参考,可复制、编制,期待您的好评与关注!main ( ){int i;void prt1( );for (i=0;i<5;i++)prt1();}void prt1( ){int i;void prt2( );for (i=0;i<5;i++)prt2( );printf("\n");}void prt2( ){printf("%c",'*');}程序2int i;main ( ){void prt1( );for (i=0;i<5;i++)prt1();}void prt1( ){void prt2( );for (i=0;i<5;i++)prt2( );printf("\n");}void prt2( ){printf("%c",'*');}参考答案:8.1选择题答案(1)C (2)D8.2 填空题答案(1)答案1245008,12450081245008,12450081245024,12450245,56,61245008,1(2)答案:a[1][2]=7;(3)答案:13431(4)答案:5(5)答案:408.3 编程题:1.参考答案#include <stdio.h>void main(){int i,k,m,n,num[50],*p;printf("请输入人数数量:");scanf("%d",&n);p=num;for(i=0;i<n;i++)*(p+i)=i+1; //以1至17为序给每个人编号i=0; //i为每次循环时的计数变量k=0; //k为按1,2,3报数时的计数变量m=0; //m为退出人数while(m<n-1)//当循环体人数比n-1少时(即未退出人数大于1时)执行循环体{if(*(p+i)!=0)k++;if(k==3)//对退出的人的编号置0{*(p+i)=0;k=0;m++;}i++;if(i==n)//报数到尾后,i恢复0i=0;}while(*p==0)p++;printf("最后留下来的第%d个人\n",*p);}8.4 答案:1.参考答案:(1)求4*4的二维数组的最大值;(2)max和n 均为整形变量;max 的作用是记录二维数组中的最大值,n的作用是记录数组中最大值的个数;(3)均为int类型;它们之间没有了解;2.参考答案:(1)s1、s2、s3、s4均属位置传递;(2)在函数fc()内;(3)整个程序运行期间为变量r的生存周期,因为其是静态变量;(4)将会出现溢出的情况;(5)连接两个字符串,将两个字符串合并成一个;8.5 分析题1. 参考答案:在程序1中:i是一个局部变量,只在定义它的函数内有效,因此,在此函数内i值改变时,并不改变其他函数内的i值;每个函数内的i值控制每次输出五个星号。

相关文档
最新文档