复习专用C语言程序设计课堂练习题综合

更新时间:2023-07-25 02:14:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计课堂练习题 第7章 指针 一、选择题

1.已知p是一个整型指针变量,且p指向的是整型变量a的地址,则下列哪个语句是错误的?( )

A.*p=a; B. p=&a; C.p=&*p; D.p=*&p;

2.下列哪一项是不正确的字符串赋值或不正确的赋初值的方式?()

A. char *str;str=“string“; B.char str[7]={ s , t , r , i , n , g }; C. char str1[10];str1= “string“; D.char str1[]=“string“,*str2=”1234567”; 3.对于类型相同的指针变量,不能进行()运算。 A. + B. - C. = D.== 4.已知p是一个整型指针变量,a为一个一维整型数组,且p=a;则下列哪个语句是错误的?()

A.*p=a[0]; B. *p=*a; C. p=a+1; D.p=*a; 5.若有以下说明语句,则p2-p1的值为() int a[10],*p1,*p2; p1=a; p2=&a[5];

A. 5 B. 6 C. 10 D.没有指针与指针的减法 6.下列定义中不正确的是()

A.int *p; B. int p[10]; C.int (*p)() D.int *(p(n)); 7.以下程序的输出结果是() main(){

int a[]={1,2,3,4,5,6},*p; p=a;

printf(“%d,%d\n”,*p,*(p+4)); }

A. 0,5 B.1,5 C.0,6 D.1,6

8.若有以下说明和语句,且0<=i<10,则下面哪个不是对数组元素地址的正确表示()。 int a[]={1,2,3,4,5,6,7,8,9,10},*p,i; p=a;

A.&(a+1) B.a++ C. &p D.&p[i] 二、写出程序的输出结果 1.main(){

int a=10,b=20,s,t,m,*pa,*pb; pa=&a; pb=&b; s=*pa+*pb; t=*pa-*pb; m=*pa**pb;

printf“s=%d\nt=%d\nm=%d\n“,s,t,m); } 2.

main(){

int a[][3]={9,7,5,3,1,2,4,6,8}; int i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++)

{if (i==j) s1=s1+a[i][j]; if(i+j==2) s2=s2+a[i][j]; }

printf(“%d\n%d\n”,s1,s2); } 3.

main(){

int a[5]={1,3,5,7,9},*p,**k; p=a;k=&p;

printf(“%d”,*(p+2)); printf(“%d”,**k); } 4.

main(){

int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i=2,j=2; p=a;

printf(“%d”,*(*(p+i)+j)+*((a+i)+j)+**(p+i)+**p); }

三、填空

1. 在空格地方填上语句,以实现字符串复制的功能。 main(){

char *ps=“C language“; char str[15]; char *p1,*p2; p1=ps; p2=str;

while(*p1!= \0 ) {

}

*p2= \0 ;

printf(“ps=%s\n”,ps); printf(“str=%s\n”,str); }

2.下面程序完成从键盘输入两个字符串a和b,再将a和b的对应位置字符中的较大者存放在数组c中,填空完成该程序。 main(){

int k=0;

char a[80],b[80],c[80]={ \0 },*p,*q; p=a;q=b; gets(a); gets(b);

while( ) c[k]=*p; else c[k]=*q; p++;

k++; }

if(*p!=0) strcat(c,p); else strcat(c,q); puts(c); }

3.完成下面程序,以实现单词的输出功能。 main(){

char *s[]={“man”,”woman”,”girl”,”boy”,sister”}; char **q; int k;

for(k=0;k<5;k++)

; printf(“%s\n”,*q); } }

4.下列程序完成截取字符串s中从第m个位置开始的n个字符,返回所截字符串的首地址。 static char sub[20]; main(){ int m,n;

static char s[]=”good moring”;

char *cut(char *s1,int m1,int n1),*p; scanf(“%d%d”,&m,&n); p=cut(s,m,n); printf(%s\n”,p); }

char *cut(char *s1,int m1,int n1) {int k;

for(k=0;k<n1;k++)

; sub[k]= \0 ;

return ; }

5.下列程序求数组元素的平均值。

float f(int *p,int n) {int i;

float avg=0.0; for(i=0;i<n;i++) avg+=*p++;

return avg; }

main(){

int a[10]={1,2,3,4,5,6,7,8,9,10}; float avg;

,10);

printf(“\n Average=%f\n”,avg); }

