练习3
一、填空
第1题(1.0分)
feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为【1】,
否则为【2】。
第2题(1.0分)
调用fopen 函数打开一文本文件,在“使用方式”这一项中,
为输出而打开需填入【1】。
第3题(1.0分)
C语言中调用【1】函数来关闭文件。
第4题(1.0分)
C语言中调用【1】函数来打开文件。
第5题(1.0分)
对磁盘文件的操作顺序是"先【1】,后读写,最后关闭".
第6题(1.0分)
结构体是不同数据类型的数据集合,作为数据类型,
必须先说明结构体【1】,再说明结构体变量。━━━━━━━━━━━━━━━━━
二、单项选择共48题(共计48分)
━━━━━━━━━━━━━━━━━
第1题(1.0分)
当说明一个结构体变量时系统分配给它的内存是().
A:各成员所需内存量的总和
B:结构中第一个成员所需内存量
C:成员中占内存量最大者所需的容量
D:结构中最后一个成员所需内存量
第2题(1.0分)
在VC++6.0中使用C语言时,若有如下定义: struct data
{ long i;
char ch;
double f; }b;
则结构变量b占用内存的字节数是:()
A:4
B:8
C:12
D:13
第3题(1.0分)
C语言结构类型变量在程序执行期间()
A:所有成员一直驻留在内存中
B:只有一个成员驻留在内存中
C:部分成员驻留在内存
D:没有成员驻留在内存中
第4题(1.0分)
以下结构体类型说明及结构体变量a,b的定义中,正确的是:()
A:struct ss
{ char flag;
float x;
} ;
ss a,b;
B:struct ss
{ char flag;
float x;
};
struct ss a,b;
C:struct
{ char flag;
float x;
}ss;
ss a,b;
D:struct
{ char flag;
float x;
}ss;
struct ss a,b;
第5题(1.0分)
14.以下关于typedef 的叙述错误的是( )
A:typedef只是将已存在的类型用一个新的名字来代表
B:用typedef可以增加新类型
C:用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D:用typedef为类型说明一个新名,通常可以增加程序的可读性
第6题(1.0分)
根据以下定义,能输出字母M的语句是() struct person { char name[9];int age;};
struct person class[10]={ "John",17, "Paul",19,
"Mary",18,
"Adam",16,};
A:printf("%c\n",class[3].name);
B:printf("%c\n",class[3].name[1]);
C:printf("%c\n",class[2].name[1]);
D:printf("%c\n",class[2].name[0]);
第7题(1.0分)
在16位的PC机上使用C语言,若有如下定义:
union
{ int i;
char ch;
double f;
}da;
则联合类型变量da占用内存的字节数()
A:1
B:4
C:8
D:11
第8题(1.0分)
下列关于结构体的说法错误的是:()
A:结构体是由用户自定义的一种数据类型B:结构体中可设定若干个不同数据类型的成员
C:结构体中成员的数据类型可以是另一个已定义的结构
D:在定义结构体时,可以对成员进行初始化第9题(1.0分)
在定义构造数据类型时,不能().
A:说明变量
B:说明存储类型
C:初始化
D:末尾不写分号
第10题(1.0分)
设有以下说明语句:
struct stu
{ int a;
float b;
}stutype;
则下面的叙述不正确的是:()
A:struct是结构体类型的关键字
B:struct stu是用户定义的结构体类型名
C:stutype是用户定义的结构体类型名
D:a和b都是结构体成员名
第11题(1.0分)
若有以下说明和语句,则对pup中sex域的正确引用方式是:()
struct pupil
{ char name[20];
int sex;
}pup,*p;
p=&pup;
A:p.pup.sex
B:p->pup.sex
C:(*p).pup.sex
D:(*p).sex
第12题(1.0分)
以下对C语言中共用体类型数据的叙述正确的是:()
A:可以对共用体变量名直接赋值
B:一个共用体变量中可以同时存放所有成员C:一个共用体变量中不能同时存放其所有成员
D:共用体类型定义中不能出现结构体类型的成员
第13题(1.0分)
以下关于枚举的叙述不正确的是()
A:枚举元素的值可以是整数或字符串
B:可以在定义枚举类型时对枚举元素进行初始化
C:枚举元素表中的元素有先后次序,可以进行比较
D:枚举变量只能取对应枚举类型的枚举元素表中的元素
第14题(1.0分)
以下各选项企图说明一种新的类型名,其中正确的是().
A:typedef v1 int;
B:typedef v2=int;
C:typedef int v3;
D:typedef v4: int;
第15题(1.0分)
把一些属于不同类型的数据作为一个整体来处理时,常用()
A:简单变量
B:数组类型数据
C:指针类型数据
D:结构体数据类型
第16题(1.0分)
若定义:
union stu{int i;float t; int a[4]}x;
假设按照标准C语言规则,基本整型数据占2个字节,则x在内存中占用的字节数是()
A:2
B:8
C:4
D:14
第18题(1.0分)
下面程序的运行结果是:()
main( )
{ struct cmplx
{ int x;
int y;
}c[2]={1,3,2,7};
printf("%d",c[0].y/c[0].x*c[1].x);
}
A:0
B:1 C:3
D:6
第19题(1.0分)
有如下定义:
struct date
{ int y ;
int m ;
int d ;};
struct person
{ char name[20];
char sex;
struct date birthday;
}a;
对结构体变量a的出生年份进行赋值时,下面正确的赋值语句是( ).
A:y =1958
B:birthday.y=1958
C:a.birthday.y =1958
D:a.y =1958
第20题(1.0分)
下面程序的运行结果是( )
union un
{ int a; int b; int c;};
main()
{ union un u;
u.a=1; u.b=2; u.c=3;
printf("a=%d,b=%d,c=%d\n",u.a,u.b,u.c);
}
A:a=3,b=3,c=3
B:a=1,b=2,c=3
C:a=1,b=1,c=1
D:a=2,b=2,c=2
第21题(1.0分)
相同结构体类型的变量之间,可以().
A:相加
B:赋值
C:比较大小
D:地址相同
第22题(1.0分)
当说明一个共用体变量时,系统分配给它的内存是:()
A:各成员所需内存量的总和
B:共用体中第一个成员所需内存量
C:成员中占内存量最大者所需的内存量
D:共用体中最后一个成员所需内存量
第23题(1.0分)
若有以下定义和语句:
union data
{ int i;
char c;
float f;
}a;
则以下语句正确的是:()
A:a=5
B:printf("%d\n",a.i);
C:a={2,'a',1.2};
D:n=a
第24题(1.0分)
C语言规定结构体变量系统分配给它的存储空间是()
A:该结构体中最后一个成员所需的存储空间B:该结构体中所有成员所需存储空间的总和. C:该结构体中第一个成员所需的存储空间D:该结构体中占用最大存储空间的成员所需的存储空间
第25题(1.0分)
结构体类型的定义允许嵌套是指().
A:成员是已经或正在定义的结构体型
B:成员可以重名
C:结构体型可以派生
D:定义多个结构体型
第27题(1.0分)
以下可作为函数fopen中第一个参数的正确格式是().
A:c:user\text.txt
B:c:\user\text.txt
C:"c:\user\text.txt"
D:"c:\\user\\text.txt"
第30题(1.0分)
fclose函数的作用是:()
A:删除文件
B:删除文件中的数据
C:释放与该文件相关联的FILE结构体变量D:清空文件缓冲区
第31题(1.0分)
当顺利执行了文件关闭操作时,fclose函数的返回值是_______________.
A:-1 B:TURE
C:0
D:1
第32题(1.0分)
C语言中可以处理的文件类型是()
A:文本文件和数据文件
B:文本文件和二进制文件
C:数据文件和二进制文件
D:数据文件和非数据文件
第33题(1.0分)
应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为().
A:fclose()
B:close()
C:fread()
D:fwrite
第34题(1.0分)
打开文件时,方式"w"决定了对文件进行的操作是().
A:只写盘
B:只读盘
C:可读可写盘
D:追加写盘
第35题(1.0分)
fopen函数的作用是:()
A:将文件的内容读入内存
B:读出文件的大小
C:建立与文件关联的FILE结构体变量并返回该结构体变量的地址
D:向文件写数据
第36题(1.0分)
应用缓冲文件系统对文件进行读写操作,打开文件的函数名为().
A:open
B:fopen
C:close
D:fclose
第37题(1.0分)
若以"a+"方式打开一个已存在的文件,则以下叙述正确的是().
A:文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
B:文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
C:文件打开时,原有文件内容被删除,只可作写操作
D:以上各种说法皆不正确
第38题(1.0分)
若有程序片段FILE *fp; fp=fopen("a.txt","r"); 则以下说法中正确的是:()
A:fp指向磁盘文件a.txt的地址
B:fp指向磁盘文件a.txt 所对应的FILE 结构C:如果fp不为NULL,表示文件打开失败
D:可以利用fp指针对文件a.txt进行写操作
第39题(1.0分)
若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,
下面符合此要求的函数调用是().
A:fopen("A:\user\abc.txt","r")
B:fopen("A:\\user\\abc.txt","r+")
C:fopen("A:\user\abc.txt","rb")
D:fopen("A:\\user\\abc.txt","w")
第40题(1.0分)
C语言中的文件的存储方式有().
A:只能顺序存取
B:只能随机存取(或直接存取)
C:可以顺序存取,也可随机存取
D:只能从文件的开头进行存取
第41题(1.0分)
已知fp是一个指向已打开文件的指针,ch是一个字符型变量,则ch=fgetc(fp)的作用是:()
A:获取键盘输入的字符,并赋值给ch
B:获取fp所指向的文件的第一个字节的内容,并赋值给ch
C:获取fp所指向的文件的当前文件位置指针所指向的一个字节的内容,并赋值给ch
D:将ch的值输出到fp所指向的文件中
第42题(1.0分)
fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是____________.
A:只写
B:追加
C:读或读写
D:答案B和C都正确
第43题(1.0分)
fscanf函数的正确调用形式是_________________. A:fscanf (fp,格式字符串,输出表列);
B:fscanf(格式字符串,输出表列,fp);
C:fscanf(格式字符串,文件指针,输出表列); D:fscanf(文件指针,格式字符串,输入表列);
第44题(1.0分)
fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式
必须是().
A:只写
B:追加
C:读或读写
D:答案B和C都正确
第45题(1.0分)
若要用fopen函数打开一个新的二进制文件,该文件要求既能读也能写,则打开方式字符串应是_______.
A:"ab+"
B:"wb+"
C:"rb+"
D:"ab"
第46题(1.0分)
若调用fputc函数输出字符成功,则其返回值是___________.
A:EOF
B:1
C:0
D:输出的字符
第47题(1.0分)
C语言中的文件类型只有().
A:索引文件和文本文件两种
B:ASCII文件和二进制文件两种
C:文本文件一种
D:二进制文件一种
第48题(1.0分)
当顺利执行了文件关闭操作时,fclose函数的返回值是().
A:-1
B:TRUE
C:0
D:1
━━━━━━━━━━━━━━━━
三、程序填空共6题(共计60分)
━━━━━━━━━━━━━━━━
第1题(10.0分)
/*------------------------------------------------------- 【程序填空】
--------------------------------------------------------- 题目:题目:利用指向结构的指针编写求某年、某月、某日是第
几天的程序,其中年、月、日和年天数用结构表示。
-------------------------------------------------------*/ main()
/***********SPACE***********/
{【?】date
{int y,m,d,n;
/***********SPACE***********/
}【?】;
int
k,f,a[12]={31,28,31,30,31,30,31,31,30,31,30,31} ;
printf("date:y,m,d=");
scanf("%d,%d,%d",&x.y,&x.m,&x.d);
f=x.y%4==0&&x.y%100!=0||x.y%400==0;
/***********SPACE***********/
a[1]+=【?】;
if(x.m<1||x.m>12||x.d<1||x.d>a[x.m-1])exit(0); for(x.n=x.d,k=0;k /***********SPACE***********/ printf("n=%d\n",【?】); } 第2题(10.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:题目:定义一个结构变量(包括年、月、日)计算给定日 期是该年的第几天。 -------------------------------------------------------*/ main() /***********SPACE***********/ {【?】date {int y,m,d; }da; int f,n,p,a[12]={31,28,31,30,31,30,31,31,30,31,30,3 1}; printf("y,m,d="); scanf("%d,%d,%d",&da.y,&da.m,&da.d); /***********SPACE***********/ f=da.y%4==0&&da.y%100【?】0||da.y%400==0; /***********SPACE***********/ if(da.m<1【?】da.d>12)exit(0); a[11]+=f; if(da.d<1||da.d>a[da.m-1])exit(0); /***********SPACE***********/ for(n=【?】,p=1;p } 第3题(10.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:输入学生成绩并显示。 -------------------------------------------------------*/ # include struct student { char number[6]; char name[6]; int score[3]; } stu[2]; void output(struct student stu[2]); void main() { int i, j; /***********SPACE***********/ for(i=0; i<2; 【?】) { printf("请输入学生%d的成绩:\n", i+1); printf("学号:"); /***********SPACE***********/ scanf("%s", 【?】.number); printf("姓名:"); scanf("%s", stu[i].name); for(j=0; j<3; j++) { printf("成绩%d. ", j+1); /***********SPACE***********/ scanf("%d", 【?】.score[j]); } printf("\n"); } output(stu); } void output(struct student stu[2]) { int i, j; printf("学号姓名成绩1 成绩2 成绩3\n"); for(i=0; i<2; i++) { /***********SPACE***********/ 【?】("%-6s%-6s", stu[i].number, stu[i].name); for(j=0; j<3; j++) printf("%-8d", stu[i].score[j]); printf("\n"); } } 第4题(10.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:写一个函数,求一个字符串的长度,在main函数中输入字 符串,并输出其长度。 -------------------------------------------------------*/ main() { int len; char *str[20]; printf("please input a string:\n"); scanf("%s",str); /***********SPACE***********/ len=length(【?】); printf("the string has %d characters.",len); } /***********SPACE***********/ 【?】(char *p) { int n; n=0; while(*p!='\0') { /***********SPACE***********/ 【?】; /***********SPACE***********/ 【?】; } return n; } 第5题(10.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:从键盘输入一个字符串,将小写字母全部转换成大写字母, 然后输出到一个磁盘文件“test”中保存。输入的字符串 以!结束。 -------------------------------------------------------*/ #include "stdio.h" main() {FILE *fp; char str[100],filename[10]; int i=0; /***********SPACE***********/ if((fp=fopen("test",【?】))==NULL) { printf("cannot open the file\n"); exit(0);} printf("please input a string:\n"); /***********SPACE***********/ gets(【?】); while(str[i]!='!') /***********SPACE***********/ { if(str[i]>='a'&&【?】) str[i]=str[i]-32; fputc(str[i],fp); i++;} /***********SPACE***********/ fclose(【?】); fp=fopen("test","r"); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp); } 第6题(10.0分) /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:文件操作。 -------------------------------------------------------*/ # include # include void main() { /* 定义一个文件指针fp */ /***********SPACE***********/ 【?】*fp; char ch, filename[10]; printf("Please input the name of file: "); scanf("%s", filename); /* 输入字符串并赋给变量filename */ /* 以读的使用方式打开文件filename */ /***********SPACE***********/ if((fp=fopen(filename, "【?】")) == NULL) { printf("Cannot open the file.\n"); exit(0); /* 正常跳出程序*/ } /* 关闭文件*/ /***********SPACE***********/ 【?】; } ━━━━━━━━━━━━━━━━━━四、程序改错共33题(共计330分) ━━━━━━━━━━━━━━━━━━ 第1题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:函数fun的功能是:实现交换两个整数的值。例如给a和b 分别输入3和6 ,输出为a=6 b=3 请改正程序中的4个错误,使它能得出正确的结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ /**********FOUND**********/ void fun (int a, b) { int t; /**********FOUND**********/ t=a; /**********FOUND**********/ a=b; /**********FOUND**********/ b=t; } main() { int a,b; printf("enter a,b:");scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%d b=%d\n",a,b); } 第2题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:请编写一个函数fun,函数的功能是:统计出若干 个学生的平均成绩,最低分以及得最低分的人数。 例如,输入10名学生的成绩分别为92,87,68,56, 92,84,67,75,92,66,则输出平均成绩为77.9, 最低分为56,得最低分的人数为1人。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include "stdio.h" float Min=0; int J=0; float fun(float array[],int n) { int i;float sum=0,ave; Min=array[0]; for(i=0;i { if(Min>array [i]) Min=array [i]; /**********FOUND**********/ sum=+array[i]; } /**********FOUND**********/ ave=sum\n; for(i=0;i /**********FOUND**********/ if(array[i]=Min) J++; return(ave); } void main( ) { float a[10],ave; int i=0; printf("Input 10 scores:\n"); for(i=0;i<10;i++) scanf("%f",&a[i]); ave=fun(a,10); printf("ave=%f\n",ave); printf("min=%f\n",Min); printf("Total:%d\n",J); getch(); } 第3题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:已知一个数列从第0项开始的前三项分别为0、0、1,以 后的各项都是其相邻的前三项的和。下列给定程序中, 函数fun的功能是:计算并输出该数列的前n项的平方根 之和sum,n的值通过形参传入。 例如,当n=10时,程序的输出结果应为23.177745。 请更改程序中的错误,使它能得出正确的结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include #include "math.h" /**********FOUND**********/ fun (int n) { double sum,s0,s1,s2,s; int k; /**********FOUND**********/ sum=0.0; if(n<=2) sum=0.0; s0=0.0; s1=0.0; /**********FOUND**********/ s2=0.0; /**********FOUND**********/ for(k=4;k>n;k++) { s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; } return sum; } main() { int n; scanf("%d",&n); printf("%lf\n",fun(n)); } 第4题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:编写一个程序模拟袖珍计算器的加、减、乘、除四则运算。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include void main() { float x,y; char operate1; printf("Arithmetic expression\n"); /**********FOUND**********/ scanf("%f",x); /**********FOUND**********/ while((operate1==getchar())!='=') { printf("result="); scanf("%f",&y); /**********FOUND**********/ switch(y); { case '+': x+=y; break; case '-': x-=y; break; case '*': x*=y; break; case '/': x/=y; break; } } printf("%f",x); getch(); return; } 第5题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:fun函数的功能是:实现两个字符串的连接。 例如:输入dfdfqe和12345时,则输出dfdfqe12345. 请改正程序中的错误,使它能得出正确的结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ main() { char s1[80],s2[80]; void scat(char s1[],char s2[]); gets(s1); gets(s2); scat(s1,s2); puts(s1); } void scat (char s1[],char s2[]) { int i=0,j=0; /**********FOUND**********/ while(s1[i]= ='\0') i++; /**********FOUND**********/ while(s2[j]= ='\0') { /**********FOUND**********/ s2[j]=s1[i]; i++; j++; } /**********FOUND**********/ s2[j]='\0'; } 第6题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:下列程序中,函数fun的功能是:先将在字符 串s中的字符按正序存放到t串中,然后把s中 的字符按逆序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时, 则t中的字符串应为:“ABCDEEDCBA”。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的 结构。 ------------------------------------------------------*/ #include #include #include void fun(char *s,char *t) { int i,sl; sl=strlen(s); /**********FOUND**********/ for(i=0;i t[i]=s[i]; for(i=0;i /**********FOUND**********/ t[sl+i]=s[sl-i]; /**********FOUND**********/ t[sl]='\0'; } main() { char s[100],t[100]; clrscr(); printf("\nPlease enter string s:");scanf("%s",s); fun(s,t); printf("The result is:%s\n",t); getch(); } 第7题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:求100以内(包括100)的偶数之和. -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序 的结构。 ------------------------------------------------------*/ #include "stdio.h" void main() { /**********FOUND**********/ int i,sum=1; /**********FOUND**********/ for(i=2;i<=100;i+=1) sum+=i; /**********FOUND**********/ printf("Sum=%d \n";sum); getch(); } 第8题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:编写函数fun求20以内所有5的倍数之积。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #define N 20 #include "stdio.h" void main() { int sum; sum=fun(5); printf("%d以内所有%d的倍数之积为:%d\n",N,5,sum); getch(); } int fun(int m) { /**********FOUND**********/ int s=0,i; for(i=1;i /**********FOUND**********/ if(i%m=0) /**********FOUND**********/ s=*i; return s; } 第9题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:输入N个数据存入数组中,将其倒置存放,并打印输出。 程序中共有4条错误语句,请改正错误。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include #define N 10 void main( ) { int i, t; /**********FOUND**********/ int a[n] printf("Enter %d Numbers:\n", N); for(i=0;i /**********FOUND**********/ scanf("%d",a[i]); /**********FOUND**********/ for(i=1;i< N/2;i++) { t=a[i]; /**********FOUND**********/ a[i]=a[N]; a[N-i-1]=t; } for(i=0;i printf("%d ",a[i]); } 第10题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:函数fun的功能是:用下面的和式求圆 周率的近似值。直 到最后一项的绝对值小于等于0.0001。 π 1 1 1 — = 1 - — + — - — + ... 2 3 5 7 请改正程序中的错误,使它能得出正确的结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ /**********FOUND**********/ #include "stdio.h" fun() { int i=1; /**********FOUND**********/ int s=0,t=1,p=1; /**********FOUND**********/ while(fabs(t)<=1e-4) { s=s+t; p=-p; i=i+2; t=p/i; } /**********FOUND**********/ printf("pi=%d\n",s*4); } main() { fun(); } 第11题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:有一数组内放10个整数,要求找出最小数和它的下标,然后 把它和数组中最前面的元素即第一个数对换位置. -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ main( ) { int i,a[10],min,k=0; printf("\n please input array 10 elements\n"); for(i=0;i<10;i++) /***********FOUND***********/ scanf("%d", a[i]); for(i=0;i<10;i++) printf("%d",a[i]); min=a[0]; /***********FOUND***********/ for(i=3;i<10;i++) /***********FOUND***********/ if(a[i]>min) { min=a[i]; k=i; } /***********FOUND***********/ a[k]=a[i]; a[0]=min; printf("\n after eschange:\n"); for(i=0;i<10;i++) printf("%d",a[i]); printf("\nk=%d\nmin=%d\n",k,min); } 第12题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:用指针作函数参数,编程序求一维数组 中的最大和最小的元素值. -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #define N 10 /***********FOUND***********/ void maxmin(int arr[ ],int *pt1, *pt2, n) {int i; /***********FOUND***********/ *pt1=*pt2=&arr[0]; for(i=1;i /***********FOUND***********/ {if(arr[i]<*pt1) *pt1=arr[i]; if(arr[i]<*pt2) *pt2=arr[i]; } } main( ) { int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2, a,b; /***********FOUND***********/ *p1=&a;*p2=&b; maxmin(array,p1,p2,N); printf("max=%d,min=%d",a,b); } 第13题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:输入一行字符,分别统计出其中英文字母、空 格、数字和其它字符的个数。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序 的结构。 ------------------------------------------------------*/ #include "stdio.h" void main() {char c; int letters=0,space=0,digit=0,others=0; printf("please input some characters\n"); /**********FOUND**********/ while((c=getchar())=='\n') { /**********FOUND**********/ if(c>='a'&&c<='z'&&c>='A'&&c<='Z') letters++; /**********FOUND**********/ else if(c=!' ') space++; else if(c>='0'&&c<='9') digit++; else others++; } printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others); } 第14题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:判断一个给定的整数是否为素数。 程序中共有4条错误语句,请改正错误。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include "math.h" void main( ) { int m,i,k; /**********FOUND**********/ scanf("%d",m); k=sqrt(m); /**********FOUND**********/ for(i=1;i<=k;i++) /**********FOUND**********/ if(m / i==0) break; /**********FOUND**********/ if(i>=k) printf("Yes\n"); else printf("No\n"); } 第15题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:下列给定程序中,函数fun的功能是:求1到10的阶乘的 和。主函数和fun函数中,各有两个错误,请改正,使其 能得到正确的运行结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ main() { int i; float t,s=0; float fac(int n); /**********FOUND**********/ for(i=1;i<10;i++) /**********FOUND**********/ s=fac(i); printf("%f\n",s); } float fac(int n) { /**********FOUND**********/ int y=1; int i; for(i=1 ;i<=n;i++) y=y*i; /**********FOUND**********/ return; } 第16题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:将一个字符串中的大写字母转换成小写字母。 例如:输入aSdFG输出为asdfg。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include /**********FOUND**********/ bool fun(char *c) { if(*c<='Z'&&*c>='A')*c-='A'-'a'; /**********FOUND**********/ fun= c; } main() /**********FOUND**********/ char s[81],*p=s; gets(s); while(*p) { *p=fun(p); /**********FOUND**********/ puts(*p); p++; } putchar('\n'); } 第17题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:用辗转相除法求两个整数的最大公约数、最小公倍数。 程序中共有4条错误语句,请改正错误。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ void main() { int n,m,nm,r,t; printf("Enter m,n=?"); scanf("%d%d",&m,&n); nm=n*m; if (m { t=m; /**********FOUND**********/ n=m; n=t; } r=m%n; /**********FOUND**********/ while (n!= 0) { m=n; /**********FOUND**********/ r=n; r=m%n; } /**********FOUND**********/ printf("The max Gyshu=%d\n", m); printf("The min Gbshu=%d\n", nm/n); } 第18题(10.0分)/*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:打印如下所示的金字塔图案。(注意:最后一行没有前导空格) 1 222 33333 4444444 555555555 程序中共有4条错误语句,请改正错误。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ #include main( ) { int i,j,k; for(i=1;i<=5;i++) { /**********FOUND**********/ for(j=1;j<=3+i;j++) /**********FOUND**********/ printf("\n" ); /**********FOUND**********/ for(k=1;k<=2*i+1;k++) /**********FOUND**********/ printf("%d",48+i ); printf("\n"); } } 第19题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:fun函数的功能是:给定n个实数,输出平均值,并统计 在平均值以下(含平均值)的实数个数。例如,n=6时, 输入23.5, 45.67, 12.1, 6.4,58.9, 98.4所得平均值 为40.828335,在平均值以下的实数个数应为3。 请改正程序中的错误,使它能得出正确的结果。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ int fun(float x[],int n) { int j,c=0; /**********FOUND**********/ float j=0; /**********FOUND**********/ for(j=0;j<=n;j++) xa+=x[j]; xa=xa/n; printf("ave=%f\n",xa); /**********FOUND**********/ for(j=0;j<=n;j++) if(x[j]<=xa) c++; /**********FOUND**********/ return xa; } main() { float x[]={23.5,45.67,12.1,6.4,58.9,98.4}; printf("%d\n",fun(x,6)); } 第20题(10.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:下面程序的功能是:从键盘输入十个学生的成绩,统计最 高分,最低分和平均分。max代表最高分,min代表最低分, avg代表平均分。 -------------------------------------------------------- 注意:不可以增加或删除程序行,也不可以更改程序的结构。 ------------------------------------------------------*/ main( ) { int i; /***********FOUND***********/ float a[8],min,max,avg; printf("input 10 score:"); for(i=0;i<=9;i++) { printf("input a score of student:"); /***********FOUND***********/ scanf("%f",a); } /***********FOUND***********/ max=min=avg=a[1]; for(i=1;i<=9;i++) { /***********FOUND***********/ if(min min=a[i];