C语言基本概念
能将高级语言编写的源程序转换成目标程序的是______。
A) 编辑程序 B) 编译程序 C) 解释程序 D) 链接程序 以下选项中合法的用户标识符是______。 A) long B) _2Test C) 3Dmax D) A.dat 以下叙述正确的是( )
A) 可以把define和if定义为用户标识符
B) 可以把define定义为用户标识符,但不能把if定义为用户标识符 C) 可以把if定义为用户标识符,但不能把define定义为用户标识符 D) define和if都不能定义为用户标识符 以下叙述正确的是( ) A) C语言比其他语言高级
B) C语言可以不用编译就能被计算机识别执行
C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D) C语言出现的最晚、具有其他语言的一切优点 在一个C语言程序中_______ A) main函数必须出现在所有函数之前 B) main函数必须出现在所有函数之后 C) main函数可以在任何地方出现
D) main函数必须出现在固定位置
一个C语言程序是由_______组成的。
A) 一个主程序和若干子程序 B) 若干子程序 C) 函数 D) 若干过程 以下叙述中正确的是( )
A) C语言的源程序不必通过编译就可以直接运行
B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C) C源程序经编译形成的二进制代码可以直接运行 D) C语言中的函数不可以单独进行编译
下列关于C语言用户标识符的叙述中正确的是( )
A) 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 B) 用户标识符中可以出现下划线,但不可以放在用户标识符的开头 C) 用户标识符中不可以出现中划线,但可以出现下划线 D) 用户标识符中可以出现下划线和中划线(减号) 以下说法中正确的是( )
A)C语言程序总是从第一个定义的函数开始执行
B)C语言程序中,要调用的函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分 一个C程序的执行是从( )
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 C语言编程整个操作的过程是( ) A)编辑、编译、链接、执行
B)编译、编辑、链接、执行
C)链接、编译、编辑、执行 D)编辑、链接、编译、执行
下列说法不正确的是( ) A)链接操作将生成扩展名为.lnk的文件 B)编辑过程将生成扩展名为.cpp或.c的文件 C)编译过程将生成扩展名为.obj的文件
C)C编程最终要生成扩展名为.exe的文件 C语言提供了丰富的结构化语句,直接支持____、_____和_______三种基本程序结构。 A)顺序、分支、过程 B)顺序、分支、循环 C)分支、过程、循环
D)顺序、过程、循环
下列说法正确的是( )
A)C语言版本众多,但这些版本大多不能兼容 B)C语言只能在固定的操作系统上运行。
C)C语言不包含依赖硬件的输入/输出语句,其输入/输出功能语句需要手工来编写。 D)C语言允许对位、字节、地址这些计算机功能中的基本成分进行操作。
当用户用编辑器将C语言程序录入到计算机后,就建立一个源文件,则( ) A)源文件可以直接被计算机执行 B)源文件需要编译后就可执行
C)源文件经过编译链接后生成的可执行程序和源程序是独立的 D)错误调试一般在执行过程进行 下列说法中正确的是( )
A.由于C源程序是高级语言程序,因此一定要在VC++软件中输入
B.由于C源程序是字符组成,因此可以作为文本文件在任何文本编辑的软件中输入 C.由于C程序是高级语言程序,因此输入后即可执行 D.由于C程序是高级语言程序,因此它由命令组成 下列说法中错误的是( )
A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其它函数 C. 任何非主函数可以调用其它任何非主函数 D. 程序可以从任何非主函数开始执行 答案:BBDCC CBCCA AABDC BD
C基本数据类型及计算
下列不正确的C语言用户标识符是____。 A) int B) a_1_2 C) ab1exe D) _x 下列正确的C语言标识符是____。
A) #define B) _123 C) %d D) \\n
下列四组字符串中都可以用作C语言程序标识符的一组是____ 。 A) print __123 Pxq str_l
B) _3d one_half My->book Cpp
C) oodb start$it line# pow
D) aBc 3pai His.age while
下面各选项组中,均是C语言关键字的组是____ 。 A) auto,enum,include B) switch,typedef,continue C) signed,union,scanf D) if,struct,type 下列不属于C语言关键字的是____ 。
A) default B) register C) enum D) external 执行语句 printf(\;屏幕显示____。 A) -1 B) 1 C) -ffff D) ffffffff
已知 int a=2,b=1,c;执行语句c=b/a+2.5后, c的值____。 A) 2.5 B) 3 C) 3.0 D) 2
有关变量已经定义,以下合法的数值表达式是____。 A) a=1/b=2 B) ++(a+b) C) b=b/(a=6) D) c=int(a)+b 将字符g赋给字符变量c,正确的表达式是____ 。 A) c=\\147 B) c=\ C) c='\\147' D) c='0147' 下列转义字符中错误的一个是____。
A) '\\000' B) '\\014' C) '\\x111' D) '\\2'
将空格符赋给字符变量c,正确的赋值语句是____。 A) c='\\0' B) c=NULL C) c=0 D) c=32 已知:char a='\\70';则变量a中 。 A)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明非法
字符串\的长度是____。 A) 8 B) 9 C) 14 D) 非法字符串 字符串\的长度是____。
A) 0 B) 1 C) 2 D) 非法字符串
已知:char a;int b;float c;double d;执行语句\;\后,变量c的数据类型是 。
A) int B) char C) float D) double
逗号表达式\的值是____。
A) 15 B) 60 C) 30 D) 不确定
如果int a=1,b=2,c=3,d=4;则条件表达式a
已知int i=10;表达式\的值是____。 A) 0 B) 1 C) 19 D) 20
已知int x=1,y;执行下述语句后变量x的值是____。 y=++x>5&&++x<10;
A) 1 B) 2 C) 3 D) 4
为判断字符变量c的值不是数字也不是字母时,应采用下述表达式____。 A) c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122 B) !(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122) C) c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122 D) !(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)
已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是____。 A) 0 B) 1 C) 5 D) 6
答案:ABABD DDCCC DABAC CABBD C
输入和输出
设a=3,b=4, 执行“printf(“a=%d,B=%d\”的输出是( ) A. a=3,b=4 B. 3,4 C. a=3,B=4 D.a=3 B=4
设a=1234,b=12,c=34 执行“printf(“|==%-3d|\\n”,a,b,c); ”的输出是( ) A.|12341234 | B.|1231234| C.|123412-34| D.|2341234| 使用“scanf(“x=%f,y=%f”,&x,&y);”,要使x,y均为1.25,正确的输入是( ) A. 1.25,1.25 B. 1.251.25 C. x=1.25,y=1.25 D. x=1.25 y=1.25 要使double x; long a; 获得数据,正确的输入语句是( ) A. scanf(“%d,%f”,&a,&x); B. scanf(“%f,%ld”,&x,&a); C. scanf(“%d,%lf”,&a,&x); D. scanf(“%ld,%lf”,&a,&x);
设有int a=255,b=8;则printf(“%x,%o\\n”,a,b);的输出的是( ) A. 255,8 B. ff,10 C. 0xff,010 D. 输出格式错
设a、b为字符型变量,执行“scanf(“a=%c,b=%c”,&a,&b);”后使a为’A’,b为’B’,从键盘上的正确输入是( ) A. ?A??B? B. ?A?,?B? C. A=A,B=B D. a=A,b=B 语句printf(“%f%%”,1.0/3);的输出结果为:
A.0.333333 B.0.333333% C.0.333333%% D.出错
已有定义int x ;float y;且执行scanf(\输入数据为12345 678<回车>,则x和y的值为:
A.123 45.000000 B.123 678.000000 C.12345 678.000000 C.345 678.000000 有如下的定义和输入语句: int a1,a2;char c1,c2;
scanf(\ scanf(\
若要求a1,a2,c1,c2的值分别为10、20、A和B,则正确的数据输入方式为( ) A. 1020AB B. 10 20
已有定义:float f1,f2;程序运行时输入数据为4.52 3.5 ,则输入语句正确的为( ) A.scanf(\ B.scanf(\ C.scanf(\
D.scanf(\
下列数据中属于“字符串常量”的是( ) A.“a” B. {ABC} C. ?abc\\0? D. ?a? 在PC机中,‘\\n’在内存占用的字节数是( ) A. 1 B. 2 C. 3 D. 4 在PC机中,“a\\xff” 在内存占用的字节数是( ) A. 5 B. 6 C. 3 D. 4
在C语言中,合法的长整型常数是( )
A. 0L B. 4962710 C. 0.054838743 D. 2.1869e10 下列数据中不属于“字符常量”的是( )
A. ?\\a? B. ?\\160? C. ?\\070? D. 070 答案:CACDB DBADB AACAD
C程序控制结构
结构化程序设计的3种结构是 A)顺序结构、选择结构、转移结构 B)分支结构、等价结构、循环结构 C)多分支结构、赋值结构、等价结构 D)顺序结构、选择结构、循环结构 已知 int t=0;
while (t=1) {...}
则以下叙述正确的是 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对
有如下程序: main()
{
int x=1,a=0,b=0; switch(x) {
case 0: b++; case 1: a++;
case 2: a++;b++; }
printf(\\n\);}
该程序的输出结果是
A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2 有以下程序 main()
{int i=1,j=1,k=2; if((j++||k++)&&i++)
printf(\\n\); }
执行后输出结果是
A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 有如下程序 main()
{float x=2.0,y; if(x<0.0)y=0.0;
else if(x<10.0)y=1.0/x; else y=1.0;
printf(\\n\);}
该程序的输出结果是
A)0.000000 B)0.250000 C)0.500000 D)1.000000 有如下程序: main()
{int n=9;
while(n>6){n--; printf(\);}
}
该程序的输出结果是
A)987 B)876 C)8765 D)9876 在下列选项中,没有构成死循环的是 A)int i=100; while(1) {i=i0+1;
if(i>100)break; }
B)for(;;);
C)int k=10000;
do{k++;}while(k>10000); D)int s=36;
while(s)--s;
有如下程序段 #include \
main()
{int a=10,b=50,c=30; a=a>30?1:2; b=b>30?1:2;
c=c>30?1:2;
printf(\\n\);}
则执行结果为
A)2,1,2 B)1,2,1 C)1,1,2 D)2,1,1 阅读如下程序段 #include \ main()
{ int a=45,b=40,c=50,d; d=a>30?b:c; switch(d)
{ case 30 : printf(\); case 40 : printf(\); case 50 : printf(\); default : printf(\);}}
则输出的结果是
A)40,50, B)50,# C)40,# D)40,50,# 若有定义int k=10;则下列程序的输出结果为 do{
printf(\); } while(!k);
A)9 B)10 C)10987654321 D)没有输出 阅读下列程序段,则程序的输出结果是 #include \ main()
{ int a=10,b=10,k;
for(k=0;a>8;b=++k) printf(\);
printf(\\n\);}
A)10,10,10,0, B)10,9,9,0, C)10,10,9,1, D)9,9,9,1, 下列程序的运行结果是 #include \ main()
{int a,b,m;
for(a=5;a>=1;a--) { m=0;
for(b=a;b<=5;b++)
m=m+a*b;}
printf(\\n\);}
A)30 B)15 C)20 D)10
若int i,j;,则for(i=j=0;i<10&&j<8;i++,j+=3)控制的循环体执行的次数是(A)9 B)8 C)3 D)2 下列程序的输出结果是 #include \ main() { int i=6; while(i--)
printf(\);
printf(\\n\);}
A)531 B)420 C)654321 D)死循环 阅读下列程序,则执行结果是 #include \ main()
{int a=0,b=0,c=0,i; for(i=0;i<4;i++) switch(i) {case 0:a=i++; case 1:b=i++;
case 2:c=i++; case 3:i++;}
printf(\\n\);}
A)0,1,3,4 B)1,2,3,4 C)0,1,2,5 D)0,2,3,4 下面程序的运行结果是 #include \ main()
)
{int j,i,k=0;
for(j=50;j<=60;j++) {if(!(k))printf(\\n\); for(i=2;i
k++;}}}
A)5359 B)5953 C)3595 D)9535 已知char ch='C';则以下表达式的值是 ch=(ch>='A′ && ch<='Z′)?(ch+32):ch; A)A B)a C)Z D)c 下列程序的运行结果是 #include \ main()
{ int x=-9,y=5,z=8; if(x else z+=1; printf(\\n\);} A)6 B)7 C)8 D)9 现有定义int k=1;则执行语句while(++k<4);后,k的值为 A)4 B)5 C)6 D)8 以下程序的运行结果为 #include \ main() {int m,n; for(m=0,n=10;m A)6,7 B)7,6 C)9,7 D)7,9 答案:DBACC BDABD BBCBC ADDAC 数组 1、若有以下数组说明,则数值最小和最大元素的下标分别是( )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A.1,12 B.0,11 C.1,11 D.0,12 2、若有以下数组说明,且i=10;则a[a[i]]元素数值是( )。 int a[12]={1,4,7,10,2,5,8,11,3,6,9,12}; A.10 B.9 C.6 D.5 3、设有定义:char s[12]={“string”};,则 printf(“%d\\n”,strlen(s));的输出是( )。 A.6 B.7 C.11 D.12 4、以下对数组描述正确的是( )。 A.数组一旦定义其大小是固定的,但数组元素的类型可以不同 B.数组一旦定义其大小是固定的,且数组元素的类型必须相同 C.数组一旦定义其大小是可变的,且数组元素的类型可以不同 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同 5、以下叙述中错误的是( )。 A.不可以用数组名对数组整体进行操作 B.数组名代表的是数组所占存储区的首地址,其值不可改变 C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D.可以通过赋初值的方式确定数组元素的个数 6、下列定义的字符数组中,printf(“%s\\n”,str[2]);语句的输出是( )。 char str[3][20]={“basic”,“foxpro”,“windows”}; A.basic B.foxpro C.windows D.输出语句出错 7、以下能正确将字符串“Boy”进行完整赋值操作的是( )。 A.char s[3]={?B?,?o??y?}; B.char s[]=“Boy”; C.char s[3]={“Boy”}; D.char s[3];s[0]=?B?;s[1]=?o?;s[2]=?y?; 8、定义: char a[]=\则数组 a所占的空间为( )。 A.4个字节 B.5个字节 C.6个字节 D.7个字节 9、若有int a[4]={1,2,3,4};,则a[a[0]+2*a[2]-a[3]]的值( )。 A.1 B.2 C.3 D.4 10、设变量定义为char format[]=“s=%d\\n”;则数组format中有( )个元素。 A.4 B.5 C.6 D.7 11、静态整型数组不赋初值时,其各元素的值是( )。 A.不定值 B.-1 C.0 D.1 12、有以下程序段的输出结果是( )。 char a[]=“abcdefgh”; int m,n; m=sizeof(a); n=strlen(a); printf(“%d,%d\\n”,m,n); A.9,9 B.8,9 C.8,8 D.9,8 13、以下程序段的输出结果是( )。 int i,a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf(“%d%d%d”,a[2],a[5],a[8]); A.258 B.741 C.852 D.369 14、以下程序运行后的输出结果是( )。 main() {int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2)j+=p[i]; printf(\ } A.42 B.45 C.56 D.60 15、以下程序执行后输出结果是( )。 main() {int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2) {k=k+p[i];i++;} printf(\ } A.58 B.56 C.45 D.24 16、设int x[10]={0,2,4};,假定在VC++编译环境下,int类型变量占用四个字节,则数组x在内存中所占字节数是( )。 A.6 B.12 C.20 D.40 17、定义: int a[2][2]; 则数组 a在内存中的存放顺序为( )。 A.a[0][0]、a[1][0]、a[0][1]、a[1][1] B.a[0][0]、a[0][1]、a[1][0]、a[1][1] C.a[0][0]、a[1][1]、a[0][1]、a[1][0] D.a[0][0]、a[1][1]、a[1][0]、a[0][1] 18、以下数组定义中不正确的是( )。 A.int a[2][3]; B.int b[][3]={0,1,2,3}; C.int c[100][100]={0}; D.int d[3][]={{1,2},{1,2,3},{1,2,3,4}}; 19、以下程序的输出结果是( )。 main() {int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(“%d\\n”,s); } A.18 B.19 C.20 D.21 20、数组定义为int a[3][2]={1,2,3,4,5,6},数组元素( )的值为6。 A.a[3][2] B.a[2][1] C.a[1][2] D.a[2][3] 21、以下程序的输出结果是( )。 main() { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(“%d,”,x[i][2-i]); } A.1,5,9 B.1,4,7 C.3,5,7 D.3,6,9 答案:BCADC CBCDC CDCBD DBDAB C 指针 1.执行以下程序后,a的值为( ). main() {int a,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m; printf(\ } A)-1 B)1 C)0 D)4 2.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是( ). main() {int *p,*q,a,b; p=&a; printf(\ scanf(\ } A)*p表示的是指针变量p的地址. B)*p表示的是变量a的值,而不是变量a的地址. C)*p表示的是指针变量p的值 D)*p只能用来说明p是一个指针变量 3.已有定义 int k=2;int *ptr1,*ptr2;且ptr1t 、ptr2均已指向变量k,下面不能正确执行 的赋值语句是( ) A) k=*ptr1+*ptr2 B) prt2=k; C) ptr1=ptr2 D) k=*ptr1*(*ptr2); 4.变量的指针,其含义是指变量的( ) A) 值 B) 地址 C) 名 D) 一个标志 5.若有说明: int *p,m=5,n; 以下正确的程序是( ) A) p=&n; scanf(\ B)p=&n; scanf(\ C) scanf(\ *p=n; D) p=&n; *p=m; 6.下面程序段的运行结果是( ) char *s=\ s+=2; printf(\ A) cde B) 字符‘c’ C) 字符‘c’的地址 D) 无确定的输出结果 7.设指针x指向的变量值为25, 则printf(\的输出结果是( ) A)23 B)24 C)25 D)26 8.若有定义char s[10];则在下面表达式中不表示s[1]的地址的是( ) A) s+1 B) s++ C) &s[0]+1 D) &s[1] 9.有以下程序 #include main() {char str[][20]={\ printf(\ } 程序运行后的输出结果是( ) A)0 B)5 C)7 D)20 10.有以下程序 main() {int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) *(p+i)=i+1; printf(\ } 程序运行后的输出结果是( ) A)3 B)6 C)9 D)2 11.已定义以下函数 fun(int *p) { return *p; } 该函数的返回值是( ) A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D)形参p的地址值 12.对于基类型相同的指针变量,不能进行( )运算。 A) + B)- C) = D)= = 13.若已定义a为int型变量,则对p的说明和初始化正确的是( ) A) int *p=a; B)int p=a; C) int p=a; D)int *p=&a; 14.设有如下程序段 char str[]=”hello”; char *ptr; ptr=str; 执行完上面的程序后,*(ptr+5)的值为( ) A) ‘0’ B)’\\0’ C)不确定的值 D)’0’的地址 15.若x为整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是( A)pb=&x B)pb=x C)*pb=&x D)*pb=*x 答案:CBBBD BDBCB CADBA 函数 1.建立函数的目的之一是: A) 提高程序的可读性 B) 提高程序的执行效率 C) 减少程序的篇幅 D) 减少程序文件所占内存 2.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 A) void B) int C) float D) double 3.C语言中,形参的缺省存储类别是 A) auto B) register C) static D) extern 4.以下正确的函数定义形式是 A) double fun(int x, int y); B) double fun(int x; int y) ) C) double fun(int x,int y) D) double fun(int x, y) 5.以下叙述中正确的是 A)全局变量的作用域一定比局部变量的作用域范围大 B)静态(static)类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量 D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值 6.若程序中定义了以下函数 double myadd(double a,double b) { return (a+b);} 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是 A)double myadd(double a,b); B)double myadd(double,double); C)double myadd(double b,double a); D)double myadd(double x,double y); 7.有以下程序 char fun(char x , char y) { if(x<y) return x; return y; } main( ) { int a=?9?,b=?8?,c=?7?; printf(\ } 程序的执行结果是() A) 函数调用出错 B)8 C)9 D)7 8.以下正确的说法是_________。 在C语言中 A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 9.以下不正确的说法是______ C语言规定 A) 实参可以是常量、变量或表达式 B) 形参可以是常量、变量或表达式 C) 实参可以为任意类型 D) 形参应与其对应的实参类型一致 10.若调用一个函数,且此函数中没有return语句,则正确的说法是_______ A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值 11.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是_______ A) 地址传递 B) 单向值传递 C) 由实参传给形参,再由形参传回给实参 D) 由用户指定传递方式 12.以下程序有语法性错误,有关错误原因的正确说法是_________ main() {int G=5, k; void prt_char( ); …… k=prt_char(G); …… } A)语句void prt_char();有错,它是函数调用语句,不能用void说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 13.以下函数调用语句含有实参的个数为_________ fun((exp1,exp2),(exp3,exp4,exp5)) ; A) 1 B) 2 C) 4 D) 5 14.以下错误的描述是______ 函数调用可以 A)出现在执行语句中 B)出现在一个表达式中 C)做为一个函数的实参 D)做为一个函数的形参 15.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) { int i,j,t; for(i=0;i〈n-1;i++) for(j=i+1;j〈n;j++) if(a[i]〈a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i〈10;i++) printf(\ printf(\ 程序运行后的输出结果是______。 A) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1, C) 1,2,3,8,7,6,5,4,9,10, D) 1,2,10,9,8,7,6,5,4,3, 16.以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) { int i,t; for(i=0;i〈n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i<10;i++) s+=b[i]; printf(\ 程序运行后的输出结果是______。 A) 22 B) 10 C) 34 D) 30 17.有以下程序 void ss(char *s,char t) { while(*s) {if(*s==t) *s=t-?a?+?A?; s++; } } main() { char str1[100]=\ ss(str1,c); printf(\ 程序运行后的输出结果是______。 A) ABCDDEFEDBD B) abcDDfefDbD C) abcAAfefAbA D) Abcddfefdbd 18.有以下程序 void f(int x,int y) { int t; if(x<y){ t=x; x=y; y=t; } } main() { int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c); printf(\ } 程序执行后输出的结果是 A) 3,4,5 B) 5,3,4 C) 5,4,3 19.有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else D) 4,3,5 return y;} main() { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf(\ 程序执行后输出结果是 A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8 20.以下正确的说法是_______ A) 定义函数时,形参的类型说明可以放在函数体内 B) return后边的值不能为表达式 C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 D) 如果形参与实参的类型不一致,以实参类型为准 答案:ABACB ADABD BCBCC ABDBC 结构 共用 枚举 1.当说明一个结构体变量时系统分配给它的内存是( ) A)各成员所需内存的总和 B)结构中第一个成员所需内存容量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存容量 [A] [B] [C] [D] 2.当说明一个联合体变量时系统分配给它的内存是 A)各成员所需内存的总和 B)结构中第一个成员所需内存容量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存容量 3.设有定义语句struct {int x ;int y;} d[2]={{1,3},{2,7}};,则printf(\的值为( ) A)0 B)1 C)3 D)6 4.设有定义语句\team printf(\,your,his,her);值为( ) A)0,1,2,3 B)0,4,0,10 C)0,4,5,15 D)1,4,5,15 5.以下对枚举类型名的定义中正确的是( ) A)enum a ={one,two,three}; B)enum a{ a1,a2,a3}; C)enum a ={'1','2','3'}; D)enum a{\ 6.若有如下定义 typedef union {long x[2];int y[4];char z[8];} MYTYPE; MYTYPE them; 则printf(\的输出是( ) A)32 B)16 C)40 D)24 7.设有以下说明和定义: typedef union {long i;int k[5];char c;} DATE; struct date {int cat; DATE cow;double dog;} too; DATE max; 则下列语句printf(\的执行结果是( ) A)52 B)30 C)18 D)8 8.根据下面的定义,能打印字母M的语句是( ) {my,your=4,his,her=his+10}; 则 struct person {char name[9];int age ;}; struct person c[10]={\ A)printf(\ B)printf(\ C)printf(\ D)printf(\ 9.设有如下定义,则对data中的a成员的正确引用是( ) struct sk {int a ;float b;}data,*p=&data; A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a 10.设有以下说明的语句 sturct stu { int a; float b; } stutype; 则下面的叙述不正确的是( ) A)struct 是结构体的类型的关键字 B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名 11.以下scanf函数调用语句中对结构体变量成员的的不正确引用是( struct pupil { char name[20]; int age; int sex; }pup[5],*p; p=pup; A)scanf(\ B)scanf(\ C)scanf(\ D)scanf(\ 12.下面程序的输出结果是( ) #include \ main() { union { int a[2]; long b; char c[4]; }s; s.a[0]=0x39; s.a[1]=0x38; printf(\ printf(\ } A)390038,39 B)39,71 C)3938,38 D)3839,39 ) 13.下面对typedef的叙述中不正确的是( ) A)用typedef可以定义各种类型名,但不能用来定义变量 B)用typedef可以增加新类型 C)用typedef只是将已存在的类型用一个新的标识符来代表 D)使用typedef有利于程序的通用和移植 [A] [B] [C] [D] 14.以下程序的运行结果是( ) #include \ main() { int j; union { int a; long b; char c; }m; m.b=0x12345678; printf(\ } A)1234,12 B)12345678,78 C)12345678,12 D)0,5678 15.设有如下定义:(本题选做) struct sk { int n; float x; }data,*p; 若要使p指向data中的n域,正确的赋值语句是( ) A)p=&data.n; B)*p=data.n; C)p=(struct sk *)&data.n D)p=(struct sk *)data.n 答案:ACDCB BADBC DBBBC C语言实验参考答案 实验一 5、输入并运行自已编写的程序(教材第一章P14 三 编程题)。 实验二 1、编写一个程序,从键盘接收3个实数(分别为10.0、20.0、5.0),输出这3个数的和s、乘积t和平均值a。 #include main() {float x,y,z,s,t,a; printf(“x,y,z=”); scanf(“%f,%f,%f”,&x,&y,&z); s=x+y+z; t=x*y*z; a=s/3; printf(“s=%f,t=%f,a=%f\\n”,s,t,a); } 2、编程。要求用户输入两个整数a、b(分别为20、10), 读取用户从键盘输入的值,然后: 1)用整数输出这两个数的和、差; 2)用长整型输出这两个数的积,用float输出商; 3)用整数输出这两个数的余数,用float输出平均值。 #include {int a,b,he,cha,yu; long ji; float shang,aver; printf(“a,b=”); scanf(“%d,%d”,&a,&b); he=a+b; cha=a-b; ji=(long)a*b; shang=1.0*a/b; yu=a%b; aver=(a+b)/2.0; printf(“a+b=%d,a-b=%d,a*b=%ld\\n”,he,cha,ji); printf(“a/b=%f,a%%b=%d,aver=%f\\n”,shang,yu,aver); } 3. 再次运行程序第2题中的程序,使整数a、b的值分别为10、20,分析程序运行结果,并给出说明。 程序同上。 实验三 1、编写一个程序,从键盘接收一个一位的整型数,经转换,用字符函数putchar输出。例如,输入整数5,程序运行后输出字符5。 #include printf(“a=”); scanf(“%d”,&a); c=a+48; putchar(c); } 22、编程。输入半径,计算球体表面积(S?4??r)和球体积 (#include V?43??r3)。 #define PI 3.1415926 main() {float r,s,v; printf(“r=”); scanf(“%f”,&r); s=4*PI*r*r; v=4/3.0*PI*r*r*r; printf(“s=%f,v=%f\\n”,s,v); } 3、编写一个程序,要求通过键盘给6个变量赋值,然后将变量的值在屏幕上打印输出。这六个变量的值分别为:10,-10,40000,a,3.14,hello。 #include char d,ch[6]; float e; scanf(“%d%d%ld%c%f%s”,&a,&b,&c,&d,&e,ch); printf(“%d,%d,%ld,%c,%f,%s\\n”,a,b,c,d,e,ch); } 实验四 1. 编程实现:键盘输入三个整数,分别存放到变量a,b,c中,输出其中的最小值(要求不改变a、b、c的值)。 #include main() {int a,b,c,min; printf(\请输入三个整数a,b,c=\scanf (\min=a>b?(b>c?c:b):(a>c?c:a); printf(\ } 2. 编程实现:键盘输入一个字符,如是大写字母,则输出相应小写字母;如是小写字母,则输出相应大写字母;其它字符原样输出。 #include main() {char c; printf(\请输入一个字符:\scanf (\ if(c>='a'&&c<='z')c=c-32; else if(c>='A'&&c<='Z')c=c+32; printf(\} 3、计算以下分段函数值 #include main() {double x,y; printf(\请输入一个实数:\scanf (\ if(x<0&&x!=-3)y=x*x+x-6; else if(x>=0&&x<10&&x!=2&&x!=3)y=x*x-5*x+6; else y=x*x-x-1; printf(\ } 4. 编写程序,键盘接收一个字符串(只含大、小写英文字母),将该字符串加密后输出。加密规则为:若为小写字母则不变,若为大写字母则将其转换为小写后再后移一个字母,例如“A”应转换为“b”,“B”应转换为“c”,“Y”应转换为“z”,而“Z”应转换为“a”。 #include int i; printf(\请输入一个字符串(只含英文字母):\gets (c); for(i=0;c[i]!=?\\0?;i++) if(c[i]>= ?A?&&c[i]<= ?Y?)c[i]=c[i]+33; else if(c[i]==?Z?)c[i]=?a?; puts(c); putchar(?\\n?); } 5. 编写程序,用scanf输入任意两个数给变量a、b,若a大于等于b,则直接输出a、b,否则将a、b的值交换(即a的原值放入b中,b的原值放入a中)后再输出。 #include {float a,b,t; printf(\请输入两个数:\scanf (\if(a } 6. 编写程序:由系统生成一个10以内的随机整数,用户从键盘上输入一个10以内的整数,如果两者相等输出“OK”,否则输出“ERROR”。 #include #include #include main() {int a,b; srand( (unsigned)time(NULL)); b=rand()+1; printf(\请输入一个10以内的整数:\scanf(\ printf(\随机数b=%d\\n\if(a==b) printf(\else printf(\ } 2222 7. 编写程序要求输入整数a和b,若a+ b大于100,则输出a+ b百位以上的数字,否则输出两数之和。(此题为选做) #include main() {int a,b,t; printf(\请输入两个整数a,b=\scanf (\t= a*a+b*b; if(t<=100) printf(\ else {t=t/100; printf (\百位以上的数字是%d\\n\ } } 实验五 1. 编程,计算函数y的值,已知函数y与自变量x的关系为: #include main() {float x,y; printf(“请输入一个非负数x=”); scanf(“%f”,&x); if(x>=0&&x<100)y=3*x+10; else if(x>=100)y=x*x*x-20; if(x>=0)printf(“y=%f\\n”,y); else printf(“输入错误!\\n”); } 2. 编写一个简单的计算器程序,输入格式为:data1 op data2。其中data1和data2是参 加运算的两个数,op为运算符,它的取值只能是+、-、*、/。 #include printf(\请输入算式(如3+5):\scanf(\ switch(op) {case '+': printf(\ case '-': printf(\ case '*': printf(\×%g=%g\\n\ case '/': printf(\÷%g=%g\\n\ } } 2. 编程实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: ①能同时被3,5,7整除 ②能被其中两数(要指出是哪两个数)整除 ③能被其中一个数(要指出是哪一个数)整除 ④不能被3,5,7任一个数整除 #include {int n; printf(\请输入一个整数n=\ scanf(\ if(n%3==0&&n%5==0&&n%7==0) printf(\能被3,5,7整除\\n\ else if(n%3==0&&n%5==0)printf(\能被3,5整除\\n\else if(n%3==0&&n%7==0)printf(\能被3,7整除\\n\else if(n%5==0&&n%7==0)printf(\能被5,7整除\\n\else if(n%3==0)printf(\能被3整除\\n\else if(n%5==0)printf(\能被5整除\\n\else if(n%7==0)printf(\能被7整除\\n\ else printf(\不能被3,5,7任一个整除\\n\} 4. 已知从2008年12月开始,银行整存整取存款不同期限的年利率分别为:三个月 1.71%,半年 1.98%,一年 2.25%,两年 2.79%,三年 3.33%,五年 3.60%。编写程序,要求输入存钱的本金和期限,求出到期时能从银行得到的利息与本金的合计数。 #include float x,y; printf(\请输入存款本金x=\scanf(\do {getchar(); /*接受回车符*/ clrscr(); /*清屏*/ printf(\存款期限:\\n\ printf(\三个月(年利率1.71%%)\\n\printf(\半年(年利率1.98%%)\\n\printf(\一年(年利率2.52%%)\\n\printf(\两年(年利率2.79%%)\\n\printf(\三年(年利率3.33%%)\\n\printf(\五年(年利率3.60%%)\\n\printf(\请输入存款期限(a,b,c,d,e,f):\scanf(\} while(!(c>='a'&&c<='f')); printf(\元存期\ x=x/100; switch(c) {case 'a':y=x*(100+1.71/4); printf(\三个月\ case 'b': y=x*(100+1.98/2); printf(\半年\ case 'c': y=x*(100+2.25); printf(\一年\ case 'd': y=x*(100+2.79*2); printf(\两年\ case 'e': y=x*(100+3.33*3); printf(\三年\ case 'f': y=x*(100+3.6*5); printf(\五年\ } printf(\到期的本息合计为%f元\\n\} 5. 设函数 (1)用条件表达式求函数值y。 (2)用if 语句编程,输入x,输出y,并给出你所使用的测试用例。 解(1)用条件表达式求函数值y。 #include int y; printf(\请输入x=\scanf (\y=(x>=0)?(x>0?1:0):-1; printf(\} 解(2)用if 语句编程,输入x,输出y。 #include printf(\请输入x=\scanf (\if(x>=0) if(x>0)y=1; else y=0; else y=-1; printf(\} 6. 编写程序:键盘上输入一个不多于5位的正整数,要求:①求它是几位数②逆序打印出各位数字。如原数为123,应输出321。(此题为选做) #include main() {long n,m,p,w1=0,w2=0,w3=0,w4=0,w5=0,t=0; printf(\请输入一个非负整数(n<100000)n=\scanf(\if((n/10000)!=0)m=5; else if(n/1000!=0)m=4; else if(n/100!=0)m=3; else if(n/10!=0)m=2; else m=1; switch(m) {case 5:p=n/10000;w1=p;n-=p*10000;t+=w1*pow(10,m-5); case 4:p=n/1000;w2=p;n-=p*1000;t+=w2*pow(10,m-4); case 3:p=n/100;w3=p;n-=p*100;t+=w3*pow(10,m-3); case 2:p=n/10;w4=p;n-=p*10;t+=w4*pow(10,m-2); case 1:p=n;w5=p;t+=w5*pow(10,m-1); } printf(\输入的是%ld位数,逆序数为%ld\\n\} 实验六 1、编程:输出200以内所有能被7整除的数。 #include for(i=0;i<=200;i+=7) printf(“M”,i); } 2、从键盘输入n个数(n<10),找出其中最小值,请编写相应程序。 #include main() {int n,i,a,min; printf(“n=”); scanf(“%d”,&n); for(i=1;i<=n;i++) {scanf(“%d”,&a); if(i==1)min=a; if(min>a)min=a; } printf(“min=%d”,min); } 3、键盘输入正整数m和n(m #include main() {int m,n,i,x1=0,x2=0; printf(“input m,n(m else x2+=i; printf(“x1(奇数之和)=%d,x2(偶数之和)=%d\\n”,x1,x2); } 4.编程,计算函数y的值。要求键盘接收自变量x的值,若x 的值不为零,则计算函数y的值并输出,再从键盘接收下一个x的值,……,直到x的值为零,则显示“Thank You,Bye!”,尔后结束程序,已知函数y与自变量x的关系为: #include {float x=1,y; do {if(x<0) printf(\输入错误(x<0)!请重新输入\\n\printf(\请输入x=\scanf(\ if(x>0&&x<100)y=3*x+10; if(x>=100)y=x*x*x-20; if(x>0)printf(\} while(x!=0); printf(\ou,Bye!\\n\ } 5.编写程序:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include float f1=1,f2=2,f,s=0; for(i=1;i<=20;i++) {f=f2/f1;s+=f; f=f1;f1=f2;f2=f+f2; } printf(\} 6.我国现有人口13亿,设年增长率为1%,编写程序,计算多少年后增加到20亿。 #include {float p=13; int n=0; do {p=p*1.01; n++; } while(p<20.); printf(\年后人口增加到20亿!\\n\ } 7.求解爱因斯坦数学题。有一条长阶梯,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶? #include do {if(n%2!=1){n++;continue;} if(n%3!=2) {n++;continue;} if(n%5!=4) {n++;continue;} if(n%6!=5) {n++;continue;} if(n%7!=0) {n++;continue;} break; } while(1); printf(\这条阶梯共有%d阶!\\n\} (说明:该题应有多解:119,329,??) 8.每个苹果0.8 元,第一天买2 个苹果,第二天开始,每天买前一天的2 倍,直至购买的苹果个数达到不超过100 的最大值。编写程序求每天平均花多少钱?(此题为选做) #include do { d++; /*第d天*/ n=n*2; /*买n 个苹果*/ p=p+n; /*共p 个苹果*/ } while(p+n*2<=100); s=p*0.8/d; printf(\每天平均花%g元钱!\\n\ } 9.编写程序,求一个整数任意次方的最后三位数。即求xy的最后三位数,要求x,y 从键盘输入。(注意x的结果是否会溢出)。(此题为选做) #include #include printf(\请输入x,y=\scanf(\m=pow(x,y); m3=(int)m00; printf(\的y次方为%g,其最后三位数是%0.3d\\n\} 实验七 1. 编写程序,从键盘输入6 名学生的5 门成绩,分别统计出每个学生的平均成绩。 #include for(a=1;a<=6;a++) {v=0; for(b=1;b<=5;b++) {printf(\请输入第%d名学生的第%d门成绩:\ scanf(\ v=v+s; } printf(\第%d名学生的平均成绩为:%g\\n\} } y 2、打印出所有的\水仙花数\,所谓的\水仙花数\是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个\水仙花数\,因为有153=1*1*1+5*5*5+3*3*3 。 解(1) #include #include {int a,b,c,n; for(n=100;n<=999;n++) {a=n/100; b=n0/10; c=n; if(n==a*a*a+b*b*b+c*c*c) printf(“%d\\n”,n); } } 3、请分别用三种循环结构编程计算: 1!+2!+3!+...+n!,n的值由键盘输入。 解(1) #include {int n,i; long p=1,sum=0; printf(“n=”); scanf(“%d”,&n); for(i=1;i<=n;i++) {p*=i; sum+=p; } printf(“1!+2!+…+%d!=%ld\\n”,n,sum); } 解(2) #include long p=1,sum=0; printf(“n=”); scanf(“%d”,&n); while(i<=n) {p*=i; sum+=p; i++; } printf(“1!+2!+…+%d!=%ld\\n”,n,sum); } 解(3) #include {p*=i; sum+=p; i++; } while(i<=n); printf(“1!+2!+…+%d!=%ld\\n”,n,sum); } 4. 用循环语句编写程序,其功能是计算: s=1+12+123+1234+12345+123456+1234567 #include {long i,t=0,s=0; for(i=1;i<=7;i++) {t=10*t+i; /*printf(\ s=s+t; } printf(\ } 5. 编写程序,输出下列形式的杨辉三角形的前10行。(此题为选做) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… #include main() {int i,j,a[10]={1,1}; printf(\ for(i=2;i<10;i++) {a[i]=1; for(j=i-1;j>=1;j--)a[j]+=a[j-1]; for(j=0;j<=i;j++) printf(\ printf(\} getch(); } 实验八 1、打印输出由1,2,3,4四个数字组成的4位数,并统计它的个数(允许该4位数中有相同的数字,例如:1111,1122,,1212等).。 #include {int n,a,b,c,d,num=0; for(a=1;a<=4;a++) for(b=1;b<=4;b++) for(c=1;c<=4;c++) for(d=1;d<=4;d++) {n=1000*a+100*b+10*c+d; printf(“]”,n); num++; } printf(“\\nnum=%d\\n”,num); } 2、从键盘输入10个正整数进行求和,如果错误地输入了负数,则求和结束。请分别用break和不用break编写相应程序。 解(1) 用break编写程序 #include {int i,n,sum=0; for(i=1;i<=10;i++) {scanf(“%d”,&n); if(n>=0)sum+=n; else break; } printf(“sum=%d”,sum); } 解(2) 不用break编写程序 #include main() {int i=1,n=0,sum=0; while(i<=10&&n>=0) {scanf(“%d”,&n); if(n>=0) sum+=n; i++; } printf(“sum=%d”,sum); } 222 3. 勾股定理为:a+b=c,编写程序,输出30以内满足上述关系的整数组合,例如3,4,5就是一个整数组合。 #include {int a,b,c,n; for(a=1;a<=30;a++) for(b=a;b<=30;b++) for(c=a;c<=30;c++) {if(c*c==a*a+b*b) printf(\ } } 4. 计算并输出500以内最大的10个素数之和。 #include {int a,b,s=0,n=0; for(a=500;a>=2;a--) {for(b=2;b<=a-1;b++) if(a%b==0)break; if(b==a){n++;s=s+a;printf(\ \ if(n==10) break; } printf(\} 5. 请验证2000以内的哥德巴赫猜想,对于任何大于4的偶数均可以分解为两个素数之和。 #include {int n,m,a,b; for(n=6;n<=2000;n+=2) for(m=3;m if(m%a==0)break; if(a==m) {for(b=2;b if((n-m)%b==0)break; if(b==n-m) { printf(\ } } } 6. 编写程序:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5(此题为选做) #include main() {int n,m,k=1; printf(\请输入一个正整数n=\scanf(\printf(\for(m=2;m<=n;m++) if(n%m==0) {if(k==1) printf(\else printf(\k++; n=n/m; m--; continue; } } printf(\} 7. 编写程序,求一个正整数的位数(提示:关系表达式的值可以参与算术运算)。(此题为选做) #include main() {long a,n=0,m=1; printf(\请输入一个正整数a=\ scanf(\ do {if(a/m!=0){n++;m=m*10;} else break; } while(1); printf(\正整数%ld的位数是:%ld\\n\} 实验九 1、求一个3×3的整数矩阵的副对角线上所有奇数的和sum2。 #include main() {int a[3][3],sum2=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) {scanf(“%d”,&a[i][j]); if(i+j==2&&a[i][j]%2) sum2+=a[i][j]; } printf(“sum2=%d”,sum2); } 2、输入一个正整数n(1 ⑵ 把这些数逆序后再输出。 ⑶ 输出它们中的最大值及其下标(设最大值唯一,下标从0开始)。 ⑷ 将它们中的最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。 #include {int a[10],n,min,max,xb0,xb1,i,sum,t; float aver; printf(“n=”); scanf(“%d”,&n); for(i=0;i scanf(“%d”,&a[i]); min=a[0];xb0=0; max=a[0];xb1=0; sum=a[0]; for(i=1;i {if(min>a[i]){min=a[i];xb0=i;}; if(max sum+=a[i]; } aver=1.0*sum/n; printf(“(1)平均值为:%3.2f\\n”,aver); printf(“(2)逆序输出:”); for(i=n-1;i>=0;i--) printf(“M”,a[i]); printf(“\\n”); printf(“(3)最大值为:%d,其下标为:%d\\n”,max,xb1); t=a[0];a[0]=a[xb0];a[xb0]=t; t=a[n-1];a[n-1]=a[xb1];a[xb1]=t; printf(“(4)经交换后输出:”); for(i=0;i printf(“\\n”); } 3. 定义一个含有30个整型元素的数组a,按顺序分别赋予从2开始的偶数;然后按顺序每5个数求出一个平均值,放在另一个数组b中存储,输出数组b中6个元素的值。 #include float b[6]={0,0,0,0,0,0}; for(i=0;i<30;i++)a[i]=(i+1)*2; for(i=0;i<6;i++) {for(j=0;j<5;j++) b[i]+=a[i*5+j]; b[i]=b[i]/5.; printf(\ } } 4. 通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半角元素的值。 #include for(i=0;i<5;i++) for(j=0;j<5;j++)a[i][j]=i*5+j+1; for(i=0;i<5;i++) {for(j=0;j<=i;j++) printf(\ printf(\} } 5. 从键盘输入两个字符串a和b,要求不使用库函数strcat,把串b的前5个字符连接到串a中;如果b中的长度小于5,则把b的所有元素都连接到a中。 #include {char a[20],b[20]; int i,j; gets(a); gets(b); for(i=0;a[i]!='\\0';i++); for(j=0;b[j]!='\\0'&&j<5;j++) a[i+j]=b[j]; a[i+j]='\\0'; puts(a); } 6. 定义两个N行N列的二维数组a、b,编写程序,将a数组最后一行放到b数组的第0列中,把a数组中的第0行放到b数组的最后一列中,b所指二维数组中其他元素的数据 不变。 #include {int i,j ,a[3][3]={1,2,3,4,5,6,7,8,9}; int b[3][3]={11,12,13,14,15,16,17,18,19}; printf(\变换前数组a,b:\\n\ for(i=0;i<3;i++){for(j=0;j<3;j++)printf(\ printf(\ } printf(\ for(i=0;i<3;i++){for(j=0;j<3;j++)printf(\ printf(\ } for(i=0;i<3;i++) {b[i][0]=a[2][i]; b[i][2]=a[0][i]; } printf(\变换后数组a,b:\\n\ for(i=0;i<3;i++){for(j=0;j<3;j++)printf(\ printf(\} printf(\ for(i=0;i<3;i++){for(j=0;j<3;j++)printf(\ printf(\} } 7. 一个整型数组有10个元素,编写程序删除所有值为n的元素。要求①主函数完成n的输入,数组元素的输入以及进行删除后数组元素的输出。②子函数完成删除功能。(此题为选做) #include main() {int a[10],i,n,k=0,j; printf(\请输入10个整数:\\n\for(i=0;i<10;i++) scanf(\ printf(\请输入1个要被删除的整数:\\n\scanf(\ for(i=0;i<10;i++) if(a[i]==n){for(j=i;j<9;j++) a[j]=a[j+1]; i--;k++;continue; } printf(\删除后数组的输出:\\n\for(i=0;i<10-k;i++) printf(\ \ printf(\} 8. 试编程实现如下功能:先定义一个4行5列的数组(矩阵),调用库函数rand()随机产生20-50之间的整数给数组元素赋值,再将矩阵中第二列与第四列的元素互换。要求先输出原数组,再输出交换后的数组。(rand函数的使用请参阅教材259页)(此题为选做) #include #include {int a[4][5],i,j,t; srand( (unsigned)time(NULL)); printf(\变换前数组a:\\n\for(i=0;i<4;i++) {for(j=0;j<5;j++) {a[i][j]= rand()0+21;printf(\printf(\} printf(\变换后数组a:\\n\ for(i=0;i<4;i++){t=a[i][1];a[i][1]=a[i][3];a[i][3]=t;} for(i=0;i<4;i++) {for(j=0;j<5;j++) printf(\printf(\} } 9. 已知一组整型数据已按从小到大排列好,现任意输入一个整数,请按原来排序的规律将它插入到数组中(例如:原来的一组整数为1,3,5,8,9,若输入的整数是7,则最终的结果为: 1,3,5,7,8,9)。(此题为选做) #include main() {int a[10]={1,3,5,7,9,11,13,15,17},i,j,n; printf(\请输入1个整数:\scanf(\for(i=0;i<9;i++) if(a[i]>n) {for(j=9;j>i;j--)a[j]=a[j-1]; a[i]=n; break; } if(n>=a[8])a[9]=n; for(i=0;i<10;i++) printf(\ \printf(\ } 10. 编写程序实现对字符串的加密,要求从键盘输入一个字符串,输出加密之后的字符串。 加密规则为:对于串中第奇数个字符,若是字母,则把该字母变为它后面的字母(若为Z则变为A),不是字母则不变;对于偶数个字符,若是字母,则把该字母变为它前面的字母(若为A则变为Z),不是字母则不变;大小写字母都遵循此规则。例如: 若原字符串是:AbbaZG Ha-MnnK Yzx 加密字符串为:BaczAF Gb-NmoJ Xaw (此题为选做) #include {char a[20]; int i; printf(\请输入一个字符串:\gets(a); for(i=0;a[i]!='\\0';i++) if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z') if(i%2==1) switch(a[i]) {case 'a':a[i]='z'; break; case 'A':a[i]='Z'; break; default:a[i]=a[i]-1; } else switch(a[i]) {case 'z':a[i]='a'; break; case 'Z':a[i]='A'; break; default:a[i]=a[i]+1; } puts(a); printf(\ } 11. 编写程序:输入一个整数,输出该整数的平方螺旋矩阵。例如输入4,则输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 (此题为选做) #include {int i,j,m,n=1,a[10][10]; printf(\请输入一个小于10的整数:\ scanf(\ for(i=0;i<=m/2;i++) /*共旋转m/2圈*/ {for(j=i;j a[i][j]=n++; for(j=i+1;j for(i=0;i {printf(\ for(j=0;j 实验十 1. 编写字符串拷贝程序,并要求将字符串中的小写字母转换成大写字母。 #include {char a[80],b[80]; int i,l; printf(\输入一个字符串:\gets(a); for(i=0;a[i]!=?\\0?;i++) {b[i]=a[i]; if(b[i]>=?a?&&b[i]<=?z?)b[i]=toupper(b[i]); } puts(b); } 2、输入一个以回车结束的字符串(少于80个字符),将该字符串逆序后输出。 #include {char c[80],ch; int i,l; gets(c); l=strlen(c); for(i=0;i c[i]=c[l-i-1]; c[l-i-1]=ch; } puts(c); } 3、输入一个以回车结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数,然后再输出该字符串。 #include {char c[80],ch; int i,num=0; gets(c); ch=getchar(); for(i=0;c[i]!=‘\\0’;i++) if(c[i]==ch)num++; printf(“num(%c)=%d\\n”,ch,num); puts(c); } 4. 编写程序:输入一行英文字符串,统计单词的个数(单词和单词以空格分隔)。(此题为选做) #include main() {char c[50]; int j=0,k,n=0; printf(\输入一个字符串:\gets(c); while(c[j]==' ') j++; if(c[j]!='\\0') {n++;j++;} for(k=j;k<50;k++) {if(c[k]==' '&& c[k+1]!=' '&& c[k+1]!='\\0')n++; if(c[k]=='\\0') break; } printf(\} 实验十一 1、用指针方法,编写一个函数,求矩阵主对角线元素之和Sum。 #include {int i,j,a[3][3],*p=*a,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) {scanf(\if(i==j)sum+=*p; p++; } printf(\ } 2、编一个程序,输入15个整数存入一维数组,按逆序存放后再输出(用指针完成)。 #include { int i,a[15],*p=a,*q,temp; for(i=0;i<15;i++) scanf(\q=&a[14]; for(i=0;i<7;i++) {temp=*p; *p=*q; *q=temp; p++; q--; } p=a; for(i=0;i<15;i++) printf(\} 3、输入一个3×6的二维整型数组,输出其中最大值、最小值以及它们所在行和列的下标(用指针完成)。 #include {int i,j,a[3][6],*p=*a,min,max,xb0_h,xb0_l,xb1_h,xb1_l; for(i=0;i<3;i++) for(j=0;j<6;j++) {scanf(\if(i==0&&j==0) {max=*p;min=*p; xb0_h=0;xb0_l=0; xb1_h=0;xb1_l=0; } if(max<*p) {max=*p;xb1_h=i;xb1_l=j;} if(min>*p) {min=*p;xb0_h=i;xb0_l=j;} p++; } printf(\最大值为:%d,行标:%d,列标:%d\\n\printf(\最小值为:%d,行标:%d,列标:%d\\n\ } 4. 用指针编写程序实现:输入一个字符串,计算该字符串的长度,并统计该串中含小写字母、大写字母和其他字符的个数。 #include main() {char a[100],*p=a; int n=0,xiao=0,da=0,qita=0; printf(\请输入一个字符串:\ gets(p); while(*p) {n++; if(*p>='a'&&*p<='z')xiao++; else if(*p>='A'&&*p<='Z')da++; else qita++; p++; } printf(\字符串长度=%d\ printf(\小写字母个数=%d,大写字母个数=%d,其他字符个数=%d\\n\} 5. 用指针编写程序完成,将字符串a赋给一个字符数组,然后从第一个字母开始间隔地输出该串。 #include {char a[100],*p=a; int n=0; printf(\请输入一个字符串:\ gets(p); while(*p) {n++; if(n%2==1)putchar(*p); p++; } } 6. 编写一个指针型函数,从键盘接收一个1~7之间的整数,根据指定的数字,返回与该数字相对应的是星期几。例如数字6则返回Saturday。(此题为选做) #include c[7][10]={\; q=c; do {printf(\请输入一个1-7的整数:\ scanf(\} while(n<1||n>7); printf(\ } 7. 用指针编写程序实现,将一个字符串按逆序存放。要求①主函数中完成字符串的输入和输出。②子函数完成逆序存放。(此题为选做) #include #include for(n=0;n {t=*(p+n);*(p+n)=*(p+m-n-1);*(p+m-n-1)=t;} } main() {char c[50],*q=c; printf(\请输入一个字符串:\gets(q); g(c); printf(\逆序后的字符串:\puts(q); } 实验十二 1. 编写程序:定义一个10个元素的职工结构体数组(职工号、姓名、性别、出生年份、职务),从键盘输入数据后,输出年龄最大的和最小的职工信息。 #include main() {int i,max=0,min=0,year1,year2; struct zg {char num[10]; char name[20]; char sex[3]; int year; char zw[10]; }z[10]; for(i=0;i<10;i++) {printf(\输入第%d位职工的工号、姓名、性别、职务、出生年份\\n\ scanf(\if(i==0){year1=z[0].year;year2=z[0].year;} if(year1>z[i].year){year1=z[i].year;max=i;} if(year2 } printf(\年龄最 者:%s %s %s %d %s\\n\ printf(\年龄最 者:%s %s %s %d %s\\n\ 大小 } 2. 试利用指向结构体的指针编制一程序,实现输入三位学生的学号、姓名、数学期中和期末成绩,然后①求出每一位学生的平均成绩并输出成绩表②按成绩由高到底排序输出三位学生的相关信息。 #include {int i=0,j,n[3]={0,1,2},t; struct student {char num[10]; char name[20]; int grade1,grade2; float aver; }stu[3],*p; for(p=stu;p {printf(\请输入第%d位学生的学号、姓名、期中成绩、期末成绩:\ scanf(\ p->aver=(p->grade1+p->grade2)/2.; i++; } printf(\成绩表:\\n\ printf(\姓名 期中成绩 期末成绩 平均成绩\\n\for(p=stu;p printf(\for(i=0;i<3;i++) for(j=i;j<3;j++) if(stu[i].aver printf(\学号 姓名 期中成绩 期末成绩 平均成绩\\n\for(i=0;i<3;i++) printf(\rade2,stu[n[i]].aver); } 3. 有一个包括学生学号、姓名和三门课成绩的结构变量,要求在主函数中对该变量赋值,在另一个函数中将其值打印出来。 #include {char num[10]; char name[20]; int grade1,grade2,grade3; }stu; main() {void p(); printf(\请输入学生的学号、姓名、成绩1、成绩2、成绩3:\ scanf(\ p(); } void p() {printf(\学号 姓名 成绩1 成绩2 成绩3\\n\ printf(\} 实验十三 1. 定义一个函数,求200~5000之间满足“用4除余1,用5除余3,用7除余4”的数,且一行打印6个。 #include main() {int n; for(n=200;n<=5000;n++) f(n); } void f(int n) {static int p=0,m=0; if(n%4==1 && n%5==3 && n%7==4) {p++; printf(\ m=1; } else m=0; if(p%6==0&&m==1)printf(\ } 2. 编写函数isprime( ),用来判断一个整形数a是否为素数,若是素数,函数返回1,否则返回0。 #include int isprime(int a); main() {int a,n=0; printf(“a=”); scanf(“%d”,&a); if(a>0)n=isprime(a); if(n==1)printf(“%d是素数”,a); else printf(“%d不是素数”,a); } int isprime(int a) {int m; for(m=2;m 3. 在主函数main()中已有变量定义和函数调用语句:“int a=1,b= -5,c; c=fun (a ,,b)”; fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数。请你: (1) 编写fun函数。 fun(int x , int y) { } (2) 写出这个主函数main() #include {int a=1,b=-5,c; c=fun(a,b); printf(“c=%d\\n”,c); } int fun(int x,int y) {if(x>y)return x-y; else return y-x; } 4. 编写函数,其功能是删除字符串s中的所有数字字符。 解一:用外部数组编程 #include void del(); main() {printf(“请输入一个字符串:”); gets(s); del(); puts(s); } void del() {int i,j; for(i=0;s[i]!=?\\0?;i++) if(s[i]>=?0?&&s[i]<=?9?) {for(j=i;s[j]!=?\\0?;j++)s[j]=s[j+1]; i--; } } 解二:用指针作参数编程 #include {char s[20]; printf(\请输入一个字符串:\gets(s); del(s); puts(s); } void del(char *p) {int i,j; for(i=0;*(p+i)!='\\0';i++) if(*(p+i)>='0'&&*(p+i)<='9') {for(j=i;*(p+j)!='\\0';j++)*(p+j)=*(p+j+1); i--; } } 解三:用数组作参数编程 #include char *del(char s[]); main() {char s[20],*p; printf(\请输入一个字符串:\gets(s); p=del(s); puts(p); } char *del(char s[]) {int i,j; for(i=0;s[i]!='\\0';i++) if(s[i]>='0'&&s[i]<='9') {for(j=i;s[j]!='\\0';j++)s[j]=s[j+1]; i--; } return s; } 5. 用函数调用重新实现实验7。即:编写函数求一个整数是否为水仙花数,并编写主程序调用该函数求出所有的水仙花数。(此题为选做) #include for(i=100;i<=999;i++) {p=sxh(i); if(p==1)printf(“%d ”,i); } } int sxh(int n) {int a,b,c; a=n/100; b=(n-a*100)/10; c=n; if(a*a*a+b*b*b+c*c*c==n)return 1; else return 0; } 6. 以下函数p的功能是用递归方法计算x的n阶勒让德多项式的值。已有调用语句p(n,x);请编写p函数。递归公式如下:(此题为选做) (n?0)?1?Pn(x)??x (n?1) ?((2n?1)*x*P(x)?(n?1)*P(x))/n(n?1)n?1n?2?float p(int n, int x){ } 解: #include float y; printf(\请输入n,x=\do scanf(\while(n<0); y=p(n,x); printf(\} float p(int n,int x) {float y; if(n==0)return 1; if(n==1)return x; y=(float)((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n; return y; } 实验十四 1、编程实现:输入n(n<10)个整数,按从大到小的顺序对其排序。 #include for(i=0;i for(j=i;j if(a[i] printf(“M”,a[i]); printf(“\\n”); } 2. 编写程序,键盘输入与您同寝室的n位同学的姓名(用汉语拼音表示),请将这n位同学的姓名按字母顺序排序后输出。(此题为选做) #include {int i,j; char name[4][20],*p[4],*q; printf(\请输入4位同学的姓名\for(i=0;i<4;i++) {scanf(\ p[i]=name[i]; } for(i=0;i<4;i++) for(j=i;j<4;j++) if(strcmp(p[i],p[j])>0) {q=p[i];p[i]=p[j];p[j]=q;} printf(\按顺序输出4位同学的姓名:\\n\for(i=0;i<4;i++) printf(\} 实验十六 1、编程,要求实现:在主程序main( )中输入2个整数,通过调用函数将两者的值互换。(要求分别用值传递方式,地址传递方式以及全局外部变量传递方式编程)。 解(1) 用值传递方式编程 用值传递方式不能将两者的值互换。 解(2) 用地址传递方式编程 #include printf(“x,y=”); scanf(“%d,%d”,&x,&y); swap(&x,&y); printf(“x=%d,y=%d\\n”,x,y); } void swap(int *x,int *y ) {int temp; temp=*x; *x=*y; *y=temp; } 解(3) 用全局外部变量传递方式编程 #include printf(“x=%d,y=%d\\n”,x,y); } void swap() {int temp; temp=x;x=y;y=temp; } 2. 编写函数,求出M行N列二维数组每列元素中的最小值,通过形参传回主函数输出,并计算它们的和值。 #include {int i,j,g[M][N],h[N],min,s=0; printf(\请输入%d个整数:\for(i=0;i printf(\行%d列数组为:\\n\for(i=0;i printf(\ printf(\ } for(j=0;j s+=min; printf(\第%d列的最小值=%d\\n\ } printf(\各列最小值之和=%d\\n\