6.下列程序完成3个操作。(1)输入10个字符串(每串不多于9个字符),依次放在a数组中,指针数组str中的每个元素依次指向每个字符串的开始。(2)输入每个字符串。(3)从这些字符串中选出最小的那个串输出。 main(){

char a[100],*str[10],*sp; int i,k; sp=a;

for(i=0;i<10;i++) {scanf(“%s”,sp);

str[i]= ; k=strlen(sp);

sp+= ; } k=0;

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

if (strcmp(str[i],str[k]) ) k=I; ; }

7.下面程序把数组元素按相反的顺序进行存放。 void inv(int *x,int n) { int *i,*j,t;

for(i=x,j=x+n-1; ;i++,j--) {t=*i;*i=*j;*j=t;} }

main(){

int i,a[10]={3,7,9,11,0,6,7,5,4,2}; printf(“The old array is:\n”); for(i=0;i<10;i++) printf(“%-6d”,a[i]); printf(“\n”);

; printf(“after reveser:\n”); for(i=0;i<10;i++) printf(“%-6d”,a[i]); printf(“\n”); }

8.用指针法求出数组中的最大元素与最小元素。 int max,min;

void max_min_value(int array[],int n){ int *p;

for( ;p<array+n;p++) if(*p>max) max=*p; else

if (*p<min) min=*p; }

main(){

int i,number[10],*p; p=number;

printf(“input 10 number:\n”); for(i=0;i<10;i++,p++) scanf(“%d”,p); ; max_min_value(p,10);

printf(“max=%10d min=%d\n”,max,min); }

9.把字符串按从小到大的顺序输出。 ,int n){ int i,j,k; char *temp;

for(i=0;i<=n-1;i++) { k=i;

for(j=i+1;j<=n;j++)

if ( ) k=j;

if(k!=i) {temp=name[i];name[i]=name[k];name[k]=temp;} } }

void print(char *name[],int n){ int i;

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

printf(“%s\n”, ); }

main(){

char *name[]={“Nanhua”,”Central South”,”HuNan”,”HuBei”}; sort(name,4); print(name,4); }

四、编程题

1.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数)凡报到3的人退出圈子,问最后留下的那位是原来的第几号。

2.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少? 3.输入一个字符串,内有数字和非数字字符,如:a123x456=4567?45at587将其中连续的数字作为一个整数,依次存放到数组a中。例如:123存放在a[0],456存放在a[1]……统计共有多少个整数,并输出这些数。

第9章 结构和其他数据机制 一、选择题 1.有定义如下: struct sk { int a; float b; }data,*p;

如果p=&data;则对于结构体变量data的成员a的正确引用是( )。 A.(*).data.a B.(*p).a C.p->data.a D.p.data.a 2.已知: struct st { int n;

struct st *next; };

static struct st a[3]={1,&a[1],3,&a[2],5,&a[0]},*p;

如果下述语句的显示是4,则对指针p的赋值是()。 printf(“%d”,++(p->next->n));

A.p=&a[0]; B. p=&a[1]; C. p=&a[2]; D. p=&a[3]; 3.已知: struct { int k; char c; float a; }test;

则sizeof(test)的值是() A.4 B. 5 C. 6 D. 7 4.若有以下定义和语句: union data { int k; char c; float f;

}a; int n;

则以下语句正确的是( )

A.a=5 B. a={2, a ,1.2} C. printf(“%d\n”,a) D.n=a; 5.已知: struct sk { int a; int age; }data,*p;

如果要使指针p指向data中的成员a,正确的赋值语句是( ) A.p=(struct sk*)&data.a; B.p=(struct sk *)data.a; C.p=&data.a; D.p=data.a;

6.已知enum week {sun,mon,tue,wed,thu,fri,sat} day;则正确的赋值语句是( ) A.sun=0; B. sat=day; C. sun=mon; D.day=sun; 7.下面程序的运行结果是( ) main(){ struct cmplx { int x; int y;

}cnum[2]={1,3,2,7};

printf(“%d\n”,cnum[0],y/cnum[0].x*cnum[1].x); }

A. 0 B. 1 C. 3 D.6 8.设有如下定义( ) struct sk { int n; float x; }data,*p;

若要使p指向data中的n域,正确的赋值语句是( ) A.p=(struct sk*)&data.n; B.p=(struct sk *)data.n; C.p=&data.n; D.*p=data.n;

9.以下对结构体变量stu1中成员age的非法引用是( ) struct student { int age; int num; }stu1,*p; p=&stu1;

