视频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语言程序设计A课程期末综合练习
2025-10-02 15:04:20 责编:小OO
文档
C语言程序设计课程期末复习练习

    一、单选题

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

        A. main      B. MAIN      C. name      D. function

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

        A. 1           B. 2           C. 3         D. 4

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

        A. 6      B. 7      C. 8      D. 9

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

        A. for      B. if      C. do      D. while

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

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

        A. 4      B. 3      C. 5      D. 10

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

        A. strlen()    B. strcap()    C. strcat()    D. strcmp()

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

        A. 数组的首地址          B. 数组中第一个元素的值

        C. 数组中全部元素的值    D. 数组元素的个数

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

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

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

        A. char *p=s;         B. char *p=&s; 

        C. char *p;p=*s;      D. char *p; p=&s;

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

        A. gets()      B. fgets()      C. getc()      D. fgetc()

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

        A. cpp     B. exe      C. obj      D. c

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

        A. 12      B. 144      C. 156      D. 288

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

        A. 1~19        B. 1~20         C. 0~19           D. 0~20

    14. for循环语句“for(i=0; i        A. (n+1)/2     B. n/2+1        C. n/2-1          D. n-1

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

       A. char a[20]="abcdefg";        B. char a[]="x+y=55.";

       C. char a[15]={'1','2'};        D. char a[10]='5';

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

        A. 实数型    B. 实数指针型    C. 函数指针型    D. 数组型

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

        A. *       B. #      C. &      D. @

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

        A. 40      B. 30       C. 70        D. 10

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

        A. int *   B. int **      C. int *[20]       D. int(*)[20]

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

        A. eof      B. Eof      C. EOF      D. feof

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

        A. 空格或逗号    B. 逗号或回车    C. 逗号或分号    D. 空格或回车

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

A. x<=0 || x>10 B. x<=0 && x>10

C. x<=0 || x<=10 D. x>0 && x>10

    23. 当处理特定问题时的循环次数已知时,通常采用(A)循环来解决。

        A. for      B. while      C. do-while      D. switch

    24. 假定i的初值为0,则在循环语句“while(i        A. n-1      B. n      C. n+1      D. n/2

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

        A. 2        B. 4      C. 6        D. 8

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

        A. int Function(int a);     B.void Function (char);

        C. int Function(a);         D.void int(double* a);

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

        A. 1           B. 2          C. 4          D. 8

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

        A. p=m       B. p=&m      C. *p=&m     D. p=*m

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

        A. free(p)     B. delete(p)     C. free(*p)     D. free(&p)

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

        A. 读取      B. 写入      C. 关闭      D. 打开

    二、填空题

    1.C语言中的每条简单语句以________作为结束符。

    2. C程序中的所有预处理命令均以______字符开头。

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

    4.十进制数25表示成符合C语言规则的十六进制数为________。

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

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

    7. 假定一维数组的定义为“char* a[8];”,则该数组所占存储空间的字节数为________。

    8. 假定二维数组的定义为“double a[M][N];”,则该数组的列下标的取值范围在_________之间。

    9. 存储一个空字符串需要占用________个字节。

    10. strcpy函数用于把一个字符串________到另一个字符数组空间中。

    11. 程序的编译单位是一个__________。

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

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

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

    15.short int类型的长度为________。

    16. 用类型关键字表示十进制常数3.26f的类型为________。

    17. 假定y=10,则表达式++y*3的值为________。

    18. 逻辑表达式(x==0 && y>5)的相反表达式为________。 

    19.若x=5,y=10,则x!=y的逻辑值为________。

    20. 假定二维数组的定义为“int a[3][5];”,则该数组所占存储空间的字节数为________。

    21. 使用“typedef char BB[10][50];”语句定义________为含有10行50列的二维字符数组类型。

    22. 字符串"a:\\\\xxk\\\数据"的长度为________。

    23.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为________。

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

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

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

    27. 用于输出表达式值的标准输出函数的函数名是________。

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

    29. 已知'A''Z'的ASCII码为6590,当执行“int x='C'+3;”语句后x的值为________。

    30. 表达式(int)14.6的值为________。

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

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

    33. 假定一维数组的定义为“char* a[M];”,则该数组所占存储空间的字节数为________。

    34. 存储字符串"a"需要至少占用存储器的________个字节。

    35. strlen()函数用于计算一个字符串的________。

    36. 在C语言中,一个函数由函数头和__________这两个部分组成。

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

    38. 假定p是一个指向整数对象的指针,则用________表示指针变量p的地址。

    39. 与结构成员访问表达式p->name等价的访问表达式为____________。

参考解答:

1. ;(或分号)      2. #              3. void          4. 0x19

5. a<=b && b!=5 6. DataType 7. 32 8. 0~N-1

9. 1                10. 拷贝(复制)  11. 程序文件     12. *(a+i)

13. *p              14. C             15. 2            16. float

17. 33              18. (x!=0 || y<=5) 或:(x || y<=5) 

19. 1               20. 60            21. BB           22. 11

23. 46              24. int**         25. 12           26. x.a

27. printf          28. error         29. 70           30. 14

31. x+y<=5 32. 10            33. 4*M          34. 2

35. 长度         360. 函数体       37. 46       38. &p

39. (*p).name

    三、写出下列每个程序运行后的输出结果

    1. #include

       void main()

       {

           int x=5;

           switch(2*x-1) {

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

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

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

             default: printf("%s 

           }

           printf("%s\\n

       }

   default switch end.

    2. #include

       void main() {

           int f1,f2,i;

           f1=1;

           printf("%d ",f1);

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

               f2=3*f1+1; 

               printf("%d ",f2);

               f1=f2;

           }

           printf("\\n");

       }

1 4 13 40 121

    3. #include

       void main() {

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

           int i, i1=0, i2=0;

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

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

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

       }

6  4

    4. #include

#include

       void main( ) {

           char s[15]="5671234";

           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);

       }

432198765

    5. #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,4,5,2};

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

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

       }

b=56

6. #include

       void main() {

           int i,s=0;

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

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

       }

s=55

    7. #include

       #define N 6

       void main()

       {

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

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

           printf("\\n");

       }

2 8 21

    8. #include

#include

       void main() {

           int i;

           unsigned int len;

           char* a[5]={"student

           len=strlen(a[0]);

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

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

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

       }

10

    9. #include

        void main()

        {

            int a,b;

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

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

                a=a+b;

                b=a+b;

            }

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

        }

2 3 5 8 13 21

    10. #include

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

           int x=*a;

           *a=*b; *b=x;

       }

       void main() {

           int x=15, y=26;

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

           LE(&x,&y); 

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

       }

