视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
国家开放大学《C语言程序设计》综合练习题参
2025-10-02 08:03:26 责编:小OO
文档
国家开放大学《C语言程序设计》综合练习题参

综合练习1

一、单选题(每小题2分,共20分)

1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为。

a.main

b.name

c.MAIN

d.function

2.每个C语言程序文件的编译错误分为(    )类。

a.2

b.4

c.3

d.1

3.字符串"a+b=12\\n"的长度为(    )。

a.6

b.9

c.8

d.7

4.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为(    )语句。

a.while

b.if 

c.for

d.do

5.在下面的do-while循环语句中,其循环体语句被执行的次数为(    )。

int i=0; do i++; while(i<10);

a.4

b.5

c.10

d.3

6.将两个字符串连接起来组成一个字符串时,选用的函数为(    )。 

a.strcmp()

b.strcat()

c.strlen()

d.strcap()   

7.若用数组名作为函数调用的实参,传递给形参的是(    )。

a.数组元素的个数

b.数组中全部元素的值 

c.数组中第一个元素的值

d.数组的首地址

8.假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大(    )个字节。

a.32

b.16

c.8

d.4

9.假定s被定义为指针类型char *的变量,初始指向的字符串为"Hello world!",若要使变量p指向s所指向的字符串,则p应定义为(    )。

a.char *p=s;

b.char *p;p=*s;

c.char *p=&s;

d.char *p; p=&s;

10.从一个数据文件中读入以换行符结束的一行字符串的函数为(    )。

a.fgets() 

b.fgetc()

c.gets() 

d.getc()

二、填空题(每小题2分,共26分)

11.C语言中的每条简单语句以(分号)作为结束符。

