第一篇:大一上学期C语言期末复习总结和模拟试题带答案
易错点
C语言中易犯的错误
对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考.****************************************************************************************
1.书写标识符时,忽略了大小写字母的区别.main(){ int a=5;printf(“%d”,A);}
编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量
名用大写,变量名用小写表示,以增加可读性.**************************************************************************************** 2.忽略了变量的类型,进行了不合法的运算.main(){ float a,b;printf(“%d”,a%b);}
%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余
运算,而实型变量则不允许进行“求余”运算.****************************************************************************************
3.将字符常量与字符串常量混淆.char c;c=“a”;
在这里就混淆了字符常量与字符串常量,字符常量是由一对单
引号括起来的单个字符,字符串常量是一对双引号括起来的字符序
列.C规定以“"作字符串结束标志,它是由系统自动加上的,所
以字符串”a“实际上包含两个字符:'a'和'',而把它赋给一
个字符变量是不行的.**************************************************************************************** 4.忽略了”=“与”==“的区别.在许多高级语言中,用”=“符号作为关系运算符”等于“.如在BASIC程序中可以写
if(a=3)then „
但C语言中,”=“是赋值运算符,”==“是关系运算符.如:
if(a==3)a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把
b值赋给a.由于习惯问题,初学者往往会犯这样的错误.**************************************************************************************** 5.忘记加分号.分号是C语句中不可缺少的一部分,语句末尾必须有分号.a=1 b=2
编译时,编译程序在”a=1“后面没发现分号,就把下一行”b
=2“也作为上一行语句的一部分,这就会出现语法错误.改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否
漏掉了分号.{ z=x+y;t=z/100;printf(”%f“,t);}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写
**************************************************************************************** 6.多加分号.对于一个复合语句,如: { z=x+y;t=z/100;
printf(”%f“,t);};
复合语句的花括号后不应再加分号,否则将会画蛇添足.又如:
if(a%3==0);I++;
本是如果3整除a,则I加1.但由于if(a%3==0)后多加了分号 ,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都
将自动加1.再如:
for(I=0;I<5;I++);{scanf(”%d“,&x);printf(”%d“,x);}
本意是先后输入5个数,每输入一个数后再将它输出.由于for
()后多加了一个分号,使循环体变为空语句,此时只能输入一个数
并输出它.****************************************************************************************
7.输入变量时忘记加地址运算符”&“.int a,b;
scanf(”%d%d“,a,b);
这是不合法的.Scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去.”&a“指a在内存中的地址.**************************************************************************************** 8.输入数据的方式与要求不符.①scanf(”%d%d“,&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车
键,跳格键tab.②scanf(”%d,%d“,&a,&b);
C规定:如果在”格式控制“字符串中除了格式说明以外还有其它
字符,则在输入数据时应输入与这些字符相同的字符.下面输入是
合法的:
3,4
此时不用逗号而用空格或其它字符是不对的.4 3:4
又如:
scanf(”a=%d,b=%d“,&a,&b);输入应如以下形式: a=3,b=4
****************************************************************************************
9.输入字符的格式与要求不一致.在用”%c“格式输入字符时,”空格字符
“和”转义字符“都作为 有效字符输入.scanf(”%c%c%c“,&c1,&c2,&c3);
如输入a b c
字符”a“送给c1,字符” “送给c2,字符”b“送给c3,因为%c
只要求读入一个字符,后面不需要用空格作为两个字符的间隔.****************************************************************************************
10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf(”%f%dn“,a,b);
编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其
需要注意.****************************************************************************************
11.输入数据时,企图规定精度.scanf(”%7.2f“,&a);
这样做是不合法的,输入数据时不能规定精度.**************************************************************************************** 12.switch语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段.switch(grade){ case 'A':printf(”85~100n“);case 'B':printf(”70~84n“);case 'C':printf(”60~69n“);case 'D':printf(”<60n“);default:printf(”errorn“);由于漏写了break语句,case只起标号的作用,而不起判断作用.因此,当grade值为A时,printf函数在执行完第一个语句后接着执
行第二,三,四,五个printf函数语句.正确写法应在每个分支后
再加上”break;“.例如
case 'C':printf(”60~69n“);break;**************************************************************************************** 13.忽视了while和do-while语句在细节上的区别.(1)main(){int a=0,I;scanf(”%d“,&I);while(I<=10){a=a+I;I++;} printf(”%d“,a);}(2)main(){int a=0,I;scanf(”%d“,&I);do {a=a+I;I++;}while(I<=10);printf(”%d“,a);} 可以看到,当输入I的值小于或等于10时,二者得到的结果相同.而当I>10时,二者结果就不同了.因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一
次也不执行循环体,而do-while语句则要执行一次循环体.**************************************************************************************** 14.定义数组时误用变量.int n;scanf(”%d“,&n);int a[n];数组名后用方括号括起来的是常量表达式,可以包括常量和符号常
量.即C不允许对数组的大小作动态定义.**************************************************************************************** 15.在定义数组时,将定义的”元素个数“误认为是可使的最大下
标值.main(){static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(”%d“,a[10]);} C语言规定:定义时用a[10],表示a数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的.**************************************************************************************** 16.初始化数组时,未使用静态存储.int a[3]={0,1,2};这样初始化数组是不对的.C语言规定只有静态存储(static)数组
和外部存储(exterm)数组才能初始化.应改为: static int a[3]={0,1,2};**************************************************************************************** 17.在不应加地址运算符&的位置加了地址运算符.scanf(”%s“,&str);C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&.应
改为:scanf(”%s“,str);**************************************************************************************** 18.同时定义了形参和函数中的局部变量.int max(x,y)int x,y,z;{z=x>y?x:y;return(z);} 形参应该在函数体外定义,而局部变量应该在函数体内定义.应改
为: int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);}
试题一
一、单项选择题(共30分,每题1分)C1.下列不正确的转义字符是A.B.‘ C.074 D. 2.不是C语言提供的合法关键字是A.switch B.cher C.case D.default 3.正确的标识符是()A.?a B.a=2 C.a.3 D.a_3 4.下列字符中属于键盘符号的是A.B.n C.t D.b.下列数据中属于“字符串常量”的A.ABC B.“ABC” C.‘ABC’ D.‘A’6.char型常量在内存中存放的是A.ASCII码 B.BCD码 C.内码值 D.十进制代码值
7.设a为5,执行下列语句后,b的值不为2的是()
A.b=a/2 B.b=6-(——a)C.b=a%2 D.b=a>3?2:2
8.在以下一组运算符中,优先级最高的运算符是()
A.<= B.= C.% D.&&
9.设整型变量i的值为3,则计算表达式i——i后表达式的值是()
A.0 B.1 C.2 D.表达式出错
10.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是()
A.6 B.9 C.8 D.表达式出错
11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()
A.1 B.2 C.2.0 D.2.5 12.设a=1,b=2,c=3,d=4,则表达式:a
A.4 B.3 C.2 D.1
13.设a为整型变量,不能正确表达数学关系:10 A.10 C.a>10&&a<15 D.!(a<=10)&&!(a>=15) 14.若有以下定义:char a、int b、float c、double d,则表达式a*b+d-c值的类型为() A.float B.int C.char D.double 15.表达式“10!=9”的值是() A.true B.非零值 C.0 D.1 16.循环语句 for(x=0,y=0;(y!=123)||(x<4);x++);的循环执行() A.无限次 B.不确定次 C.4次 D.3次 17.在C语言中,下列说法中正确的是() A.不能使用“do while”的循环 B.“do while”的循环必须使用break语句退出循环 C.“do while”的循环中,当条件为非0时将结束循环 D.“do while”的循环中,当条件为0时将结束循环。 18.设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 19.设i,j,k均为int型变量,执行完下面的for循环后,k的值为() for(i=0,j=10;i<=j;i++,j——)k=i+j; A.10 B.9 C.8 D.7 20.设有定义:char s[12]={“string”};则printf(“%dn”,strlen(s));的输出是() A.6 B.7 C.11 D.12 21.合法的数组定义是() A.int a[]={“string”}; B.int a[5]={0,1,2,3,4,5}; C.char a={“string”}; D.char a[]={0,1,2,3,4,5} 22.函数调用strcat(strcpy (str1,str2),str3)的功能是() A.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后 B.将字符串str1复制到字符串str2中后再连接到字符串str3之后 C.将字符串str1复制到字符串str2中后再复制到字符串str3之后 D.将字符串str2连接到字符串str1中后再将字符串str1复制到字符串str3中 23.设有如下定义,则正确的叙述为() char x[]={“abcdefg”}; char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; A.数组x和数组y等价 B.数组x和数组y的长度相同 C.数组x的长度大于数组y的长度 D.数组x的长度小于数组y的长度 24.设有单精度变量f,其值为13.8.执行语句“n=((int)f)%3;”后,n的值是() A.4 B.1 C.4.333333 D.4.6 25.执行语句“f=(3.0,4.0,5.0),(2.0,1.0,0.0);”后,单精度变量f的值是() A.3.0 B.5.0 C.2.0 D.0.0 26.设a、b均为整型变量,下列表达式中不是赋值表达式的是() A.a=3,4,5 B.a=3*2 C.a=a&&b D.a=b=4 27.表达式“1?(0?3:2):(10?1:0)”的值为() A.3 B.2 C.1 D.0 28.sizeof(double)的结果值是()A.8 B.4 C.2 D.出错 29.指出下面正确的输入语句是() A.scanf(“a=b=%d”,&a,&b); B.scanf(“a=%d,b=%f”,&m,&f); C.scanf(“%3c”,c); D.scanf(“%5.2f,&f); 30.若有以下定义和语句,且0<=i<5,则()是对数组元素地址的正确表示 int a[]={1,2,3,4,5},*p,i; p=a; A.& (a+i)B.&p C.a++ D.&p[i] 二、填空(20分,每空1分)1.在内存中存储“A”要占用(2)个字节,存储‘A’要占用(1)字节。2.符号常量的定义方法是(#define 符号常量 常量)。 3.能表述“20 4.结构化程序设计方法规定程序或程序段的结构有三种:顺序结构、(分支结构)和(循环结构)。 5.C语言共提供了三种用于实现循环结构的流程控制语句,它们是(while)、(do-while)和(for)。 6.若在程序中用到“putchar”,应在程序开头写上包含命令 (.#include “stdio.h”),若在程序中用到“strlen()”函数时,应在程序开头写上包含命令(# include “string.h”)。 7.设有定义语句“static int a[3][4]={{1},{2},{3}}”,则a[1][1]值为(),a[2][1]的值为()。 8.“*”称为(指针运算符)运算符,“&”称为(地址运算符)运算符。 9.赋值表达式和赋值语句的区别在于有无(分号)号。 10.用{}把一些语句括起来称为(.复合语句)语句 11.设a= 12、b= 24、c=36,对于“scanf(”a=%d,b=%d,c=%d“,&a,&b,&c);”,输入形式应为(a=12,b=24,c=36) 12.表达式“sqrt(s*(s-a)*(s-b)*(s-c));”对应的数学式子为() 13.C语言编绎系统在判断一个量是否为“真”时,以0代表“假”,以(非0)代表“真” 三、读程序(30分) 1.main() { int a=10,b=4,c=3; if(a if(a printf(“%d,%d,%d”,a,b,c);} 2.main() {int y=9; for(;y>0;y——) if(y%3= = 0){printf(“%d”,——y);continue;} 3.main() { int x,y; for(y=1,x=1;y<=50;y++) { if(x>=10)break; if(x%2= =1){ x+=5;continue;} x-=3; } printf(“%d”,y)4.main() { static int a[][3]={9,7,5,3,1,2,4,6,8}; int i,j,s1=0,s2=0; i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { if(i= =j)s1=s1+a[i][j]; if(i+j= =2)s2=s2+a[i][j]; } printf(“%dn%dn”,s1,s2);} 5.main() {static char a[]={‘*’,‘*’,‘*’,‘*’,‘*’}; int i,j,k; for(i=0;i<5;i++) {printf(“n”); for(j=0;j for(k=0;k<5;k++)printf(“%c”,a[k]); } } 6.int fac(int n) {static int f=1; f=f*n; return(f);} main() {int i; for(i=1;i<=5;i++) printf(“%d!=%dn”,i,fac(i));} 四、编写程序(20分) 1.编一个程序,输入X的值,按下列公式计算并输出Y的值 2.编程序按下列公式计算e的值(精度为1e-6) e=1+1/1!+1/2!+1/3!+„„1/n! 参考答案: 一、单项选择题(共30分,每题1分) 1.C 2.B 3.D 4.A 5.B 6.A 7.C 8.C 9.A 10.A 11.C 12.D 13.A 14.D 15.D 16.C 17.D 18.D 19.A 20.B 21.D 22.A 23.C 24.B 25.D 26.D 27.B 28.A 29.B 30.C ;} 二、填空(20分,每空1分) 1.2,1 2.#define 符号常量 常量 3.(x>20 && x<30)|| x<-100 4.分支结构,循环结果 5.while do for 6.#include “stdio.h” # include “string.h” 7.a[1][1]=0,a[2][1]=0 8.* 指针运算符,&地址运算符 9.分号; 10.复合语句 11.a=12,b=24,c=36 13.非0 三、读程序(30分) 1.结果:10,4,3 2.结果:8 5 2 3.6 4.18 10 5.***** 6.5!=120 四、编写程序(20分1.Main(){int x,y; scanf(“%d”,&x); if(x<=1)y=x;(x<=1)y=x; else if(x>1&&x<10)y=2*x-1; else y=3*x-11; printf(“x=%d,y=%dn”,x,y); }bsp; } 2.Main() B、”a“ C、”n“ {float E; int n; s=0;E=1; 试题二 一、单项选择题(每小题2分,共50分) 1、一个C程序的执行是从___A__。 A、本程序的main函数开始,到main函数结束 B、本程序的main函数开始,到本程序文件的最后一个函数结束 C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束 2、C语言程序的基本单位是___C___。 A、程序行 B、语句 C、函数 D、字符 3、请选出可用作C语言用户标识符的一组标识符___B___。 A、void B、a3_b3 C、For D、2a define _123-abc DO WORD IF ase sizeof 4、假定x和y为double型,则表达式(x=2,y=x+5/2)的值是__C__。 A、4.500000 B、4 C、4.000000 D、2.000000 5、下列可以正确表示字符型常量的是___D__。 A、297 D、't' 6、在C语言中,要求运算数必须是整 型的运算符是__D__。 A、/ B、++ C、*= D、% 7、C语言中,复合语句的构成是将一 系列语句置于__C__。A、begin与end之间 B、方框号“[ ]”之间 C、花括号“{ }”之间 D、圆括号“()”之间 8、有如下程序段,对应正确的数据输 入是___A___。 float x,y; scanf(”%f%f”, &x,&y); printf(”a=%f,b=%f”, x,y); A、2.04<回车> B、2.04,5.67<回车> 5.67<回车> C、A=2.04,B=5.67<回车> D、2.045.67<回车> 9、以下程序段的输出结果是___D__。 int a=5678; printf(”%2dn”, a); A、提示出错、无结果 B、56 C、78 D、5678 10、已知:char ch='A';则下列表达 式的值是__B__。 ch =(ch>='A'&&ch<='Z')? (ch+32): ch; A、A B、a C、Z D、z 11、下列描述,正确的是___B__。 A、表达式3.91%5是合法的 B、用b=89作为while循环的条 件是合法的 C、逗号表达式是没有值和类型的 D、字符型变量和int型变量的操 作完全不同 12、阅读以下程序: main()B、把x和y按从小到大排列 {int x;C、无确定结果 scanf(”%d“,&x);D、交换变量x和变量y的值 if(x--<5)printf(”%d“,x); 16、以下程序的输出结果是 ___A__。else printf(”%d“,x++);main()} {int a, b;程序运行后,如果从键盘上输人5,for(a=1, b=1;a<=100;a++)则输出结果是__B__。{if(b>=10)break;A、3 B、4 if(b%3==1)C、5 D、6 13、下列程序的运行结果是___C__。#include ”stdio.h” main(){ int k;k=3;switch(k){ case 1: printf(”%dn”, k++);case 2: printf(”%dn”, k++);case 3: printf(”%dn”, k++);case 4: printf(”%dn”, k++);break;default: printf(”Full!n”);} } A、3 B、4 C、3 D、4 4 4 14、设a、b、c、d、m、n均为int型变量,且a= 5、b= 6、c= 7、d= 8、m= 2、n=1,则逻辑表达式(m==a 15、设x、y和temp均为long int型变量,则以下语句: {temp=x;x=y;y=temp;} 的功能是__D__。A、把x和y按从大到小排列 { b+=3;continue;} } printf(”%dn“,a);} A、4 B、6 C、5 D、101 17、执行以下程序后输出的结果是___D__。main() { int y=10;do {y--;} while(--y);printf(”%dn“,y--);} A、-B、1 C、8 D、0 18、执行以下程序后输出的结果是___B__。main() {int i, j, w=0;for(i=4;i;i--)for(j=1;j<=2;j++)w=w+i*j;w=i*j; printf(”%dn“,w);} A、4 B、0 C、1 D、30 19、以下程序运行后,输出结果是__C__。main(){ int n[5]={3,3,3},i,k=2;for(i=0;i n[i]=n[i]+1;printf(”%dn“,n[k]); } A、4 B、9 C、9 6 1 C、3 D、不确定的值 D、3 5 7 20、以下程序的输出结果是 __A__。 23、若定义:float x=3.14159,*p=&x;f(int a)则printf(”%fn“,*p++);的输出 {int b=0;结果为__C__。static int c = 3;A、无确定值 b++;c++;B、x的地址 return(a+b+c);C、3.14159 } main(){int a = 2, i;for(i=0;i<3;i++)printf(”%dn“,f(a));} A、7 B、7 C、7 D、7 8 7 9 7 21、设C程序如下: #define ABC(x)x*x #include”stdio.h“ main(){int a=3,b;b=ABC(a+1);printf(”b=%d“, b);} 上述程序运行输出的结果是__D_。A、b=4 B、b=a+1 C、b=16 D、b=7 22、以下程序的输出结果是__B__。main(){int i, a[10];for(i=9;i>=0;i--)a[i]=10-i;printf(”%d %d %d“,a[1],a[6],a[9]);} A、1 6 9 B、9 4 1 D、4.14159 24、以下程序的输出结果是___B__ main(){char b[]=”Language“;char *p=b;printf(”%c “,*(b+2));p=p+7;printf(”%cn“,*p++);} A、2 7 B、n e C、a g D、n u 25、下列程序的输出结果是___A__。#include ”stdio.h“ main(){ int a[]={1,2,3,4,5,6,7,8,9,0}, i, s, *p;p=a;s=0;for(i=0;i<=9;i++)s+=*p++;printf(”%dn“, s);} A、45 B、44 C、0 D、9 二、判断题(每小题1分,共10分)1.语句int *point;中的point是指针变量名。(T)2.主函数和其它函数之间可以相互调用。(F)3.puts()和gets()函数只能输入或输出一个字符。(F)4.可以对字符型数组元素进行整体输入、输出。(T)5.do-while语句构成的循环不能用数的三位数的个数,请选择填空。 其他语句构成的循环来代替。#include 三、程序填空题(每空2分,共10分) 1、下面程序完成判断某一个数m是否为素数,如果是则输出”m is a prime!“,否则就输出”m is not a prime!“,请选择填空。main(){ int i, m;scanf(”m=%d“, &m);for(i=2;i 2、以下程序的功能是:求出用数字0至9组成没有重复数字且是13倍 for(j=0;j<=9;j++)for(k=0;k<=9;k++) if((4)){ w = i*100+j*10+k;if((5))count++;} printf(”n count=%dn“, count);}(3)、A、i=0 B、i=1 C、i=9 D、i=-1(4)、A、i!=j B、i!=j ||j!=k C、i!=j&& j!=k D、i!=j&& j!=k && k!=i(5)、A、w%13=0 B、w/13=0 C、w%13==0 D、w/13==0 四、编程题(第1小题12分,第2小题18分,共30分) 1、从键盘输入一个4位数的正整数n,将该数反序输出。例如,若输入的是 1357,则输出的是7531。 要求:1)利用VC++编译系统进行 调试、运行 2)对输入的正整数n的合法性进行检查 3)将源程序以“编程题 1.c”为文件名保存在网络盘(K:盘)的考生文件夹上,用其它文件名保存或保存在其他 地方均不能得分 2、已知一组字符串a[27]=”jjyyzzabcdefgJJYYZZABCDEFG";请编一程序,将其 中的小写字母换成其前一个字母,即z换成y,y换成x,...,b换成a,若是a则换成z。然后对数组a[27]从小到大排序,并输出排序后的字符串。 要求:1)利用VC++编译系统进行调试、运行 2)先输出原字符串(即未做任何改变的字符串),最后输出排序后 的字符串 3)将源程序以“编程题2.c”为文件名保存在网络盘(K:盘)的考生文件夹上,用其它文件名保存或保存在其他地方均不能得分 补考试卷的题型、分值、覆盖范围、难易程度均和上学期的期末考试试卷一样。故,可完全按照上学期期末考试的复习大纲以及训练题进行复习。 1.请编程实现:输入一单精度二维数组a[4][5],计算二维数组中的最大元素的值及其所在位置(行、列),并输出计算结果。 2.请编程实现:输入x的值,按下列公式计算并输出y的值 3x<10 x 20 xx > 20 5.0 3.从键盘输入十个整数,对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。 4.计算10个整数中奇数的和及其偶数的和。 5.利用全局变量计算长方体的体积及三个面的面积。 6.只用一个if条件语句实现:输出 100以内(不包含100)能被 3整除且个位数为 6的所有整数。 9、intmain() { 7、int k=9; intx=1,y=0,a=0,b=0;switch(k)switch(x){ { case 9: k+=1;case1:switch(y)case 10: k+=1;break;{ case 11: k+=1;case0:a++;break;default: k+=1;case1:b++;break;} } printf(“%d\n”,k);case2:a++;b++;break; case3:a++;b++;break; 8、intmain() { int n; for(n=1;n<=10;n++) { if(n%3==0)continue; printf(“%d”,n); } return 0; } }10、for(i=4;i>1;i--)for(j=1;j 易错点 C语言中易犯的错误 对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考.**************************************************************************************** 1.书写标识符时,忽略了大小写字母的区别.main(){ int a=5;printf(“%d”,A);} 编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量 名用大写,变量名用小写表示,以增加可读性.**************************************************************************************** 2.忽略了变量的类型,进行了不合法的运算.main(){ float a,b;printf(“%d”,a%b);} %是求余运算,得到a/b的整余数.整型变量a和b可以进行求余 运算,而实型变量则不允许进行“求余”运算.**************************************************************************************** 3.将字符常量与字符串常量混淆.char c;c=“a”; 在这里就混淆了字符常量与字符串常量,字符常量是由一对单 引号括起来的单个字符,字符串常量是一对双引号括起来的字符序 列.C规定以“"作字符串结束标志,它是由系统自动加上的,所 以字符串”a“实际上包含两个字符:'a'和'',而把它赋给一 个字符变量是不行的.**************************************************************************************** 4.忽略了”=“与”==“的区别.在许多高级语言中,用”=“符号作为关系运算符”等于“.如在BASIC程序中可以写 if(a=3)then „ 但C语言中,”=“是赋值运算符,”==“是关系运算符.如: if(a==3)a=b; 前者是进行比较,a是否和3相等,后者表示如果a和3相等,把 b值赋给a.由于习惯问题,初学者往往会犯这样的错误.**************************************************************************************** 5.忘记加分号.分号是C语句中不可缺少的一部分,语句末尾必须有分号.a=1 b=2 编译时,编译程序在”a=1“后面没发现分号,就把下一行”b =2“也作为上一行语句的一部分,这就会出现语法错误.改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否 漏掉了分号.{ z=x+y;t=z/100;printf(”%f“,t);} 对于复合语句来说,最后一个语句中最后的分号不能忽略不写 **************************************************************************************** 6.多加分号.对于一个复合语句,如: { z=x+y;t=z/100; printf(”%f“,t);}; 复合语句的花括号后不应再加分号,否则将会画蛇添足.又如: if(a%3==0);I++; 本是如果3整除a,则I加1.但由于if(a%3==0)后多加了分号 ,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都 将自动加1.再如: for(I=0;I<5;I++);{scanf(”%d“,&x);printf(”%d“,x);} 本意是先后输入5个数,每输入一个数后再将它输出.由于for ()后多加了一个分号,使循环体变为空语句,此时只能输入一个数 并输出它.**************************************************************************************** 7.输入变量时忘记加地址运算符”&“.int a,b; scanf(”%d%d“,a,b); 这是不合法的.Scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去.”&a“指a在内存中的地址.**************************************************************************************** 8.输入数据的方式与要求不符.①scanf(”%d%d“,&a,&b); 输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法: 3,4 输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车 键,跳格键tab.②scanf(”%d,%d“,&a,&b); C规定:如果在”格式控制“字符串中除了格式说明以外还有其它 字符,则在输入数据时应输入与这些字符相同的字符.下面输入是 合法的: 3,4 此时不用逗号而用空格或其它字符是不对的.4 3:4 又如: scanf(”a=%d,b=%d“,&a,&b);输入应如以下形式: a=3,b=4 **************************************************************************************** 9.输入字符的格式与要求不一致.在用”%c“格式输入字符时,”空格字符 “和”转义字符“都作为 有效字符输入.scanf(”%c%c%c“,&c1,&c2,&c3); 如输入a b c 字符”a“送给c1,字符” “送给c2,字符”b“送给c3,因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔.**************************************************************************************** 10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型 a=3;b=4.5; printf(”%f%dn“,a,b); 编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其 需要注意.**************************************************************************************** 11.输入数据时,企图规定精度.scanf(”%7.2f“,&a); 这样做是不合法的,输入数据时不能规定精度.**************************************************************************************** 12.switch语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段.switch(grade){ case 'A':printf(”85~100n“);case 'B':printf(”70~84n“);case 'C':printf(”60~69n“);case 'D':printf(”<60n“);default:printf(”errorn“);由于漏写了break语句,case只起标号的作用,而不起判断作用.因此,当grade值为A时,printf函数在执行完第一个语句后接着执 行第二,三,四,五个printf函数语句.正确写法应在每个分支后 再加上”break;“.例如 case 'C':printf(”60~69n“);break;**************************************************************************************** 13.忽视了while和do-while语句在细节上的区别.(1)main(){int a=0,I;scanf(”%d“,&I);while(I<=10){a=a+I;I++;} printf(”%d“,a);}(2)main(){int a=0,I;scanf(”%d“,&I);do {a=a+I;I++;}while(I<=10);printf(”%d“,a);} 可以看到,当输入I的值小于或等于10时,二者得到的结果相同.而当I>10时,二者结果就不同了.因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一 次也不执行循环体,而do-while语句则要执行一次循环体.**************************************************************************************** 14.定义数组时误用变量.int n;scanf(”%d“,&n);int a[n];数组名后用方括号括起来的是常量表达式,可以包括常量和符号常 量.即C不允许对数组的大小作动态定义.**************************************************************************************** 15.在定义数组时,将定义的”元素个数“误认为是可使的最大下 标值.main(){static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(”%d“,a[10]);} C语言规定:定义时用a[10],表示a数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的.**************************************************************************************** 16.初始化数组时,未使用静态存储.int a[3]={0,1,2};这样初始化数组是不对的.C语言规定只有静态存储(static)数组 和外部存储(exterm)数组才能初始化.应改为: static int a[3]={0,1,2};**************************************************************************************** 17.在不应加地址运算符&的位置加了地址运算符.scanf(”%s“,&str);C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&.应 改为:scanf(”%s“,str);**************************************************************************************** 18.同时定义了形参和函数中的局部变量.int max(x,y)int x,y,z;{z=x>y?x:y;return(z);} 形参应该在函数体外定义,而局部变量应该在函数体内定义.应改 为: int max(x,y) int x,y; {int z; z=x>y?x:y; return(z);} 试题一 一、单项选择题(共30分,每题1分)1.下列不正确的转义字符是A.B.‘ C.074 D. 2.不是C语言提供的合法关键字是A.switch B.cher C.case D.default 3.正确的标识符是()A.?a B.a=2 C.a.3 D.a_3 4.下列字符中属于键盘符号的是A.B.n C.t D.b.下列数据中属于“字符串常量”的A.ABC B.“ABC” C.‘ABC’ D.‘A’6.char型常量在内存中存放的是A.ASCII码 B.BCD码 C.内码值 D.十进制代码值 7.设a为5,执行下列语句后,b的值不为2的是() A.b=a/2 B.b=6-(——a)C.b=a%2 D.b=a>3?2:2 8.在以下一组运算符中,优先级最高的运算符是() A.<= B.= C.% D.&& 9.设整型变量i的值为3,则计算表达式i——i后表达式的值是() A.0 B.1 C.2 D.表达式出错 10.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是() A.6 B.9 C.8 D.表达式出错 11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是() A.1 B.2 C.2.0 D.2.5 12.设a=1,b=2,c=3,d=4,则表达式:a A.4 B.3 C.2 D.1 13.设a为整型变量,不能正确表达数学关系:10 A.10 C.a>10&&a<15 D.!(a<=10)&&!(a>=15) 14.若有以下定义:char a、int b、float c、double d,则表达式a*b+d-c值的类型为() A.float B.int C.char D.double 15.表达式“10!=9”的值是() A.true B.非零值 C.0 D.1 16.循环语句 for(x=0,y=0;(y!=123)||(x<4);x++);的循环执行() A.无限次 B.不确定次 C.4次 D.3次 17.在C语言中,下列说法中正确的是() A.不能使用“do while”的循环 B.“do while”的循环必须使用break语句退出循环 C.“do while”的循环中,当条件为非0时将结束循环 D.“do while”的循环中,当条件为0时将结束循环。 18.设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 19.设i,j,k均为int型变量,执行完下面的for循环后,k的值为() for(i=0,j=10;i<=j;i++,j——)k=i+j; A.10 B.9 C.8 D.7 20.设有定义:char s[12]={“string”};则printf(“%dn”,strlen(s));的输出是() A.6 B.7 C.11 D.12 21.合法的数组定义是() A.int a[]={“string”}; B.int a[5]={0,1,2,3,4,5}; C.char a={“string”}; D.char a[]={0,1,2,3,4,5} 22.函数调用strcat(strcpy (str1,str2),str3)的功能是() A.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后 B.将字符串str1复制到字符串str2中后再连接到字符串str3之后 C.将字符串str1复制到字符串str2中后再复制到字符串str3之后 D.将字符串str2连接到字符串str1中后再将字符串str1复制到字符串str3中 23.设有如下定义,则正确的叙述为() char x[]={“abcdefg”}; char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; A.数组x和数组y等价 B.数组x和数组y的长度相同 C.数组x的长度大于数组y的长度 D.数组x的长度小于数组y的长度 24.设有单精度变量f,其值为13.8.执行语句“n=((int)f)%3;”后,n的值是() A.4 B.1 C.4.333333 D.4.6 25.执行语句“f=(3.0,4.0,5.0),(2.0,1.0,0.0);”后,单精度变量f的值是() A.3.0 B.5.0 C.2.0 D.0.0 26.设a、b均为整型变量,下列表达式中不是赋值表达式的是() A.a=3,4,5 B.a=3*2 C.a=a&&b D.a=b=4 27.表达式“1?(0?3:2):(10?1:0)”的值为() A.3 B.2 C.1 D.0 28.sizeof(double)的结果值是()A.8 B.4 C.2 D.出错 29.指出下面正确的输入语句是() A.scanf(“a=b=%d”,&a,&b); B.scanf(“a=%d,b=%f”,&m,&f); C.scanf(“%3c”,c); D.scanf(“%5.2f,&f); 30.若有以下定义和语句,且0<=i<5,则()是对数组元素地址的正确表示 int a[]={1,2,3,4,5},*p,i; p=a; A.& (a+i)B.&p C.a++ D.&p[i] 二、填空(20分,每空1分)1.在内存中存储“A”要占用()个字节,存储‘A’要占用()字节。2.符号常量的定义方法是()。 3.能表述“20 4.结构化程序设计方法规定程序或程序段的结构有三种:顺序结构、()和()。 5.C语言共提供了三种用于实现循环结构的流程控制语句,它们是()、()和()。 6.若在程序中用到“putchar”,应在程序开头写上包含命令 (),若在程序中用到“strlen()”函数时,应在程序开头写上包含命令()。 7.设有定义语句“static int a[3][4]={{1},{2},{3}}”,则a[1][1]值为(),a[2][1]的值为()。 8.“*”称为()运算符,“&”称为()运算符。 9.赋值表达式和赋值语句的区别在于有无()号。 10.用{}把一些语句括起来称为()语句 11.设a= 12、b= 24、c=36,对于“scanf(”a=%d,b=%d,c=%d“,&a,&b,&c);”,输入形式应为() 12.表达式“sqrt(s*(s-a)*(s-b)*(s-c));”对应的数学式子为() 13.C语言编绎系统在判断一个量是否为“真”时,以0代表“假”,以()代表“真” 三、读程序(30分) 1.main() { int a=10,b=4,c=3; if(a if(a printf(“%d,%d,%d”,a,b,c);} 2.main() {int y=9; for(;y>0;y——) if(y%3= = 0){printf(“%d”,——y);continue;} 3.main() { int x,y; for(y=1,x=1;y<=50;y++) { if(x>=10)break; if(x%2= =1){ x+=5;continue;} x-=3; } printf(“%d”,y)4.main() { static int a[][3]={9,7,5,3,1,2,4,6,8}; int i,j,s1=0,s2=0; i,j,s1=0,s2=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { if(i= =j)s1=s1+a[i][j]; if(i+j= =2)s2=s2+a[i][j]; } printf(“%dn%dn”,s1,s2);} 5.main() {static char a[]={‘*’,‘*’,‘*’,‘*’,‘*’}; int i,j,k; for(i=0;i<5;i++) {printf(“n”); for(j=0;j for(k=0;k<5;k++)printf(“%c”,a[k]); } } 6.int fac(int n) {static int f=1; f=f*n; return(f);} main() {int i; for(i=1;i<=5;i++) printf(“%d!=%dn”,i,fac(i));} 四、编写程序(20分) 1.编一个程序,输入X的值,按下列公式计算并输出Y的值 2.编程序按下列公式计算e的值(精度为1e-6) e=1+1/1!+1/2!+1/3!+„„1/n! 参考答案: 一、单项选择题(共30分,每题1分) 1.C 2.B 3.D 4.A 5.B 6.A 7.C 8.C 9.A 10.A 11.C 12.D 13.A 14.D 15.D 16.C 17.D 18.D 19.A 20.B 21.D 22.A 23.C 24.B 25.D 26.D 27.B 28.A 29.B 30.C ;} 二、填空(20分,每空1分) 1.2,1 2.#define 符号常量 常量 3.(x>20 && x<30)|| x<-100 4.分支结构,循环结果 5.while do for 6.#include “stdio.h” # include “string.h” 7.a[1][1]=0,a[2][1]=0 8.* 指针运算符,&地址运算符 9.分号; 10.复合语句 11.a=12,b=24,c=36 13.非0 三、读程序(30分) 1.结果:10,4,3 2.结果:8 5 2 3.6 4.18 10 5.***** 6.5!=120 四、编写程序(20分1.Main(){int x,y; scanf(“%d”,&x); if(x<=1)y=x;(x<=1)y=x; else if(x>1&&x<10)y=2*x-1; else y=3*x-11; printf(“x=%d,y=%dn”,x,y); }bsp; } 2.Main() {float E; int n; s=0;E=1; 试题二 一、单项选择题(每小题2分,共50分) 1、一个C程序的执行是从___A__。A、本程序的main函数开始,到main函数结束 B、本程序的main函数开始,到本程序文件的最后一个函数结束 C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 D、本程序文件的第一个函数开始,到本程序main函数结束 2、C语言程序的基本单位是___C___。A、程序行 B、语句 C、函数 D、字符 3、请选出可用作C语言用户标识符的一组标识符___B___。A、void B、a3_b3 C、For D、2a define _123-abc DO WORD IF ase sizeof 4、假定x和y为double型,则表达式(x=2,y=x+5/2)的值是__C__。A、4.500000 B、4 C、4.000000 D、2.000000 5、下列可以正确表示字符型常量的是___D__。A、297 B、”a“ C、”n“ D、't' 6、在C语言中,要求运算数必须是整型的运算符是__D__。A、/ B、++ C、*= D、% 7、C语言中,复合语句的构成是将一系列语句置于__C__。 A、begin与end之间 B、方框号“[ ]”之间 C、花括号“{ }”之间 D、圆括号“()”之间 8、有如下程序段,对应正确的数据输入是___A___。float x,y;scanf(”%f%f”, &x,&y);printf(”a=%f,b=%f”, x,y);A、2.04<回车> B、2.04,5.67<回车> 5.67<回车> C、A=2.04,B=5.67<回车> D、2.045.67<回车> 9、以下程序段的输出结果是___D__。int a=5678;printf(”%2dn”, a);A、提示出错、无结果 B、56 C、78 D、5678 10、已知:char ch='A';则下列表达式的值是__B__。ch =(ch>='A'&&ch<='Z')?(ch+32): ch;A、A B、a C、Z D、z 11、下列描述,正确的是___B__。A、表达式3.91%5是合法的 B、用b=89作为while循环的条件是合法的 C、逗号表达式是没有值和类型的 D、字符型变量和int型变量的操作完全不同 12、阅读以下程序: main(){int x;scanf(”%d“,&x);if(x--<5)printf(”%d“,x);else printf(”%d“,x++);} 程序运行后,如果从键盘上输人5,则输出结果是__B__。{if(b>=10)break;A、3 B、4 if(b%3==1)C、5 D、6 13、下列程序的运行结果是___C__。#include ”stdio.h” main(){ int k;k=3;switch(k){ case 1: printf(”%dn”, k++);case 2: printf(”%dn”, k++);case 3: printf(”%dn”, k++);case 4: printf(”%dn”, k++);break;default: printf(”Full!n”);} } A、3 B、4 C、3 D、4 4 4 14、设a、b、c、d、m、n均为int型变量,且a= 5、b= 6、c= 7、d= 8、m= 2、n=1,则逻辑表达式(m==a 15、设x、y和temp均为long int型变量,则以下语句: {temp=x;x=y;y=temp;} 的功能是__D__。A、把x和y按从大到小排列 B、把x和y按从小到大排列 C、无确定结果 D、交换变量x和变量y的值 16、以下程序的输出结果是 ___A__。main(){int a, b;for(a=1, b=1;a<=100;a++){ b+=3;continue;} } printf(”%dn“,a);} A、4 B、6 C、5 D、101 17、执行以下程序后输出的结果是___D__。main() { int y=10;do {y--;} while(--y);printf(”%dn“,y--);} A、-B、1 C、8 D、0 18、执行以下程序后输出的结果是___B__。main() {int i, j, w=0;for(i=4;i;i--)for(j=1;j<=2;j++)w=w+i*j;w=i*j; printf(”%dn“,w);} A、4 B、0 C、1 D、30 19、以下程序运行后,输出结果是__C__。main(){ int n[5]={3,3,3},i,k=2;for(i=0;i n[i]=n[i]+1;printf(”%dn“,n[k]); } A、4 B、9 C、3 D、不确定的值 20、以下程序的输出结果是 __A__。f(int a) {int b=0;static int c = 3;b++;c++;return(a+b+c);C、3.14159 } main(){int a = 2, i;for(i=0;i<3;i++)printf(”%dn“,f(a));} A、7 B、7 C、7 D、7 8 7 9 7 21、设C程序如下: #define ABC(x)x*x #include”stdio.h“ main(){int a=3,b;b=ABC(a+1);printf(”b=%d“, b);} 上述程序运行输出的结果是__D_。A、b=4 B、b=a+1 C、b=16 D、b=7 22、以下程序的输出结果是__B__。main(){int i, a[10];for(i=9;i>=0;i--)a[i]=10-i;printf(”%d %d %d“,a[1],a[6],a[9]);} A、1 6 9 B、9 4 1 C、9 6 1 D、3 5 7 23、若定义:float x=3.14159,*p=&x;则printf(”%fn“,*p++);的输出结果为__C__。A、无确定值 B、x的地址 D、4.14159 24、以下程序的输出结果是___B__ main(){char b[]=”Language“;char *p=b;printf(”%c “,*(b+2));p=p+7;printf(”%cn“,*p++);} A、2 7 B、n e C、a g D、n u 25、下列程序的输出结果是___A__。#include ”stdio.h“ main(){ int a[]={1,2,3,4,5,6,7,8,9,0}, i, s, *p;p=a;s=0;for(i=0;i<=9;i++)s+=*p++;printf(”%dn“, s);} A、45 B、44 C、0 D、9 二、判断题(每小题1分,共10分)1.语句int *point;中的point是指针变量名。(T)2.主函数和其它函数之间可以相互调用。(F)3.puts()和gets()函数只能输入或输出一个字符。(F)4.可以对字符型数组元素进行整体输入、输出。(T)5.do-while语句构成的循环不能用其他语句构成的循环来代替。(F)6.在一个函数内的复合语句中定义的变量可以在本函数范围内有效。(F)7.函数必须有返回值,否则不能使用函数。(F)8.for(;;);语句相当于while(1);语句。(T)9.C程序的执行总是从第一个定义的函数开始。(F)10.C语言中的关键字专门用作语言的特定成分,而不能作为一般标识符使用。(T) 三、程序填空题(每空2分,共10分) 1、下面程序完成判断某一个数m是否为素数,如果是则输出”m is a prime!“,否则就输出”m is not a prime!“,请选择填空。main(){ int i, m;scanf(”m=%d“, &m);for(i=2;i 2、以下程序的功能是:求出用数字0至9组成没有重复数字且是13倍数的三位数的个数,请选择填空。#include i*100+j*10+k;if((5))count++;} printf(”n count=%dn“, count);}(3)、A、i=0 B、i=1 C、i=9 D、i=-1(4)、A、i!=j B、i!=j ||j!=k C、i!=j&& j!=k D、i!=j&& j!=k && k!=i(5)、A、w%13=0 B、w/13=0 C、w%13==0 D、w/13==0 四、编程题(第1小题12分,第2小题18分,共30分) 1、从键盘输入一个4位数的正整数n,将该数反序输出。例如,若输入的是 1357,则输出的是7531。 要求:1)利用VC++编译系统进行 调试、运行 2)对输入的正整数n的合法性进行检查 3)将源程序以“编程题 1.c”为文件名保存在网络盘(K:盘)的考生文件夹上,用其它文件名保存或保存在其他地方均不能得分 2、已知一组字符串a[27]=”jjyyzzabcdefgJJYYZZABCDEFG";请编一程序,将其 中的小写字母换成其前一个字母,即z换成y,y换成x,...,b换成a,若是a则换成z。然后对数组a[27]从小到大排序,并输出排序后的字符串。 要求:1)利用VC++编译系统进行调试、运行 2)先输出原字符串(即未做任何改变的字符串),最后输出排序后 的字符串 3)将源程序以“编程题2.c”为文件名保存在网络盘(K:盘)的考生文件夹上,用其它文件名保存或保存在其他地方均不能得分 下面程序运行时,如果从键盘上输入3,5<回车>,程序输出的结果是(C)。void main(void){ int a,b,*pa,*pb;pa=&a;pb=&b;scanf(“%d,%d”,pa,pb);*pa=a+b;*pb=a+b;printf(“a=%d,b=%dn”,a,b);} A.a=13,b=13 B.a=8,b=8 C.a=8,b=13 D.出错 ?设有定义:int n1=0, n2, p=&n2, q=&n1;,以下赋值语句中与n2=n1;语句等价的是(A)。A.*p=*q;//将指针q指向的地址里的值(即n1的值),赋给指针p指向的地址里(n2)B.&q=&p;//p 和 q 分别存放n1、n2变量地址的,该地址是由系统分配的,不能赋值 C.p=&n1;D.p=q; 以下程序的运行结果是:(A)。 void main(void){ struct num { int x;int y;}cnum[2]={1,3,2,6};printf(“%dn”,cnum[0].y/cnum[0].x*cnum[1].y);} A.18 B.12 C.6 D.1 若定义了 struct num { int a;int b;}d[3] ={{1,4},{2,5},{6,7}};则执行printf(“%dn”,d[2].a* d[2].b/d[1].b);语句的输出结果是:(C)。A.2 B.2.5 C.8 D.8.4 有如下定义: struct date { int year,month,day;};struct person { char name[20];char sex;struct date birthday;} a;对结构体变量a的出生年份赋值时,下面正确的赋值语句是:(C)。 A.a.year=2010;B.birthday.year=2010;C.a.birthday.year=2010;D.year=2010; 若变量x和y均为整型,且x=y=1,则表达式y+=x+1的值为(A)。A.3 B.2 C.1 D.无正确结果 表示关系x<=y<=z的c语言表达式为(C)。A.(X<=Y<=Z)B.(X<=Y)AND(Y<=Z)C.(X<=Y)&&(Y<=Z)D.(X<=Y)&(Y<=Z) 若有输入语句“scanf(”%d,%d,%d“ ,&x,&y,&z);”,欲使x的值为10,y的值为20,z的值为30,则正确的输入应为(C): A.10 , 20 ,30〈回车〉 B.10 20 30〈回车〉 C.10,20,30〈回车〉 D.10〈回车〉20〈回车〉30〈回车〉 x为int型变量,执行以下语句后,x的值为(B)。x=10;x+=x-=x-x;A.10 B.20 C.30 D.40 有以下程序: void main(){ ; ; ; } 程序运行后的结果是(D): A.编译时有警告错误 B.编译时有语法错误 C.编译没有错误,但是运行时出错 D.程序正常运行,但是无任何输出 关于if后面一对圆括号中的表达式,叙述正确的是(D)。A.只能用关系表达式 B.只能用逻辑表达式 C.只能用关系表达式或逻辑表达式 D.可以使用任意合法的表达式 以下不正确的if语句是(D)。A.if(ab)&&(b>c)printf(“max=%d”,a); feof(fp)函数是用来测试fp所指的文件是否结束,如果文件结束,则feof(fp)返回的值是(B): A.0 B.1 C.NULL D.以上答案都不对 调用fopen函数打开一个文件失败时,函数返回的值是(C): A.-1 B.EOF C.NULL D.1 在对文件进行操作时,读文件的含义是(B): A.将内存中的信息存入磁盘 B.将磁盘中的信息输入到内存 C.将CPU中的信息存入磁盘 D.将磁盘中的信息输入到CPU 以下运算符中,优先级最高的是(B)。A.!B.[ ] C.++ D.% 假设有两个字符数组a[80],b[80],则正确的输出语句是(D)。A.puts(a,b);B.printf(“%s %s”,a[],b[]);C.putchar(a,b);D.puts(a);puts(b); 对定义“int a[2];”的正确描述是(B)。A.定义一维数组a,包含a[1]和a[2]两个元素 B.定义一维数组a,包含a[0]和a[1]两个元素 C.定义一维数组a,包含a[0]、a[1]和a[2]三个元素 D.定义一维数组a,包含a(0)、a(1)和a(2)三个元素 在引用数组元素时,其下标表达式的类型必须是(D)。A.字符型 B.整型 C.整型或字符型 D.整型常量或整型表达式 在C程序中,不合法的浮点型常量是(A): A.3.4E2.5 B..456 C.0.820000 D.100.3e5 C程序中,合法的关键字是(A): A.int B.integer C.Int D.Integer 执行循环语句“for(i=1;i<10;i++)a++;”后,变量i的值是(B)。A.9 B.10 C.11 D.不确定 有以下程序段: int t=0;while(t=1)t--;while循环执行的次数是(C)。A.一次也不执行 B.只执行一次 C.无限次 D.执行2次 C语言中while和do-while循环的主要区别为(A)。A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 While 语句中循环结束的条件是while后面表达式的值是(A)。A.0 B.1 C.-1 D.非0 已经有以下函数定义: fun(char a){ printf((“a=%cn”, a);} 该函数的返回值类型是(C)。A.void B.char C.int D.不确定 以下关于函数调用的描述中错误的是(B)。A.实参可以是常量、表达式或有确定值的变量 B.实参和形参共用同一内存单元 C.实参和形参的类型、个数必须一致 D.只有发生函数调用时,系统才为形参分别存储空间 以下叙述中正确的是(A)。 A.在C语言中静态变量在未赋值时,其值为0 B.在C语言中任何变量在未赋值时,其值为0 C.外部变量在程序的任何函数中均有效 D.函数中任何一个局部变量均无法保留上一次调用时的运行结果 以下正确的描述是(B)。 A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的调用均可以嵌套 下面的程序将浮点数写到文件test中,然后读出并显示。 #include 下面的函数sum 完成计算1~n的累加和。 sum(int n) { if(n<=0) printf(“data errorn”); if(n==1)return 1; else _return(sum(n-1)+n);__________ } 统计学生成绩中不及格的学生名单。#include main(){ int i=2;float sum=1;while(i<=50){ sum=sum+1/(float)i;i++;i++_;} printf(“sum=%fn”,sum)} 下面程序输入一个字符串,输出其中所出现过的大写英文字母.如输入字符串 “UKSDYckjsjsjJSJJD”;应输出“UKSDYJ”。按程序功能填空。#include 第二篇:c语言大一期末试题
第三篇:大一C语言易错点总结和模拟试题带答案(本站推荐)
第四篇:c语言期末复习试题