大一上学期C语言期末复习总结和模拟试题带答案

时间:2019-05-15 10:11:06下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《大一上学期C语言期末复习总结和模拟试题带答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《大一上学期C语言期末复习总结和模拟试题带答案》。

第一篇:大一上学期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.能表述“2020 && x<30)|| x<-100)。

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(F)void main()6.在一个函数内的复合语句中定义的 { int i, j, k, w, count = 0;变量可以在本函数范围内有效。for((3);i<=9;i++)(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倍 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:盘)的考生文件夹上,用其它文件名保存或保存在其他地方均不能得分

第二篇:c语言大一期末试题

补考试卷的题型、分值、覆盖范围、难易程度均和上学期的期末考试试卷一样。故,可完全按照上学期期末考试的复习大纲以及训练题进行复习。

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语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,一些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 void main(){ int i, j, k, w, count = 0;for((3);i<=9;i++)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:盘)的考生文件夹上,用其它文件名保存或保存在其他地方均不能得分

第四篇:c语言期末复习试题

下面程序运行时,如果从键盘上输入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 main(){FILE *fp;float f=12.34;if((fp=_fopen(“test”,“wb”))==NULL){printf(“Cannotopen file.”);exit(l);} fwrite(&f,sizeof(float),1,fp);rewind(fp);fread(&f,sizeof(float),1,fp);printf(“%fn”,f);fclose(fp);}

下面的函数sum 完成计算1~n的累加和。

sum(int n)

{ if(n<=0)

printf(“data errorn”);

if(n==1)return 1;

else _return(sum(n-1)+n);__________ } 统计学生成绩中不及格的学生名单。#include struct student { long num;char name[20];float score;}stu[6]={{9910110,”wangling”,85},{9910111,”liming”,90.5},{9910112,”fengyong”,90.5},{9910113,”fangjun”,56},{9910114,”sunping”,77.5},{9910115,”kongxiao”,50.5}};main(){ struct student s;int i,count=0;printf(“不及格名单:n”);for(i=0;i<6;i++)if(__stu[i].score______<60){ count++;printf(“%ld:%-12s %.1fn”, stu[i].num, stu[i].name, stu[i].score);} printf(“不及格人数:%dn”,count);} 下面程序是实现1+1/2+1/4+1/6+…+1/50的值,请填空:

main(){ int i=2;float sum=1;while(i<=50){ sum=sum+1/(float)i;i++;i++_;} printf(“sum=%fn”,sum)}

下面程序输入一个字符串,输出其中所出现过的大写英文字母.如输入字符串

“UKSDYckjsjsjJSJJD”;应输出“UKSDYJ”。按程序功能填空。#include main(){ char a[80], b[26];int i,j,k=0;gets(a);for(i=0;a[i]!='';i++)if(a[i]>='A'&&a[i]<='Z'){ for(j=0;j

打开C:CAADATA35中源程序文件pg3101.cpp,该程序是输入一个数x,当x能被5整除时,输出“x能被5整除”的信息,否则输出“x不能被5整除”。检查程序哪里有问题,请修改使之运行能得到正确结果。该源程序内容如下: #include void main(void){ int x,k;printf(“请输入x的值:n”);scanf(“%d”,&x);k=x%5;if(k==0)

printf(“x能被5整除n”);else

printf(“x不能被5整除n”);}

打开C:CAADATA36中的源程序文件pg207.cpp,补充程序并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分),使得程序运行时完成以下功能:编写程序找出3×3矩阵中的最大元素及其行列位置并输出,请在程序中将二维数组的9个元素初始化为以下值: 8 6 4 2 1 9 7 5 3

打开C:CAADATA37中的源程序文件pg301.cpp,按要求补充程序并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分),要求为:编写判断一个数是否为素数的函数fun(),并在主函数调用该函数输出200以内的所有素数。

打开C:CAADATA38中源程序文件pg6101.cpp,该程序有小问题,程序结果不正确。请修改,使程序能正确运行。该源程序内容如下: #include void main(void){ int a[5];printf(“请输入5个整数:”);for(i=0;i<5;i++)

scanf(“%d”,&a[i]);printf(“这5个数为:”);for(i=0;i<5;i++)

printf(“%4d”,a[i]);printf(“n”);}

打开C:CAADATA39中源程序文件pg5104.cpp,该程序是打印1到5的阶乘,有个小问题,请修改,使程序能正确运行。该源程序内容如下: #include int fac(int n){ static int f=1;f=f*n;return f;} void main(){ int i;for(i=1;i<=5;i++)

printf(“%d!=%dn”,i,fac(i));}

