C语言程序设计练习题
C语言练习一 C语言练习二 C语言练习三 C语言练习四
C语言练习五 C语言练习六 C语言练习七
C语言练习一
学号 姓名 成绩 ________
一、填充题(每个空格2分)
1、 c语言是一种__________高级程序设计语言。
2、 c语言中规定对所用到的变量要先___________后____________。 3、 设c语言中,int类型占2个字节,则long类型数据占_____个字节;
unsigned int类型数据占_____个字节;short类型数据占_____个字节;double类型数据占_____个字节;char类型数据占_____个字节。 二、选择题(每个选择3分)
1、 组成c语言程序的是
A)子程序 B) 过程 C) 函数 D) 主程序和子程序
2、 若有以下定义:
char s=’\\092’; 则该语句
A) 使s的值包含1个字符 B) 定义不合法,s的值不确定 C) 使s的值包含4个字符 D) 使s的值包含3个字符
3、 已知各变量的类型定义如下: int i=8,k,a,b;
unsigned long w=5;
double x=1.42,y=5.2;
则以下两组中不符合c语言语法的表达式分别是
(1) A) k=i++ B) (int)x+0.4 C) y+=x++ D) a=2*a=3 (2) A) x%(–3) B) w+=–2 C) k=(a=2,b=3,a+b) D) a+=a–=(b=4)*(a=3)
4、 以下两组中不符合c语言语法的赋值语句分别是
(1) A) a=1,b=2 B) ++i; C) a=b=5; D) y=(a=3,6*5); (2) A) i++; B) i=i=5; C) k=2*4,k*4; D) y=float(i);
5、 若a为整型变量,则以下语句
a=-2L;
printf(“%d\\n”,a);
A) 赋值不合法 B) 输出为-2 C) 输出为不确定 D) 输出为2
6、 找出下列符号中合法的标识符
A. “abc” B. s06 C. file.c D. a&b E. 10d F. c*7
三、计算题(每题5分)
1、 设 int a=12,试写出计算表达式 a+=a/=a-=a*a 后a的值。
2、 设double x=12.34567, 写出计算x=(int)(x*100+0.5)/100.0 后x的
值。
3、 设x=3.5,a=8,y=4.3 ,求 y+a%3*(int)((x+y)/4+0.05)/3 的值。 四、读程序
1、 写出下列程序的输出结果(6分)
main() { int a=9; a+=a-=a+a;
printf(“%d\\n”,a); }
2、 写出下列程序的输出结果(8分)
main()
{ int a=4,b=7;
printf(“%d\\n”,(a++,b+a,b+1)); printf(“%d\\n”,++a,a+b,b+1);
}
3、 写出下列程序的输出结果(8分)
main()
{ char c1=’a’, c2=’b’, c3=’c’ c4=’\\101’, c5=’\\102’; printf(“a?%c\\tc%c\\tabc\\n”,c1,c2,c3); printf(“\\t%c %c”,c4,c5); }
4、若a=1,那么printf(“%d”,a,++a,a--);写出输出的结果 (4分)
5、 写出下列程序的功能 (8分)
int m(int x,int y) { int z; if (x>y) z=y; else z=x; return z; } main()
{ int a,b,c,d,x;
scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); x=m(m(a,b),m(c,d)); printf(‘m=%d”,x); }
五、填空题 (12分)
以下程序输入三个整数值给a,b,c, 程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a,b,c的值。请填空。 main()
{ int a,b,c,__(1)__; printf(“enter a,b,c”);
scanf(“%d%d%d”,______(2)______);
___(3)___;a=b;b=c;___(4)____; print(“a=%d b=%d c=%d\\n”,a,b,c);}
练习一答案:
一、结构化 定义 使用 4 2 2 8 1 二、C) A) D) A) C) D) B) 三、答:a=2 12.35 4.3
四、(1) 0 (2)8 5 (3)aabb cc abc AB (4)1,1,1 (5)求a,b,c,d中最大者 五、(1) t (2)&a,&b,&c (3) t=a (4) c=t 返回
C语言练习二
学号___________ 姓名_____________ 分数_____________
1、 写出下列程序段的输出结果。(12%) k=8567;
printf(“/%-6d/ \\n”,k); printf(“/m/ \\n”,k); x=213.82631;
printf(“%-10.2f\\n”,x); printf(“.2fd/ \\n”,x); printf(“%e\\n”,x); c=’A’;
printf(“%d%c\\n”,c,c);
2、 若a=3,b=4,x=1.2,y=2.4,z=-3.6,c1=’a’,c2=’b’,要得到以下输出格式,请编写程序。(10%) a= 3 b= 4 a+b= 7 2a= 6 x=1.200000,y= 2.4 c1=’a’ or 97(ASCII) c2=’b’ or 97(ASCII)
3
3、 编写程序计算 1/2(ax+x/4a),其中a为常数,x为实型变量(运行时输入)。(10%)
4、 编写程序完成从键盘输入一个小写字母转化为大写字母输出。(10%)
5、 写出下列程序的输出结果。(10%) main()
{int i,j,k,a=3,b=2; i= (--a==b++)?--a:++b; j=a++;k=b;
printf(“i=%d,j=%d,k=%d\\n”,i,j,k); }
6、 计算以下表达式的值。设int a=1,b=2,c=3; (1) !(a<0 || b<=0) && !(a+b!=c) (2) !a<=0 || c && !(a+b)+c-1 (3) b-c && 1/2 *(a+b+c) (4) b%2 && c>b && b>a
(5) !(x=a) && (y=b) && 1+a==b
7、 把以下语句改写成switch语句。(10%) if (s<60) m=1; else if (s<70) m=2; else if (s<80) m=3;
10%)
(
else if (s<90) m=4; else if (s<=100) m=5;
8、 把以下语句改写成不嵌套的switch语句。(12%) if (s>0 && s<=10) if (s>=3 && s<=6) x=2; else if (s>1 || s>8) x=3
else x=1;
else x=0;
9、 编写程序,将键盘输入的任意三个整数a,b,c,按小到大的次序存放在a,b,c中。(16%) 练习二答案:
(1) /8567 / / 8567/ 213.83 213.83 2.138263e+002 65A (2) 答案见书上习题解答 (3) #define a 10 main( ) {float x,y; scanf(“%f”,&x);
y=1.0/2*(a*x+(a+x)/(4*a)); printf(“%f”,y); }
(4) 答案见书上习题解答 (5) I=1,j=1,k=3 (6) 1 1 0 0 0 (7) 答案略 (8) 答案略 (9) 答案见书上习题解答
返回
C语言程序设计练习三
学号 姓名 成绩 ________
一、读程写结果
1. main() (5分) { int a,b,d=241; a=d/100%9; b=(-1)&&(-1);
printf(“%d,%d\\n”,a,b); }
写出其输出结果:________
2. main() (5分) { int x=2,y=5,z; z=3%4/(float)x+x/y*y; printf(“%d\\n”,z); }
写出其输出结果:________
3.main() (5分) {
int a=4,b=3,c=1,d=2,x=0; if (a>b)
{if (c>d) x=1;} else x=2;
printf(“%d\\n”,x); }
写出其输出结果:_________
4.int test(int x,int y) (6分) {x=x+5;
y=y+2; return x; } main() {int x,y, z; x=1;y=2; z=test(x,y);
printf(“%d,%d,%d”,x,y,z); }
写出其输出结果:_________
5.void func(int a[ ],int n) (8分) {int j,temp;
for (j=0;j<=n/2;j++)
{temp=a[j]; a[j]=a[n-1-j]; a[n-1-j]=temp;} }
main()
{ int x[5]={2,5,1,7,8},len=5,k;
func(x,len); for (k=0; k 写出其输出结果:_____________________ 6.int search(int s[ ],int n,int key) (12 { int low,hig,mid; low=0;hig=n-1; while (low<=hig) {mid=(low+hig)/2; if (s[mid]==key) break; else if (s[mid] if (low<=hig) return mid; else return –1; } main() { int key,result; int a[8]={10,13,15,17,19,21,25,28}; scanf(“%d”,&key); 分) result=search(a,8,key); printf(“%d\\n”,result); } 当输入数据为25↙时, 程序的输出结果为________. 当输入数据为11↙时, 程序的输出结果为________. 7.main() (6分) {int a[3][3]={1,2,3,4,5,6,7,8,9}; int j,s=0; for (j=0;j<3;j++) s=s+a[j][j]; printf(“s=%d”,s); } 写出其输出结果:_____________________ 8.int count(char c[ ] ) (6分) {int I=0; while (c[I++]!=’\\0’); return I-1; } main() {char str[ ]=”Language Programming”; printf(“length=%d”,count(str)); } 写出其输出结果:_____________________ 9. #include int f(int n) {static int s=1; while(n) s*=n--; return s; } main() {int i,j; i=f(3); j=f(4); printf(\ printf(\ } 写出其输出结果:_____________________ 10、main() (10分) {int I,j,k,temp; int a[6]={7,5,9,3,6,2},n=6; for(I=0;I for (j=I+1;j if (I!=k){temp=a[k];a[k]=a[I];a[I]=temp;} } for(j=0;j 写出其输出结果:_____________________ 二、完成下列冒泡排序程序(每个空格3分) void bubblesort(int r[ ],int n) {int I,j,temp; for(I=0;I for(j= (1) ;j>=I+1;j--) if ( (2) ) {temp=r[j];r[j]=r[j-1]; (3) ;} } main() {int a[6]={3,5,2,4,1}; int j,n=6; bubblesort( (4) );/*函数调用*/ for(j=0;j 三、编写程序从键盘输入20个学生的成绩,求最高分,最低分和平均分。(15分) 练习三答案: 一、(1) 2,1 (2) 1 (3) 0 (4) 1,2,6 (5) 8 7 1 5 2 (6) 6 -1 (7) s=15 (8) length=20 (9) The output is: _i=6 j=144(10) 2 3 5 6 7 9 二、 (1) n-1 (2) r[j] C语言程序设计练习四 学号_________ 姓名_____________ 分数______________ 一.单项选择题(在下列每小题四个备选答案中选出一个正确答案,并将其字母号填入题目后面的括号内。每小题2分) 1.已知a=2,b=3,执行下面条件语句后,b的值是( )。 if (a<0) if (b<0) b++; else b--; A.3 B.2 C.4 D.0 2.下面( )是C语言的有效实数。 A.+3.14 B.47 C.1,234.00 3.a和b是实数变量,c和d是整数变量,下面( )赋值语句是正确的。 A.a=a%c/b; B.c+1=b+d; C.a=c/d; D.c=”a”; 4.以下运算符中优先级最高的是( )。 A.?: B.== C.% D.++ 5.阅读以下程序: main() {int count; float sum=0.0; for (count=1;count<8;count++) switch (count ) { case 1:case 4:case 5: sum+=count;break; case 2:case 3:case 7:sum=1.0; } printf(“%4.1f”,sum); } 程序的执行结果为( ) A.23.0 B.10.0 C.11.0 D.1.0 6.阅读以下程序: main() {int x=3,p=1,I,sum=0; for(I=1;I<=x;I++) p*=x; sum+=p; printf(“%d”,sum); } 程序的执行结果为( ) A.6 B.27 C.9 D.28 7.以下叙述正确的是( ) A.while语句的循环体至少执行一次 B.do-while语句的循环体至少执行一次 C.for语句的循环体至少执行一次 D.while语句用于循环次数已知的循环 8.for(j=-1;j<2;j++){循环体},则循环执行( )次。 A.2 B. 3 C.4 D.5 二.改错题(指出所给程序中的错误,在错误位置处打上横线标记,并注明错误原因。每题6分) 1.#define PI 3.14; 去掉; main() { int s; float r; 应是float scanf(“%d”, r); %f, & s=PI*r*r; printf(“s=%6.2f”, s); } 2.#define “stdio.h” main() { char c1=”a”; c; 单引号,逗号 c=getchar; 加函数括号 if (c1=c) printf(“c1==c\\n”); 双等号 else printf(“c1!=c\\n”); } 3.程序功能:求n以内的偶数之和。 main() {int sum=0,n=100; for(j=2;j<=n;j++); 去除 { sum=0; 去除 sum=sum+j: j++; } printf(sum=%d, &sum); 加双引号,去掉& } 4.输入x (|x|<1),计算S,S=x+x2/2+x3/3+x4/4+…,直到最后一项的绝对值小于10-6为止。 main() {float x, s, term; int n; scanf(“%f”,&x); term=x; s=0; n=1; 应为s= term do { n++; term=term*x/n; 改为term=term*x s=s+term ; 改为s=s+(float)term/n; }while fabs(term) 三.读程序(阅读给出的程序,将其运行结果写在横线上。每题6分) 1. main() {int a=5,b=4,c=9; printf(“***%d”, a++<=5 && b--<=2 && c++); } 程序的运行结果为 _。 2. main() { int a=5; a+=a+=a-=a+a; printf(“%d\\n”,a); } 程序的运行结果为 _______。 3. main() {int I,k,n,s=0; scanf(“%d”,&n); for(I=1;I<=n;I++) {scanf(“%d”,&k); if (k%2==0) s+=k;else s+=k/2; } printf(“%d”,s); } 执行该程序,当输入 8 15 26 13 34 28 17 25 22 ↙ 时,输出为___________________。 4.main() {int a,b,c; a=2;b=3;c=-1; if (a>b) if (a>c) printf(“%d\\n”,a); else printf(“%d\\n”,b); printf(“%d%o%x%u\\n”,c,c,c,c); } 程序的运行结果为 ____________ 。 四.编程题(阅读给出的程序,在横线上填入适当的语句、表达式或其他成分,以完善程序。每个空格3分) 1. 输入任意一整数,计算其各位数字之和与各位数字之积。 main() {int a,n,m,s,p; scanf(“%d”,&n); (1) ; (2) ; m=n; while ( (3) ) { (4) ;m/=10; s+=a;p*=a; } printf(“s=%d,p=%d”,s,p); } 2. 从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入。 main() { (1) n,i,j; i=j=0; scanf (“%d”,&n); while ( (2) ) { if (n>0) i= (3) ; if (n<0) j= (4) ; (5) ; } printf(“i=M j=M\\n”,i ,j); } 3. π的近似值可用以下公式求得: ,当n取值10000时结束。 #include “math.h” main() { long i; (1) pi; pi=0.0; for (i=1; i<10000;i++) pi+= (2) ; pi=sqrt(6.0*pi); printf(“ (3) “,pi); } 练习四答案: 一、(1) A (2) A (3) C (4) D (5) D (6) B (7) B (8) B 二、见题目中红色处 三、(1)***0(2)-20(3)143(4)-1,177777,ffff,65535, 四、1、(1) s=0 (2) p=1 (3) m!=0 (4) a=m 2、(1) int (2) n (3) i+1 (4) j+1 (5) scanf (“%d”,&n); 3、(1) double (2) 1.0/(i*i) (3) %f 返回 C语言练习五 读程写结果: 1.设有int a[ ]={1,2,3},*p=&a[0];则执行 *p++;*p+=1;printf(“%d,%d,%d”,a[0],a[1],a[2]);后输出为( )。 2.设int a[ ][4]={1,2,3,4,5,6,7,8};int (*p)[4]=a;则 printf(“%d”,*(*(p+1)+2));的输出为 ( ) 3.设有struct sk{int a;char b;}data={97,’A’},*p=&data;,则执行printf(“%d,%d,%c,%c”,data.a,p->b,p->a,data.b);的输出为 ( ) 4.设有enum day{ sun,mon,tue=5,wed,thu=9,fri,sat}days; 则执行printf(“%d,%d,%d,%d”,sun,mon,thu,sat);的输出为 ( ) 5.设有struct sk{int a;float b;}d[4]={{1,4},{2,5},{6,7},{8,9}}; 则printf(“%3.1f”,d[1].a*d[3].b/d[2].b);的输出是 ( ) 6.main() { int a=4,b=3,c=1,d=2,x=0; if (a>b) if (c>d) x=1; else x=2; printf(“%d\\n”,x); } 写出其输出结果( ) 7.int func(int x,int y) {x=x+1; y=y+2; return x; } main() {int x,y, z; x=1;y=2; z=func(x,y); printf(“%d,%d,%d”,x,y,z); } 写出其输出结果( ) 8.struct {char *name; int age; }x[ ]={“Li ming”,39, “Liu qun”,21, “cheng guang”,40}; main() {int j; for(j=0;j<3;j++) printf(“%s:%d\\n”,x[j].name,x[j].age); } 写出其输出结果( ) 9.struct sk{int a;float b;}data={10,5.4}; main() {struct sk *p; p=&data; printf(“%d,%3.1f”,p->a,p->b); } 其输出结果( ) 10.void func(int x[ ],int n) {int j,temp; for (j=0;j<=n/2;j++) {temp=x[j]; x[j]=x[n-1-j]; x[n-1-j]=temp;} } main() { int a[5]={1,2,3,7,8},len=5,k; func(a,len); for (k=0; k 写出其输出结果( ) 11.main() {int low,hig,mid, key; static int a[10]={80,67,45,33,21,19,17,15,8,1}; scanf(“%d”,&key); for (low=0,hig=9;low<=hig; ) {mid=(low+hig)/2; if (a[mid]==key) break; else if (a[mid]>key) low=mid+1; else hig=mid-1; } if (low<=hig) printf(“%d\\n”,mid);else printf(“-1”); } 当输入数据为67↙时, 程序的输出结果为( ) 12. main() {int *p,*q,n; scanf(“%d”,&n); p=(int*)malloc(n*sizeof(int)); for(q=p;p<=q +n-1;p++) scanf(“%d”,p); for(p=q;p<=q+n-1;p++) if (*p%2!=0) printf(“=”,*p); } 当输入数据序列为8 4 2 6 5 1 3 8 7↙时 程序的输出结果为( ) 13.#define null 0 typedef struct node {int data; struct node *next; }lnode; lnode *create(int n) {linklist head,p; head=(lnode *)malloc(sizeof(lnode)); while (n>0) {p->next=(lnode *)malloc(sizeof(lnode)); p=p->next; scanf(“%d”,&p->data); n=n-1; } p->next=null; return head; } main() {lnode *head,*q;int x; scanf(“%d”,&x); head=create(x); q=head; while (q!=null) {if (q->data%2==0) printf(“=”,q->data); q=q->next; } } 当输入数据序列为4 4 2 8 5↙时, (1)画出调用create()后的链表结构图。 (2)写出程序的输出结果 ( ) 14.main() {int I,j,k,temp; int a[5]={8,9,3,1,2},n=5; for(I=0;I for (j=I+1;j if (I!=k){temp=a[k];a[k]=a[I];a[I]=temp;} } for(j=0;j 写出其输出结果( ) 15.void sort(int r[ ],int n) {int I,j,temp; for(I=0;I {temp=r[j];r[j]=r[j-1]; r[j-1]=temp;} } main() {int a[5]={3,5,2,4,1}; int j,n=5; sort( a,n );/*函数调用*/ for(j=0;j 写出其输出结果( ) 16.main( ) { extern int x,y; printf(“%d\\n”,func(x,y)); } int x=15,y=-5; func(int a,int b) {int s; s=a+b; return s; } 写出其输出结果( ) 17、读程序写功能。 main( ) {FILE *f1,*f2; int k; if (((f1=fopen(“c:\\\\tc\\\\p1.c”, “r”))==NULL) {printf(“can not open file!\\n”); exit (0);} if (((f2=fopen(“a:\\\\p1.c”, “w”))==NULL) {printf(“can not open file!\\n”); exit (0);} for (k=1;k<1000;k++) {if (feof (f1)) break; fputc (fgetc(f1),f2); } fclose (f1); fclose (f2); } 练习五答案: 1.1,3,3 2.7 3.97,65,a,A 4.0,1,9,10 5.2.8 6.2 7.1,2,2 8. Li ming:39 Liu qun: 21 cheng guang: 40 9.10, 5.4 10.8 7 3 2 1 11.1 12. 5 1 3 7 13.4 2 8 14.1 2 3 8 9 15. 1 2 3 4 5 16.10 17.将c:\\tc\\p1.c文件拷贝到a: 下 返回 C语言程序设计练习六 学号 姓名 成绩 ________ 一、单项选择题(每小题2分) 1.已知a=2,b=3,执行下面条件语句后,b的值是( )。 if (a<0) if (b<0) b++; else b--; A.3 B.2 C.4 D.0 2.下面( )是C语言的无效实数。 A.+3.14 B.-47.0 C.1,234.00 D. 2E-3 3.a和b是实数变量,c和d是整数变量,下面( )赋值语句是错误的。 A.a=d%c/b; B.c+1=b+d; C.a=c/d; D.c=’a’; 4.以下运算符中优先级最高的是( )。 A.&& B.== C.% D.++ 5.for(j=-1;j<2;j++){循环体},则循环执行( )次。 A.2 B. 3 C.4 D.5 6.设有int i;则执行表达式i=1,++i;后i的值为 ( ) A.1 B.2 C.3 D.4 7.设有int i=0,a,b=5;则表达式(a=10 && i && b)的值为( ) A.0 B.1 C.2 D.10 8.int b; b=(-1)||0; 则b的值为( ) A.3 B.2 C.1 D.0 9.设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2] 的值依次是( ) A. 10,11,12 B. 11,11,12 C. 10,12,12 D. 11,12,12 10.设有int s[2]={0,1},*p=s; 则下列错误的C语句是 ( ) A. s+=1; B. p+=1; C. *p++; D. (*p)++; 11.下列定义中,不是指针数组的定义是( ) A. int *p[4] B.char *q[4] C. int (*r)[4] D.float *s[5] 12.下列定义中,不是数组指针的定义是( ) A. int (*p)[4] B.char (*q)[4] C. int (*r)[4] D.float (*s)( ) 13.设int a[ ][4]={1,2,3,4,5,6,7,8};int (*p)[4]=a;则 printf(“%d”,*(*(p+1)+2));的输出为 ( ) A. 5 B. 6 C. 7 D. 8 14.设有如下定义,则对data中的a成员的正确引用是 ( ) struct sk{int a;float b;}data; A. data.a B. data->a C. a D. sk.a 15.设有struct sk{int a;float b;}data,*p=&data;,则data中的a成员的错误引用是 ( ) A. (*p).a B. p->a C. data.a D. p.a 16.表达式~3&(2&(3^4))的值为( )。 A. 0 B. 1 C. 2 D. 3 17.设有enum day{ sun,mon,tue,wed,thu,fri,sat}days; 则mon和thu的值分别为( ) A. 1和2 B. 2和4 C. 0和3 D. 1和4 18.设有struct sk{int a;float b;}d[3]={{1,4},{2,5},{6,7}}; 则printf(“%3.1f”,d[2].a*d[2].b/d[1].b);的输出是( ) A. 2.5 B. 2.0 C. 8.0 D. 8.4 二、读程写结果 1.main() (3分) { int a=6; a+=a/=a*=a+a; printf(“%d\\n”,a); } 程序的运行结果为: 2.main() (5分) { int a=4,b=3,c=1,d=2,x=0; if (a>b) {if (c>d) x=1;} else x=2; printf(“%d\\n”,x); } 写出其输出结果: 3.int test(int x,int y) (6分) {x=x+3; y=y+2; return x; } main() {int x,y, z; x=1;y=2; z=test(x,y); printf(“%d,%d,%d”,x,y,z); } 写出其输出结果: 4.struct { (6分) char *name; int age; }x[ ]={“Li ning”,19, “Lang ping”,21, main() {int j; for(j=0;j<3;j++) printf(“%s:%d\\n”,x[j].name,x[j].age); } 写出其输出结果: 5.main() (8分) {int low,hig,mid, key; static int a[10]={19,17,15,13,11,9,7,5,3,1}; scanf(“%d”,&key); ya ping”,20};“Deng for (low=0,hig=9;low<=hig; ) {mid=(low+hig)/2; if (a[mid]==key) break; else if (a[mid]>key) low=mid+1; else hig=mid-1; } if (low<=hig) printf(“%d\\n”,mid);else printf(“-1”); } 当输入数据为3↙时, 程序的输出结果为: 6. main() (6分) {int *p,*q,n; scanf(“%d”,&n); p=(int*)malloc(n*sizeof(int)); for(q=p+n-1;q>=p;q--) scanf(“%d”,q); for(q=p+n-1;p<=q;p++) printf(“=”,*p); } 当输入数据序列为8 4 2 6 5 1 3 8 7↙时 程序的输出结果为: 7.#define null 0 (8分) typedef struct node {int data; struct node *next; }lnode; lnode *create(int n) {linklist head,p; head=(lnode *)malloc(sizeof(lnode)); while (n>0) {p->next=(lnode *)malloc(sizeof(lnode)); p=p->next; scanf(“%d”,&p->data); n=n-1; } p->next=null; return head; } main() {lnode *head,*q;int x; scanf(“%d”,&x); head=create(x); q=head; while (q!=null) {if (q->data%2==0) printf(“=”,q->data); q=q->next; } } 当输入数据序列为7 9 2 8 5 6 3 4↙时, (1)画出调用create()后的链表结构图。 (2)写出程序的输出结果: 8.main() (8分) {int I,j,k,temp; int a[6]={7,5,9,3,6,2},n=6; for(I=0;I for (j=I+1;j if (I!=k){temp=a[k];a[k]=a[I];a[I]=temp;} } for(j=0;j 写出其输出结果: 三、读程填空,下列的程序是将数组内容倒置。 void func(int a[ ],int n) (6分) {int j,temp; /*n为数组元素个数*/ for (j=0;j<= (1) ;j++) {temp=a[j]; (2) ; a[n-1-j]=temp;} } main() { int x[5]={2,5,1,7,8},len=5,k; func( (3) );/*调用函数*/ for (k=0; k } 四、编写函数,求20个元素组成的整数数组A中的最大值、最小值及它们的下标。(8分) 练习六答案: 一、A.C.B.D.B.B. A. C. C. A. C. D. C. A. D. A. D. D. 二、1.2 2.0 3.1,2,4 4.略 5.8 6. 7 8 3 1 5 6 2 4 7.(1)略(2)2 8 6 4 8.2 3 5 6 7 9 三、(1) n/2(2)a[j]=a[n-1-j] (3)x,len 四、答案略 返回 C语言练习七 学号 姓名 成绩 一. 解答以下各小题。(28%,每小题4分) 1.写出下列数学表达式的C语言表达式。 2.找出下列符号中合法的标识符。 “abc” s06 file.c Abc a&b 10d 7*c 3.逗号表达式(a=3*5,a*5), a+15 的值和a的值。 4.若 a =1, 那么printf(“%d,%d,%d\\n”, a, a++, a--);输出的结果是什么? 5. 设int a =2, b=3, c, d, e ; 执行 c=(a++>= - - b); d =(a= = ++b); e=(a* =2+(b- =4)); 后a, b, c, d, e的值分别为多少? 6.输入you are student , 写出下列程序段的屏幕输出结果。 char str [30]; scanf (“%s”, str); printf(“str=%s”, str); 7.如下程序的执行结果是什么? Static int a[ ] = {1, 2, 3, 4, 5, 6} Int *p; P=a; *(p+3)+=2; printf(“%d,%d,%d”), *p, *(p+3), a[3]); 二. 读程序,写出结果。(15%,每题5分) 1.#include “stdio.h” main() { int a, b, c, d, x; a=c=x=0; b=1; d=20; if (a) d=d-10; else if (!b) if (!c) x=15; else x=25; printf(“d=%d,x=%d”, d, x); } 2. #include “stdio.n” main() { int j; for(j=1;j<=5;j++) { if(j%2) printf(“*”); else continue; printf(“#”); } printf(“$”); } 3. main ( ) { int k=4, q=1, p; p=func(k, q); printf(“%d\\n”, p); p=func(p, q); printf(“%d\\n”, p); } func( int a, int b) { static int m, n=2; n+=b+1; m=n+a+b; return(m); } 三、改错题,下列程序或函数中都有三个错。(每小题6分,共12分) 1. typedef struct stru {int x; char c; }str 少分号 main() { str a; str *p=a; 应为&a scanf(“%d,%c”,&p.x,&p.c); 应为&p->x,&p->c printf(“%d,%c”,a->x,a.c); 应为a.x } 2.下列程序是用二分法在递增的数组中查找某个数,若存在,输出该数的下标位置;否则输出-1。 main() {int low,hig,mid,flag=0,key; static int a[7]={10,13,15,17,19,21,25,28}; 应为8 scanf(“%d”,&key); for (low=0,hig=7;low<=hig&&flag==0; ) {mid=(low+hig)/2; if (a[mid]==key) flag=1; else if (a[mid] if (flag) printf(“%d\\n”,mid);else printf(“-1”); } 四. 读程填空。阅读下列程序说明和它的代码,把空格处的C代码写上。(22%,每空2分) 1.本程序的功能是将递增有序的数组变成递减有序。 main() {int a[5]={1,2,3,4,5}, j; rev( 1 ); for(j=0;j<5;j++) printf(“=”, 2 ); } void rev(int *x,int n) {int *p,*q, temp; p=x;q=x+n-1; for(; 3 ;p++,q--) {temp=*p; 4 ; 5 ; } } 2. 输入3行4列和4行3列的两个矩阵a、b,经过相乘运算,把值存放在一个3行3列的矩阵c中,打印矩阵c 。然后把矩阵c的值按行依次存放到一个一维数组,从小到大排列此数组,并打印。 #include “stdio.h” sort(int wd[],int n) /*排序一维数组中的值*/ { int i,j,k,t; for(i=0;i 6 ; for(j=i+1;j t=wd[i]; 8 ; wd[k]=t; } } main ( ) { int a[3][4],b[4][3],c[3][3],d[9]; int i,j,m; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf(“%d%d”, &a[i][j],&b[j][i]); m=0; for(i=0;i<3;i++) for(j<0;j<3;j++) { 9 ; for(k=0;k<4;k++) c[i][j]=c[i][j]+ 10 ; printf(“%d”,c[i][j]); d[m]=c[i][j]; m++; } printf(“\\n”); 11 ; for(i=0;i<9;i++) printf(“%d”, d[i]); } 五. 编程题。按指定要求编写下列各题的函数或C程序。 1. 编写一个程序,从键盘输入任意三位整数,将它们逆序输出。如:123,输出321。(7%) 2.编写函数从键盘输入20个学生的成绩,统计最高分,最低分和平均分。(8%) 3.用for语句编写程序输出如下图案。(8%) * *** ***** ******* 练习七答案: 一、1.(e*e-3*a+sqrt(b))/d*4 2.s06 3.75 ,15 4.1,0,1 5.3,-1,1,1,3 6.str=you 7.1,6,6 二、1. d=20,x=0 2. *#*#*#$ 3. 9 16 三、见题目中红色处 四、(1)a,5(2) a[j] (3) p (6)k=i (7) wd[j] a=x;b=x0/10;c=x/100; x=a*100+b*10+c; printf(“%d”,x); } (2)略 (3)main() { int j,k,n=4; for(j=1;j<=n;j++) {for(k=n-1;k>=j;k--)printf(\ for(k=1;k<=2*j-1;k++)printf(“*”); printf(“\\n”); } } 返回