《大学《C语言程序设计》期末考试试题题库(带详解答案).pdf》由会员分享,可在线阅读,更多相关《大学《C语言程序设计》期末考试试题题库(带详解答案).pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、单项选择题1 .若有以下说明语句:s t r u c t d at e in t y e ar;in t mo n t h;in t d ay;)b r it hd ay;则下面的叙述不正确的是.A)s t r u c t 是声明结构体类型时用的关键字B)s t r u c t d at e 是用户定义的结构体类型名0 b r it hd ay 是用户定义的结构体类型名D)y e ar,d ay 都是结构体成员名2 .以下对结构变量s t u l 中成员ag e 的非法引用是 Bs t r u c t s t u d e n t in t ag e;in t n u m;s t u l,*
2、p;p=&s t u l;A)s t u l.ag e B)s t u d e n t,ag e C)p-ag e D)(*p).ag e3 .设有如下定义:s t r u c k s k in t a;f l o at b;d at a;in t *p;若要使P 指向d at a中的a 域,正确的赋值语句是 A)p=&a;B)p=d at a.a;C)p=&d at a.a;D)*p=d at a.a;4 .设有以下说明语句:t y p e d e f s t r u c t s t u in t a;f l o at b;s t u t y p e;则下面叙述中错误的是(D )oA、s t
3、 r u c t 是结构类型的关键字B、s t r u c t s t u 是用户定义的结构类型C、a 和 b都是结构成员名D、s t u t y p e 是用户定义的结构体变量名5 .语句in t *p;说明了 C 。A)p 是指向一维数组的指针B)p 是指向函数的指针,该函数返回一 in t 型数据C)p 是指向in t 型数据的指针 指针的定义教材P 2 2 3D)p 是函数名,该函数返回一指向in t 型数据的指针6 .下列不正确的定义是(A)。A.in t *p=&i,i;B.in t *p,i;C.in t i,*p=&i;D.in t i,*p;选项A 先定义一个整型指针变量p,
4、然后将变量i 的地址赋给po然而此时还未定义变量i 因此编译器无法获得变量i 的地址。(A与 C对比,选项C先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址就可以确定了;然后再定义P,此时可以为p 赋 i 的地址,C正确)7 .若有说明:in t n=2,*p=&n,*q=p,则以下非法的赋值语句是:(D )A)p=q B)*p=*q C)n=*q D)p=np,q 同为整型指针变量,二者里面仅能存放整型变量的地址。选项A,q中为地址,因此可将此地址赋给p选项B,*p 表示p所指向对象n的内容,即一个整数;*q 表示q所指向对象的内容,由于在定义q 时为其初始化,将 P中n的地址给
5、q,因此p中存放n的地址,*q 表示q 所指向对象n的内容.因此*p=*q 相当于n=n;选项C,n=*q 等价于n=n;选项D,p中只能存放地址,不能将n中的整数值赋给p8 .有语句:in t 则是对指针变量p的正确定义和初始化。A)in t p=*a;B)in t *p=a;C)in t p=&a;D)in t *p=&a;选项A,a 是数组名,不是指针变量名,因此不可用*标注数组名a选项C,a 是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量 p时,应在变量名前加*,标明p 是指针变量选项D,a 是数组名,数组名就是地址,无需再用地址符号。9 .若有说明语句“in t a
6、5,*p=a;,则对数组元素的正确引用是(C )。A.a p B.p a C.*(p+2)D.p+2首先定义一个整型数组a,a 的长度为5,然后定义一个指针变量p,并同时对 P 进行初始化,将数组a 的地址赋给p o 因此此时p中存放的数组a 的首地址,即数组中第一个元素a 0 的地址。对于数组元素下标的引用(详见P 1 4 4),一般形式数组名 下标其中下标为逻辑地址下标,从 0 开始计数,方括号中的下标可以是变量,可以是表达式,但结果一定要是整数。选项A,p中存放的是地址,不是整数,不能做数组元素的下标选项B,a 是数组名,数组名就是地址,不是整数,不能做数组元素的下标选项C,(重点!详见
7、p 2 3 2 3 4)p+2 表示指向同一数组中的下两个元素的地址,当前p 指向a 0,则 p+2 表示a 2 的地址,因此*(p+2)表示a 2 的内容1 0 .有如下程序in t a 1 0 =l,2,3,4,5,6,7,8,9,1 0 ,*P=a;则数值为9的表达式是A)*P+9 B)*(P+8)C)*P+=9 D)P+8(重点!详见p 2 3 2 3 4)首先定义一个整型数组a,a 的长度为5,然后定义一个指针变量P,并同时对 P 进行初始化,将数组a 的地址赋给P。因此此时P中存放的数组a 的首地址,即数组中第一个元素a 0 的地址。数组中9 对应的是a 8,选项B,P+8 表示数
8、组中后8 个元素的地址,即a 8 的地址。*(P+8)则表示该地址内所存放的内容,即a 8 的值。选项A,*P 表示P 所指向对象的内容,此时P 指向a 0,*P 即a 0 的值1.*P+9=l+9=1 0选项C,*P 表示P 所指向对象的内容,此时P 指向a 0,*P 即a 0 的值。因此*P+=9 即*P =*P+9,等价于 a 0=a 0+9.选项D,P+8 表示数组中后8 个元素的地址,即a 8 的地址,而非a 8 中的值。1 1 .在 C 语言中,以 D 作为字符串结束标志A),n,B)C)O D)0,1 2 .下列数据中属于“字符串常量”的 是(AA.“a”B.ABC C.ab c
9、 0,D.a若干个字符构成字符串在 C 语言中,用单引号标识字符;用双引号标识字符串选项B,C,分别用 和 标识字符串选项D,标识字符。1 3 .已知 c har x =he l l。”,y =h,e ,a,b ,e ;,则关于两个数组是度的正确描述是 B.A)相同 B)x 大于y C)x 小于y D)以上答案都不对C 语言中,字符串后面需要一个结束标志位 0 ,通常系统会自动添加。对一维数组初始化时可采用字符串的形式(例如本题数组x),也可采用字符集合的形式(例如本题数组y)o在以字符串形式初始化时,数组x 不尽要存储字符串中的字符,还要存储字符串后的结束标志位,因此数组x 的长度为6;在以
10、字符集合形式初始化时,数组y,仅存储集合中的元素,因此数组y 长度为5二、读程序基 本 输 入 输 出 及 流 程 控 制1.#include main()int a2 3 =1,2,3 ,4,5,6 );int b3 2,i,j;for(i=0;i=l;i+)for(j=0;j=2;j+)bji=aij;)for(i=0;i=2;i+)for(j=0;j=l;j+)printf(*%5 d*,bij);)运行结果为:1 4 2 5 3 62.#include f(int b,int n)int i,r;r=l;for(i=0;i=n;i+)r=r*bi;return(r);)main()in
11、t x,a=l,2,3,4,5,6,7,8,9 ;x=f(a,3);printf(%dn ,x);)运行结果为:243.#include“stdio.hmain()int j,k;static int x4 4,y4 4;for(j=0;j4;j+)for(k=j;k4;k+)xjk=j+k;for(j=0;j4;j+)for(k=j;k4;k+)yk j=xj k;for(j=0;j4;j+)for(k=0;k4;k+)printf(*%d,*,yjk);)运行结果为:0,0,0,0,1,2,0,0,2,3,4,0,3,4,5,6函数1.#include int Sub(int a,int
12、b)return(a-b);main()int x,y,result=0;scanf(%d,%d,&x,&y);result=Sub(x,y);printf(result=%dn”,result);)当从键盘输入:6,3运行结果为:result=32.#include int min(int x,int y)int m;if(x y)m=x;else m=y;return(m);)main()int a=3,b=5,abmin;abmin=min(a,b);printf(min is%d”,abmin);运行结果为:min is 53.#includefunc(int x)x=1 0;prin
13、tf(%d,”,x);)main()int x=20;func(x);printf(%d ,x);)运行结果为:1 0,20在main函数中调用函数func,main函数将20 作为实参穿给func,并转向开始执行func.main。对应的内存func()对应的内存func()执行x=1 0;,其内存中x 变为1 0.1 0 xfunc()执行printf(%d,”,x);即输出func函数对应内存中x的值,输出的是1 0.至此,func函数执行结束,返回main函数。main函数执行printf(“%d”,x);此时输出main函数对应内存中的x,即204.ttinclude int m=4
14、;int func(int x,int y)int m=l;return(x*y-m);)main()int a=2,b=3;printf(%dn,m);printf(%dn,func(a,b)/m);)运行结果为:41整型变量m 在函数外定义,因此m 为全局变量,其作用于范围为其定义位置开始,一直到整个程序结束。因此func与main函数都可以访问m程序首先执行main函数执行printf(%dn”,m);即输出m 中的值4,并换行。执行 printf 行 dn”,func(a,b)/m);即输出表达式 func(a,b)/m 的值,为了计算该表达式,需要调用函数func。此时main将 a
15、,b 中的2 和 3值作为实参传递给func的x 和 y程序开始转向执行func函数,此时func中的x 为 2,y 为 3执行int m=l;此句定义了一个局部变量并赋值为1。m 的作用域为其所在的复合语句,即func的函数体,因此在func的函数体重,有限访问局部变量m。执行 return(x*y-m);即 return(2*3-1);返回的是整数 5.func函数返回至main函数中的被调用处main 函数中 func(a,b)的值为 5,func(a,b)/m=5/4=l,注意,在 main 函数中访问的m 为全局变量m,此时main函数无法访问func中的m,因为不在func中口的作
16、用域。5.#include int fun(int a,int b)if(a b)return(a);else return(b);)main()int x=1 5,y=8,r;r=fun(x,y);printf(r=%dn”,r);)运行结果为:r=1 5程序首先执行main函数执 行 厂:M 他丫兀即将任区区办的值赋给)为了计算该表达式,需要调用函数funco此时main将 x,y 中的1 5 和 8 值作为实参传递给func的a 和b程序开始转向执行func函数,此时func中的a 为 1 5,b 为 8执行if语句;判断if后面的表达式,a b成立,因此执行相应的操作return(a)
17、;即返回a 的 值。func函数返回至main函数中的被调用处main函数中func(x,y)的值为1 5,即将1 5 赋给r。执行 printf(r=%dn”,r);即输出 r=1 56.#include int fac(int n)int f=l,i;for(i=l;i b成立,因此执行相应的操作return(a);即返回a 的 值。func函数返回至main函数中的被调用处main函数中func(x,y)的值为1 5,即将1 5 赋给r。执行 printf(r=%dn,r);即输出 r=1 57.#include unsigned fun6(unsigned num)unsigned k
18、=l;do k*=num%1 0;num/=1 0;while(num);return k;)mainO unsigned n=26;printf(%dn ,fun6(n);)运行结果为:1 2程序首先执行main函数执行printf(%dn ,fun6(n);即输出表达式func(6)的值,为了计算该表达式,需要调用函数funco此时main将 n 中的26 作为实参传递给func的num程序开始转向执行func函数,此时func中的num为26执行do-while语句第 1 次循环执行 k*=num%1 0,即 k=k*(num%1 0)=1*(26%1 0)=6执行 num/=1 0;即
19、 num=num/1 0=26/1 0=2while后面循环条件为num,此时num为 2,是非0 值,即表示循环条件成立,继续执行循环体。此时k 为6第 2 次循环执行 k*=num%1 0,即 k=k*(num%1 0)=6*(2%1 0)=1 2执行 num/=1 0;即 num=num/1 0=2/1 0=0while后面循环条件为num,此时num为 0,表示循环条件不成立,结束循环执行return k;即返回至main函数中的被调用处执行main函数继续执行 printf(%dn ,fun6(n);即输出 1 28.#include int max(int x,int y);mai
20、n()int a,b,c;a=7;b=8;c=max(a,b);printf(M ax is%d”,c);)max(int x,int y)int z;z=x y?x:y;return(z);)运行结果为:M ax is 8指针1.#include main()int x =1 0,20,3 0,4 0,5 0 ;int*p;P=x;printf(d”,*(p+2);)运行结果为:3 0首先定义一个整型数组x,x 的长度为5;然后定义一个指针变量p;对 p 进行初始化,将数组x 的地址赋给p o 因此此时p 中存放的数组x 的首地址,即数组中第一个元素x0 的地址。然后执行printf语句,输
21、出表达式*(p+2)的值。p+2表示以p 当前指向的位置起始,之后第2 个元素的地址,即 a2的地址。*(p+2)则表示该地址内所存放的内容,即的内的值30,因此输出302.#i n c l ud e m a i n()c h a r s =w a b c d e f g;c h a r *p;P=s;p r i n t f (“c h=%c n”,*(p+5);)运行结果为:c h=f首先定义一个字符型数组s,并用字符串a b c d e f g 对 s 进行初始化;然后定义一个字符型指针变量P;对.p 进行初始化,将数组s的地址赋给p。因此此时P中存放的数组s的首地址,即数组中第一个元素s
22、 0 的地址。然后执行p r i n t f 语句,输出表达式*(p+5)的值。p+5 表示以p当前指向的位置起始,之后第5个元素的地址,即 a 5 的地址。*(p+5)则表示该地址内所存放的内容,即的内的值f,因此输出c h=f3.#i n c l ud e m a i n ()i n t a =l,2,3,4,5 ;i n t x,y,*p;P=a;x=*(p+2);p r i n t f(*%d:%d n”,*p,x);)运行结果为:1:3首先定义一个整型数组a,并对a 进行初始化;然后定义整型变量x,y,整型指针变量P;再将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中
23、第一个元素a 0 的地址。执行x=*(p+2);p+2表示以p当前所指向的位置起始,之后第2 个元素的地址,即 a 2 的地址。*(p+2)则表示该地址内所存放的内容,即a 2 的值3,然后再把3 赋给x然后执行p r i n t f 语句,先输出表达式*p的值。此时*p 表示的是p 所指向变量的内容,即a 0 的值1。再输出一个冒号。然后再输出x 中的值3。4.#i n c l ud e m a i n()i n t a r r =30,25,20,15,10,5 ,*p=a r r;p+;p r i n t f(%d n”,*(p+3);)运行结果为:10首先定义一个整型数组a r r,并
24、对a r r 进行初始化;然后定义整型指针变量P;再将数组a r r 的地址赋给p。因此此时p中存放的数组a r r 的首地址,即数组中第一个元素a 0 的地址。执行P+,即p=p+l。P+1表示以P当前所指向的位置起始,之后第1个元素的地址,即a r r 1 的地址,然后再将a r r 1 的地址赋给p,执行完此语句后,p不再指向a r r O ,而是指向a r r l 。然后执行p r i n t f 语句,输出表达式*(p+3)的值。p+3表示以p当前指向的位置起始(此时p 指向a r r l ),之后第3 个元素的地址,即a r r 4 的地址。*(p+3)则表示该地址内所存放的内容,
25、即a r r 4 的值10,因此输出105.f f i n c l ud e m a i n()i n t a =1,2,3,4,5,6);i n t x,y,*p;p =&a 0;x=*(p+2);y=*(p+4);p r i n t f(r t*p=%d,x=%d,y=%d n ,*p,x,y);)运行结果为:*p=l,x=3,y=5首先定义一个整型数组a,并对a进行初始化;然后定义整型变量x,y,整型指针变量P;再将数组元素a 0 的地址赋给p。执行x=*(p+2);p+2表示以p当前所指向的位置起始,之后第2 个元素的地址,即 a 2 的地址。*(p+2)则表示该地址内所存放的内容,即
26、 a 2 的值3,然后再把 3 赋给x执行y=*(p+4);p+4 表示以p当前所指向的位置起始,之后第4 个元素的地址,即 a 4 的地址。*(p+4)则表示该地址内所存放的内容,即 a 4 的值5,然后再把5 赋给y执行p r i n t f 语句,先输出表达式*p的值。此时*p 表示的是p 所指向变量的内容,即a 0 的值1。再输x 的值3。再输出y 的值5。6.#i n c l ud e m a i n()s t a t i c c h a r a =P r o g r a mw,*p t r;f o r(p t r=a,p t r a+7;p t r+=2)p ut c h a r(
27、*p t r);)运行结果为:P o r m首先定义一个字符型数组a,并对a 进行初始化;然后定义字符型指针变量p;执行f o r 语 句 p t r=a 为表达式1,将数字a的地址赋给p t 门表达式2(循环条件)p t r a+7;表达式 3 为 p t r+=2,即 p t r=p t r+2;第 1 次执行循环体执行p ut c h a r (*p t r);即输出*p t r 所对应的字符。此时p t r 指向数组中的第1 个元素,即a 0,因此*p t r 表示a 0 中的值,即P.执行完循环体,转向执行表达式3,即p t r=p t r+2o p t r+2表示以p t r 当前
28、所指向的位置起始,之后第2 个元素的地址,即 a 2 的地址,然后将a 2 的地址赋给p t r。a 2 的地址等价于a+2,因此循环条件p t r a+7 成立,继续执行循环体第 2 次执行循环体执行p ut c h a r (*p t r);即输出*p t r 所对应的字符。此时p t r 指向数组中的第3 个元素,即a 2,因此*p t r 表示a 2 中的值,即o.执行完循环体,转向执行表达式3,即p t r=p t r+2o p t r+2表示以p t r 当前所指向的位置起始,之后第2 个元素的地址,即 a 4 的地址,然后将a 4 的地址赋给p t r。a 4 的地址等价于a+4
29、,因此循环条件p t r a+7 即a+4 a+7 成立,继续执行循环体第 3 次执行循环体执行p ut c h a r (*p t r);即输出*p t r 所对应的字符。此时p t r 指向数组中的第5 个元素,即a 4 ,因此*p t r 表示a 4 中的值,即r .执行完循环体,转向执行表达式3,即p t r=p t r+2o p t r+2表示以p t r 当前所指向的位置起始,之后第2 个元素的地址,即a 6 的地址,然后将a 6 的地址赋给p t r。a 6 的地址等价于a+6,因此循环条件p t r a+7 即a+6 a+7 成立,继续执行循环体第 4次执行循环体执行p ut
30、c h a r (*p t r);即输出*p t r 所对应的字符。此时p t r 指向数组中的第7 个元素,即a 6 ,因此*p t r 表示a 6 中的值,即 m,.执行完循环体,转向执行表达式3,即p t r=p t r+2o p t r+2表示以p t r 当前所指向的位置起始,之后第2 个元素的地址,即a 8 的地址,然后将a 8 的地址赋给p t r。a 6 的地址等价于a+8,因此循环条件p t r a+7 即a+8 a+7 不成立,结束循环。7.#i n c l ud e c h a r s =w A B C D;m a i n()c h a r *p;f o r(p=s;p
31、s+4;p+)p r i n t f(%c%s n”,*p,p);)运行结果为:A A B C DB B C DC C DD D首先定义一个字符型数组s,并对S 进行初始化;数组S 是全局变量,其有效范围从其定义开始至整个程序结束。执行m a i n 函数定义一个字符型指针P o执行f o r 语 句 p=s 为表达式1,将数字s 的首地址赋给p;表达式2(循环条件)p s+4;表达式3 为p+,即p=p+1;第 1次执行循环体执行p r i n t f (枇%s n,*p,p);即以字符%c形式输出*p所对应的字符。此时p 指向数组中的第1个元素,即s 0,因此*p 表示a 0 中的值,即,
32、A .然后再以字符串姻的形式输出以p中地址为首地址的整个字符串,即输出A B C D执行完循环体,转向执行表达式3,即p=p+l。p+1表示以p当前所指向的位置起始,之后1 个元素的地址,即 s l 的地址,然后将a l 的地址赋给P os l 的地址等价于s+1,因此循环条件p s+4 成立,继续执行循环体第 2 次执行循环体执行p r i n t f (枇%s n,*p,p);即以字符%c形式输出*p所对应的字符。此时P 指向数组中的第2 个元素,即s l ,因此*p 表示s l 中的值,即B .然后再以字符串姻的形式输出以p中地址为首地址的整个字符串,此时p 指向s 1 ,即从 s l
33、开始,依次输出后面的字符串,因此又输出B C D执行完循环体,转向执行表达式3,即p=p+l。p+1表示以p当前所指向的位置起始,之后1 个元素的地址,即 s 2 的地址,然后将a 2 的地址赋给P os 2 的地址等价于s+2,因此循环条件p s+4 成立,继续执行循环体第 3 次执行循环体执行p r i n t f (杭%s n ,*p,p);即以字符%c形式输出*p所对应的字符。此时p 指向数组中的第3 个元素,即s 2,因此*p 表示s 2 中的值,即C .然后再以字符串姻的形式输出以p中地址为首地址的整个字符串,此时p 指向s ,即从 s 2 开始,依次输出后面的字符串,因此又输出C
34、 D执行完循环体,转向执行表达式3,即p=p+l。p+1表示以p当前所指向的位置起始,之后1 个元素的地址,即 s 2 的地址,然后将s 2 的地址赋给P os 2 的地址等价于s+3,因此循环条件p s+4 成立,继续执行循环体第4次执行循环体执行p r i n t f (杭%s n ,*p,p);即以字符%c形式输出*p所对应的字符。此时p 指向数组中的第4 个元素,即s 3,因此*p 表示s 3 中的值,即D .然后再以字符串姻的形式输出以p中地址为首地址的整个字符串,即输出D执行完循环体,转向执行表达式3,即p=p+l。p+1表示以p当前所指向的位置起始,之后1 个元素的地址,即 s
35、3 的地址,然后将s 3 的地址赋给P os 3 的地址等价于s+4,因此循环条件p s+4 不成立,结束循环三、程序填空1.输入一个字符,判断该字符是数字、字母、空格还是其他字符。m a i n ()c h a r c h;c h=g e t c h a r();i f(c h =a&c h =A&c h =O&c h =9 7&c h =6 5&c h =9 0需要注意的是,对于本题区间所对应的表达式,不可写作9 7 0c h =122,也不可写作A =c h V .对于9 7 7c h =122因为在计算此表达式时的顺序是从左向右,因此先计算9 7 =c h。无论c h 中的取值如何,表
36、达式9 7 =c h 的值只有两种情况:0 或 1.所以无论是0 还是1,都小于122,因此9 7 =c h 0)i=i+1 ;el s e j=j+l;p r in t f(i=%4 d,j=%4 d nw,i,j);)此题用i来记录大于零的整数,用 j 记录小于零的整数。所以循环条件是n (或者 n!=0)即当n 不为。时执行循环体。在循环体中是一个选择语句。如果n 0,则令i 加 1,相当于令正整数的个数加1;否 则(即 n 0),令 j 加 1,相当于令负整数的个数加1。3 .编程计算1+3+5+1 0 1 的值#in cl u d e v o id m ain()in t i,s u
37、 m =0;fo r (i=1;i 1 0 1 ;i=i+2;)s u m =s u m +i;p r in t f(/zs u m=%d nz,,s u m);fo r 语句的一般形式详见p l 2 0.表达式1 为 i =1,为循环变量赋初值,即循环从1 开始,本题从1 到 1 0 1,因此终值是1 0 1,表达式2是循环条件,用来控制循环的结束,因此循环条件为i-1 0 1;表达式3 为循环变量的自增,本题是4 .编程计算1 +3+5 卜 9 9 的值m ain ()in t i,s u m =0;i=l;w hil e(i1 1 0 0 )s u m =s u m +i;I=i+2 ;
38、p r in t f(z/s u m=%d n/,,s u m);)5 .从键盘输入一个字符,判断它是否是英文字母。Sin cl u d e v o id m ain()char c;p r in t f(,zin p u t a char act er:z,);c=get char ();if(c=飞&c=一,&c=)p r in t f(Yes n);el s e p r in t f(No);6 .下面程序的功能是在a 数组中查找与x 值相同的元素所在位置,请填空。t t in cl u d e v o id m ain()in t a1 0,i,x;p r in t f(uin p u
39、 t 1 0 in t eger s:);fo r (i=0;i 1 0;i+)s can f(;p r in t f(in p u t t he n u m ber y o u w an t t o fin d x:);s can f(,&x );fo r (i=0;i 1 0;i+)if(x=ai)br eak;if(i 1 0 )p r in t f(t he p o s o f x is:%d nv,i);el s e p r in t f(can n o t fin d x!n );)7 .程序读入2 0 个整数,统计非负数个数,并计算非负数之和。#in cl u d e m ain
40、()in t i,a2 0,s,co u n t;s=co u n t=0;fo r(i=0;i 2 0;i+)s can f(,&ai);fo r(i=0;i 2 0;i+)if(ai 0 )co n t in u e;s+=a i ;co u n t+;)p r in t f(s=%d t co u n t=%d n ,s,co u n t”);)8 .输入一个正整数n (K n l O),再输入n个整数,用选择法将它们从小到大排序后输出。Sin cl u d e in t m ain(v o id)in t i,in d ex,k,n,t em p;/*定义1 个数组a,它有1 0 个整
41、型元素*/p r in t f(uEn t er n:);p r in t f(uEn t er%d in t eger s:,n);fo r(i=0;i n;i+)s can f(%d”,&ai);fo r(k=0;k n-1;k+)/*对 n 个数排序*/in d ex =k;fo r ()if()in d ex =i;)p r in t f(/?Aft er s o r t ed:);fo r(i=0;i n;i+)/*输出n 个数组元素的值*/r et u r n 0;四、程序改错一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。1 .求 I x 2
42、x 3 x 4 x x nm ain()l o n g in t s u m:/若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值 0 或者循环初值。in t n,i=l;s can f n);若s can f语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题细与n的类型in t 一致(详见 P6 9-7 8);(2)变量的前面要有地址符号&p r in t f(“n”);w h i l e(i n)/循环条件用于控制循环的次数,若以i n 为循环条件,则意味着i 的终值为n-1,由于且i 初值
43、为1,因此一共能够循环n-1 次。比要求少了 1 次,因此应改为i=n或者i n+l su m=su m*i;/若不为su m赋初值,则此处无法计算su m*i。i+;)p ri ntf (*su m=%d*,su m);若p ri ntf 语句有错误,常见考点有1 个:格式声明符号要与后面欲输出的变量的类型一致,此题%d与 su m的类型l ongi nt不一致,应改为%Id (详见p 6 9-7 8);)su m应初始化 即加入su m=l第四行改为:sc a nf(“刎 ,&n);第六行改为:w h i l e(i =n)或者 w h i l e(i n+l)第十行改为:p ri ntf
44、 (/su m=%l d/,,su m);2.求一个数组中最大值及其下标。ma i n()i nt ma x,j,m;i nt a 5 ;f or(j=l;j=5:j+)/j=l 为循环变量j赋初值为1,同时用j作为数字元素的逻辑地址下标。因此输出的时候只能从a l 开始输出,无法输出a 0 .因此应将j 赋初值0,相应的循环条件改为j 5 或者j=4 用于控制循环执行5 次sc a nf (%dn,a);/若 sc a nf 语句有错误,常见考点有两个:(1)格式声明符号要与后面欲赋值的变量的类型一致,此题%d与 a的类型i nt 一致(详 见 p 6 9-7 8);(2)变量的前面要有地址
45、符号&ma x=a 0 ;f or(j=l;j a j )ma x=a j ;m=j;)p ri ntf (“下标:d 下最大值:d ,j,ma x)为。语句的循环变量,当 f or语句执行完之后,)中的值为6,并非最大值下标,在执行某一次循环的比较过程中,将当时最大值的下标存在了m 里)第四行改为:f or(j=0;j 5;j+)第五行改为:sc a nf(“%d”,&a j );第七行改为:f or(j=l;j 5;j+)第八行改为:i f(ma x a j )第十三行改为:p ri ntf (下 标:%d n最大值:d”,m,ma x)3.用一个函数求两个数之和。su m(x,y)函数定
46、义的一般形式p l 7 3 T 7 4 f l oa t z;z=x+y;re tu rn;re tu rn语句后面可以返回0、常量、变量和表达式的值。)ma i n()f l oa t a,b;Ju te;/若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0 或者循环初值。sc a nf(*%f,%f ,&a,&b);c=su m(a,b);p ri ntf(nS u m i s%f”,su m);)第一行改为:f l oa t su m(f l oa t x,f l oa t y );第四行改为:re tu rn(z);
47、或者re tu rn z;第八行:f l oa t c;第H 行:p ri ntf (z/nS u m i s%f”,c);4.程序读入2 0 个整数,统计非负数个数,并计算非负数之和.#i nc l u d e std i o.h ma i n()(i nt i,s,c ou nt,n=2 0;i nt a n;数组定义的一般形式,详见p l 4 3,其中的常量表达式不能为变且里s=c ou nt=l;f or(i=l,i 2 0,i-)/f or语句的格式,三个表达式之间用分号,且分号不可省略sc a nf(“肌1”,a i );若sc a nf 语句有错误,常见考点有两个:(1)格式声明
48、符号要与后面欲赋值的变量的类型一致,此题%d与 n 的类型i nt 一致(详见P 6 9-7 8);(2)变量的前面要有地址符号&f or(i=0;i 2 0;i+)i f(a i 0)b re a k;/b re a k 与c onti nu e 的区别p l 2 8.在改错题中若错误出现在 b re a k 语句,则通常是将b re a k 换为c onti nu e;反之,若错误出现在c onti nu e,通常是将其换为b re a ks+=a i ;c ou nt+;)p ri ntf(s=%f c ou nt=%f n”,s,c ou nt);若 p ri ntf 语句有错误,常见
49、考点有1 个:格式声明符号要与后面欲输出的变量的类型一致)答案:i nt a 2 0 s=c ou nt=0;f or(i=0;i 2 0;i-)sc a nf(c onti nu e;p ri ntf(s=%d c ou nt二%d n”,s,c ou nt);5.从键盘输入整数x的值,并输出y的值.ma i n()f l oa t x,y;sc a nf(,&x);y=3.5+x;p ri ntf(y=%d );正确的:i nt x;f l oa t y;p ri ntf(ay=%fv,y);6编程计算下面分段函数,输入x,输出yx-1 x 0y=2x-l 0 x 1 0ma i n()i
50、 nt x,y;p ri ntf (a n Inp u t x:n );sc a nf(%d”,x);/错误同上题 sc a nfi f(x=0|x=0&x=10第三处改为:y=2*x-l;第四处改为:y=3*x-l;第五处改为:p r 玉t f(“y=%d ,y);7.求 100300间能被3 整除的数的和。m ain()in t n;lo n g s u m;/若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定义用于存放运算结果的变量时,一定要赋初值,一般赋值0或者循环初值。f o r (n=100,n=300,n+)/f o r 语句的格式,三个表达式之间用分号,且分号