12.C程序中的所有预处理命令均以(#)字符开头。

13.当不需要函数返回任何值时,则应使用(void)标识符来定义函数类型。

14.十进制数25表示成符合C语言规则的十六进制数为(19)。

15.假定不允许使用逻辑非操作符,则逻辑表达式a>b || b==5的相反表达式为(a<=b && b!=5)。

16.执行“typedef int DataType;”语句后,在使用int定义整型变量的地方也可以使用(DataType)来定义整型变量。

17.假定一维数组的定义语句为“char* a[8];”,则该数组a所占存储空间的字节数为(32)。

18.假定二维数组的定义语句为“double a[M][N];”,则该数组a的列下标的取值范围在0到(N-1)之间。

19.存储一个空字符串需要占用(1)个字节。

20.strcpy函数用于把一个字符串(拷贝)到另一个字符数组空间中。

21.程序的编译单位是一个(程序文件)。

22.假定a是一个一维数组,则a[i]的指针访问方式为((a+i))。 

23.执行int *p=malloc(sizeof(int))操作得到的一个动态分配的整型对象为(p)。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24.#include

       void main()

       {

           int x=5;

           switch(2*x) {

             case 4: printf("%d ",x); break;

             case 7: printf("%d ",2*x); break;

             case 10: printf("%d ",3*x); break;

             default: printf("%s 

           }

           printf("%d\\n",4*x);

       }

程序运行结果:15 20

25.#include

       void main() {

           int f1,f2,i;

           f1=1;

           printf("%d ",f1);

for(i=2;i<5;i++) {

               f2=3*f1+i;

               printf("%d ",f2);

               f1=f2;

           }

           printf("\\n");

       }

程序运行结果:1 5 18 58

26.#include

       #define N 8

       void main() {

           int a[N]={12,39,26,41,55,63,72,40};

           int i, i1=0, i2=0;

for(i=0;i               if(a[i]%2==1) i1++; else i2++;

           printf("%d %d\\n",i1,i2);

       }

程序运行结果:4 4

27.#include

#include

       void main {

           char s[15]="56712340";

           int i, n=strlen(s) ;

for(i=0; i               char c=s[i];

               s[i]=s[n-1-i];

               s[n-1-i]=c;

           }

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

       }

程序运行结果:0432198765

28.#include

       int LB(int *a, int n) {

           int i,s=1;

for(i=0;i           return s;

       }

       void main() {

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

           int b=LB(a,4)+LB(a+3,4);

           printf("b=%d\\n",b);

       }

程序运行结果:b=104

四、根据下列每个函数回答相应问题(每小题6分,共12分)

29.void SF(int x) {  //n为大于等于0的整数

           int i=2;

while(x>i) {

               if(x%i==0) printf("%d ",i);

               i++;

           }

           printf("\\n");

       }

    假定使用SF(70)调用该函数,则输出的所有整数依次为_____________。

参:

2 5 7 10 14 35 

30.void QC(struct IntNode* f) {  //f为一个单链表的表头指针

           while(f) {

printf("%d ",f->data);

f=f->next;

           }

       }

    假定结构类型IntNode的定义为:

       struct IntNode {int data; struct IntNode *next;};

 

    该函数的功能为:

参:

遍历并输出由表头指针f所指向的单链表中每个结点的data域的值。

五、按题目要求编写程序(每小题6分,共12分)

31.编写一个程序,首先从键盘上输入10个整数到一维数组a[10]中,然后按照下标从大到小的次序输出数组a[10]中的所有元素值。假定数组a[10]和循环变量i均在主函数中定义。

参:

#include

void main()

{

int a[10],I;

printf(“从键盘输入10个整数:\\n”);

for(i=0;i<10;i++) scanf(“%d”,&a[i]);

for(i=9;i>=0;i--) printf(“%d”,a[i]);

printf(“\\n”);

}

32.编写一个程序,已知6≤a≤50,10≤b≤30,求出满足不定方程3a+2b=120的全部整数组解。如(20,30)就是其中的一组解。

参:

#include

void main()

{

int a,b;

for(a=6;a<=50;a++)

for(b=10;b<=30;b++)

if(3*a+2*b==120)  printf(“(%d,%d)\\n”,a,b);

}

综合练习2

一、单选题(每小题2分,共20分)

1.C语言源程序文件的缺省扩展名为(    )。

a.cpp

b.C

c.exe

d.obj

2.设x和y均为逻辑值,则x && y为真的条件是x和y(    )。

a.均为假

b.其中一个为真

c.均为真

d.其中一个为假

3.在下列的符号常量定义中,正确的定义格式为(  )。

a.const char mark

b.const int M2 20

c.#define M3 10

d.#define M1 

4.for循环语句能够被改写为(  )语句。

a.while

b.if

c.switch

d.复合

5.在下面的一维数组定义中,错误的定义格式为(    )。

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

b.int a[5];

c.int a[]; 

d.int a[10]={0};

6.下面的函数原型声明中存在语法错误的是(    )。

a.void AA(int, int);

b.void AA(int a, int);

c.void AA(int a; int b;);

d.void AA(int a, int b);

7.假定a为一个数组名,则下面存在错误的表达式为(    )。

a.*a++

b.*(a+1) 

c. *a

d. a[i] 

8.假定有定义为“int a[10], x, *pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的赋值为(    )。

a.x=*(a+3)

b.x=*pa+3

c.x=a[3]

d.x=pa[3]

9.char类型的长度为________个字节。

a.3

b.1

c.4

d.2

10.向一个二进制文件中写入信息的函数为(    )。

a.fgets()

b.fwrite()

c.fputs()

d.fread() 

二、填空题(每小题2分,共26分)

11.C语言中的每条复合语句以(})作为结束符。

12.在#include命令中所包含的文件,可以是头文件,也可以是(程序)文件。

13.十进制数56对应的八进制数为(070)。

14.假定x=5,则表达式12+x++的值为(17)。

15.增量表达式++y表示成赋值表达式为回答(y=y+1)。

16.若x=5,y=6,则x>y的值为(0)。

17.假定二维数组的定义为“int a[4][5];”,则该数组所含元素的个数为回答(20)。

18.执行“typedef int ABC[20];”语句把ABC定义为具有20个整型元素的(数组)类型。

19.strcat()函数用于(连接)两个字符串。

20.假定p所指对象的值为30,p+1所指对象的值为24,则*p++的值为(30)。

21.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为((char )p)。

22.NULL是一个符号常量,通常作为空指针值,它对应的值为(0)。

23.假定要动态分配一个类型为struct Worker的对象,并由r指针指向这个对象,则使用的表达式为(struct Worker r)=malloc(sizeof(struct Worker))。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24.#include

       void main() {

           int i,s=0;

for(i=1;i<7;i++) s+=i*i;

           printf(“s=%d\\n”,s);

       }

程序运行结果:s=91

25.#include

       #define N 6

       void main()

       {

           int i,a[N]={2,5,8,10,15,20};

for(i=0; i               if(a[i]%4==0) printf("%d ",a[i]);

           printf("\\n");

       }

程序运行结果:8 20

26. #include

#include

       void main() {

           int i;

           unsigned int len;

           char* a[5]={"stud

           len=strlen(a[0]);

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

if(strlen(a[i])>len) len=strlen(a[i]);

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

       }

程序运行结果:7

27.#include

        void main()

        {

            int a,b;

for(a=2,b=3; b<30;) {

                printf("%d %d ",a,b);

                a=a+b;

                b=a+b;

            }

        }

程序运行结果:2 3 5 8 13 21

28.#include

       void LE(int* a, int* b) {

           int x=*a;

           *a=*b; *b=x;

       }

       void main() {

           int x=5, y=8;

           printf("%d %d ",x,y);

           LE(&x,&y);

           printf("%d %d\\n",x,y);

       }

程序运行结果:5 8 8 5

四、写出下列每个函数的功能(每小题6分,共12分)

29.#include

       int SG(int x) {            //x为大于等于2的整数

           int a=(int)sqrt(x);    //sqrt(x)取x的平方根

           int i=2;

while(i<=a) {

               if(x%i==0) break;

               i++;

           }

if(i<=a)return 0; else return 1;

       }

     函数功能:

参:判断x是否为一个素数,若是则返回1,否则返回0。

30.int FindMax(struct IntNode *f)  //f为一个单链表的表头指针

       {

           int x;

           if(!f) {printf("单链表为空\\n"),exit(1);}

x=f->data;

f=f->next;

           while(f) {

if(f->data>x) x=f->data;

f=f->next;

           }

           return x;

       }

    假定struct IntNode的类型定义为:

        struct IntNode { int data; struct IntNode* next;};

     函数功能:

参:求出由f所指向的单链表中所有结点的最大值。

五、按题目要求编写程序或函数(每小题6分,共12分)

31.编写一个程序,输出35以内(含35)的、能够被4或者7整除的所有整数。

参:

#include

void main()

{

int i;

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

    if(i%4==0||i%7==0) printf(“%d”,i);

printf(“\\n”);

}

32.编写一个递归函数“int FF(int a[], int n)”,求出数组a中所有n个元素之积并返回。

参:

#include

int FF(int a[],int n)

{

if(n==1) return a[0];

else

return a[0]*FF(a+1,n-1);

}

main()

{

int n=5,s,a[5]={1,2,3,4,5};

s=FF(a,n);

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

}

综合练习3

一、单选题(每小题2分,共20分)

1.由C语言源程序文件编译而成的目标文件的默认扩展名为(    )。

a.obj

b.exe

c.cpp

d.c

2.设x和y均为逻辑值,则x || y为假的条件是(    )。

a.它们均为假

b.它们均为真

c.其中一个为真

d.其中一个为假

3.枚举类型中的每个枚举常量的值都是一个(    )。

a.字符

b.整数

c.浮点数

d.记录

4.循环语句“for(i=0; i<=n; i++) S;”中循环体S被执行的次数为(    )。

a.n-1

b.n

c.n+1

d.1

5.假定有定义为“int a[4][5]={{1,3,5},{2,8}};”,则a[1][1]的值为(    )。

a.2

b.8

c.5

d.3

6.在下面的选项中,不能作为函数值返回类型的是(    )。

a.new

b.long

c.void

d.int

7.假定x的值为4,y的值为6,则表达式x++*++y的值为( )。

a.35

b.24

c.30

d.28

8.用calloc函数创建具有10个整型元素的动态存储空间的正确调用是(    )。

a.calloc(10,sizeof(char)) 

b.calloc(10)

c.calloc(sizeof(int),10,)

d.calloc(10,sizeof(int)) 

9.假定有定义“int b[10], *pb;”,则不正确的赋值为(    )。

a.pb=b

b.pb=b+4

c.pb=&b[0]

d.pb=b[5]

10.标准输入设备的文件流标识符是(    )。

a.stderr

b.stdout

c.stdin

d.stdio

二、填空题(每小题2分,共26分)

11.执行“printf("%c",'A'+3);”语句后得到的输出结果为(D)。

12.short int类型的长度为(2)。

13.用类型关键字表示十进制常数3.26f的类型为(float)。

14.假定y=5,则表达式--y*3的值为(12)。

15.逻辑表达式(x==0 && y>5)的相反表达式为((x!=0 || y<=5) 或:(x || y<=5))。

16.若x=5,y=10,则x!=y的逻辑值为(1)。

17.假定二维数组的定义为“int a[3][6];”,则该数组所占存储空间的字节数为(72)。

18.使用“typedef char BB[M][N];”语句定义(BB)为含有M行N列的二维字符数组类型。

19.字符串"a:\\\\xxk\\\数据"的长度为(11)。

20.假定p所指对象的值为20,p+1所指对象的值为30,则*++p的值为(30)。

21.假定一个数据对象为int*类型,则指向该对象的指针类型为(int)。

22.假定一个结构类型的定义为 “struct A{int a,b; A* c;};”,则该类型的长度为(12)。

23.假定要访问一个结构对象x中的数据成员a,则表示方式为(x.a)。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24.#include

       void main() {

           int i, s=0;

           for(i=1;;i++) {

if(s>20) break;

               if(i%2) s+=i;

           }

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

       }

程序运行结果:s=25

25.#include

       void main() {

           int a[9]={36,25,48,24,55,40,18,30,20};

           int i, b1, b2;

           b1=b2=a[0];

for(i=1; i<9; i++) {

if(a[i]>b1) b1=a[i];

if(a[i]           }

           printf("%d %d\\n",b1,b2);

       }

程序运行结果:55 18

26.#include

       void SB(char ch) {

           switch(ch) {

             case 'A': case 'a':

                 printf("WW "); break;

             case 'B': case 'b':

                 printf("GG "); break;

             default:

                 printf("BB "); break;

           }

       }

       void main() {

           char a1='a',a2='B',a3='f';

           SB(a1);SB(a2);SB(a3);

           printf("\\n");

       }

程序运行结果:WW GG BB

27.#include

       #define M 6

       void main()

       {

           int i,x;

           int a[M]={10,15,22,37,46,58};

for(i=0; i           printf("%d %d\\n",a[2],a[4]);

       }

程序运行结果:37 15

28.#include

       struct Worker {

           char name[15]; int age; float pay;

       };

       void main() {

           struct Worker x={"wanghua",34,4250};

           struct Worker y, *p;

           y=x; p=&x;

printf("%d %7.2f\\n", y.age+p->age, p->pay+300);

       }

程序运行结果:68  4550.00

四、写出下列每个函数的功能(每小题6分,共12分)

29.int FH() {

           int x,y=0;

           scanf("%d",&x);

           while(x!=-1) { y+=x; scanf("%d",&x);}

           return y;

       }

     函数功能:

参:求出从键盘上输入的一批整数的总和,以-1作为结束数据输入的标志。

30.int FF(struct IntNode *f)  //f为指向一个单链表的表头指针

        {

            int n=0;

            if(!f) return 0;

            while(f) {

                n++;

f=f->next;

            }

            return n;

        }

    假定struct IntNode的类型定义为:

        struct IntNode { int data; struct IntNode* next; };

     函数功能:

参:求出并返回由f所指向的单链表中所有结点的个数。

五、按题目要求编写程序或函数(每小题6分,共12分)

31.编写一个程序,利用while循环,计算并打印输出的值,其中正整数n值由键盘输入。假定求和变量用sum表示,计数变量用i表示,sum、i和n均定义为全局变量,sum和i的初值分别被赋予0和1。

参:

#include

    int n,i=1;

double sum=0;

void main()

{

        scanf(“%d”,&n);

while(i<=n) sum+=(double)1/i++;

        printf(“sum=%1f\\n”,sum);

}

32.根据函数原型“void DD(int a[], int n, int MM)”编写函数定义,利用双重循环查找并打印输出数组a[n]中任何两个元素的值等于MM值的元素值。假定a[i]+a[j]等于MM,则输出格式为:(a[i],a[j])。

参:

void DD(int a[],int n,int MM)

    {

int i,j;

for(i=0;i for(j=i+1;j        if(a[i]+a[j]==MM)  printf(“%d,%d\\n”,a[i],a[j]);

}

综合练习4

一、单选题(每小题2分,共20分)

1.由C语言目标文件连接而成的可执行文件的缺省扩展名为(    )。

a.exe

b.obj

c.c

d.cpp

2.设有两条语句为“int a=10; a+=a*a;”,则执行结束后,a的值为(    )。

a.100

b.10

c.20

d.110

3.带有随机函数调用的表达式rand()%50的值在(    )区间内。

a.1~50 

b.1~49

c.0~49  

d.0~50

4.for循环语句“for(i=0; ia.(n+1)/2 

b.n-1

c.n/2+1

d.n/2-1

5.在下列的字符数组定义中,存在语法错误的是(    )。

a.char a[15]={'1','2'};

b.char a[20]="abcdefg";

c.char a[10]='5';

d.char a[]="x+y=55.";

6.若有一个函数原型为“double *function()”,则它的返回值类型为(    )。

a.函数指针型

b.实数型

c.实数指针型

d.数组型

7.在C语言中,所有预处理命令都是以(    )符号开头的。

a.#

b.&

c.*

d.@

8.假定整数指针p所指数据单元的值为30,p+1所指数据单元的值为40,则执行*p++后,p所指数据单元的值为(    )。

a.10

b.40

c.70

d.30

9.若要使p指向二维整型数组a[10][20],则p的类型为(   )。

a.int **

b.int *

c.int *[20]

d.int(*)[20]

10.表示文件结束符的符号常量为(    )

a.feof

b.eof

c.Eof

d.EOF

二、填空题(每小题2分,共26分)

11.一个函数定义由(函数头)和函数体两部分组成。

12.执行“printf("%c",'F'-3);”语句后得到的输出结果为(C)。

13.int类型的长度为(4)。

14.表达式(float)25/4的值为(6.25)。

15.若x=5,y=10,则x<=y的逻辑值为(1)。

16.作为语句标号使用的case和default只能用于(switch)语句的定义体中。

17.在程序中执行到(return)语句时,将结束所在函数的执行过程,返回到调用该函数的位置。

18.假定二维数组的定义为“char a[M][N];”,则该数组所含元素的个数为(M N)。

19.存储字符'a'需要占用存储器的(1)个字节空间。

20.用于存储一个长度为n的字符串,需要的字符数组的长度至少为(n+1)。

21.假定p所指对象的值为30,p+1所指对象的值为46,则执行表达式(*p)++后,p所指对象的值为(31)。

22.假定p是一个指向整数对象的指针,则用(p)表示该整数对象。

23.假定一个结构类型的定义为“struct B{int a[5]; char* b;};”,则该类型的理论长度为(24)。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24. #include

       void main() {

           int i, s1=0, s2=0;

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

               if(i%2) s1+=i;

               else s2+=i;

           printf("%d %d\\n",s1,s2);

       }

程序运行结果:25 30

25.#include

       const int M=20;

       void main()

       {

           int i=2;

           while(1) {

if(i>M/2) break;

               if(M%i==0) printf("%d ",i);

               i++;

           }

           printf("\\n");

       }

程序运行结果:2 4 5 10

26.#include

       int a[7]={4,5,6,15,20,12,9};

       void main()

       {

           int i,s1,s2;

           s1=s2=0;

for(i=0; i<7; i++) {

               switch(a[i]%2) {

                 case 0: s2+=a[i];break;

                 case 1: s1+=a[i];break;

               }

           }

           printf("%d %d\\n",s1,s2);

       }

程序运行结果:29 42

27.#include

       void main() {

           int a[3][3]={{3,15,7},{9,11,10},{6,8,20}};

           int i,*p=&a[0][0];

for(i=0;i<9;i++) {

if(*p>10) printf("%d ",*p);

               p++;

           }

           printf("\\n");

       }

程序运行结果:15 11 20

28.#include

#include

       struct Worker { char name[15]; int age; float pay;};

       void main() {

           struct Worker x;

           char *t="liouting";

           int d=38; float f=2400;

           strcpy(x.name,t);

           x.age=d; x.pay=f;

           x.age++; x.pay*=2;

           printf("%s  %d  %6.2f\\n",x.name,x.age,x.pay);

       }

程序运行结果:liouting  39  4800.00

四、写出下列每个函数的功能(每小题6分,共12分)

29.#include

       int SA(int a, int b) {

if(a>b) return 1;

           else if(a==b) return 0;

           else return -1;

       }

     函数功能:

参:比较两个整数a和b的大小,若a>b则返回1,若a==b则返回0,若a30.void Output(struct IntNode *f)  //f为单链表的表头指针

        {

            if(!f) return;

            while(f) {

printf("%d ",f->data);

f=f->next;

            }

            printf("\\n");

        }

    假定struct IntNode的类型定义为:

        struct IntNode { int data; struct IntNode* next;};

     函数功能:

参:遍历并输出由f所指向的单链表中每个结点的值。

五、按题目要求编写程序或函数(每小题6分,共12分)

31.编写一个程序,计算1+3+32+...+310的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。

参:

#include

    voil main()

    {

int i;

int p=1;

int s=1;

for(i=1;i<=10;i++){p*=3;s+=p;}

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

}

32.据函数原型“int FF(int a[], int n)”,编写函数定义,计算并返回数组a[n]中所有元素之和。

参:

int FF(int a[],int n)

    {

    int i,sum=0;

for(i=0;i    return sum;

}

综合练习5

一、单选题(每小题2分,共20分)

1.程序运行中需要从键盘上输入多于一个数据时,各数据之间默认使用(    )符号作为分隔符。

a.逗号或回车

b.空格或回车

c.空格或逗号 

d.逗号或分号

2.逻辑表达式(x>0 && x<=10)的相反表达式为(    )。

a.x>0 && x>10

b.x<=0 && x>10

c. x<=0 || x<=10

d.x<=0 || x>10

3.当处理一个问题时的循环次数已知时,最好采用(    )循环来解决。

a.do-while

b.while

c.for 

d.switch

4.假定i的初值为0,则在循环语句“while(ia. n-1

b.n

c.n+1

d.n/2

5.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为(    )。

a.8

b.4

c.2

d.6

6.在下列选项中,不正确的函数原型格式为(    )。

a.void int(double* a);

b.int Function(int a);

c.int Function(a); 

d.int Function(int a);

7.假定p是一个指向double类型的数据指针,则p+1所指向的数据的地址比p所指向的数据的地址大(    )个字节。

a.2

b.4

c.1

d.8

8.假定有一条定义语句为“int m=7, *p;”,则给p赋值的正确表达式为(    )。

a.p=*m

b.p=&m 

c.p=m

d.*p=&m

9.假定指针变量p的定义语句为“int *p=malloc(sizeof(int));”,要释放p所指向的动态存储空间,应调用的函数为(    )。

a.free(&p)

b.free(p)

c.free(*p)

d.delete(p)

10.C语言中的系统函数fopen()是(    )一个数据文件的函数。

a.写入

b.打开

c.读取

d.关闭 

二、填空题(每小题2分,共26分)

11.用于输出表达式值的标准输出函数的函数名是(printf)。

12.每个C语言程序文件在编译时可能出现有致命性错误,其对应的标识符为(error)。

13.已知'A'~'Z'的ASCII码为65~90,当执行“int x='C'+6;”语句后x的值为(73)。

14.表达式(int)24.6的值为(24)。

15.假定不允许使用逻辑非操作符,则关系表达式x+y>5的相反表达式为(x+y<=5)。

16.假定x=15,则执行“a=(x?10:20);”语句后a的值为(10)。

17.假定一维数组a的定义语句为“char* a[M];”,则该数组所占存储空间的字节数为(4 M)。

18.存储字符串"a"需要至少占用存储空间中的(2)个字节。

19.strlen()函数用于计算一个字符串的(长度)。

20.在C语言中,一个函数定义由函数头和(函数体)这两个部分组成。

21.假定p所指对象的值为25,p+1所指对象的值为52,则执行表达式*(p++)后,p所指对象的值为(52)。

22.假定p是一个变量,则用(&p)表示该变量的地址。

23.把间接访问表达式p->name改写成对应的直接访问表达式为(( p).name)。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24.#include

       void main() {

           int n=6, y=1;

           while(n--) y+=3+n;

           printf("y=%d\\n",y);

       }

程序运行结果:y=34

25. #include

       void main()

       {

           int i,s=0;

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

               if(i%3==0 || i%4==0) s+=i;

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

       }

程序运行结果:s=30

26.#include

       void main() {

           char a[]="abcfkgamd";

           int i1=0, i2=0, i=0;

           while(a[i]) {

if(a[i]<'e') i1++; else i2++;

               i++;

           }

           printf("%d %d\\n",i1,i2);

       }

程序运行结果:5 4

27.#include

       void main() {

           int a[9]={2,4,8,12,16,20,24,28,32};

           int *p=a;

           do {

               printf("%d ",*p);

               p+=3;

} while(p           printf("\\n");

       }

程序运行结果:2 12 24

28. #include

       struct Worker { char name[15]; int age; double pay;};

       void main() {

           struct Worker a[4]={{"abc",20,2400},{"defa",50,3600},

                        {"ghin",40,2500},{"jklt",36,3200}};

           int i, s=0;

for(i=0; i<4; i++) s+=a[i].age;

           printf("s=%5.2Lf\\n",(double)s/4);

       }

程序运行结果:s=36.50

四、写出下列每个函数的功能(每小题6分,共12分)

29int SC(int a, int b, int c) {

if(a>=b && a>=c) return a;

if(b>=a && b>=c) return b;

           return c;

       }

参:求出a,b,c三个数中的最大值并返回。

30.int*  LI(int n) {

           int* a=malloc(n*sizeof(int));

           int i;

for(i=0;i           return a;

       }

参:首先建立一个动态整型数组a[n],接着从键盘上输入n个整数到a[n]中,最后返回数组a[n]的首地址。

五、按题目要求编写函数(每小题6分,共12分)

31.编写一个函数,函数原型为“int fun4(char* a)”,请采用while循环求出由字符指针a所指向的字符串中包含的十进制数字的个数,并把这个值作为函数值返回。

参:

int fun4(char*a)

{

    int n=0;

    while(*a)

{

if(*a>=”0”&&*a<=”9”)n++;

        a++;

}

return n;

}

32.编写一个主函数,计算并输出表达式1+22+32+...+n2的值,假定正整数n的值由键盘输入。

参:

#include

void main()

{

    int n,i,s=0;

    scanf(“%d”,&n);

for(i=1;i<=n;i++)s+=i*I;

    printf(“s=%d\\n”,s);

}

注:若s的初值为1,则循环变量i的初值应修改为2。

综合练习6

一、单选题(每小题2分,共20分)

1.C语言程序中的基本功能模块为(    )。

a.表达式

b.标识符

c.语句

d.函数

2.逻辑表达式(x>0 || y==5)的相反表达式为(    )。

a.x<=0 || y!=5

b.x>0 || y!=5

c.x<=0 && y!=5

d.x>0 && y==5

3.循环体至少被执行一次的循环语句为(    )。

a.for

b.while

c.do-while

d.任一种循环

4.假定n的值为5,则表达式n++的值为(    )。

a.4

b.5

c.6

d.7

5.假定一个二维数组a的定义为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][0]的值为(    )。

a.6

b.4

c.0

d.2

6.假定一个函数原型为“char* func(int n)”,则该函数的返回值类型为(    )。

a.int

b.char

c.char*

d.int*

7.假定a为一个数组名,则元素a[i]的指针访问方式为(    )。

a.a+i 

b.*(a+i)

c.*a+i

d.&a+i  

8.假定有语句为“int *p=calloc(n+1,sizeof(int));”,则p所指向的动态数组中所包含的元素个数为(    )。

a.4*n

b.n+1

c.n-1

d.n

9.十进制数65表示成符合C语言规定的八进制数为  (    )。

a.0101

b.065

c.081

d.101

10.若要以读和写两种操作方式打开一个二进制文件,当文件不存在时返回打开失败信息,则选用的打开方式字符串为(    )。

a. "rb+"

b."r+"

c."ab+"

d."wb+"

二、填空题(每小题2分,共26分)

11.在一个C语言程序文件中,若要包含另外一个头文件或程序文件,则应使用的预处理命令为(#include)。

12.用于从键盘上为变量输入值的标准输入函数的函数名为(scanf)。

13.假定一个枚举类型的定义为“enum RA{ab,ac,ad,ae};”,则ac的值为(1)。

14.double类型的长度为(8)。

15.执行“int x=45,y=16;printf("%d",x/y);”语句序列后得到的输出结果为(2)。

16.把表达式x=x+y转换成复合赋值表达式为(x+=y)。

17.假定x的值为5,则执行“a=(!x? 10: 20);”语句后a的值为(20)。

18.假定一维字符指针数组a的定义为“char* a[8];”,则该数组占用的存储空间的字节数为(32)。

19.假定二维数组的定义为“double a[M][N];”,则数组元素的行下标取值范围在(0~M-1)之间。

20.空字符串的长度为(0)。

21.在所有函数定义之外定义的变量,若没有被初始化则系统隐含对它所赋的初值为(0)。

22.若p指向x,则(p)与x的表示是等价的。

23.直接访问表达式(*fp).score所对应的间接访问表达式为(fp->score)。

三、写出下列每个程序运行后的输出结果(每小题6分,共30分)

24.#include

       void main() {

           int i,j,k=0;

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

for(j=i; j<5; j++) k++;;

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

       }

程序运行结果:15

25.#include

        void main() {

            int x=28;

            int i=2;

while(i                if(x%i==0) {printf("%d ",i); x/=i;}

                i++;

            }

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

        }

程序运行结果:2 7 2

26.#include

       void main() {

           int a[8]={76,63,54,95,40,75,90,82};

           int i, s=0;

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

if(a[i]>=70 && a[i]<=85) s+=a[i];

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

       }

程序运行结果:s=233

27. #include

       int WF(int x, int y) {

           x=x+y;

           y+=x;

           return x+y;

       }

       void main() {

           int x=5, y=8;

           printf("%d\\n",WF(x,y));

       }

程序运行结果:34

28.#include

       int LA(int *a, int n) {

           int i,s=0;

for(i=0;i           return s;

       }

       void main() {

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

           int b=LA(a,5)+LA(a+2,3);

           printf("b=%d\\n",b);

       }

程序运行结果:b=34

四、写出下列每个函数的功能(每小题6分,共12分)

29.int WC(int a[], int n, int k) {

           int i, c=0;

for(i=0;i if(a[i]>=k) c++;

           return c;

       }

 

    函数功能:

参:统计并返回一维整型数组a[n]中大于等于k的值的个数。

30.void QA(struct Worker a[], int n)

       {

           int i;

for(i=0; i               scanf("%s %d %f", a[i].name, &a[i].age, &a[i].pay);

       }

    假定结构类型struct Worker 的定义如下:

       struct Worker { char name[15]; int age; float pay;};

     函数功能:

参:从键盘上为具有struct Worker结构类型的数组a[n]输入n个记录。

五、按题目要求编写函数(每小题6分,共12分)

31.根据函数原型“double Mean(double a[M][N],int m,int n)”,编写函数定义,要求返回二维数组a[m][n]中所有元素的平均值。假定在计算过程中采用变量v存放累加值和最后的平均值。

参:

double Mean(double a[M][N],int m,int n)

{int i,j;

double v=0.0;

for(i=0;ifor(j=0;jv/=m*n;

return v;

}

32.根据函数原型“int MM(int a[],int m)”,编写函数定义,计算并返回数组a[m]中元素最大值和最小值之差。

参:

int MM(int a[],int m)

    {

int i,,x1,x2;

x1=x2=a[0];

for(i=1;iif(a[i]>x1)x1=a[i];

if(a[i]}

         return x1-x2;

}下载本文

显示全文
专题