A. stu1.age B.student.age C.p->age D.(*p).age

10.以下scanf函数调用语句中对结构体变量成员的不正确引用是( ) struct pupil

{ char name[20]; int age; int sex; }pup[5],*p;

p=pup;

A.scanf(“%s”,pup[0].name); B. scanf(“%d”,&pup[0].age); C. scanf(“%d”,&(p->sex)); D. scanf(“%d”,p->age); 二、填空题

1.下面程序的功能是输入学生的姓名和成绩,然后输出。 struct strinf {char name[20]; int score; }stu,*p; main(){ p=&stu;

printf(“Enter name:”); printf(“enter score:”);

);

printf(“output:%s,%d\n”, (3) , (4) ); }

2.下面程序段的功能是统计链表中节点的个数,其中first为指向第一个节点的指针(链表不带头节点)。请在 内填入正确内容。 struct link {char data;

struct link *next; }; …

struct link *p,*first; int c=0; p=first;

) ; ; }

三、编程题

1.编写程序:input和output函数输入/输出5个学生的记录,其中每个学生包括学号(char num[6])、姓名(char name[8])、4门课的分数(score)信息。 2.现有如下一个结构体,编程实现找到年龄最大的人,并输出。 static struct man{ char name[20]; int age;

}person[N]={“li”,18,”wang”,19,”zhang”,20,”sun”,22};

3.编写程序:有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,3门课成绩),计算出平均成绩。

C语言全部章节复习题

第一章C语言概述 一、选择题:

1、一个C程序的执行是从( A )。 A本程序的main函数开始,到main函数结束

B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C本程序的main函数开始,到本程序文件的最后一个函数结束 D本程序文件的第一个函数开始,到本程序main函数结束 2、 在 C 语言中,每个语句必须以( D )结束。 A. 回车符 B. 冒号 C. 逗号 D. 分号 3、C 语言规定:在一个源程序中,main函数的位置( C )。 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后 4、一个C 语言程序是由( B )。

A. 一个主程序和若干子程序组成 B. 函数组成 C. 若干过程组成 D. 若干子程序组成 5、下列说法中错误的是( D )。

A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其他函数 C. 任何非主函数可以调用其他任何非主函数 D. 程序可以从任何非主函数开始执行

6、用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( C )。 A. 生成可执行目标文件 B. 生成目标文件

C. 输出运行结果 D. 自动保存源文件 7.复合语句应用( C )括起来。

A. 小括号 B. 方括号 C. 大括号 D. 尖括号

8. 若有说明语句:int a; float b;,以下输入语句正确的是( C )。 A. scanf("%f%f",&a,&b); B. scanf("%f%d",&a,&b); C. scanf("%d,%f",&a,&b);

D. scanf("%6.2f%6.2f",&a,&b);

9.执行下面程序时,欲将25和5.5分别赋给a和b,正确的输入方法是( C )。 int a; float b;

scanf("a=%d,b=%f",&a,&b); A) 25□5.5 B) 25,5.5 C) a=25,b=5.5 D) a=25□b=5.5 二、填空题:

1、C 语言只有 32 个关键字和 9 种控制语句。

2、每个源程序有且只有一个 main 函数,系统总是从该函数开始执行C语言程序。 3、C 语言程序的注释可以出现在程序中的任何地方,它总是以 \* 符号作为开始标记,以 */ 符号作为结束标记。

4、C 语言中,输入操作是由库函数 scanf 完成的,输出操作是由库函数 printf 完成的。

5、系统默认的C 语言源程序文件的扩展名是 .c ,经过编译后生成的目标文件的扩展名是 .obj ,经过连接后生成的可执行文件的扩展名是 .exe 。 6、C 语言的标识符只能由字母、数字和 下划线 三种字符组成。 第三章数据类型、运算符和表达式 一、选择题:

1、以下选项中,不正确的 C 语言浮点型常量是( C )。 A. 160. B. 0.12 C. 2e4.2 D. 0.0

2、以下选项中,( D )是不正确的 C 语言字符型常量。

A. 'a' B. '\x41' C. '\101' D. "a"

3、 在 C 语言中,字符型数据在计算机内存中,以字符的( C )形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD码

4、若x、i、j和k都是int型变量,则计算下面表达式后,x的值是( C )。 x=(i=4,j=16,k=32)

A. 4 B. 16 C.32 D.52

