1、习题1 一、选择题1.所有C函数的结构都包括的三局部是( 语句、花括号和函数体 函数名、语句和函数体 函数名、形式参数和函数体 形式参数、语句和函数体 C程序由()组成。 子程序 B.主程序和子程序)° A. B. C. D. 2. A. C.函数D.过程 3. 下面属于C语言标识符的是(A. 2abB. @f 4. Ci吾言中主函数的个数是(A. 2个B. I个 )°C. ?b )。 D. a12C.任意个 5. 以下关于C语言注释的表达中错误的选项是(以“/*”开头并以“矿'结尾的字符串为C语言的注释内容 A. 注释可出现在程序中的任何位置,用来向用户提示或
2、解释程序的意义程序编译时,不对注释作任何处理 B. 程序编译时,需要对注释进行处理 以下不是C语言的分隔符的是()。 A.逗号 B.空格 C.制表符以下关于C语言的关键字的表达中错误的选项是( D. 10 个)。 )。 D.双引号A. B. C. D. 关键字是C语言规定的具有特定意义的字符串,通常也称保存字 用户定义的标识符不应与关键字相同ANSI C标准规定的关键字有64个 ANSI C标准规定的关键字有32个 8. 在Visual C++ 6.0环境下,C源程序文件名的默认后缀是( A. .cppB. .exeC. .objD. .dsp假设在当前目录下新建一个名
3、为“LX”的工程,那么在当前目录下生成的工作区文 件名为( )。 C. LX.DSP)° A. LX.DSW B. LX.OPT 10 •面可能不影响程序正常运行的是( A.语法错误 B.逻辑错误二、填空题 1. C程序是由构成的,一个C程序中至少包含 是C程序的根本单位。 2. C程序注释是由和)。 C.警告提示D. D. LX.C算法错误 o因此,•所界定的文字信息组成的。 1. 设有数组定义为:char array []=”China”;那么数组array所占的空间为°
4、2. main() ( char arr[2][4]; strcpy(arr,"youn); strcpy(arr[ I arr[0][3]='&,; printf(u%s\nn,arr); } 程序执行后的输出结果是O 3. main() { inti,k,a[10],p[3]: k=5; for (i=0;ivl0;i++) a[i]=i; for (i=0;iv3;i++) p[i]=a[i*(i+l)]; for (i=0;iv3;i++) k=k+p[i]*2; prinlf(”%d\n”,k); } 程序执行后的输出结果是。 4. main() (
5、 charch[7J=( ”65ab21”}; int i,s=0 fbr(i=0;ch[i]>=,0, && ch[i]v='9';i+=2)s=10*s+ch[i]-'0,; printf(u%d\nM,s); } 程序运行的结果是o 三、程序设计题 1. 从键盘上输入10个整数,并放入一个一维数组中,然后将其前5个元素与后5个 元素对换,即:第1个元素和第10个元素互换,第二个元素和第9个元素互换……分别 输出数组原来的值和对换后各元素的值。 2. 设有如下两组数组: A: 2, 8, 7, 6, 4, 28, 70, 25 B: 79, 27, 32, 41, 57
6、 66, 78, 80 编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标 的元素相加,即2+79, 8+27……并把相应的结果放入第三个数组中,最后输出第三个数 组的值。 3. 编写程序,把下面的数据输入到一个二维数组中: 2536781312268893 7518223256 443658 然后执行以下操作: a. 输出矩阵两条对角线上的数;交换第一行和第三行的位置,然后输出。 习题6 一、选择题 1. 以下正确的函数定义形式是()0 A. double fun(int x, int y) B. double fun(int x ;int y)
7、 C. double fun(int x, int y); D. double fun(int x,y); 2. 在C语言中,以下说法不正确的选项是()o A. 实参可以是常量、变量或表达式 B. 形参可以是常量、变量或表达式 C. 实参可以为任意类型 D. 形参应与其对应的实参类型一致 3. 以下说法正确的选项是()。 A. 定义函数时,形参的类型说明可以放在函数体内 B. return后边的值不能为表达式 C. 如果函数值的类型与返回值类型不一致,以函数值类型为准 D. 如果形参与实参的类型不一致,以实参类型为准 )o 4. C语言允许函数值类型缺省定义,此时该
8、函数值默认的类型是( A. float 型 B. int 型 C. long 型 D. double 型 5. C语言规定,函数返回值的类型是由()o A. return语句中的表达式类型所决定 B. 调用该函数时的主调函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 6. 以下错误的描述是()。 函数调用可以: A. 出现在执行语句中 B. 出现在一个表达式中 C. 作为一个函数的实参 D. 作为一个函数的形参 7. 以下正确的描述是( )o 在C语言程序中: A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B
9、 函数的定义不可嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和调用均可以嵌套 8. 在一个C源程序文件中,假设要定义一个只允许根源文件中所有函数使用的全局 变量,那么该变量需要使用的存储类别是( )o A. externB. registerC. autoD. static 9. 假设有以下宏定义: #define N 2 #define Y(n) ((N+l)*n) 那么执行语句Z=2* (N+Y (5));后结果是()o A.语句有误B. Z=34 C. Z=70 D. Z无定值 10. 在宏定义#define PI 3.14
10、159中,用宏名PI代替一个()。 A. 常量B.单精度数C.双精度数D.字符串二填空题 1. 以下程序的运行结果是O #include "stdio.h" void main() {int I=2,x=5,j=7; fun(j,6);printf(',I=%d;j=%d;x=%d\n",I,j,x); } fun(int I,int j) {int x=7; printf("I=%d;j=%d;x=%d\n",I,j,x); } 2. 以下程序的运行结果是。 #include "stdio.h" void main()void increment(); incr
11、ement();increinent(); increment(); } void increinent() ( int x=0; x+=l; printf(”%d ”,x); }以下程序的运行结果是, #include "stdio.h" void main() (int max(int x,int y); int a=l,b=2,c;c=max(a,b); printf("max is %d\n",c); ) int max(int x,int y) (int z; z=(x>y)?x:y;return(z); }以下程序的运行结果是 #include
12、"stdio.h" void main()void add(int x,int y, ini z); int x=2,y=3,z=0;printf(,,(l)x=%d y=%d z=%d\n",x,y,z); add(x,y,z);printf(H(3)x=%d y=%d z=%d\n",x,y,z); } void add(int xjnt y, int z) ( z=x+y;x=x*x; y=y*y;printf(H(2)x=%d y=%d z=%d\n”,x,y,z); } 三、程序设计题 1. 编写一个函数,判断一个数是不是素数。在主函数中输入一个整数,输出是否 是
13、素数的信息。要求: (1) 编写一个函数prime(n),返回给定整数n是否为素数。 (2) 编写一个主函数,输入一个整数,调用(1)中的函数,判断此整数是否为素数, 并输出结果。 2. 函数fun的功能是:统计各年龄段的人数并存到b数组中,n个人员的年龄放在 a数组中。年龄为1到9的人数存到b[0]中,年龄为10到19的人数存到b[l],年龄为 20到29的人数存到M2],年龄为30到39的人数存到b[3],年龄为40到49的人数 存到b[4],年龄为50岁以上的人数存到b[5]中。 例如,当a数组中的数据为: 9、 18、 27、 38、 59、 33、 14、 75、 38。
14、 调用该函数后,b数组中存放的数据应是: 1、2、1、3、()、2o 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你 编写的假设干语句。 #include "stdio.h" void fun(int a[], int bf], int n) I void main() (int i,a[100]={9,l 8,27,38,59,33,14,75,38 ),b[6]=( 0); fun(a,b,9);printf("The result is:"); for (i=0; iv6;i++)printf(H%d ”,b[i]); 习题7 一、单项
15、选择题 1. 设有定义:int nl=0,n2,*p=&n2,*q=&nl;以下赋值语句中与n2=n 1;语句等价的 是()。 A.*p=*q; B.p=q; C.*p=&nl;D.p=*q; 2. 假设有定义:int x=0, *p=&x;,那么语句printf ("%d\n",*p);的输出结果是()。 A.随机值B.O C.x的地址 D.p的地址 3. 以下定义语句中正确的选项是()。 A. char a='A'b=B;B. float a=b= 10.0; C. int a=10,*b=&a; D. float *a,b=&a; 4. 有以下程序main () (in
16、t a=7,b=8,*p,*q,*r;p=&a;q=&b; r=p; p=q; q=r;printf (”%d,%d,%d,%d\n”,*p,*q,a,b); )程序运行后的输出结果是()。 A. 8,7,8,7B. 7,8,7,8C. 8,7,7,8 D. 7,8,8,7 5. 设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是()。 A. scanf ( "%d”,pA); B. scanf ( "%d”,A); C. scanf ( "%d”,&pA); D. scanf ( "%d”,*pA); 6. 设有定义:int n=0,*p=&n,*
17、q=&p;那么以下选项中,正确的赋值语句是()。 A.p=l; B.*q=2; C.q=p; D.*p=5; 7. 有以下程序void fun (char *a, char *b) ( a=b;(*A)++; )main () { char cl='A',c2='a', *pl,*p2;pl=&cl; p2=&c2; fun (pl,p2); printf ( "%c%c\n” ,cl,c2);) 程序运行后的输出结果是()。 A. Ab B. aa C. AaD. Bb 8. 假设程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是 ()。 A. fl
18、oat *i=NULL;B. float a,*f=&a;scanf (”&d”,f);
C. char*c=&t;
*c=&t;
9. 有以下程序
#include
19、
20、int x,y) ( *z=x>y ? x:y;) C. max (int x,int y) { int z; z=x>y?x:y; return (z) 1 int z ; z=x>y ? x:y; return z ; ) D. int max (int x,int y) ( return (x>y?x:y) ; } 12.有以下程序段: main (){ int a=5, *b, c=&b;b=&a; 程序在执行了 c=&b:b=&a;语句后,表达式:**c的值是()。 A. 变量a的地址B,变量b中的值C.变量a中的值 D.变量b的地址 13. 有以下程序:
21、
main ()( char a,b,c,*d;
a='\'; b='\xbc';c='\Oxab'; d=”\017”;
print (H%c%c%c\n",a,b,c,*d);编译时出现错误,以下表达中正确的选项是()。
A.程序中只有a=' \';语句不正确B.b= '\xbc';语句不正确语句
语句
C. d=,,\OI7";语句不正确D. a=' \';和。='\Oxab'都不正确
14. 假设有以下定义和语句:
#include
22、句是()。
A. *q=0; B. w=p; C. *p=a; D. *p=*w;
15. 有以下程序:
#include
23、p;,那么以下非法的赋值语句是()。 A. p=q;B. *p=*q; C. n=*q; D. p=n; 17. 有以下程序: void fun (char *c,int d)(*c=*c+l;d=d+l; printf ( "%c,%c," ,*c,d);main () { chara='A',b='a';fun (&b,A); printf ( "%c,%c\n" ,a,b); )程序运行后的输出结果是()。 A.B,a,B,a B. a,B,a,B C. A,b,A,b D. b,B,A,b 18. 假设有说明语句:int a,b,c,*d=&c;,那么能从键盘读入三个
24、整数分别赋给变量a、 c的语句是()。 A. scanf (”%d%d%d”,&a,&b,d) ; B. scanf (”%d%d%d”,&a,&b,&d);C. scanf (”%d%d%d”,a,b,d) ; D. scanf (”%d%d%d”,a,b,*d); 19. 假设定义:inta=511,*b=&a;,那么 printf (”%d\n”,*b);的输出结果为()。 A.无确定值B.a的地址 C.512D.511 20. 假设有说明:int i,j=2, *p=&i;,那么能完成i=j赋值功能的语句是()。 A. i=*p; B. p*=*&j; C. i=&j; D.
25、 i=**p;二、填空题 1. 有以下程序 void f ( int y,int *x){y=y+*X; *X=*X+y;} main () ( int x=2,y=4;f (y,&x); printf ("%d%d\n”,x,y); ) 执行后输出的结果是 O下面程序的运行结果是 o void swap (int *a,int *b) { int *t;t=a; a=b; b=t; ) main () ( int x=3,y=5,*p=&x,*q=&y;swap (p,q); printf ("%d%d\n" ,*p,*q); }设有以下程序: main ()
26、 { int a, b, k=4, m=6, *pl=&k, *p2=&m;a=pl=&m; 3. 开发一个C程序要经过编辑、编译、 4. 在C语言中, 5. 在C语言中, 6. 在C语言中, 7. 在C语言中, 和运行4个步骤。 包含头文件的预处理命令以开头。 主函数名是。 行注释符是o头文件的扩展名是o 8. 在Visual C++ 6.0 IDE中,按下Ctrl键的同时按键,可以运行可执行程序文 件。 9. 在Visual C 6.0环境中用RUN命令运行一个C程序时,这时所运行的程序的后缀是o 10. C语言源程序文件的扩展名是;经过编译后,生成文件的后缀是
27、经过连接后,生成文件的扩展名是。 三、程序设计题编写程序输出以以下图案 * s ** 1. 试编写一个C程序,输出如下信息。 ejCYou are welcome! 2. 编写程序,分别用scanf函数和getchar函数读入两个字符送给变量cl、c2,然 后分别用putchar函数和printf函数输出这两个字符。上机运行此程序,比拟用 putchar函数和printf函数输出字符的特点。 习题2 1. 简述算法的概念。 2. 算法应具备哪些特性? 3. 分别说明什么是自然语言描述法,什么是框图语言描述法,什么是伪语言描述法,什 么是N-S流程图语言描述法,它们的优缺点各
28、是什么? 4. 在结构化程序设计方法中,有哪几种根本结构? 5. 请用程序流程图语言和N-S流程图语言分别写出打印乘法九九口诀表的算法。 6. 7. 8. 9. 编写例2-1的程序。 编写例2-2的程序。 编写例2-4的程序。 编写例2-5的程序。 仿照例2-3的程序,依照流程图, 仿照例2-3的程序,依照流程图, 仿照例2-3的程序,依照流程图, 仿照例2-3的程序,依照流程图, b= (*pl) / (*p2) +7;printf ("a=%d\n" ,A); printf ("b=%d\n" ,b);) 执行该程序后,a的值为 , b的值为。 3. 以下程序的
29、输出结果是 ovoid fun (int *n) { while ( (*n)—);printf ("%d" ,++ (*n)); }main () { int a=100;fun (&A); ) 4. 以下函数用来求出两整数之和,并通过形参将结果传回,试完整程序。 void func (int x,int y,z)(*z=x+y;} 5. 函数 void fun (float *sn, int n)的功能是:根据公式 s=l-l/3+l/5-...l/(2n+l)计算 S, 计算结果通过形参指针sn传回;I】通过形参传入,n的值大于等于Oo试完整程序。 void fun (
30、float *sn, int n){ float s=0.0, w, f=-1.0; int i=0;for (i=0; i<=n; i++) { f=* f; w=f/ (2*i+l);s+=w; } 6. 以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换,试完整程 序。 exchange (int *x, int *y)( int t; t=*y;*y= ;*x= ;} 7. 下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,试完整程 序。 int add (int x,int y, z)( =x+y;} 三、程序设计题编写一个函数,将数组中n
31、个数按反序存放。 1. 用地址法输入输出二维数组各元素。 2. 用指针法输入输出二维数组各元素。 6.1习题8 一、单项选择题 1. 设有定 义语句 " struct (int x;int y;} d[2]={ {1,3},{2,7}}; ”,那么printf("%d\n”,d[O].y/d[O].x*d[l].x);的输出结果是()。 A. 0 B. 1 C. 3D.6 2. 设有定义语句"enum team( my,your=4,his,her=his+10),贝U printf(“%d, %d, %d, %d\n ", my, your, his, her);的输出结果是(
32、)。 A.0, 1, 2, 3B.0, 4, 0, 10 C.0, 4, 5, 15 D. i, 4, 5, 15 3. 以下对枚举类型名的定义中正确的选项是()。 A. enum a={one,two,three);B. enum a (al,a2,a3J;C. enum a={T,'2','3'};D. enum a{“one”,”two”,”three”}; 4. 假设有如下定义,那么 printf("%d\n”,sizeof(them));的输出是()。 typedef union (long x[2];int y[4];char z[8];)MYTYPE; MYTYPE
33、them;A. 32 B. 16 C. 8 D. 24 5. 设有以下说明和定义: typedef union {long i;int k[5];char c;) DATE;struct date {int cat;DATE cow; double dog;(too; DATE max; 那么以下语句的执行结果是()。 printf("%d",sizeof(struct date)+sizeof(max));A, 26B.30 C. 18 D. 8 6. 根据下面的定义,能打印出字母M的语句是()0struct person {char name[9];int age;}; st
34、ruct person c[10]=( “John”, 17,"Paul", 19,"Mary”, 18,”Adam", 16};A. printf(t<%c,,,c[3].name)B. printf("%c”,c[3].name[l]); C. printf(<<%c,,,c[2].name[ 1 ]);D. printf("%c",c[2].name[0]); 7. 设有如下定义,那么对data中的a成员的正确引用是()。 struct sk{int a;float b;} data,*p=&data; 8. 以下结构体类型说明和变量定义中正确的选项是()。 B. struct
35、 REC; (int n; char c;}; RECtl,t2; D. struct {int n;char c;)REC A. typedef struct{int n; char c;)REC; RECtl,t2;C. typedef struct REC ; {int n=0; char c='A';}tl,t2; 9. 现有以下结构体说明和变量定义,如以下图所示,指针p、q、r分别指向一个链表中连续的三个结点。 struct node (char data;struct node *next; )*p,*q,*r; 现要将q和r所指结点交换前后位置,同时要保
36、持链表的连续,以下不能完成此操作的语 句是()oA.q->next=r->next;p->next=r;r->next=q B. p->next=r;q->next=r->next;r->next=qq->next=r->next;r->next=q;q->next=r D. r->next=q;p->next=r;r->next=q->next 二、填空题 1. 称为运算符,称为运算符。 2. 设有定义语句 ustruct {int a; float b; char c; }abc, *pabc=&abc;n 那么对结构型成员a的引用方法可以是:、 、 、 3. 假设有以下说明和
37、定义语句,那么变量w在内存中所占的字节数是union aa(float x; float y; char c[6];(; struct st (union aa v; float w[5J; double avc;}w;三、程序分析题 1. 阅读以下程序,写出运行结果。(字符0的ASCII码为十六进制的30) main() ( union (char c; char i[4J;)z; z.i[0]=0x39; z.i[l]=0x36; printf("%c\n”,z.c); 1 2. 阅读程序,写出程序的运行结果。 main() (struct student ( cha
38、r name [10];float k 1; float k2;囱2]={{“zhong”, 100,70}, {“wang”,70,80}} ,*p=a; printf (u\nname:%s total=%f\p->name, p->kl+p->k2); printf("\nname:%s total=%f\n,\ a[l].name,a[l].kl +a[l].k2); } 3. 阅读程序,写出程序的运行结果。 main() (enum em{em 1 =3,em2= 1 ,em3}; char *aa[]={“AA”,”BB”,”CC”,”DD”}; printf("%
39、s%s%s\n", aa[em 1 ],aa[em2],aa[em3]);
}
4. 阅读程序,写出程序的运行结果。
#include
40、l;
}
main()
{ STU c={"Qian",'p',95.0,92.0};
Rc); printf(4t%s,%c,%2.0f,%2.0f\n,,,c.name,c.sex,c.score[0],c.score[l]);
}
5. 阅读程序,写出程序的运行结果。
#include
41、TotalScore=s[ 1 J.TotalScore; 1main() { struct STU s[2]={(20XX8,703},(20XX9,580)}; f(s[()l); printf(u%d %f\n,,,s[0].num,s[0].TotalScore);} 四、程序设计题用结构体存放下表中的数据,然后输出每人的姓名和实发工资(根本工资+ 浮开工资■支出)。 姓名 根本工资 浮开工资 支日 Tom 1240.00 800.00 75.0 Lucy 1360.00 900.00 50.0 Jack 1560.00 100() 80.()
42、 1. 编写程序,输入10个学生的学号、姓名、3门课程的成绩,求出总分最高的 学生姓名并输出。 2. 编写程序,输入以下学生成绩表中的数据,并用结构体数组存放。然后统计 并输出三门课程的名称和平均分数。 studentname 面向对象程序设计(C#) SQLSERVER C语言程序设t Lincoln 97.5 89.0 78.0 Clinton 90.0 93.0 87.5 Bush 75.0 79.5 68.5 Obama 82.5 69.5 54.0 3. 设有a、b两个单链表。每个链表的结点中有一个数据和指向下一结点的指针,a、b为两
43、链表的头指针: (1) 分别建立这两个链表。 (2) 将a链表中的所有数据相加并输出其和。 (3) 将b链表接在a链表的尾部连成一个链表。 习题9 一、选择题 以下关于位运算的表达错误的选项是()0 A、位操作是对字节或字节内部二进制位进行测试、设置、移位或逻辑的运算B、按位取反运算的运算规那么是:()的按位取反结果为1, 1的按位取反结果为0 C、对于无符号数而言,左移位相当于乘2运算,左移n位相当于乘2的n次方D、对于无符号数而言,右移位相当于乘2运算,右移n位相当于乘2的n次方 1. 设x=2, y=3,那么表达式xVVy的值为()。 A、9B、8C、16D、5 以下
44、程序运行时,如果输入4和3那么输出结果是()o
#include
45、程序,判断在输入“1, 2”时,程序输出的c值为()。
#include
46、nt m=3;
long n=5;
long p; p=(nv
47、 scanf("%d,%ld",&x,&y);
x&=y;
z=x&〜y;
a=sizeof(x);
b=sizeof(z);
printf(”%ld %d %d\n”,z,a,b);A、0
B、IC、784
D、0781().有以下程序:
#include
48、011 B、(X)OIOIOOC、00011100
11. 有以下程序:
#include
49、) )。 C、2 D、3 short int a=5,b=6,c=7,d=8,m=2,n=2; printf(H%d\n",(m=a>b)&(n=c>d)); } 程序运行后的输出结果是( A、0 二、填空题 1. 位操作可以分为两类,一类是 2. 位逻辑运算的四个操作符中 B、1 )° C、2 D、3 —,一类是O 操作符的运算对象只有一个。 3. 移位运算中的无符号数右移时,左端空出的位补° 位运算符可以和赋值运算符构成位运算符。 4. 当参加位运算的两个操作数的长度不等时系统自动按。对于无符号数,系统在做对齐处理时,左端一律补。对于有符号数来
50、说,正数 在做对齐处理时,左端补;负数在做对齐处理时,左端补o 位段结构的特殊性是其各个成员只能是型的。 5. 设变量a的二进制数是00101101,假设想通过运算a%使a的高四位取反,低四位不变,那么b的二进制数应是o 6. a为任意整数,能将变量a清0的表达式是-a为八进制数07101。能将变量a中的各二进制位均置成1的表达式是。 7. 能将两字节变量x的高8位全置1,低8位字节保持不变的表达式是。 8. 运用位运算,能将八进制数012500除以4,然后赋给变量a的表达式是。 9. 运用位运算,能将字符型变量ch中大写字母转换成小写字母的表达式 是 。 习题3 一、选择题






