C语言程序设计苏小红版答案解析 .

以下程序的输出结果是 【 11 】 。

#include <stdio.h>

int fun(int x)

{ static int t=0;

return(t+=x);

}

main()

{ int s,i;

for(i=1;i<=5;i++) s=fun(i);

printf("%d\n",s);

}


正确答案:


有以下程序

#include <stdio.h>

#define f(x) x*x*x

main()

{ int a=3,s,t;

s=f(a+1);t=f((a+1));

printf("%d,%d\n",s,t);

}

程序运行后的输出结果是

A)10,64

B)10,10

C)64,10

D)64,64


正确答案:A


有以下程序:struct s{ int x,y; }data[2]={10,100,20,200};main(){ struct s *p=data;printf("%d\n",(++p)->x);}程序运行后的输出结果是( )。A.10 B.11 C.20 D.21


正确答案:C
结构体;struct s *p=data; 使p指向data的首地址,而++p->x,先使p指向下一位即20,然后输出其值。


阅读下列程序说明和C++代码,将应填入(n)处。

【说明】

“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。

【程序4.1】

include<stdio.h>

define N 7

define S 15

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s,int n)

{ if(s==0)return 1;

if(s<0||(s>0& &n<1))return 0;

if((1)))|

printf("%4d",w[n]);return 1;

} return (2);

}

main(){

if(knap(S,N))printf("OK!\n");

else printf("NO!\n");

}

【程序4.2】

include<stdio.h>

define N 7

define S 15

typedef struct{

int s;

int n:

int job;

} KNAPTP;

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s,int n);

main(){

if(knap(S,N))printf("OK!\n");

else printf("NO!\n");}

int knap(int s,int n)

{ KNAPTP stack[100],x;

int top,k,rep;

x.s=s;x.n=n;

x.job=0;

top=|;Stack[top]=x;

k=0;

while((3)){

x=Stack[top];

rep=1;

while(!k && rep){

if(x.s==0)k=1;/*已求得一组解*/

else if(x.s<0||x.n <=0)rep=0;

else{x.s=(4);x.job=1;

(5)=x;

}

}

if(!k){

rep=1;

while(top>=1&&rep){

x=stack[top--];

if(x.job==1){

x.s+=W[x.n+1];

x.job=2;

Stack[++top]=x;

(6);

}

}

}

}

if(k){/*输出一组解*/

while(top>=1){

x=staCk[top--];

if(x.job==1)

printf("%d\t",w[x.n+1]);

}

}

return k;

}


正确答案:(1)knap(s-w[n]n-1)(2)knap(sn-1)(3)top>=1 && ! k 或 top>0 && k==0(4)x.s-w[x.n--](5)stack[++top](6)rep=0
(1)knap(s-w[n],n-1)(2)knap(s,n-1)(3)top>=1 && ! k 或 top>0 && k==0(4)x.s-w[x.n--](5)stack[++top](6)rep=0 解析:试题提供了两种解决问题的方法,程序5.1是用递归的方法来解决背包问题,程序5.2使用非递归的方法来解决背包问题。每次选择一个物品放入背包,那么剩余的物品和背包剩余的重量,又构成一个“背包问题”。程序从数组下标最大的物品开始考查,因此(1)处应该填“knap(s-w[n],n-1)”,即将数组中第N个物品放入背包,如果它能够放入到背包中,则该物品是构成解的元素之一;否则,将该物品从背包中取出,该物品不构成解的元素,在以后的考查中,它可以被排除,因此(2)处应该填“knap(s,n-1)”。在改程序中用栈来保存已经考查过的物品,结构KNAPTP表示经过考查的物品,s表示考查过该物品后背包所能够盛放的物品的重量;n表示该物品在数组W中的下标;job表示物品当前的状态:当job等于1,表示物品n可以放入背包; job等于2表示物品n不能被放入到背包,那么在以后的选取中将不再考虑该物品。初始时job等于0,表示背包中没有任何放入任何物品。 K为有解的标志。Rep为一个标志变量,rep等于0,表示结束当前的动作;rep等于1表示继续进行当前的动作。当栈顶物品不能放入背包时,将rep设置为0,表示下一步不从数组w中取物品。其初值为1。开始时,将数组中下标最大的物品放入栈中,然后开始考查该物品。该物品满足放入背包的条件,第(4)(5)空将完成将物品放入背包的操作,因此(4)空填“x.s-w[x.n--]”,修改背包的可容纳物品的重量; (5)处填"stack[++top]",将下一个要考查的物品放入栈中。若该物品不满足放入背包的条件,则将该物品从背包中取出,因此将rep置为 0,结束循环while(! k&&rep)。将物品从背包中取出,即释放该物品在背包中所占的重量,并标记为不能放入到背包(job=2),再将其放入到栈中;然后继续考查数组w中的下一个物品,因此需要结束循环while (top>=1 &&rep),将rep置为0,所以第(6)处应该填“rep=0”。在第三处要求给出循环结束的条件,即可以继续选取物品的条件,在此处填“top>=1&&!k”。


下面程序段的输出结果是()。includemain(){float x=1.236547;printf("%f\n",(int)(x*10

下面程序段的输出结果是( )。 #include<stdio.h> main() {float x=1.236547; printf("%f\n",(int)(x*1000+0.5)/(float)1000); }

A.1.237000

B.输出格式说明与输出项不匹配,输出无定值

C.1.236000

D.1.24


正确答案:A


完美WORD格式 2.2 #includemain()float x=2.5,y=2.5,z=2.5;printf(x=%fn,x);printf(y=%fn,y);printf(z=%fn,z);3.1(1) #includemain()int a=12,b=3;float x=18.5,y=4.6;printf(%dn,(float)(a*b)/2);printf(%dn,(int)x%(int)y);3.2 #includemain()int x,b0,b1,b2,s;printf(Inputx:);scanf(%d,&x);b2=x/100;b1=(x-b2*100)/10;b0=x%10;s=b0*100+b1*10+b2;printf(s=%dn,s);3.3 #include#includemain()float rate=0.0225;float n,capital,deposit;printf(Input n,capital:);scanf(%f,%f,&n,&capital);deposit=capital*pow(1+rate,n);printf(deposit=%fn,deposit);3.4 #include#includemain()float a,b,c;double x,y;printf(Inputa,b,c:);scanf(%f,%f,%f,&a,&b,&c);x=(-b+sqrt(b*b-4*a*c)/(2*a);y=(-b-sqrt(b*b-4*a*c)/(2*a);printf(x=%f,y=%fn,x,y);4.1(1) #includemain()char c1=a,c2=b,c3=c;printf(a%cb%cc%cn,c1,c2,c3);4.1(2) #includemain()int a=12,b=15;printf(a=%d%,b=%d%n,a,b);4.1(3) #includemain()int a,b;scanf(%2d%*2s%2d,&a,&b);printf(%d,%dn,a,b);4.2 #includemain()long a,b;float x,y;scanf(%d,%dn,&a,&b);scanf(%f,%fn,&x,&y);printf(a=%d,b=%dn,a,b);printf(x=%f,b=%fn,x,y);5.1 #includemain()float a;printf(Innputa:);scanf(%f,&a);if(a=0)a=a;printf(a=%fn,a);elsea=-a;printf(a=%fn,a);5.2 #includemain()int a;printf(Inputa:);scanf(%d,&a);if(a%2=0)printf(a是偶数);elseprintf(a是奇数);5.3 #include#includemain()float a,b,c,s,area;printf(Inputa,b,c:);scanf(%f,%f,%f,&a,&b,&c);if(a+bc&a+cb&b+ca)s=(a+b+c)/2;area=(float)sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%fn,area);elseprintf(不是三角形);5.4 #include#includemain()float a,b,c,x,y;printf(Inputa,b,c:);scanf(%f,%f,%f,&a,&b,&c);if(a=0)printf(该方程不是一元二次方程n);if(b*b-4*a*c0)x=(-b+sqrt(b*b-4*a*c)/(2*a); y=(-b-sqrt(b*b-4*a*c)/(2*a);printf(x=%f,y=%fn,x,y);else if(b*b-4*a*c=0)x=-b/(2*a); y=-b/(2*a);printf(x=%f,y=%fn,x,y);elseprintf(该方程无实根n);5.5 #includemain()int year,flag;printf(Input a year:);scanf(%d,&year);if(year%4=0&year%400!=0|year%400=0)flag=1;elseflag=0;if(flag=1)printf(%d is a leap year !n,year);elseprintf(%d is not a leap year !n,year);5.6 #includemain()int year,flag;printf(Input a year:);scanf(%d,&year);flag=year%400=0|year%4=0&year%100!=0?1:0;if(flag=1&flag!=0)printf(%d is a leap year !n,year); elseprintf(%d is not a leap year !n,year);5.7 #includemain()char ch;printf(Inputch:);scanf(%c,&ch);if(ch=a&ch=A&ch=Z)ch=getchar();ch=ch+32;printf(%c,%dn,ch,ch);elseprintf(%c,ch);5.8 #includemain()char ch;printf(Inputch:);scanf(%c,&ch);if(ch=48&ch=65&ch=97&ch=122)printf(ch是小写字母n); else if(ch=32)printf(ch是空格n);else printf(ch是其他字符n);5.9 #includemain()int score,grade;printf(Input score:);scanf(%d,&score);grade=score/10;if(score100) printf(Input errorn); if(score=90&score=80&score=70&score=60&score=0&score60)printf(%d- -En,score);5.10 #includemain()int year,month;printf(Input year,month:);scanf(%d,%d,&year,&month); if(month12|month=0)printf(error monthn); else switch(year,month)case 12:case 10:case 8:case 7:case 5:case 3:case 1:printf(31天n);break;case 11:case 9:case 6:case 4:printf(30天n); break;case 2:if(year%4=0&year!=0|year%400=0)printf(29天n);elseprintf(28天n); break; default: printf(Input errorn); 6.1(1) #includemain()int i,j,

请选出以下程序的输出结果

#include<stdio.h>

main()

{ int a[]={1,2,3,4},i;

int x=0;

for(i=0;i<4;i++)

{ sub(a,x);printf("%d",x);}

printf("\n");}

sub(s,y)

int *s,y;

{ static int t=3;

y=s[t];t--; }

A.1 2 3 4

B.4 3 2 1

C.0 0 0 0

D.4 4 4 4


正确答案:C
解析:考查通过指针来引用一维数组元素的方法。若指针s指向数组a,则s[t]可以引用数组a中下标为t的元素。


有以下程序:includemain(){int x,y; printf("Enter an integer(x):&quo

有以下程序:#includemain(){int x,y; printf("Enter an integer(x):");scanf("%d",&x);if(x++<0) y=-1;else if(x==0) y=0;else y=1; printf("%d",y);}现从键盘上输入-1,则程序的输出是( )

A.0

B.-1

C.1

D.不确定的值


正确答案:B 


以下程序的功能是计算:。includemain(){int n; float s; s=1.0; for(n=10;n>1;n--)s=s+

以下程序的功能是计算:。#include <stdio.h> main() { int n; float s; s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%6.4f\n",s); } 程序运行后输出结果错误,导致错误结果的程序行是( )。

A.s=1.0;

B.for(n=10;n>1;n--)

C.s=s+1/n;

D.printf("%6.4f\n",s);


正确答案:C
解析:该程序的运行结果是1.0000,算法错误。在s=s+1/n中,因为n为整型,所以循环中1/n始终为0。这就是本题算法错误的原因。应把s=s+1/n改为s=s+1.0/n。


若输入1.5、2.5,则以下程序的运行结果为______。main(){ float a,b; int c; scanf("%f,%f,",&a,&b); c=max(a,b); printf("%d",c);}max(x,y)float x,y;{ float z; z=x>y?x:y; return(z);}

A.1.5

B.2.5

C.2

D.3


正确答案:C


设有如下程序: fun(float*p1,int n,float*p2,int m,float*s) {int i; *s=0.0; for(i=0;i<n;i++)*s+=*p1++; for(i=0;i<m;i++)*s+=*p2++; } main() { float a[]={1.1,2.2},b[]={1.0,2.0,3.0),*s=a; fun(a,2,b,3,s); printf("%f\n",*s); } 上面程序的输出结果是______。

A.8.2

B.9.3

C.3.3

D.1.1


正确答案:A
解析:实参指针变量s指向数组a的第一个元素,在函数fun中首先将s所指数组a的第一个元素赋值为0.0,然后将数组a和b中的元素值依次累加到数组a的第一个元素中。

更多 “C语言程序设计苏小红版答案解析 .” 相关考题
考题 阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]编写一个函数,输入为偶数时,调用函数求1/2+?/+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n (利用指针函数)。[函数]include "stdio. h",main(){float peven (),podd (),dcall ();float sum;int n;while (1){scanf("%d",&n);if (n>1)break;}if(n%2==0){printf("Even="):(1);}else{pfinff("Odd=");(2);}printf("%f",sum);}float peven (int n){float s;int is=1;for(i=2;i<=n;i+=2)(3);return (s);}float podd (n)int n;{float s;int i;s=0;for(i=1 i<=n;i+=2)(4);return (s);}float dcall(fp,n)float (*fp) ();int n;{float s;(5);returu (s);}正确答案:(1)array+10 (2)array+1 (3)*p>*max (4)k=*max (5)*p=array[0](1)array+10 (2)array+1 (3)*p>*max (4)k=*max (5)*p=array[0]

考题 有以下程序:int sub(int n) { return(n/10+n%10); }main(){ int x, y;scanf("% d", &x);y=sub(sub(sub(x)));printf("% d\n", y);}若运行时输入:1234<回车>,程序的输出结果是【 】。正确答案:1010 解析:y=sub(sub(sub(x)))=sub(sub(127))=sub(19)=10。

考题 以下程序通过函数sunFun求。这里f(x)=x2+1main( ){ printf("The sum=%d\n",SunFun(10)); }SunFun(int n){ int x,s=0;for(x=0;x<=n;x++) s+=F(【 】);return s;}F( int x){ return 【 】);}正确答案:x*x+1x*x+1 解析:本题中F(  )函数实现表达示f(x) =x2+1,SunFun(  )函数实现循环累加F(0)...F(10)的值因此[14]填x,[15]填x*x+1。

考题 以下C语言程序的输出结果是( )。struct s{int x,y;}data[2]={10,100,20,200};main( ){struct s*p=data;p++;printf(“%d\n”,++(p->x));}A.10 B.11 C.20 D.21答案:D解析:data是s类型的数组,即结构体数组,用{10,100,20,200}赋值,可知:data[0].x=10data[0].y=100data[1].x=20data[1].y=200struct s*p,p是data数组的指针。指向数组的第一个元素,*p即为data[0]。p++之后,即地址向后移动,此时p指向数组的第二个元素,*p即为data[1].p->x和(*p).x是一样的,p->x和data[1].x等价。所以在++(p->x)之后,data[0].x的值变为21。输出21。

考题 请选出以下程序的输出结果()。includesub(int *s,int y){static int t=3; y=s[t];t--;}请选出以下程序的输出结果( )。 #include <stdio.h> sub(int *s,int y) { static int t=3; y=s[t];t--; } main() { int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++) { sub(a,x);printf("%d",x); } printf("\n"); }A.1234B.4321C.0D.4444正确答案:C解析:本题考查函数的形参和实参的关系。函数sub将实参x的值传给形参y,y值的改变不能使x的值发生改变,所以输出的x值始终为0。

考题 有以下程序includevoid fun(float* p1,int n1,float,*p2,int n2,float* s){ int i;s=(有以下程序 #include<stdio.h> void fun(float * p1,int n1,float,*p2,int n2,float * s) { int i; s=(float *)calloc(1,sizeof(float)); *s=0; for(i=0;i<n1;i++) *s+=*p1++; for(i=0;i<n2;i++) *s+=*p2++; } main() { float a[2]={1.1,2.2},b[3]={10.0,20.0,30.0),*s=a; fun(a,2,b,3,s); printf("%f\n",*s); } 上面程序的输出结果是( )A.60B.3.3C.63.3D.1.1正确答案:D

考题 下列程序中,正确的为______。A.main() { int *pb=&b; float 1>=15.25; print f("%d\n" ,*pb); }B.amin() { int a,*pa; a=10; *pa=a; prinffC%d",*pa); }C.main() { char s[20]; char *ps=&s; scanf("%s",*p); printf("%s",*p); }D.main() { char str[10]; int *ps=str[0]; str="abcdefg"; printf("%s",*p); }正确答案:B

考题 有如下程序:includemain(){float x=2.0,y; if(x10.0)y=1.0/x;有如下程序: #include <stdio.h> main() { float x=2.0,y; if(x<0.0) y=0.0; else if(x>10.0) y=1.0/x; else y=1.0; printf("%f/n",y); } 该程序的输出结果是( )。A.0B.0.25C.0.5D.1正确答案:D解析:本题中,x=2.0,因此执行elsey=1.0,并且以“%f”输出。

考题 以下程序的输出结果是( )。include struct s { int x,y; } a[2]={10,100,20,200}; main() { struct s *p=data; printf("%d\n",++(p->x)); }A、10B、11C、20D、21正确答案:B

考题 有以下程序includemain(){int X;scanf(”%d”,&x); ,if(x2>15)printf(“%d”,x一5);if(x>10)printf(“%d”,x);if(x>5)printf(“%d\n”,X+5);}若程序运行时从键盘输入12<回车>,则输出结果为 。正确答案:12l712l7