printf(\
for(i = 0; i < argc; i++) printf(\ printf(\}
若上面的程序编译、连接后生成可执行程序文件abc.exe ,则输入以下命令行: abc file1 file2
程序执行后的输出结果是( )。 答:3
abc.exefile1file2
因为输入的参数个数为3,所以argc的值为3。Argv是指针数组,argv[0]指向字符串参数abc.exe,argv[1]指向字符串参数file1,argv[2] 指向字符串参数file2。 38.下面的findmax函数返回数组s中的最大元素的下标,数组元素的个数由t传入,请填空. findmax(int s[], int t) {
int k, p;
for(p = 0, k = p; p < t; p++)
if(s[p] > s[k] )_____ (1) ; /*填空*/ return k; }
答:k=p
39.下面程序的输出结果是( )。 #include
return a + b; }
funb(int a, int b) {
return a - b; }
sub(int (*t)(), int x, int y) {return ((*t)(x, y));} main() {
int x, (*p)(); p = funa;
x = sub(p, 9, 3); x += sub(funb, 8, 3); printf(\}
答:17
p是指向函数的指针变量;(*t)(x, y)是调用t所指向的函数。 40.下面的函数的功能是( )。 int fun1(char *x)
85
{ char *y =x; while (*y++); return(y-x-1); }
答:计算字符串的长度。 循环while (*y++);的循环体为一空语句,循环结束时指针y指向字符串结束符’\\0’的下一个字节,因此y-x-1是指针x所指向的字符串的长度。 41.下面程序的输出是( )。 #include
{ char *p1=\ strcpy(str+2,strcat(p1,p2)); printf(\}
A)xyzabcABC B)zabcABC C)yzabcABC D)xyabcABC 答:D)
42.下面程序的输出是( )。 void prtv(int *x) {
printf(\}
main() {
int a=25; prtv(&a); }
答:26
43.下面程序的输出是( )。 fun3(int x) {
staic int a=3; a+=x;
return(a); }
main() {
int k=2,m=1,n; n=fun3(k); n=fun3(m);
printf(\} 答:6
44.下面程序的输出是( )。
86
void fun(int *n) { while((*n)--);
printf(”%d”,++(*n)); }
main()
{ int a=100; fun(&a); }
答:0 45.己知函数isalpha(ch)的功能是判断变量ch是否是字母,若是,函数值为1,否则为0,下面程序的输出是( )。 #include
int i,j;
for (i=0,j=0;str[i];i++)
if (isalpha(str[i]))str[j++]=str[i]; str[j]='\\0'; }
main() {
char ss[80]=\ fun4(ss);
printf(\}
答:Itis!
函数fun4的功能是将字符串中的非字母剔除。
46.下面invert 函数的功能是将一个字符串 str 的内容颠倒过来。请填空。 #include
void invert(char str[]) {
int i,j,_____(1) ___; /*填空*/ for (i=0,j=strlen(str)______(2) ___;i 47.下列程序的输出结果是( )。 main() { char *p1,*p2,str[50]=\ p1=\ p2=\ 87 strcpy(str+2,strcat(p1+2,p2+1)); printf(\} 答:xycdBCD 48.执行下面的程序后,a的值是( )。 #define SQR(X) X*X main() { int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(\} 答:1 a/=SQR(k+m)/SQR(k+m);的宏替换和计算过程是: a/=k+m*k+m/k+m*k+m a/=2+1*2+1/2+1*2+1 a/=7 a=1 49.下列程序执行后输出的结果是( )。 int d=1; fun(int p) { int d=5; d+=p++; printf(\} main() { int a=3; fun(a); d+=a++; printf(\} 答:8 4 在函数fun中局部变量d 起作用;在函数main中全局变量d起作用。 50.下面程序通过函数average 计算数组中各元素的平均值,请填空。 float average (int *pa ,int n) {int i; float avg=0.0; for (i=0;i avg=avg+_____(1) _; /*填空*/ avg=_____(2) ; /*填空*/ return avg; 88 } main() {int i,a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(\} 答:(1)pa[i]或*(pa+i) (2)avg/n 51.以下程序的输出结果是( )。 fun(int n,int *s) {int f1,f2; if (n==1||n==2)*s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } main() { int x; fun (6,&x); printf(\} 答:8 函数fun是用递归计算斐波纳奇数列的第n项。 52.下面的程序输出是( )。 #include char *a=\ fun(a);puts(a); } fun(char *s) { int x=0,y; char c; for (y=strlen(s)-1;x 答:hgfedcba 函数fun是将指针变量s指向的字符串倒置。 53.下面程序的输出是( )。 89 第三章 C语言程序设计同步练习指导 简介:本章从历届“国家计算机等级考试二级C语言笔试”试题中精选出典型的试题,按照C语言程序设计教学内容编排,供学生们边学习边练习,达到即学即会,举一反三,触类旁通的效果。 3.1 C语言基本知识 3.1.1 考试要求 一、C语言的结构 1.C语言源程序的构成,main函数和其他函数 2.头文件、数据说明、函数的开始和结束 3.源程序的书写格式 4.C 语言的风格 二、数据类型及其运算 1.C语言的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法 2.C语言运算符的种类、优先级和结合性 3.不同类型数据之间的转换与运算 4.各种类型的C语言表达式(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)及其计算规则 3.1.2 要点指导 1.C语言源程序的构成、main函数和其它函数 每个C语言程序都是由若干个函数组成的,这其中包含一个“主函数”main()和其它函数。其它函数包括用户编写的函数和C语言本身提供的标准库函数。程序的运行总是从main() 函数开始执行。函数是C程序的基本单位。 2.函数的组成 每个函数是由函数说明部分和函数体两部分组成的。函数的说明部分包括函数名、函数的形式参数、函数的值的类型等。函数体是由大括号 { }括起的部分,由变量定义和执行部分组成。函数的执行部分是由C语句组成的。这些C语句是按照结构组成起来的,这些结构有三类即顺序结构、选择结构和循环结构。结构之间可以并列和嵌套。 3.头文件 包含头文件的格式: #include \头文件名\ 或 #include <头文件名> 例如: #include \ 它的作用是将文件stdio.h的内容插入在#include \所在的位置。 当调用C语言标准函数库中输入输出类函数时,要把头文件stdio.h包含在程序的开头;当调用C语言标准函数库中数学类函数(如sin、sqrt)时,要把头文件math.h包含在程序的开头; 4.数据的说明 C语言的数据分为常量和变量,常量可以直接使用,符号常量在使用前需要定义(宏定义),变量在使用前必须先定义名称和类型。 变量的定义格式为: 类型名 变量名; 或 40 类型名 变量名=常量; 5.源程序的书写格式 C语言的书写格式比较自由,一行可以写几条语句,一条语句可以写在几行里,每 条语句和数据定义的最后一个字符必须是分号“;”。 C语言的注释信息格式为: /* 注释信息 */ C语言区分字母的大、小写。 6.C语言的风格 语言简练、使用方便:有32个关键字、9种控制语句; 运算符丰富:32种运算符; 数据类型丰富:有整型、实型、字符型、枚举类型等基本数据类型,有数组、结构体、共用体等构造类型和指针类型,能够实现复杂的数据结构; 可直接访问地址; 可以进行位操作; 可移植性好。 7.C语言的数据类型 C语言的数据类型分为:基本类型、构造类型、指针类型、空类型。 其中基本类型包含:整型(带符号整型int 、short int 、long int; 无符号整型unsigned 、unsigned short 、unsigned long) 实型(单精度型float、双精度型double) 字符型char 枚举类型 C语言中int数据用2个字节(16位二进制数)的补码表示,表示整数的范围是-32768到32767。unsigned数据用2个字节二进制数(16位二进制数)表示,表示整数的范围是 0到65535。 8.运算符和表达式 C语言程序是由若干个函数组成的,每个函数由函数说明部分和函数体两部分组成的。函数体是由大括号 { }括起的部分,由变量定义和执行部分组成。函数的执行部分是由C语句组成的。因此在学习C语言的过程中注意熟练掌握C语言中的各种语句,达到能够灵活运用C语言中的各种语句。而构成C语句的核心是表达式,C语言中有算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式和条件表达式。而表达式是由常量、变量、函数和运算符构成的。 C语言共有34个运算符,这些运算符的优先级和结合性十分重要,在学习中要......牢记。C语言的运算符按照优先级从高到低排列如下: 优先级 1 2 3 4 5 6 7 8 9 运算符 ( ) [ ] -> . * / % + - << >> < <= > >= == != & ^ 41 算术运算符 算术运算符 位操作运算符 关系运算符 关系运算符 位操作运算符 位操作运算符 结合方向 自左至右 自右至左 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右 自左至右 ! ~ ++ -- - (类型) * & sizeof 10 11 12 13 14 15 | && || ? : = += -= *= /= %= <<= &= , 位操作运算符 逻辑运算符 逻辑运算符 条件运算符 赋值运算符 逗号运算符 自左至右 自左至右 自左至右 自右至左 自右至左 自左至右 从而,C语言表达式的计算顺序从高到低: 算术表达式 关系表达式 逻辑表达式 条件表达式 赋值表达式 逗号表达式 9.输入输出函数 输出函数 printf 字符输出函数putchar 输入函数scanf 字符输入函数getchar 常用格式编辑符: 输出整数格式编辑符 %d %u %x %o 输出实数格式编辑符 %f %e 输出字符和字符串格式编辑符 %c %s 3.1.3 同步练习 1.C语言中,int型数据在计算机内部是由( )表示的。 答:int型数据在计算机内部是由16位补码表示的。 2.下列可以作为C语言用户标识符的是( )。 A) _123 B) a1b2c3 C) int D) 123abc 答:A)和B) C语言标识符必须是以英文字母(a到z)、或者下划线_开头的字符串。字符串中只能包含英文字母、下划线和数字(0到9)。但字符串不能是C语言中的32个保留字(例如int,short,long,unsigned,float,char,if,switch,for,while等)。 3.在C语言中,如果下面的变量都是int类型,则输出的结果是( )。 sum=pad=5,pAd=sum++,pAd++,++pAd; printf(\答:输出结果是5。 因为C语言是字母大小写敏感的,也就是说区分大小写字母。pad和pAd是两个不同的变量。 4.以下程序的输出结果是 ( )。 #include printf(\ 42 } 答:0 因为stdio.h头文件中NULL的定义如下: #define NULL 0 5.下面程序的输出是( )。 main() { int x=10,y=3; printf(\ } 答:3 因为两个同类型的数据作算术运算,其结果仍为该类型。即整数除以整数,商仍为整数。 10/3的商为3。 6.下面程序的输出是( )。 main() { int x=023; printf(\} 答:18 因为023是一个八进制数,表达式--x的值为022,按照%d带符号的十进制数输出,结果为18。 注意:023是八进制数;23是十进制数;0x23是十六进制数。 7.在C语言中,不正确的int类型的常数是( )。 A)32768 B)0 C)037 D)0xAF 答:A) 8.执行下面程序中的输出语句后 a的值是( )。 main() { int a; printf(\} 答:15 因为在计算逗号表达式a=3*5,a*4,a+5时,依次计算下面3个表达式: a=3*5(结果变量a的值为15,该赋值表达式的值也为15) a*4(该算术表达式的值为60) a+5(该算术表达式的值为20,输出函数printf输出20) 逗号表达式的值为20,但变量a的值认为15。 9.以下程序的输出结果是( )。 #include {int a=2,c=5; printf(\ } A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d 答:D) 因为%%是格式说明符,输出%,其它原样输出。 43 如果输出函数语句改成printf(\那么输出结果为A)。 10.以下程序的输出结果是( )。 #include { int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(\ } A)6,1 B)2,1 C)6,0 D)2,0 答:B) 241/100的值为2,2%9的值为2。 (-1)&&(-1)的值为1。在逻辑运算中,非0的值为真,真“与”真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如果为假用“0”表示。 11.请选出以下语句的输出结果( )。 printf(\答:5 函数strlen的功能是计算字符串长度。那么字符串\包含多少个字符呢? \\t是横向跳格字符;\\”是字符”;\\065是ASCII码值为八进制数065的字符;\\xff是ASCII码值为十六进制数0xff的字符;\\n是换行字符。该字符串共有5个字符。 注意:记住常用的转义字符。 12.下面程序的输出结果是( )。 int i = 65536; printf(\答:-1 因为int型变量i在C语言中是用16位补码表示的,而65535变成二进制数为1111111111111111,因此i的值为1111111111111111,按照带符号的十进制数%d输出-1,因为1111111111111111是-1的补码。 13.若有说明和语句: int a=5; a++; 此处表达式a++的值是( )。 答:5 表达式a++的值是5表达式计算后,变量a的值是6。 14.若k为int变量,则以下语句( )。 k=8567; printf(\,k); 答:|8567 | 两个|原样输出,格式符%-06d说明输出变量k的值长度为6且左对齐。 15.若x 为float型变量,则以下语句( )。 x=213.82631; printf(\,x); 答:213.83 16.若x为double变量,则以下语句( )。 44 int f(a,b) int a, b; { int c; c = a; if (a > b) c = 1; else if (a == b) c = 0; else c = -1; return (c); } 答:-1 25.下面程序的输出结果是( )。 void fun() { static int a=0; a+=2; printf(”%d”,a); } main() { int cc; for(cc=1;cc<4;cc++) fun(); printf(”\\n”); } 答:246 26.请选出以下程序的输出结果( )。 #include int i, j, t; i = n1; j = n2; while(i < j) { t = *(s+i); *(s+i) = *(s+j); *(s+j) = t; i++;j--; } main() { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0},i,*p = a; fun(p,0,3); fun(p,4,9); fun(p,0,9); for(i=0;i<10;i++) printf(\ printf(\ } } 答:5678901234 27.请选出以下程序的输出结果( )。 #include 80 main() { int a[] = {1, 2, 3, 4}, i; int x = 0; for(i = 0; i < 4; i++) { sub(a, x); printf(\ } printf(\} sub(s,y) int *s,y; { static int t = 3; y = s[t]; t--; } 答:0000 因为实参x单向传递值给形参y,尽管在函数sub中y的值发生变化,但函数main中x的值不改变。 28.设有如下程序段: int i = 0, sum = 1; do { sum += i++;} while(i < 6); printf(\ 上述程序段的输出结果是( )。 答:16 29.设有下列程序: #include int i; char str[10],temp[10]; gets(temp); for(i = 0; i < 4; i++) { gets(str); if(strcmp(temp,str)<0)strcpy(temp,str)); } printf(\} 上述程序运行后,如果从键盘上输入: C++ 81 BASIC 则程序的输出结果是( ) 答:QuickC 从键盘输入5个字符串,输出最大的字符串。 30.若输入3个整数3、2、1,则下面程序的输出结果是( )。 #include int t; t = uu[n--];t += 3*uu[n]; n++; if (t>= 10) {uu[n++] = t/10;uu[n]=t;} else uu[n] = t; } main() { int i,n,aa[10]={0,0,0,0,0,0}; scanf(\ for(i = 1;i <= n; i++) sub(i, aa); for(i = 0; i <= n; i++) printf(\ printf(\ } 答:2727 31.下面的程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此 动态存储单元,调用outone函数输出此动态存储单元中的数据。请填空。 #include {*s = (int *)malloc(sizeof(int));} assone(a) int *a; { scanf(\(1) __);} /*填空*/ outone(b) int *b; {printf(\(2) __);} /*填空*/ main() { int *p; getone(&p); 82 assone(p); outone(p); } 答:(1) a (2) *b 将指针变量的地址&p传给**s,这样getone函数能够实现p的值是申请到的动态存储单元地址。 32.请读程序: #include int c; c = a + b; return c; } main() { int x = 6, y = 7, z = 8, r; r = func((x--,y++,x+y),z--); printf(\} 上面程序的输出结果是( )。 答:21 逗号表达式(x--,y++,x+y)的值是13,算术表达式z—的值为8,函数func的值为13+8。 33.请读程序: #include if (*c <= 'Z' && *c >= 'A') *c -= 'A' - 'a'; return *c; } main() { char s[81], *p = s; gets(s); while(*p) {*p=fun(p);putchar(*p);p++; } putchar('\\n'); } 程序运行时从键盘上输入OPEN THE DOOR 函数fun的功能是将大写字母变成小写字母。 34.下面程序的运行结果是( )。 #include 83 main() { int num = 0; while(num <= 2) { num++; printf(\} 答:1 2 3 35.下面程序的运行结果是( )。 #include int i, r; r = 1; for(i = 0; i <= n; i++) r = r * b[i]; return r; } main() { int x, a[] = {2, 3, 4, 5, 6, 7, 8, 9}; x = f(a, 3); printf(\} 答:120 36.下面程序的输出结果是( )。 #include void as(int x, int y, int *cp, int *dp) { *cp = x + y; *dp = x - y; } main() { int a = 4, b = 3, c, d; as(a, b, &c, &d); printf(\} 答:7 1 37.请读程序: #include main(int argc, char *argv[]) { int i; 84 returu z; return(x>y?x,y); 函数值的类型 int max(x,y) char letter(c1,c2) double min(x,y) void printstar() 4、函数的调用 函数名(实际参数) printstar(); c=max(a,b); d=max(max(a,b),c); printf(“%d”,max(a,b)); 5、函数的嵌套调用 函数嵌套执行过程 6、函数的递归调用 float factor(int n) { float f; if(n= =1) f=1; else f=factor(n-1)*n; return(f); } 7、数组作为函数的参数 实际参数————→形式参数 (数组名) (数组名) 地址传送 8、局部变量和全局变量 (1) 局部变量 在一个函数内部定义的变量,它只在本函数内有效。 (2) 全局变量 在函数外定义的变量称为外部变量。其有效范围: 从定义变量的位置开始到本文件结束。 9、动态存储变量和静态存储变量 (1) 从变量的作用域(既从空间)角度来分,可分为全局变量和局部变量。 从变量的时间(既生存期)角度来分,可分为静态存储变量和动态存储变量。 每一个变量和函数有两个属性:数据类型和数据的存储类别。 存储方法分为二大类:静态存储类和动态存储类。具体包含四种: 自动的(auto),静态的(static),寄存器的(register),外部的(extern)。 (2) 局部变量的存储方式 auto static register 70 (3) 全局变量的存储方式 int a; extern a; static int a; 10、内部函数和外部函数 (1) 内部函数 static int max(x,y) 只能被本文件内的函数调用 (2) 外部函数 extern int max(x,y) int max(x,y) 3.5.3 同步练习 1.程序的运行结果是( )。 #include { extern int x,y;int a=15,b=10; x=a-b; y=a+b; } int x,y; main() { int a=7,b=5; x=a+b; y=a-b; num(); printf(\} 答:5,25 因为x和y是全局变量,它的有效范围是从定义点开始到本文件尾,但是在定义点前的函数num中对它们进行了说明即extern int x,y;,因此变量x和y在函数num中也有效。而函数main中的局部变量a和b与函数num中的局部变量互不相干。 2.程序的运行结果是( )。 main() { int a=2,i; for(i=0;i<3;i++)printf(\} f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 答:7,8,9 在函数f中变量c为静态存储类型,在编译时就分配了存储单元并且赋了初值3,在整个程 71 序的运行过程中变量c始终存在,但只有在运行函数f时变量c才有效。而变量b只有在开始运行函数f时才分配内存单元,并且语句int b=0;相当于int b; b=0;,当函数f 运行结束时,变量b的存储单元又被收回,既变量b只有在运行函数b时才存在。综上所述,调用函数f三次返回的函数值分别为2+1+4,2+1+5,2+1+6。 3.程序的运行结果是( )。 main() { int i=2,x=5,j=7; fun (j,6); printf(\} fun(int i,int j) { int x=7; printf(\} 答:i=7,j=6,x=7 i=2,j=7,x=5 在执行函数fun时,fun函数中的局部变量i,j,x的值分别为7,6,7。在执行函数main时,main函数中的局部变量i,j,x的值分别为2,7,5。 4.程序的运行结果是( )。 main() { ming(); ming(); ming(); } ming() { int x=0; x+=1; printf(\} 答:111 局部变量定义int x=0;相当于int x; x=0;。 5.已有函数 pow,要求取消变量 i后 pow函数的功能不变,请填写函数程序。 修改前pow函数 pow(int x,int y) { int i,j=1; for(i=1;i<=y;++i) j=j*x; return(j); } 答:函数pow是计算xy 修改后pow函数 pow(int x,int y) { int j; for(j=1;y>0;y--)j=j*x; return(j); } 6.程序的运行结果是( )。 72 long fib(int g) { switch(g) { case 0: return 0; case 1: case 2: return 1;} return(fib(g-1)+fib(g-2)); } main() { long k; k=fib(7); printf(\} 答:k=13 函数递归调用,实现函数fib: fib(g)=0 当g=0时 fib(g)=1 当g=1时 fib(g)=1 当g=2时 fib(g)=fib(g-1)+fib(g-2) 当g>=3时 即计算斐波纳奇数列函数。 7.程序的运行结果是( )。 main() { int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum; sum=fun(a); printf(\} fun(int a[][3]) { int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=i+j; if(i==j)sum=sum+a[i][j]; } return(sum); } 答:sum=6 0 1 2 在函数fun中对数组a赋值,数组a的9个元素的值分别为 1 2 3,并计算主对角线上 2 3 4 各元素的和即0+2+4。 8.程序的运行结果是( )。 fun(int x) { static int a=3; a+=x; return(a); } 73 main() { int k=2,m=1,n; n=fun(k); m=fun(m); printf(\} 答:56 9.程序的运行结果是( )。 int x=5,y=7; ming(int x,int y) { int z; z=x+y; return(z); } main() { int a=4,b=5,c; c=ming(a,b); printf(\} 答:X+Y=9 10.程序的运行结果是( )。 int m=13; int fun(int x,int y) { int m=3; return(x*y-m); } main() { int a=7,b=5; printf(\} 答:2 虽然全局变量m的有效范围是从定义点到文件尾,但是在函数fun中又定义了局部变量m,因此在函数fun中其局部变量m有效,而在函数main中全局变量m有效,结果为(7*5-3)/13。 11.下面的程序( )。 main() { int x=3; do { printf(\ } while(!(--x)); } 74 答:1 -2 第一次执行输出函数时printf(\,赋值表达式x-=2的值为1,输出1,当计算!(--x)时,表达式--x和变量x的值均为0,表达式!(--x)的值为真,再次执行循环。赋值表达式x-=2的值为-2,输出-2,当计算!(--x)时,表达式--x和变量x的值均为-3,表达式!(--x)的值为假,循环结束。 12.下面程序的输出是( )。 main() {int y=9; for(; y>0;y--) {if(y%3==0) { printf(\ } } 答:852 13.下面程序的输出是( )。 unsigned fun6(unsigned num) { unsigned k=1; do { k*=num; num/=10; }while (num); return(k); } main() { unsigned n=26; printf(\} 答:12 将变量num的值的各位相乘。 14.下面程序的输出是( )。 long fun5(int n) { long s; if ((n==1)||(n==2)) s=2; else s=n+fun5(n-1); return(s); } main() { long x; 75 x=fun5(4); printf(\ } 答:9 函数递归调用。 15.下面程序的输出是( )。 #define MAX 5 int a[MAX],k; main() { fun1();fun3(); fun2();fun3(); printf(\} fun1() { for (k=0;k fun2() { int a[MAX],k; for (k=0;k fun3() { int k; for (k=0;k 答:0246802468 函数fun1给全局数组a赋值;函数fun2给其局部数组赋值;函数fun3输出全局数组各元素的值。 16.以下程序输出结果是( )。 #include int i=1,j=3; printf(\{int i=0; i+=j*2; printf(\} printf(\} 答:1,6,3,2,3, 76 变量i在复合语句 { int i=0; i+=j*2; printf(\ } 中定义,其有效范围仅是该复合语句。而在main函数中定义的变量i的有效范围是除了上面的复合语句以外的main函数的其它部分。 17.以下程序输出结果是( )。 #include int k=4,m=1,p; p=func(k,m); printf(\ p=func(k,m) printf(\} func(a,b) int a,b; {static int m=0,i=2; i+=m+1; m=m+1; m=i+a+b; return(m) } 答:8,17, 18.程序填空,以下程序中的trap 函数是用梯形法求定积分的通用函数。被积函数是 f(x)=x*x+3*x+2。 #include double t,h; int i,n=1000; t=0.5*((*fun)(a)+(*fun)(b)); h=fabs(a-b)/(double)(n); for(i=1;i<=n-1;i++) t=t+______(1) _; /*填空*/ t=t*h; return(t); } double mypoly(x) double x; {return(x*x+3.0*x+2.0); } 77 main() {double y,(*pf)(); pf=_____ (2) ; /*填空*/ y=trap(pf,0.0,4.0); printf(\} 答:(1)(*fun)(a+i*b) (2) mypoly 19.程序填空,以下程序求a 数组中所有素数的和,函数isprime 用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。 #include {int i,a[10],*p=a,sum=0; printf(\ for (i=0;i<10;i++)scanf(\ for(i=0;i<10;i++) if (isprime(*(p+_ _ (1) _))==1) /*填空*/ { printf(\ sum+=*(a+i); } printf(\ } isprime(x) int x; {int i; for(i=2;i<=x/2;i++) if(x%i==0) return(0); __ (2) __; /*填空*/ } 答:(1)i (2)return(1) 20.程序填空,以下程序调用invert 函数按逆序重新放置 a 数组中元素的值。a数组中元素的值在main 函数中读入。 #include int t; f(i *(s+i)=*(s+j); *(s+j)=t; 78 invert(s,___ (1) _ ,j-1); /*填空*/ } } main() { int a[N],i; for (i=0;i for (i=0;i 21.执行下面的语句段的结果是( )。 int x = 23 do { printf (\while(!x); 答:23 22.下面函数的功能是( )。 sss(s, t) char *s, *t; {while((*s)&&(*t)&&(*t++==*s++)); return (*s - *t); } 答:比较两个字符串的大小。 23.请选出以下程序的输出结果( )。 #include { int a, b, c; sub(10, 5, &a); sub(7, a, &b); sub(a, b, &c); printf(\} 答:-5,-12,-7 24.下面程序的输出结果是( )。 #include { int i = 2, p; p = f(i, i+1); printf(\} 79 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库第三章(C语言程序设计同步练习指导)在线全文阅读。
相关推荐: