最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

国家开放大学《C语言程序设计》综合练习题参

来源:动视网 责编:小OO 时间:2025-10-02 08:03:26
文档

国家开放大学《C语言程序设计》综合练习题参

国家开放大学《C语言程序设计》综合练习题参综合练习1一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为。a.mainb.namec.MAINd.function2.每个C语言程序文件的编译错误分为()类。a.2b.4c.3d.13.字符串"a+b=12\\n"的长度为()。a.6b.9c.8d.74.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语句。a.whileb.ifc.fo
推荐度:
导读国家开放大学《C语言程序设计》综合练习题参综合练习1一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为。a.mainb.namec.MAINd.function2.每个C语言程序文件的编译错误分为()类。a.2b.4c.3d.13.字符串"a+b=12\\n"的长度为()。a.6b.9c.8d.74.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语句。a.whileb.ifc.fo
国家开放大学《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;

}

文档

国家开放大学《C语言程序设计》综合练习题参

国家开放大学《C语言程序设计》综合练习题参综合练习1一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为。a.mainb.namec.MAINd.function2.每个C语言程序文件的编译错误分为()类。a.2b.4c.3d.13.字符串"a+b=12\\n"的长度为()。a.6b.9c.8d.74.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语句。a.whileb.ifc.fo
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top