江南大学现代远程教育第三阶段练习题考试科目:《C语言程序设计》第10章至第13章(总分100分)学习中心(教学点)批次:层次:专业:学号:身份证号:姓名:得分:一、单项选择题(本题共20小题,每小题2分,共40分。
)1、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是(D)。
A、p=q;B、 *p=*q;C、 n=*q;D、 p=n;2、已定义以下函数fun (int *p){ return *p: }该函数的返回值是(C)。
A、不确定的值B、形参p中存放的值C、形参p所指存储单元中的值D、形参p的地址值3、有以下程序main(){ char *s[]={"one","two","three"},*p;p=s[1];printf("%c,%s\n",*(p+1),s[0]);}执行后输出结果是( C )。
A、n,twoB、t,oneC、w,oneD、o,two4、若有定义:int *p[3];, 则以下叙述中正确的是( B)。
A、定义了一个基类型为int的指针变量p,该变量具有三个指针B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针C、定义了一个名为*p的整型数组,该数组含有三个int类型元素D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素5、已定义以下函数fun(char *p2, char *p1){ while((*p2=*p1)!=‘\0’){p1++;p2++; } }函数的功能是(A)。
A、将p1所指字符串复制到p2所指内存空间B、将p1 所指字符串的地址赋给指针 p2C、对p1和p2两个指针所指字符串进行比较D、检查p1和p2两个指针所指字符串中是否有‘\0’6、有以下程序void fun(char *c,int d){ *c=*c+1;d=d+1;printf(“%c,%c,”,*c,d);}main(){ char a=’A’,b=’a’;fun(&b,a); printf(“%c,%c\n”,a,b);}程序运行后的输出结果是( D )。
A、B,a,B,aB、 a,B,a,BC、 A,b,A,bD、 b,B,A,b7、若有以下的说明,则对初值中字符'a'的引用方式为( B)。
static struct st{ char ch;double x;char a[];}struct st c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};A、c.chB、c[0][0].chC、c[1][1].chD、a[0]8、有以下程序#include <stdio.h>main( ){ FILE *fp; int i,k=0,n=0;fp=fopen(“d1.dat”,”w”);for(i=1;i<4;i++) fprintf(fp,”%d”,i);fclose(fp);fp=fopen(“d1.dat”,”r”);fscanf(fp,”%d%d”,&k,&n); printf(“%d %d\n”,k,n);fclose(fp);}执行后输出结果是(B)。
A、1 2B、 123 0C、 1 23D、 0 09、有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是(D)。
A、5B、6C、8D、910.运行下列程序后的输出结果是B。
main(){ char str[][10]={"China","Beijing"},*p=*str;printf("%s\n",p+10);}A、ChinaB、BeijingC、ngD、ing11、以下枚举类型的定义中正确的是( B )。
A、enum a={one, two, three};B、enum a {one=9, two=-1,three};C、enum a={“one” , “two”, “three”};D、enum a {“one”, “two”, “three”};12、设有说明:union data {int i;float f;struct {int x;char y;}s;double d;}a;在16位微机环境下,int类型的整数占用两个字节,则变量a在内存中所占字节数为( A )。
A、8B、17C、9D、1513、下面对结构数据类型的叙述中,( C )是错的。
A、结构变量可以在说明结构类型后定义,也可在说明结构时定义B、结构可由若干个成员组成,各成员的数据类型可以不同C、定义一个结构类型后,编译程序要为结构的各成员分配存储空间D、结构变量的各成员可通过结构变量名和指向结构变量的指针引用14、有以下程序#include <string.h>main(){ char *p=“abcde\Ofghjik\0”;printf(“%d\n”,strlen(p));}程序运行后的输出结果是(D)。
A、12B、15C、 6D、 515、以下叙述中错误的是( D )。
A、二进制文件打开后可以先读文件的末尾,而顺序文件不可以B、在程序结束时,应当用fclose函数关闭已打开的文件C、在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D、不可以用FILE定义指向二进制文件的文件指针16、若有如下说明,则(D)的叙述是正确的。
struct st{int a;int b[2];}a;A、结构体变量a与结构体成员a同名,定义是非法的B、程序只在执行到该定义时才为结构体st分配存储单元C、程序运行时为结构体st分配6个字节存储单元D、类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)17、对于用"r"方式打开文件下列说法正确的是(B)。
A、用"r"方式打开的文件只输入不能输出B、用"r"方式打开的文件只能输出,不能输入C、用"r"方式可以打开任何文件D、以上均不对18、在C语言中,文件若按数据的组织形式分类可分为( B )。
A、字符文件和数字文件B、ASCII文件和二进制文件C、顺序文件和随机文件D、以上均不对19、如有以下定义“int y[4][4]={1,2,3,4,5,6,7,8,9,10},*pyl=y[l],(*py2)[4]=y;”,则不能正确引用值为7的数组元素的表达式是( B )。
A、*(y[l]+2)B、*(y+1)+2C、pyl[2]D、py2[1][2]20、若有以下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为6的表达式是( C )。
A、*p+6B、*(p+6)C、*p+=5D、p+5二、填空题(本题共6小题,每空2分,共30分)1、以下程序输出整形变量a的值,错误的语句是(4),应改为p=&a 。
(1)main()(2){int a, *p;(3)a=100;(4)*p=a;(5)printf(“a=%d”,*p);(6)}2、下面的程序用来统计文件中字符的个数,请填空。
#include "stdio.h"{ FILE *fp;long num=0;if((fp=fopen("filename.dat","r"))== NULL ){ printf("cannot open file!\n");exit(0);}while( !feof(fp) ){ fgetc(fp);num++ ;}fclose(fp);printf("num=%d\n",num);}3、以下程序运行后输出的第一行内容是AD ,第二行内容是BC ,第三行内容是BB 。
# include<string.h>main(){ char *s1=”BD”,*s2=”BC”,*s3=”AB”;if (strcmp(sl,s2)>0) swap(sl,s2);if (strcmp(s2,s3)>0) swap(s2,s3);if (strcmp(sl,s2)>0) swap(sl,s2);puts(sl);puts(s2);puts(s3);}swap(char *s1,char *s2){ char t;t= *s1;*s1=*s2;*s2=t;}4、下面的函数用于比较两个给出的C字符串。
按比较结果,函数将返回下列函数值:若: s1=s2 返回0s1<s2 返回负值s1>s2 返回正值,请填空。
[程序]scmp(char *s1,char *s2){while(*s1)if( *s1-*s2 )return( *s1-*s2 );s1++;s2++;}return( 0 );}5、C程序中,数据可以用二进制和ASCII 两种代码形式存放。
6、运行程序后输出的第一行内容是n1=t,n2=u 、第二行内容是a=tesustring,b=tesusfg 。
#include <string.h>main(){static char a[50]="test";char b[40],*p;p=a;*(p+3)+=1;strcpy(b,"abcdefg");strcat(a,"string");strncpy(b,a,5);printf("n1=%c,n2=%c\t",*p,*(p+3));printf("a=%s,b=%s\n",a,b); }三、编程题(本题共2小题,每小题15分,共30分)1、现有四个学生数据,每个学生数据结构包含姓名、学号和性别要求编一程序实现以学号为主键对四个学生的数据按从大到小的顺序排列。
2、p的近似值可用以下公式求得:由以上公式可知,若n取值100000,则最后一项的值已为10-8,认为可达到精度要求,编一个程序实现求p的近似值,并把结果放在out.txt文件中。