打开C:CAADATA40中源程序文件pg2102.cpp,该程序是从键盘输入两个数,在屏幕上输出这两个数。程序中有几处错误,修改程序,使其能够正确运行。该源程序内容如下: #include void main(){ int x,y;printf(“Please enter x,y: ”);scanf(“%d%d”,&x,&y);printf(“x=%d,y=%dn”,x,y);printf(“n”);}

打开C:CAADATA41中的源程序文件pg105.cpp,补充程序使得程序运行时完成以下功能:输入x的值,按照函数:

x(x<1)y= 2x+7(1<=x<10)3x-5(x>=10)

输出y的值。并以原文件名保存(不得删除原文件中的注释内容,否则该题不计分)。

第五篇:北航C语言期末模拟试题2012

单选题

下列关于单目运算符++、--的叙述中正确的是(D)。

A、它们的运算对象可以是int型变量,但不能是double型变量和float型变量 B、它们的运算对象可以是任何变量和常量

C、它们的运算对象可以是char型变量和int型变量,但不能是float型变量 D、它们的运算对象可以是char型变量、int型变量和float型变量

执行下列程序后,其输出结果是(D)。main(){int a=9;a+=a-=a+a;printf(“%dn”,a);} A、18 B、-9 C、9 D、-18 详解:

优先级:a+=(a-=(a+a))1a+a:18

○2a-=18:此时a=-9;注意,a已经不是9,而是-9了

○3a+=-9:即a=a+(-9)=(-9)+(-9)=-18 ○

打印语句printf(“sTUDENDbTrS”);在屏幕上正确的输出形式是(C).A、sTUDENDS B、TUDENTS C、STUDENT D、sTUDENTS 详解:

知识点:b表示退格;

r表示回车,即将当前位置一道“本行”开头 ○1sTUDEND ○2 sTUDENT ○3 STUDENT

