第一篇:北航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 } 下面程序运行时,如果从键盘上输入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语言期末复习试题