15 26

26 15

    11. #include

       void main() {

           int i, s=0;

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

if(s>30) break;

               if(i%2==0) s+=i;

           }

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

       }

s=42

    12. #include

       void main() {

           int a[9]={36,25,48,24,55,40,18,66,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);

       }

66 18

    13. #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

    14. #include

       #define M 6

       void main()

       {

           int i,x;

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

           for(i=0; i for(i=0; i<6; i++) printf("%d ",a[i]);

           printf("\\n");

       }

58 46 37 22 15 10

    15. #include

       struct Worker {

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

       };

       void main() {

           struct Worker x={"wanghua",52,2350};

           struct Worker y, *p;

           y=x; p=&x;

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

       }

104  2370.00

    16. #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

    17. #include

        void main()

        {

            int x=60;

            int i=2, p=1;

            while(1) {

                if(x%i==0) {p*=i; x/=i;}

if(i            }

            printf("%d\\np);

        }

30

    18. #include

       void main() {

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

           int i;

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

if(a[i]>70) printf("%d ",a[i]);

           printf("\\n");

       }

76 75 90

    19. #include

       void WF(int x, int y) {

           x=x+y;

           y+=x;

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

       }

       void main() {

           int x=3, y=8;

           WF(x,y);

       }

11 19

    20. #include

       int LA(int *a, int n) {

           int i,s=0;

for(i=0;i           return s;

       }

       void main() {

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

           int b=LA(a,5);

           int c=LA(a+2,3);

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

       }

43 36

参考解答: 

     四、写出下列每个函数的功能

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

    1. #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;

       }

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

    2. 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;};

比较两个整数a和b的大小,若a>b则返回1,若a==b则返回0,若a 3. #include

       int SA(int a, int b) {

if(a>b) return 1;

           else if(a==b) return 0;

           else return -1;

       }

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

    4. 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;};

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

    5. int SC(int a, int b, int c) {

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

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

           return c;

       }

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

    6. int*  LI(int n) {

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

           int i;

for(i=0;i           return a;

       }

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

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

           int i, c=0;

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

           return c;

       } 

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

    8. 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;};

    五、按题目要求编写程序或函数

    1. 编写一个程序,输出50以内(含50)的、能够被3或者5整除的所有整数。

#include 

       void main()

       {

           int i; 

           for(i=3; i<=50; i++)

               if(i%3==0 || i%5==0) printf("%d ",i); 

           printf("\\n");

       } 

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

int FF(int a[], int n)

       {

           if(n<=0) {printf("n值非法\\n"),exit(1);} 

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

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

       }

    3. 编写一个程序,利用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=%lf\\n",sum); 

       }

    4. 根据函数原型“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]); 

       }

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

#include

       void main()

       {

           int i; 

           int p=1;         

           int s=1;                    

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

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

       }

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

int FF(int a[], int n) 

       {

           int i,sum=0;         

     for(i=0; i           return sum;    

       }

    7. 根据函数原型“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; i for(j=0; j           v/=m*n;

           return v;               

       }

注:函数体的最后两行可以合并为一条返回语句:return v/=m*n

    8. 根据函数原型“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; i if(a[i]>x1) x1=a[i]; 

              if(a[i]          }            

          return x1-x2;     

       }下载本文

显示全文
专题