5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为( B )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 6、若有代数式 ,则不正确的C语言表达式是( C )。

A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3 7、表达式!x||a==b 等效于( D )。

A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是( A)。 A. 0,0 B. 0,1 C. 1,0 D. 1,1

9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是( B )。 A. 3 B. 0 C. 9 D. -12

10、在以下一组运算符中,优先级最低的运算符是( D )。 A. * B. != C. + D. =

11、设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是( B )。 A. 6 B. 12 C. 15 D. 表达式出错

12、若已定义 x 和 y为double 类型,则表达式 x=1,y=x+3/2 的值是( C )。 A. 1 B. 2 C. 2.0 D. 2.5

13、sizeof (double)的结果值是( A )。 A. 8 B. 4 C. 2 D. 出错

14、设a=1,b=2,c=3,d=4,则表达式:a<b? a : c<d? a : d的结果为( D )。 A. 4 B. 3 C. 2 D. 1

15、设a 为整型变量,不能正确表达数学关系:10<a<15的 C 语言表达式是( A )。 A. 10<a<15 B. a= =11|| a= =12 || a= =13 || a= =14 C. a>10 && a<15 D. !(a<=10) && !(a>=15)

16、设 f是实型变量,下列表达式中不是逗号表达式的是( D )。

A. f= 3.2, 1.0 B. f>0, f<10 C. f=2.0, f>0 D. f=(3.2, 1.0) 17、 表达式18/4*sqrt(4.0)/8值的数据类型是( C )。 A. int B. float C. double D. 不确定

18、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句 C2=’A’+’6’-‘3’;后c2中的值是( A )。 A. D B. 68 C. 不确定的值 D. C 19、以下用户标识符中,合法的是( B )。 A. int B. nit C. 123 D. a+b

20、C 语言中,要求运算对象只能为整数的运算符是( A )。 A. % B. / C. > D. *

21、若有说明语句:char c='\72';则变量c在内存占用的字节数是( A )。 A. 1 B. 2 C. 3 D. 4

22、字符串"ABC"在内存占用的字节数是( B )。 A. 3 B. 4 C. 6 D. 8

23、要为字符型变量 a赋初值,下列语句中哪一个是正确的( B )。

A. char a="3"; B. char a=’3’; C. char a=%; D. char a=*; 24、下列不正确的转义字符是( C )。 A. \\ B. \' C. 074 D. \0 二、填空题:

1、C 语言中的逻辑值“真”是用 1 表示的,逻辑值“假”是用 0 表示的。 2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 0 。

3、设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2, -a-5*b<=d+1, b==a=2的值分别为 1 、 0 、 1 、 1 。

4、设 float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4的值为 2.5 。 5、判断变量 a、b 的值均不为 0 的逻辑表达式为a!=0&&b!=0 。

6、求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 4,4,10,6 。 7、求解逗号表达式 x=a=3,6*a 后,表达式值、x、a 的值依次为18,3,3 。 8、数学式a/(b*c)的 C 语言表达式 a/b/c 。 三、编程题:

1、 设长方形的高为 1.5,宽为 2.3,编程求该长方形的周长和面积。 2、 编写一个程序,将大写字母 A转换为小写字母 a。 1. main()

{float x=1.5,y=2.3;printf(“area is %6.2f\n”,x*y);} 2. main()

{char c=’A’;printf(“%d”,c+32);} 顺序结构答案

一、单项选择题 AADAB CCBBD 二、 程序改错题 1.正确的程序为 # include "stdio.h" main( ) { char c ; getchar(c);

putchar('\007') ; /*鸣笛*/ putchar( ); }

2. 正确的程序为 main( ) { int a,b,s,l;

scanf("%d,%d",&a,&b); s=a*b; l=2*(a+b);

printf("l=%d,s=%d\n", l ,s); }

三、写出程序运行结果 1. 68 2. x=4 y=11 四、编程题 1. main( ) { int a,b,c,sum;

float ave;

scanf(“%d%d%d”,&a,&b,&c); sum=a+b+c; ave=sum/3.0;

printf(“sum=%d,ave=%.2f\n”,sum,ave); }

五、选做题 1.void main( ) { float a,b,temp; printf("input a and b:"); scanf("%d,%d",&a ,&b); temp = a; a = b; b = temp; printf("a=%d , b=%d\n", a , b); }

选择结构答案 一、单项选择题

1.B 2.A 3.D 4.C 5.D 6.B 7.C 二、填空题

