char s1=”AbcdEf”,s2=”aB”; s1++; t=(strcmp(s1,s2)>0); print(“%d\\n”,t)
26. 下面程序段的运行结果是 。 char *p=”PDP1-0”; int I,d;
for(I=0;I<7;I++) {d=isdigit(*(p+ii));
if(d!=0) printf(“%c *(p+I)); }
27. 当运行以下程序时,从键盘输入 book
(
if(!strcmp(s1,s2)) printf(“*”): else printf(“#”);
printf(“%d”,strlen(strcat(s1,s2))); 28. 若已定义: struct num {int a; int b; float f; } n={1,3,5.0};
struct num * pn = &n;
则表达式 (*pn).a+pn->f的值是 。
29. 在C语言中,&运算符作为双目运算符时表示的是 运算.
30. 在C语言中,文件的存取是以字符为单位的,这种文件被称作 文件。
三、编程题:
1.将一个字符串的内容颠倒过来。 2. 求整形数组的最大值。
3. 求字符串的长度(不用strlen)。
4. 编写程序,将字符串str中的所有字符’k’删除。
5.找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
6.a是一个2*4的整型数组,且各元素均已赋值.函数max_value可求出其中的最大元素值max,并将此值返回主调函数.今有函数调用语句max=max_value(a);请编写max_value函数. 7. 设计函数,实现字符串连接操作(不使用strcat)。
8. 以下程序的功能是应用下面的近似公式计算e的n次方.函数f1用来计算每项分子的值,函数f2用来计算每项分母的值.请编写f1和f2函数. ex=1=x=x2\\2!+x3\\3!?(前20项的和)
9. 从键盘上输入若干个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。
11
10.设计函数,在二维数组中产生如下形式的扬辉三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1 ······
11. 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。 12.约瑟夫环问题:编号为1,2,3,···,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。
参考答案
一、选择题
1. B 2.D 3.A 4.D 5.A 6.A 7.B 8.C 9.A 10.A 11.B 12.B 13.D 14.D 15.D 16.A 17.D 18.C 19.D 20.D 21.C 22.C 23.B 24.D 25.C 26.B 27.A 28.A 29.D 30.A 31.C 32.B 33.B 34.D 35.C 36.D 37.C 38.D 39.B 40.B 41.B 42.A 43.A 44.A 45.B 46.D 47.A 48.B 49.C 50.C 51.B 52.D 53.C 54.A 55.C 56.C 57.A 58.A 59.C 60.B 61.C 62.A 63.A 64.C 65.C 二、填空题 1.函数 2. 1 3. 9 4. 4 5.单精度型、双精度型、整型、字符型和枚举型 6.双精度型(或:doubLe型) 7.3.500000,3.5 8. 31.415920,3.14159e+01 9.end 10.非0的数字 11.1 12.c!='\\n' 13.36 14.3 15.3 16.5 17.i*m+j+i 18.按行主顺序存放 19.函数说明部分和函数体 20.5 10 9 21.2400 22.12 23.x=8,y=5 24.hELLO! 25.1 26.1*0* 27.#9 28.6.0 29.按位与 30.流式
三、编程题
1. 解:注意交换位置的控制方法,参考程序如下:
#include
void change(char str[]) { int len,i,j; char c;
len=strlen(str);
for (i=0,j=len-1;i str[i]=str[j]; str[j]=c; } } main() 12 { char str[80]; printf(\ gets(str); change(str); printf(\ } 2.解:参考程序如下: #include for (i=1;i if (a[i]>mx) mx=a[i]; return mx; } main() { int a[8]={23,4,6,12,33,55,2,45}; printf(\} 3.解:参考程序如下: #include for (i=0;str[i]!='\\0';i++); return i; } main() { char str[80]; printf(\ gets(str); printf(\} 4. 解:将从字符串中删除所有字符’k’ 的功能定义为函数。参考程序如下: #include void delchar(char str[],char c) { int i,j; for (i=0,j=0;str[i]!='\\0';i++) if (str[i]!=c) str[j++]=str[i]; str[j]='\\0'; } main() { char str[80]; int i,j; 13 gets(str); delchar(str,'k'); puts(str); } 5.解:依鞍点定义,对数组每行元素循环,找到当前行上最大元素,记下所在的列号,再判断此元素是否为对应列的最小元素。将寻找打印数组鞍点的操作定义为函数,如果没有鞍点,函数返回-1。参考程序如下: #include int andian(int a[][M],int n,int m) { int i,j,k,max,maxcol; int flag1,flag2=0; /*flag1标记每一行的最大值是否鞍点,flag2标记矩阵是否有鞍点*/ for (i=0;i for (j=1;j { max=a[i][j];maxcol=j;} for (k=0,flag1=1;k if (flag2==0) return -1; } main() { int i,j,n,m,a[N][M]; printf(\ scanf(\ printf(\ for (i=0;i scanf(\ printf(\ for (i=0;i printf(\ printf(\ } 14 if (andian(a,n,m)==-1) printf(\ } 6. max_value(int arr[][4]) { } max(int arr[ ][4]) {int I,j, max; max=arr[0][0]; for(i=0;i<2;i++) for(j=0;j<4;j++) if(arr[i][j]>max)max=arr[i][j]; return(max); } 7. 解:注意结束字符的判断和处理,目标字符串的长度应足够长。参考程序如下: #include void scat(char s1[],char s2[]) { int i,j; for (i=0;s1[i]!='\\0';i++); for (j=0;s2[j]!='\\0';j++) s1[i++]=s2[j]; s1[i]='\\0'; } main() { char s1[80]=\ char s2[10]=\ scat(s1,s2); printf(\} 8. ex=1=x=x2\\2!+x3\\3!?(前20项的和) float f2(int n) { } float f1(int x,int n) { } main() { float exp=1.0;int n,x; printf(“Input a number:”)’ scanf(“%d”,&x); printf(“%d\\n”,x); exp=exp+x; for(n=2;n<=19;n++) exp=exp+f1(x,n)/f2(n); printf(“\\nThe is exp(%d)=%8.4f\\n”,x,exp)’ } 15