c语言备用 下载本文

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 (10分)

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=I+1;j--) if ( r[j]

{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”); }

} 返回