已知键盘输入a=4,b=3,下面程序输出的结果是(C).main(){ int a,b,s;scanf(“%d%d”,&a,&b);s=a;if(a

若给定条件表达式(m)?(a++):(a--),则其中表达式m(B)。

A、和(m==0)等价 B、和(m!=0)等价 C、和(m==1)等价 D、和(m!=1)等价 注意:

此处不能选C,因为“非零的数即表示真”。如当m=2时,值为真,结果是a++;但是若选C,则结果为a--.执行语句 for(i=1;i++<4;);后变量 i 的值是(B)。

A、3 B、5 C、4 D、不定

以下描述中正确的是(C)。

A、由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B、do-while 循环中,根据情况可以省略 while C、在 do-while 循环体中,必须有能使循环退出的操作。

D、do-while 循环由do开始,用while结束,在 while(表达式)后面不能写分号

int a[10];合法的数组元素的最小下标值为(D)。

A、10 B、9 C、1 D、0 题意是a[]的括号内最小数可以是多少,而不是说定义的时候int a[]的括号里最小的数是多少。注意看清题目意思。

以下正确的函数定义是(C).A、double fun(int x, int y){ z=x+y;return z;} B、fun(x, y){ int x, y;double z;z=x/y;return z;} C、float f(int x, int y){float z;z=x/y;return z;} D、fun(int x, y){ int z;return z;}

char a1[]=“abc”,a2[80]=“1234”;将a1串连接到a2串后面的语句是(A)。

A、strcat(a2,a1);B、strcat(a1,a2);C、strcpy(a1,a2);D、strcpy(a2,a1);

若有 char s1[]=“abc”,s2[20],*t=s2;gets(t);则下列语句中能够实现当字符串s1大于字符串s2时,输出s2的语句是(C)。

A、if(strcmp(s2,s1)>0)puts(s2);B、if(strcmp(s2,t)>0)puts(s2);C、if(strcmp(s1,t)>0)puts(s2);D、if(strcmp(s1,s1)>0)puts(s2);strcmp()括号里可以是字符串本身,也可以是字符串的地址(首地址)

已知有宏定义#define SQR(a)2*a*a,则SQR(3+4)的值为(A).A、22 B、32 C、98 D、18

若有说明:int *p,m=5,n;以下正确的程序段是(D)。

A、scanf(“%d”,&n);*p=n;B、p=&n;scanf(“%d”,*p)C、p=&n;scanf(“%d”,&p);D、p=&n;scanf(“%d”,p);注意指针必须先初始化才能进行运算 char h,*s=&h;可将字符H通过指针存入变量h中的语句是(A)。

A、*s='H';B、s='H' C、*s=H;D、s=H;

定义结构体的关键字是(A)。

A、struct B、typedef C、enum D、union

判断题

若 a=3,b=2,c=1 则关系表达式“(a>b)==c” 的值为“真”。T a=(b=4)+(c=6)是一个合法的赋值表达式。T C语言程序中输入一个中间带有空格的字符串时,可以用scanf函数.F 格式字符%e以指数形式输出实数数字部分小数位数7位.F 设g=1,h=2,k=3,则逻辑表达式k+g||!h&&k-h的值为0。F 求解表达式max=(a>b)?a:b的步骤是,先求解条件表达式(a>b),再根据它的值将a或b赋给max.T 语句if(a>b)printf(“%d”,a);else printf(“%d”,b);可以用条件表达式a>b?a:b取代.F break语句能够终止当前进行的多层循环.F for循环的三个表达式都可以省略.T for语句的循环体至少执行一次.F(do …… while 才是)字符串“Da lian”在内存中的存储长度是7.F(因为自动加)定义 int x[5],n;则x=x+n;或x++;都是正确的.F 若有定义 int a[10];则 for(i=0;i<=10;i++)a[i]=i;编译时无语法错误.T 数组名作为函数调用时的实参,实际上传递给形参的是数组第一个元素的值.F 当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在动态区.F 两个字符串中的字符个数相同时才能进行字符串大小的比较.F 如果被包含文件中有全局静态变量,它们在用#include命令的源文件中有效.T 假设有int a[10], *p;则p=&a[0]与p=a等价.T 共用体变量中起作用的成员是最后一次存放的成员.T 下面的定义和语句是合法的:file *fp;fp=fopen(“a.txt”,“r”);F

填空题

若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量c中的值是 _____.c=(a-=(b-5));c=(a%11)+(b=3);9

下列语句输出的结果是_____,int a=-1;printf(“%x”,a);(在vc环境下)ffffffff(8个f,因为是4字节)

设a=3,b=4,c=4,则表达式a+b>c&&b==c&&a||b+c&&b==c的值为_____.1

以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则下划线处应填写_____.ch=getchar();while(ch ____ 'Y')ch=getchar();==

static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};其中a[1][2]的值为_____.6

静态变量和外部变量的初始化是在_____阶段完成的,而自动变量的赋初值是 在_____时进行的.(编译),(运行/函数调用/调用)1752

将函数func的入口地址赋给指针变量p的语句是_____.p=func;

设有以下结构类型说明和变量定义,则变量b在内存所占字节数是 _____。21 struct stud { short int age;char num[3];float s[2];double ave;} b,*p;

程序设计题

/*-----------------【程序设计】1685-------------------

功能:能计算从1开始到n的自然数的和,n由键盘输入,并在main()函数中输出。

-----------------*/

#include “stdio.h”

int fun(int n){ /*********Begin**********/

int sum=0,i;for(i=1;i<=n;i++)sum=sum+i;return(sum);

/********** End **********/ }

main(){ int m;void TestFunc();printf(“Enter m: ”);scanf(“%d”, &m);printf(“nThe result is %dn”, fun(m));TestFunc();}

void TestFunc(){ FILE *IN,*OUT;int t;int o;int c;IN=fopen(“in.dat”,“r”);if(IN==NULL){ printf(“Read File Error”);} OUT=fopen(“out.dat”,“w”);if(OUT==NULL){ printf(“Write File Error”);} for(c=1;c<=5;c++){ fscanf(IN,“%d”,&t);o=fun(t);fprintf(OUT,“%dn”,o);} fclose(IN);fclose(OUT);}

/*-----------------【程序设计】1599-------------------

功能:调用函数fun判断一个三位数是否“水仙花数”。

在main函数中从键盘输入一个三位数,并输

出判断结果。请编写fun函数。

说明:所谓“水仙花数”是指一3位数,其各位数字立方和

等于该数本身。

例如:153是一个水仙花数,因为153=1+125+27。

-----------------*/

#include “stdio.h”

int fun(int n){

/*********Begin**********/

int bw,sw,gw;bw=n/100;sw=(n-bw*100)/10;gw=n%10;if(n==bw*bw*bw+sw*sw*sw+gw*gw*gw)return 1;else return 0;

/********** End **********/

}

TestFunc(){ FILE *IN,*OUT;int iIN,i;int iOUT;IN=fopen(“in.dat”,“r”);if(IN==NULL){ printf(“Please Verify The Currernt Dir..It May Be Changed”);} OUT=fopen(“out.dat”,“w”);if(OUT==NULL){ printf(“Please Verify The Current Dir..It May Be Changed”);} for(i=0;i<10;i++){ fscanf(IN,“%d”,&iIN);iOUT=fun(iIN);fprintf(OUT,“%dn”,iOUT);} fclose(IN);fclose(OUT);} main(){ int n,flag;scanf(“%d”,&n);flag=fun(n);if(flag)printf(“%d 是水仙花数n”,n);else printf(“%d 不是水仙花数n”,n);TestFunc();}

程序改错题

/*-----------------------【程序改错】1246-------------------------

功能:有一数组内放10个整数,要求找出最小数和它的下标,然后

把它和数组中最前面的元素即第一个数对换位置.-----------------------*/ #include “stdio.h” main(){ int i,a[10],min,k=0;printf(“n please input array 10 elementsn”);for(i=0;i<10;i++)/***********ERROR***********/ scanf(“%d”, a[i]);//scanf(“%d”,&a[i]);for(i=0;i<10;i++)printf(“%d”,a[i]);min=a[0];/***********ERROR***********/ for(i=3;i<10;i++)//for(i=1;i<10;i++)for(i=0;i<10;i++)// for(i=1;i<=9;i++)for(i=0;i<=9;i++)

/***********ERROR***********/ if(a[i]>min)// if(a[i]

/*-----------------------【程序改错】1906-------------------------

功能:以下程序把两个数按由大到小的顺序输出来.-----------------------*/ #include “stdio.h” /***********ERROR***********/ void swap(int *p1,*p2)//swap(int *p1,int *p2)void swap(int *p1,int *p2){ int p;p=*p1;*p1=*p2;*p2=p;}

main(){ int a,b, *p,*q;printf(“input a,b:”);/***********ERROR***********/ scanf(“%d%d”,a,b);//scanf(“%d%d”,&a,&b);p=&a;q=&b;if(a

程序填空题

/*------------------------【程序填空】1324--------------------------

题目:本程序的功能是输入一段数字后,将输出的数字颠倒输出。

请填空。

------------------------*/

#include “stdio.h” main(){ int numb,rdigit;scanf(“%d”,&numb);/***********FILL***********/ while(_____)// numb!=0 numb { rdigit=numb%10;/***********FILL***********/ printf(“%d”,_____);// rdigit numb/=10;} printf(“n”);}

/*------------------------【程序填空】1573--------------------------

题目:本程序用printf函数输出字符串“I am student”,完善程序。

------------------------*/ #include “stdio.h” main(){ int i;char *s1=“I am student”;/***********FILL***********/ for(i=0;s1[i]!=____;i++)// '' /***********FILL***********/ printf(“_____”, s1[i]);//%c }

下载大一上学期C语言期末复习总结和模拟试题带答案word格式文档
下载大一上学期C语言期末复习总结和模拟试题带答案.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    大一上学期 期末总结五篇范文

    2010-11-2学期期末总结 43210214周啸天 在结束了高考、填志愿和等待录取通知书的焦虑,以及漫长的等待后,终于步入了百年东大这美丽的校园。 最最期待的就是即将到来的宿舍生活......

    八年级上册语文期末复习说明文阅读试题(带答案)

    八年级上册语文期末复习说明文阅读试题(带答案)一、《大自然的语言》(一)经度差异是影响物候的第二个因素。经度之所以发生影响,是离海洋远近的关系。凡是近海的地方,比同纬度的内......

    初一上学期生物或地理或历史期末试题和答案

    同问 初一上学期生物或地理或历史期末试题和答案 一. 选择题 ( C )1.我国原始社会末期,因治水有功而被推选为部落联盟首领的是A黄帝 B荛 C禹 D舜 ( C )2.下列制度中哪一项......

    我的大一上学期的经历和总结

    我的大一上学期的经历和总结 自从踏上去大学的火车,一段全新的神秘的令人期待的旅程就开始了,我不知道前方是平坦大道还是道路坎坷,但我知道我肩负的并不只是我对自己的期待,还......

    2011年国家司法考试刑法模拟试题带答案和解析

    1、1943年,马锡五任陕甘宁边区高等法院陇东分庭庭长,他深入基层,依靠群众,就地办案,形式灵活,手续简便,被总结为“马锡五审判方式”。关于“马锡五审判方式”体现的法治意义,下列哪......

    2012年司法考试《法制史》考点模拟试题及答案带答案和解析

    1、某镇政府以一公司所建钢架大棚未取得乡村建设规划许可证为由责令限期拆除。该公司逾期不拆除,镇政府现场向其送达强拆通知书,组织人员拆除了大棚。该公司向法院起诉要求撤......

    2013年司法考试卷一模拟试题及答案带答案和解析

    1、中国籍公民张某与华侨李某在某国相识后结婚并定居该国。l0年后张某在定居国起诉离婚,但该国法院以当事人双方均具有中国国籍为由拒绝受理该案。张某遂向自己在中国的最后......

    2016年司法考试《法制史》考点模拟试题及答案带答案和解析

    1、关于回避的复议程序,下列说法正确的是: A.一案件被告人提出审理该案的审判员王某是被害人从前的朋友,申请回避,被当庭驳回,被告人不能申请复议 B.一案件被告人提出审理该案......