1. 5 5 4 5 5 4 3 3 4 2. 4 0

3. VeryGood Good VeryGood Fail Pass Pass 三、 阅读程序,写出运行结果 1. 10, 4, 3; -1 3 6 1 四、程序设计题

1. main( ) { int a,b,x,y;

scanf(“%d %d”,&a,&b); x=a*a+b*b; if(x>100)

{y=x/100; printf(“%d”,y);} else printf(“%d”,a+b); }

2. if结构 main()

{ float t;char c;

printf(“input score,max as 100:\n”); scanf(“%f”,&t); if(t>=90) ch=’A’; else if(t>=80) ch=’B’; else if(t>=70) ch=’C’; else if(t>=60) ch=’D’; else ch=’E’;

printf(“Grade=%d\n”,ch); }

switch结构 main()

{float t;char c;

printf(“input score,max as 100:\n”); scanf(“%f”,&t); switch(t/10) { case 10:

case 9: ch=’A’;break; case 8: ch=’B’;break; case 7: ch=’C’;break; case 6: ch=’D’;break; case 5: ch=’E’; }

printf(“Grade=%d\n”,ch); }

五、选做题 1. main() { int a,b,c,t;

scanf(“%d%d%d”,&a,&b,&c); if(a<b){t=a;a=b;b=t;} if(a<c){t=a;a=c;c=t;} if(b<c){t=b;b=c;c=t;} printf(“%d,%d,%d\n”,a,b,c); }

2. switch((s>0)&&(s<=10))

{case 1: switch ((s>=3)&&(s<=6))

{ case 1: x=2; break;

case 0: switch (s>1)||(s>8)) { case 1: x=3; break; case 0: x=1; break; } } break;

case 0: x=0; break; }

循环结构答案 一、选择题

1.B 2.A 3.A 4.C 5.A 6.B 7.A 8.C 9.D 10.D 二、填空题 1. x1 x1/2-2

2. ch=getchar() ch>=’A’&&ch<=’Z’ 3. s=s+t*i t=-t

三、阅读下列程序,写出程序运行的输出结果 1.852 2. 8921 3. 5 4. SUM=2468 四、程序改错 1.main()

{ int i=200,n=0; /*n用来记录每行已打印数的个数*/ while(i<=300) {if(i%7==0) { //break;

printf("%5d",i); n=n+1; if(n==5) /*满5个换行*/ { printf("\n"); n=0; } }

i++; } } 2). main( ) { int i,s=0,t=1; for(i=1;i<=7;i++) { t=t*i; s=s+t; } printf("sum=%d\n",s); }

五、程序设计题 1. main() {int x,g,s,b; for(x=100;x<1000;x++) { b=x/100;s=x%100/10;g=x%10; if((g*g*g+s*s*s+b*b*b)==x) printf(“%d\n”,x); } }

2. main() { int i,s=0,f=1; for(i=2;i<80;i++) {s=s+f*(i-1)/i; f=-f;}

printf(s=%f\n”,s); }

六、选做题 1. main()

{ float s=0,m=2.0,n=1.0,p; int i;

for(i=1;i<=20;i++)

{s=s+m/n; p=m; m=m+n; n=p;} printf(s=%f\n”,s); }

2.#include <stdio.h> main( )

{ int i,j,k,s=1; for(i=1;i<=20;i++) for(j=1;j<=50;j++) { k=100-i*5-j*2; if(k>=0)

{ printf(“%2d %2d %2d”,i,j,k); s=s+1;

if(s%5==0) printf(“\n”); } } }

第7章 数组习题

A卷

1. 单项选择题

(1) int a[4]={5,3,8,9};其中 a[3]的值为( )。D A. 5 B. 3 C. 8 D. 9

(2) 以下 4 个字符串函数中,( )所在的头文件与其他 3 个不同。A A. gets B. strcpy C. strlen D. strcmp (3) 以下 4 个数组定义中,( )是错误的。 D

A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,( )形式是错误。 B

A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123"; (5) 在数组中,数组名表示( )。 A

A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址

(6) 若有以下数组说明,则数值最小的和最大的元素下标分别是( )。 B int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12

(7) 若有以下说明,则数值为 4 的表达式是( )。 D

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’, d, g ; A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c]

(8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( )。 A

A. 6 B. 7 C. 11 D. 12

(9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( )。

本文来源:https://www.bwwdw.com/article/x2lm.html

Top