2011-2012年度第一学期“C语言程序设计”期末考试复习提纲一、考试题型
二、题例:
(一)项目二数据类型、运算符和表达式
选择题:
1. 不合法的C语言整型常量是 A 。
A. –012
B. 0x35
C. 123L
D. 8E2
2. 不合法的C语言实型常量是 A 。
A. E3
B. . 123
C. –6.2E4
D. 5.0
3. 不合法的C字符常量是 C 。
A. ’2’
B. ’\101’
C. ’AB’
D. ’\n’
4.下列四组选项中,均是不合法的用户标识符的选项是 B 。
A. W P_0 do
B. b-a goto int
C. float la0 _A
D. -123 abc TEMP
5.下列四组选项中,均是合法转义字符的选项是 A 。
A. ’\”’’\\’’\n’
B. ’\’’\017’’\”’
C. ’\018’’\f’’xab’
D. ’\\0’’\101’’xlf’
6. 定义三个变量a、b、c,并分别赋初值为5。能实现该功能的语句是 C 。
A. int a=b=c=5;
B. int a,b,c=5;
C. int a=5,b=5,c=5;
D. int a=5;b=5;c=5;
7. 若x,y,t均为int类型,则执行语句x=y=3;t=++x||++y;后,y的值是 D 。
A. 不定值
B. 4
C. 1
D. 3
8.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 C 。
x=(i=4,j=16,k=32)
A. 4 B. 16 C. 32 D. 52
9.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。
A. float
B. char
C. int
D. double
10.设以下变量均为int类型,则值不等于7的表达式是 C 。
A. (x=y=6,x+y,x+1)
B. (x=y=6,x+y,y+1)
C. (x=6,x+1,y=6,x+y)
D. (y=6,y+1,x=y,x+1)
填空题:
1.若有定义int m=5,y=2;,则计算表达式y+=y-=m*=y后的y值是-16 。
2.若s是int型变量,且s=6,则表达式s%2+(s+1)%2的值为 1 。
3. 若a是int型变量,则表达式(a=4*5,a*2),a+6的值为26 。
4.若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为12 ,计算表达式x=a=4,6*2后的x 值为 4 。
5. 若a是int型变量,则计算表达式a=25/3%3后a的值为 2 。
6.若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为10 ,n 的值为 6 。
7. 若有定义:char c=‘\010’;则变量c中包含的字符个数为 1 。
8.若有定义:int x=3,y=2;float a=2.5,b=3.5; 则下面表达式的值为 1 。
(x+y)%2+(int)a/(int)b
9. 已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’的值为102 。
阅读题:(写出程序运行结果)
1. #include
main()
{ int x=97; char y=?b?;
printf(“%c,%d ”, x, y) ;
}
答:a,98
2. #include
main()
{ int x=6;
x+=x-=x*x ;
printf(“x=%d\n”, x) ;
}
答:x=﹣60
3. #include
main()
{ int x;
(x=4*5,x*5),x+25;
printf(“x=%d\n”, x) ;
}
答:x=20
4. #include
main()
{ int i=1,j;
j= -i++;
printf(“%d\n”, j) ;
}
答:﹣1
编程题:(顺序结构编程)
1.输入华氏温度,输出摄氏温度。C=5/9*(F-32)
#include
main()
{
float C,F;
printf("请输入华氏温度F:");
scanf("%f",&F);
C=5.0/9*(F-32);
printf("%.2f℉=%.2f℃\n",F,C);
}
2.输入底面半径r和高度h,计算并输出圆柱体的体积v。v=πr2h(π取
3.14,v计算结果保留到小数
点后两位)
#include
#define PI 3.14
main()
{
float r,h,V;
printf("请输入底面半径r和高度h:");
scanf("%f%f",&r,&h);
V=PI*r*r*h;
printf("圆柱体的体积V=%.2f\n",V);
}
3.从键盘输入一扇形的半径和角度,求扇形的面积和周长。
#include
#define PI 3.14
main()
{
float r,n,S,C;
printf("请输入扇形的半径r和角度n:");
scanf("%f%f",&r,&n);
S=(n*PI*r*r)/360;
C=(n*PI*r)/180+2*r;
printf("扇形的面积S=%.2f,周长C=%.2f\n",S,C);
}
4. 从键盘输入学生的三门考试成绩,计算并输出平均成绩。
#include
main()
{
float a,b,c,avg;
printf("请输入学生三门考试的成绩:");
scanf("%f%f%f",&a,&b,&c);
avg=(a+b+c)/3; /*求平均成绩*/
printf("平均成绩为:%.2f\n",avg);
}
(二)项目三C语言程序控制结构
选择题:
1.下列for循环的循环次数是 D 。
int i=0,j;
for (j=10;i=j=10;i++,j--)printf(”ok”);
A. 0次
B. 1次
C. 10次
D. 无限次
2. 下列for循环的循环次数是B。
int i=0,j=0;
for(;!j&&i<=5;i++)j++;
A.5次B.1次C.无限D.6次
3. 语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为D。A.500 B. 100 C. 5000 D. 5050
4、有以下程序:
#include
main()
{char c;
while((c=getchar())!='?') putchar(- -c); }
程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为 D 。
A. Y
B. XY
C. YX
D. X
5.下面的程序段执行时,若从键盘输入5,则输出为D。
int a;
scanf(”%d”,&a);
if (a-->5)printf(”%d\n”,a++);else printf(”%d\n”,a);A.7 B.6 C.5 D.4
6. 若int a=5;则执行下列语句后打印的结果为A。
do
{printf (“%2d\n”, a--);
} while (!a);
A.5B.不打印任何结果C.4 D.陷入死循环
7.语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为D。A.500B.100C.5000D.5050
8.下面程序段的运行结果是 C 。
int n=0;
while(n++<=2);printf(“%d”,n);
A. 2
B.3
C.4
D.有语法错误
9.若i为整型变量,则以下循环执行次数是 B 。
for(i=2;i==0;)printf(“%d”,i- -);
A. 无限次
B. 0次
C. 1次
D. 2次
10.执行语句for(i=1;i++<4; );后变量i的值是 C 。和第八题相似
A. 3
B. 4
C. 5
D. 不定
填空题:
1、若输入字符串:abcdef<回车>,则以下while循环体将执行____0 ____次。While((ch=getchar( ))= =?d?) printf(“**”);
2、下面程序段的运行结果是___a=-5______。
i=1;a=0;s=1;
do{a=a+s*i;s=-s;i++;}while(i<=10);
printf(“a=%d”,a);
3.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束
循环。请填空。
int n=0,c;
c=getchar();
while( c!=?\n?)
{
if( c>=?0? && c<=?9?)n++;
c=getchar();
}
4. 以下程序中,while语句的循环次数是无限次。
#include
main()
{ int i=0;
while(i<10)
{ if(i<1) continue;
if(i==5) break;
i++;
}
printf(“%d”,i);
}
5.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。
#include
main()
{int r,m,n;
scanf(“%d%d”,&m,&n);
if(m r=m%n; while(r){m=n;n=r;r=__ m%n __;} printf(“%d\n”,n); } 6. 执行以下程序后,输出“#”的个数是___6____。 #include main() { int i,j; for(i=1;i<5;i++) for(j=2;j<=i;j++) putchar(…#?); } 阅读题:(写出程序运行结果) 1.#include main() { int y=10; do{y--; }while(--y); printf(“%d\n”,y--); } 答:0 2. #include main() { int x=15; while(x>10&&x<50) { x++; if(x/3){x++;break;} else continue; } printf(“%d\n”,x); } 答:17 3. #include main() {int a=1,b=0; for( ; a<3; a++) switch(a++) { case 1:b--;break; case 2:b++; case 3:b+=3; } printf(“%d\n”,b); } 答:﹣1 4. #include main() {int s,i; for(s=0,i=1 ; i<3 ; i++,s+=i) ; printf(“%d\n”,s); } 答: 5 编程题: 1.计算s=1+1/2+1/3+……+1/n #include main() { int i,n; float s; scanf("%d",&n); for(s=0.0,i=1;i<=n;i++) s=s+1.0/(i); printf("s=%f\n",s); } 2.求和:从1加到100 #include main() { int n,s; for(s=0,n=1;n<=100;n++) s=s+n; printf("s=%d\n",s); } 3.如果0 #include main() { int n,i; long s; printf("请输入整数n:"); scanf("%d",&n); if(n>0&&n<17) { for(i=2,s=1;i<=n;i++) s=s*i; printf("%d!=%d\n",n,s); } else printf("输入错误!请输入1-16中的整数!\n"); } 4.如果0〈n<8,请计算s=1!+2!+3!+……+n! ,并打印输出计算结果s。(注:n!=1*2*3*……*n) #include main() { int n,i,s,fact; printf("请输入整数n:"); scanf("%d",&n); if(n>0&&n<8) { for(i=1,s=0,fact=1;i<=n;i++) { fact=fact*i; /*求n!*/ s=s+fact; /*求s=1!+2!+3!+……+n!*/ } printf("s=%d\n",s); } else printf("输入错误,请输入1-7中的整数!\n"); } 5.从键盘输入一个大于1的整数,输入是否为素数,是,则输出“YES”,否则输出“NO” #include main() { int n,i; printf("请输入整数n:"); scanf("%d",&n); if(n>1) { for(i=2;i if(n%i==0)break; if(i==n)printf("YES\n"); else printf("NO\n"); } else printf("输入错误,请输入大于1的整数!\n"); } (三)项目四数组 选择题: 1.若二维数组a有m列,则在a[i][j]前的元素个数为____B____.(注意列) A. j*m+I B. i*m+j C. i*m+j-1 D. i*m+j+1 2.以下对二维数组a的正确说明是____C____. A. int a[3][]; B. float a(3,4); C. double a[1][4]; D. float a(3)(4); 3.若有说明:int x[][3]={1,3,5,7,9,11};,则x数组的行数为___A____。 A.2 B. 3 C. 4 D. 无确定值4.若有以下定义 int a[ ]={1,2,3,4,5,6,7}; char c1=?b?,c2=?2?; 则数值不为2的表达式是_____A_____。 A. c2-0 B. a[1] C. ?d?-c1 D. a[…3?-c2] 5.以下程序的输出结果是_____B______。 main( ) { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=0;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 6.有两个字符数组a、b,则以下正确的输入语句是___B____. A. gets(a,b); B. scanf(“%s%s”,a,b); C. scanf(“%s%s”,&a,&b); D. gets(“a”),gets(“b”); 7.当执行下面的程序时,如果输入ABC,则输出结果为____A_____。 #include #include main() {char ss[10]=“1,2,3,4,5”; gets(ss);strcat(ss,”6789”);printf(”%s\n”,ss); } A. ABC6789 B. BC67 C. 12345ABC6 D. ABC456789 8.判断字符串s1是否大于字符串s2,应当使用___D____. A. if(s1>s2) B. if(strcmp(s1,s2)) C. if(strcmp(s2,s1)>0) D. if(strcmp(s1,s2)>0) 填空题: 1.下面程序以每行4个数据的形式输出a数组,请填空。 #define N 20 main() { int a[N],i; for(i=0;i for(i=0;i {if (___i%4==0____) __ printf(“\n”); _ printf(“%3d”,a[i]); } printf(“\n”); } 2.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}}; 则初始化后,a[1][2]的初值是___0____,a[2][1]的初值是____6___。 3.下面程序的运行结果是___7,3_____。 main( ) { int a[10]={10,2,-13,21,11,67,-78,8,90,-53}; int i,x=0, y=0; for(i=0;i<10;i++) if(a[i] >0) x++; else y++; printf(“%d,%d\n”, x, y ); } 4.下面程序的功能是:输入50个数,按逆序输出,请填空。 main( ) {int a[50],i; for(i=0;i<50;i++) scanf(“%d”, &a[i]); for(__i=49__;i>=0;_ i- -__) printf(“%4d”,a[i]); } 5. 下面程序可求出矩阵a的主对角线上的元素之和,请填空。main() { int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(_i==j _)sum=sum+__ a[i][j]__; printf(“sum=%d\n”,sum); } 6. 下面程序的功能是在三个字符串中找出最小的,请填空。#include #include main() { char s[20],str[3][20]; int i; for(i=0;i<3;i++)gets(str[i]); strcpy(s,__ str[0]__); if(strcmp(str[1],s)<0)strcpy(s,str[1]); if(strcmp(str[2],s)<0)strcpy(s,str[2]); printf(“%s\n”, __s__); } 阅读题: 1. #include main() { int a[10], i; for(i=9; i>=0;i--) a[i]=10 - i; printf(“%d%d%d\n”,a[2],a[5],a[8]); } 答:852 2. #include main() { int a[3][3]={1,2,3,4,5,6,7,8,9}, i,s=0; for(i=0;i<=2;i++) s=s+a[i][i]; printf(“s=%d\n”,s); } 答:s=15 3. #include main() { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]); } 答:0650 4. #include #include main() { char s[][10]={“a”,”good”,”world”}; strcat(s[0],s[1]); printf(“%s”,s[0]); } 答:agood 5. #include main() { char s[]=“abcdef”; s[3]=?\0?; printf(“%s\n”,s); } 答:abc 编程题: 1.从键盘输入10个整数,存入数组a,从数组a的第二个元素起,分别将后项减前项之差存入数组b, 按每行3个元素输出数组b。 #include main() { int a[10],b[10],i,j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0,j=0;i<9;i++,j++) { b[j]=a[i+1]-a[i]; printf("%5d",b[j]); if(i%3==2)printf("\n"); } } 2.输入一个字符串,将其中的大写字符转换成小写,其它的不做转换,然后输出得到的字符串。 #include main() { char s[100]; scanf("%s",s); for(i=0;s[i]!='\0';i++) { if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32; } for(i=0;s[i]!='\0';i++) printf("%c",s[i]); printf("\n"); } 3.读入20个整数,统计非负数个数,并计算非负数之和 #include main() { int a[20],i,n,s=0; for(i=0;i<20;i++) scanf("%d",&a[i]); for(i=0;i<20;i++) if(a[i]>=0) { n++; s=s+a[i]; } printf("非负数个数:n=%d\n",n); printf("非负数之和:s=%d\n",s); } 4.某班有30名学生,考试共5门课程,输入各门成绩,计算每人的总分,输出全班学生的各科成绩及 总分。 #include main() { int i,j; float score[30][5],sumr[30]={0.0,0.0},sum=0; printf("请输入30个同学各5门课程的成绩:\n"); for(i=0;i<30;i++) { for(j=0;j<5;j++) scanf("%f",&score[i][j]); } } for(i=0;i<30;i++) { for(j=0;j<5;j++) { sumr[i]=sumr[i]+score[i][j]; } sum=sum+sumr[i]; } printf("\t 课程一课程二课程三课程四课程五\n"); for(i=0;i<30;i++) { printf("第%2d个同学:",i); for(j=0;j<5;j++) { printf("%8.2f",score[i][j]); } printf("\n"); } printf("%.2f\n",sum); } 5.从键盘输入10个数,从小到大排列(或从大到小排列),将其输出(冒泡法或选择法任选)。冒泡法排序: #include main() { int a[10],i,j,t; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<9;i++) { for(j=0;j<10-i-1;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } printf("从小到大排列:\n"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); } 选择法排序: #include main() { int a[10],i,j,k,t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) { k=i; for(j=i+1;j<10;j++) { if(a[j]>a[k]) k=j; if(i!=k) { t=a[i]; a[i]=a[k]; a[k]=t; } } } for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); } (四)项目五和项目六函数、指针 选择题 1.以下正确的函数定义形式是___A_____. 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); 2. 以下函数调用语句中实参的个数是____A___。 fun((v1,v2),(v3,v4,v5),v6) ; A. 3 B. 4 C. 5 D. 6 2.若有说明;int *p,m=5,n;以下正确的程序段的是___D___. A. p=&n; B. p=&n; scanf(“%d”,&p); scanf(“%d”,*p); C. scanf(“%d”,&n); D. p=&n; *p=n; *p=m; 2.以下程序的运行结果是___ A+B=9_____. int a=5;int b=7; main() { int a=4,b=5,c; c=plus(a,b); printf(“A+B=%d\n”,c); } plus(int x,int y) { int z; z=x+y; return(x); } 3.以下正确的程序段是____B _____. A. char str[20]; B. char *p; scanf(“%s”,&str); scanf(“%s”,p); C. char str[20]; D. char str[20],*p=str; scanf(“%s”,&str[2]); scanf(“%s”,p[2]); 填空题: 1.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是____2____. 2.下面程序段的运行结果是___ hELLO!___. char s[80],*sp=“HELLO!”; sp=strcpy(s,sp); s[0]='h'; puts(sp); 3. 理解下面的程序,填空使程序完整。 #include int max(__int x,int y__) { int z; if (x>y) z=x; else z=y; _ return(z)____; } main() { int a,b,c; scanf(“%d%d”,__&a&b___); c=_ max___(a,b); printf(“a=%d,b=%d,max=%d\n”,a,b,c); } 阅读题: 1. #include void func(int x) { x=20; } main() { int x=10; func(x); printf(“%d”,x); } 答:10 2. #include void fun(float *a,float *b) { float w; *a=*a+*a; w=*a; *a=*b; *b=w; } main() { float x=2.0,y=3.0; float *px=&x,*py=&y; fun(px,py) ; printf(“%f,%f”,x,y); } 答:3.000000,4.000000 (五)项目七和项目八结构体、共用体、文件选择题: 1.根据以下定义,能输出字符‘M’的语句是__D____。 struct person { char name[9]; int age; }class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16}; A. printf(“%c”,class[3].name); B. printf(“%c”,class[3].name[1]); C. printf(“%c”,class[2].name[1]); D. printf(“%c”,class[2].name[0]); 2.下面程序的运行结果是______C_____. main() { struct cmplx{ int x; int y; } cnum[2]={2,3,4,5}; printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x); } A. 2 B. 3 C. 4 D. 5 3.以下对结构体变量stu1中成员age的非法引用是____B____. struct student {int age; int num; }stu1,*p; p=&stu1; A. stu1.age B. student.age C. p->age D. (*p).age 4.以下scanf函数调用语句中对结构体变量成员的不正确引用是___D_____. struct pupil {char name[20]; int age; int sex; }pup[5],*p; p=pup; A. scanf(“%s”,pup[0].name); B. scanf(“%d”,&pup[0].age); C. scanf(“%d”,&(p->sex)); D. scanf(“%d”,p->age); 5. fopen()函数的mode取值”r”和”w”时,它们之间的差别是____B____。 A. “r”可向文件输入,“w”不可向文件输入 B. “r”不可向文件输入,“w”可向文件输入 C. “r”不可由文件输出,“w”可由文件输出 D. 文件不存在,”r”建立新文件,“w”出错 6. 若要将“text.txt”文件打开用于追加信息,则以下格式正确的是____C____。 A. fp=fopen(“text.txt”, “r”); B. fp=fopen(“text.txt”, “r+”); C. fp=fopen(“text.txt”, “a+”); D. fp=fopen(“text.txt”, “w”); 7. 要使用fopen函数打开一个新的可读可写的二进制文件,文件的打开方式应是____D___。 A. “ab+” B. “rb+” C. “ab-” D. “wb+” 编程一 1.请编写代码,在页面上显示如下图形。注意:只要写出主要代码即可 ********** ********* ******** ******* ****** ***** **** *** ** * 答案:<% Dim I,J For I=10 To 1 Step -1 For J=1 To I Response.Write "*" Next Response.Write " 第一章 1.填空题 (1).NET Framework主要包括公共语言运行库CLR和类库。 (2)https://www.wendangku.net/doc/2217005185.html,网站在编译时,首先将语言代码编译成微软中间语言MSIL。(3)一台IIS Web服务器IP地址为210.78.60.19,网站端口号为8000,则要访问虚拟目录xxxy中default.aspx的URL为 http://210.78.60.19.8000/xxxy/default.aspx。 (4)可以通过复制网站同步网站上的一个文件。 2.是非题 (1)托管代码是以CLR为基础的代码。(√) (2)https://www.wendangku.net/doc/2217005185.html,3.5仍使用https://www.wendangku.net/doc/2217005185.html,2.0引擎。(√) (3).NET Framework 3.0是.NET Framework 3.5的一部分。(√) (4)https://www.wendangku.net/doc/2217005185.html, 3.5是边解释边执行的。(×) (5)在Visual Studio 2008环境中开发网站必须安装IIS。(×) 3.选择题 (1).NET Framwork3.5不包括(A) A. .NET Framework 1.1 B. .NET Framework 2.0 C. LINQ D. https://www.wendangku.net/doc/2217005185.html, AJAX (2)下面(D)网站在建立时要求安装Microsoft FrontPage服务器扩展。 文件系统 B. 本地IIS C. FTP站点 D.远程站点 (3)发布网站后不可能存在的文件夹是(B) A.App_Data B.App_Code C.App_Themes D.bin 第二章 1.填空题 (1)Visual Studio 2008 默认建立的XHIML文件类型是Transitional。 (2)利用XHTML建立一个链接到jxst@https://www.wendangku.net/doc/2217005185.html,邮箱的元素是……。 (3)存放Web窗体页C#代码的模型有单文件页模型和代码隐藏页模型。(4)单文件页模型中,C#代码必须包含于之间。 (5)外部样式表通过元素链接到网页。 (6)XML主要用于传输和存储数据。 2.是非题 (1)XHTML是HTML的子集。(×) (2)XHTML中每个元素都有结束标记。(√) (3).htm文件不需要编译,直接从Web服务器下载到浏览器执即可。(√)(4)基于类的样式在定义是要加前缀“#”。(×) (5)JavaScript代码必须包含在 ASP编程题及答案
" Next %> 2.利用Recodset对象也可以插入记录,现在针对图1所示的数据表,利用插入一条记录:其中网站名称为“搜狐”,网站地址为“https://www.wendangku.net/doc/2217005185.html,”,网站简介为“门户网站”,提交日期为当天。 注意:只给出主要代码即可,程序的开头部分已经给出。 <% Dim db, strConn strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" Set db=Server.CreateObject("ADODB.Connection") 答:<% Dim db, strConn strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" Set db=Server.CreateObject("ADODB.Connection") '建立Recordset对象 Set rs=Server.CreateObject("ADODB.Recordset") strSql ="Select * From link" rs.Open strSql,db,0,2 '添加记录Web.asp程序设计课后习题答案(沈士根版)