C语言-模拟考试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言模拟试题
选择题(1)
1.若有下列定义:char c[3],*pc=c; 则对c数组元素地址的正确引用是:
A. &c[3]
B. pc[3]
C. pc+2
D. &c
2.执行语句printf(“%d\n”,strlen(“abc\x41\n”));输出结果是:
A. 5
B. 7
C. 3
D. 4
3设有下列程序段,则scanf函数调用语句中对结构体变量成员的不正确引用为:struct student
{
char name[20];
int age;
char sex;
}stu[5], *p;
p=stu;
A. scanf("%s", stu[0].name);
B. scanf("%d", p->age);
C. scanf("%c", &p->sex);
D. scanf("%d", &stu[0].age);
4若有定义:int b=7;float a=2.5,c=4.7;
则表达式a+(int)(b/3*(int)(a+c)/2)%4的值为:
A. 0
B. 1
C. 2
D. 3
5若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则执行此语句后,a[2][1]得到的初值是:
A. 4
B. 2
C. 6
D. 8
6若有int a=1,b=4,c=3,d=2;语句,则执行完该语句后,条件表达式a<b?a:c<d?c:d的值为:
A. 1
B. 2
C. 3
D. 4
7putchar()函数可以向终端输出一个:
A. 整型变量表达式值
B. 实型变量值
C. 字符串
D. 字符或字符型变量值
8下列各语句中正确定义了数组的是:
A. int a[5],b[2,3];
B. char str(30);
C. int x[];
D. int x[5]={1,2,3};
9将整型变量a、b中的较大值为变量c赋值,下列语句中正确的是:
A. c= =(a>b)? a:b;
B. c=(a>b)?a:b;
C. c=if(a>b)a else b;
D. (a<b)?c=a:c=b;
10若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是:
A. 1
B. 2
C. 2.0
D. 2.5
11以下语句或语句组中,能正确进行字符串赋值的是:
A. char s[10]; s="right!";
B. char *sp="right!";
C. char s[10]; *s="right!"
D. char *sp; *sp="right!";
12若int a[ ][4]={1,2,3,4,5,6,7,8,9};则a数组第一维的大小是:
A. 1
B. 2
C. 3
D. 无确定值
13若要求以下程序的输出结果是a=5,b=4,则输入数据的形式应该是:#include “stdio.h”
main()
{ int a,b;
scanf("%d,b=%d",&a,&b);
printf("a=%d,b=%d",a,b); }
A. 5 4
B. 5,4
C. 5 b=4
14以下运算符中,优先级最高的是:
A. <=
B. &&
C. =
D. ++
15以下对C语言函数的描述中,不正确的是:
A. C语言中,函数可以嵌套定义
B. C语言中,函数可以递归调用
C. C语言中,函数可以没有返回值
D. C语言程序由函数组成
16若有以下定义和语句,则不能访问数组元素的表达式是:int i=2,*p,a[ ]={1,2,3,4,5};
p=a;
A. *(a+i)
B. a[p-a]
C. p+i
D. *(&a[i])
17C语言中NULL表示:
A. 空指针
B. 变量未找到
C. 字符串的结束符
D. 文件的结束符
18以下程序的运行结果是:
#include "stdio.h"
main()
if (m++>5) printf("%d\n",m);
else printf("%d\n", m--);}
A. 4
B. 5
C. 6
D. 7
19以下程序的运行结果是:
#include "stdio.h"
main()
{int a[][3]={{1,2,3},{4,5},{6},{0}};
printf("%d,%d,%d\n",a[1][1],a[2][1],a[3][1]); }
A. 3,2,1
B. 5,0,0
C. 4,1,0
D. 1,5,0
20下面程序的运行结果是:
#include "stdio.h"
main()
{int a[10]={2,4,6,8,10,12,14,16,18},*p;
p=a+5;
printf ("%d,%d\n",*(p+1),*++p+1); }
A. 16,15
B. 14,16
C. 16,18
D. 15,14
21以下程序的输出结果是:
#include "stdio.h"
fun2( int a,int b)
{ int c;
c=a*b%3;
fun1(int a,int b)
{ int c;
a+=a;b+=b;
c=fun2(a,b);
return c*c;}
main()
{ int x=11,y=19;
printf("%d\n", fun1(x,y));}
A. 3
B. 5
C. 4
D. 6
22以下程序运行后的输出结果是?
#include "stdio.h"
#define SQR(x) x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf("%d\n",a); }
A. 7
B. 8
C. 9
D. 10
23执行语句for(i=10;i>0;i--);后,变量i的值为:
A. 10
B. 0
C. 9
D. 1
24下列i,j,k 均为整型变量,选项中不正确的C语言赋值语句是:A. i+1=k;
B. i=j=k=1;
C. i=j+=++k;
D. j=i+1==i++;
25设有语句int a[10]={0,l,2,3,4,5,6,7,8,9},*p=a;则不能对a数组元素的正确引用是:
A. a[p-a]
B. *(*(a+5))
C. p[5]
D. *(&a[5])
26已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是:
A. 数组a和b的元素个数相同
B. a数组元素少于b数组
C. a数组元素多于b数组
D. 上述说法都不对
27以写方式打开二进制文件my.dat的正确写法是:
A. fopen(“my.dat”,”rb”);
B. fopen(“my.dat”,”r”);
C. fopen(“my.dat”,”wb”);
D. fopen(“my.dat”,”w”);
28对于定义
struct sa
{int x;float y;}data,*p=&data;
请从下列候选答案中,选择变量data的x成员的正确引用:
A. (*p).data
B. (*p).x
C. p->data.x
D. p.data.x
29循环语句的循环体中执行continue语句,其作用是:
A. 立即终止程序执行
B. 继续执行continue语句之后的循环体各语句
C. 结束本次循环
D. 跳出循环
30定义float a;现要从键盘输入a的数据,其整数位为3位,小数位为2位,则选用:
A. scanf(“%f”,&a);
B. scanf(“%5.2f”,a);
C. scanf(“%6.2f”,&a);
D.scanf(“%f”,a);
选择题(2)
1.以下叙述正确的是
A. C语言程序是由过程和函数组成的
B. C语言函数可以嵌套调用,例如:fun(fun(x))
C. C语言函数不可以单独编译
D. C语言中除了main函数,其他函数不可作为单独文件形式存在
2以下关于C语言的叙述中正确的是
A. C语言中的注释不可以夹在变量名或关键字的中间
B. C语言中的变量可以在使用之前的任何位置进行定义
C. 在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致
D. C语言的数值常量中夹带空格不影响常量值的正确表示
3以下C语言用户标识符中,不合法的是
A. _1
B. AaBc
C. a_b
D. a-b
4若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是
A. a=a++,i++;
B. i=(a+k)<=(i+k);
C. i=a%11;
D. i=!a;
5有以下程序
#include<stdio.h>
main() {char a,b,c,d; scanf("%c%c",&a,&b);
c=getchar(); d=getchar();
printf("%c%c%c%c\n",a,b,c,d);}
当执行程序时,按下列方式输入数据:(<CR>代表回车)
12<CR>
34<CR>
则输出结果是
A. 1234
B. 12
C. 12
3
D. 12
34
6以i关于C语言数据类型使用的叙述中错误的是
A. 若要准确无误差的表示自然数,应使用整数类型
B. 若要保存带有多位小数的数据,应使用双精度类型
C. 若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
D. 若只处理“真”和“假”两种逻辑值,应使用逻辑类型
7若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是
A. 1
B. 0
C. 2
D. 不知道a的值,不能确定
8以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是
A. switch(a)
{case:a=b;break;
default:a++;
}
B. switch(a==1)
{case 0:a=b;break;
case 1:a++;
}
C. switch(a)
{default:a++;break;
case 1:a=b;
}
D. switch(a==1)
{case 1:a=b;break;
case 0:a++;
}
9有如下嵌套的if语句
if (a<b)
if(a<c)k=a;
else k=c;
else
if(b<c) k=b;
else k=c;
10以下选项中与上述if语句等价的语句是
A. k=(a<b)?a:b;k=(b<c)?b:c;
B. k=(a<b)?((b<c)?a:b):((b>c)?b:c);
C. k=(a<b)?((a<c)?a:):((b<c)?b:c)
D. k=(a<b)?a:b;k=(a<c)?a:c;
11有以下程序
#include<s七dio.h>
main()
{int i,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>0;j--)
{if(i*j)>3)break;
m=i*j;
}
}
printf("m=%d\n",m);
}
程序运行后的输出结果是
A. m=6
B. m=4
C. m=2
D. m=5
12有以下程序
#include<stdio.h>
main()
{int a=l,b=2;
for(;a<8;a++) {b+=a;a+=2;}
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是
A. 9,18
B. 8,11
C. 7,11
D. 10,14
13有以下程序,其中k的初值为八进制数
#include <stdio.h>
main()
{int k=011;
printf("%d\n",k++);
}
程序运行后的输出结果是
A. 12
B. 11
C. 10
D. 9
14以下关于return语句的叙述中正确的是
A. 一个自定义函数中必须有一条return语句
B. 一个自定义函数中可以根据不同情况设置多条return语句
C. 定义成void类型的函数中可以有带返回值的return语句
D. 没有return语句的自定义函数在执行结束时不能返回到调用处15下列语句组中,正确的是
A. char *s;s="Olympic";
B. char s[7];s="Olympic";
C. char *s;s={"Olympic"};
D. char s[7];s={"Olympic"};
16下列选项中,能正确定义数组的语句是
A. int num[0..2008];
B. int num[];
C. int N=2008;
int num[N];
D. #define N 2008
int num[N];
17有以下程序
#include <stdio.h>
void fun(char *c,int d)
{ *c=*c+1;d=d+1;
printf("%c,%c,",*c,d);}
main()
{char b='a',a='A';
fun(&b,a);printf("%e,%e\n",b,a);
}
程序运行后的输出结果是
A. b,B,b,A
B. b,B,B,A
C. a,B,B,a
D. a,B,a,B
18若有定义int(*Pt)[3];,则下列说法正确的是[D]
A. 定义了基类型为int的三个指针变量
B. 定义了基类型为int的具有三个元素的指针数组pt
C. 定义了一个名为*pt、具有三个元素的整型数组
D. 定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组19设有定义double a[10],*s=a;,以下能够代表数组元素a[3]的是
A. (*s)[3]
B. *(s+3)
C. *s[3]
D. *s+3
20有以下程序
#include<stdio.h>
main()
{int a[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;
for(i=0;i<5;i++) s=s+a[b[i]];
printf("%d\n",s);
}
程序运行后的输出结果是
A. 6
B. 10
C. 11
D. 15
21有以下程序
#include <stdio.h>
main()
{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=1;j++) t+=b[i][b[j][i]];
printf("%d\n",t);
}
程序运行后的输出结果是
A. 1
B. 3
C. 2
D. 5
22若有以下定义和语句
char s1[10]="abcd!",*s2="\n123\\";
printf("%d %d\n", strlen(s1),strlen(s2));
则输出结果是
A. 5 5
B. 10 5
C. 10 7
D. 5 8
23有以下程序
#include <stdio.h>
#define N 8
void fun(int *x,int i)
{*x=*(x+i);}
main()
{int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i<N/2;i++)
printf("%d",a[i]);
printf("\n");
}
程序运行后的输出结果是
A. 1313
B. 2234
C. 3234
D. 1234
24有以下程序
#include <stdio.h>
int f(int t[],int n);
main()
{int a[4]={1,2,3,4},s;
s=f(a,4); printf("%d\n",s);
}
int f(int t[],int n)
{ if(n>0) return t[n-1]+f(t,n-1); else return 0;
}
程序运行后的输出结果是
A. 4
B. 10
C. 14
D. 6
25有以下程序
#include <stdio.h>
int fun()
{ static int x=1;
x=x*2; return x;
}
main()
{int i,s=1;
for(i=1;i<=2;i++) s=fun();
printf("%d\n",s);
}
程序运行后的输出结果是
A. 0
B. 1
C. 4
D. 8
26有以下程序
#include <stdio.h>
#define SUB(a) (a)-(a)
main()
{ int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n",d);
}
程序运行后的输出结果是
A. 0
B. -12
C. -20
D. 10
27设有定义:
struct complex
{ int real,unreal;} data1={1,8},data2;
则以下赋值语句中错误的是
A. data2=data1;
B. data2=(2,6)
C. data2.real=data1.real;
D. data2.real=data1.unreal;
28有以下程序
#include <stdio.h>
#include <string.h>
struct A
{ int a; char b[10]; double c;};
void f(struct A t);
main()
{ struct A a={1001,"ZhangDa",1098.0};
f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c);
}
void f(struct A t)
{ t.a=1002; strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是
A. 1001,zhangDa,1098.0
B. 1002,changRong,1202.0
C. 1001,ehangRong,1098.0
D. 1002,ZhangDa,1202.0
29有以下定义和语句
struct workers
{ int num;char name[20];char c;
struct
{int day; int month; int year;} s;
};
struct workers w,*pw;
pw=&w;
能给w中year成员赋1980的语句是
A. *pw.year=1980;
B. w.year=1980;
C. pw->year=1980;
D. w.s.year=1980;
30有以下程序
#include <stdio.h>
main()
{ int a=2,b=2,c=2;
printf("%d\n",a/b&c);
}
程序运行后的输出结果是
A. 0
B. 1
C. 2
D. 3
31有以下程序
#include <stdio.h>
main()
{ FILE *fp;char str[10];
fp=fopen("myfile.dat","w");
fputs("abc",fp);fclose(fp);
fopen("myfile.data","a++");
fprintf(fp,"%d",28);
rewind(fp);
fscanf(fp,"%s",str); puts(str);
fclose(fp);
}
程序运行后的输出结果是
A. abc
B. 28c
C. 28
D.因类型不一致而出错
选择题(3)
1、以下叙述中正确的是:
A. C程序中的注释只能出现在程序的开始位置和语句的后面
B. C程序书写格式严格,要求一行内只能写一个语句
C. C程序书写格式自由,一个语句可以写在多行上
D. 用C语言编写的程序只能放在一个程序文件中
2以下叙述中正确的是:
A. C程序中的注释只能出现在程序的开始位置和语句的后面
B. C程序书写格式严格,要求一行内只能写一个语句
C. C程序书写格式自由,一个语句可以写在多行上
D. 用C语言编写的程序只能放在一个程序文件中
3以下选项中不属于字符常量的是:
A. ′C′
B. "C"
C. ′\xCC′
D. ′\072′
4设变量已正确定义并赋值,以下正确的表达式是:
A. x=y*5=x+z
B. int(15.8%5)
C. x=y+z+5,++y
D. x=25%5.0
5以下定义语句中正确的是:
A. int a=b=0;
B. char A=65+1,b=′b′;
C. float a=1,*b=&a,*c=&b;
D. double a=0.0;b=1.1;
6有以下程序段
char ch; int x;
ch=′A′; x=20;
printf("%c,%d,",ch,ch,x); printf("x=%d\n",x,ch);
已知字符a的ASCII码值为97,则执行上述程序段后输出结果是:
A. 因变量类型与格式描述符的类型不匹配输出无定值
B. 输出项与格式描述符个数不符,输出为零值或不定值
C. A,65,12x=20
D. A,65,x=20
7已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是:
A. kk>=′A′&& kk<=′Z′
B. !(kk>=′A′||kk<=′Z′)
C. (kk+32)>=′a′&&(kk+32)<=′Z′
D. isalpha(kk)&&(kk<91)
8当变量c的值不为2、4、6时,值为"真"的表达式是:
A. (c==2)||(c==4)||(c==6)
B. (c>=2&& c<=6)&&((c==3)||(c==5))
C. (c>=2&&c<=6)&&!(c%2)
D. (c>=2&& c<=6)&&(c%2!=1)
9以下不构成无限循环的语句或语句组是:
A. n=0; do{++n;}while(n<=0);
B. n=0; while(1){n++;}
C. n=10; while(n);{n--;}
D. for(n=0,i=1; ;i++)n+=i;
10以下错误的定义语句是:
A. int x[][3]={{0},{1},{1,2,3}};
B. int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C. int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D. int x[][3]={1,2,3,4};
11设有如下程序段
char s[20]="Beijing",*p;
p=s;
则执行p=s;语句后,以下叙述正确的是:
A. 可以用*p表示s[0]
B. s数组中元素的个数和p所指字符串长度相等
C. s和p都是指针变量
D. )数组s中的内容和指针变量p中的内容相同
12若有定义:int x[4][5];,以下选项中对x数组元素正确引用的是:
A. x[4][0]
B. x[3][5]
C. x[4][4]
D. x[2>4][!3]
13有定义语句:char str[10];,若要从终端给str输入8个字符,错误的输入语句是:
A. gets(&s[0]);
B. scanf("%s",s+1);
C. gets(s);
D. scanf("%s",s[1]);
14以下叙述中错误的是:
A. 在程序中凡是以"#"开始的语句行都是预处理命令行
B. 预处理命令行的最后不能以分号表示结束
C. #define MAX是合法的宏定义命令行
D. C程序对预处理命令行的处理是在程序执行的过程中进行的
15以下结构体类型说明和变量定义中正确的是
A. typedef strct
{int n; char c;}REC;
REC t1,t2;
B. typedef strct
{int n; char c;};
REC t1,t2;
C. strct
{int n; char c;}REC;
REC t1,t2;
D. typedef strct REC;
{int n=0; char c;}t1,t2;
16以下叙述中错误的是:
A. gets函数用于从终端读入字符串
B. getchar函数用于从磁盘文件读入字符
C. fputs函数用于把字符串输出到文件
D. fwrite函数用于以二进制形式输出数据到文件
17变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。
若要求将a的高4位取反,低4位不变,所要执行的运算是:
A. a^b
B. a|b
C. a&b
D. a<<4
18在C语言中,只有在使用时才占用内存单元的变量,其存储类型是:
A. extern和register
B. auto和register
C. auto和static
D. static和register
19设有定义语句int (*f)(float, int);,则以下叙述正确的是:
A. f是基类型为int的指针变量
B. f是指向函数的指针变量,该函数具有一个float和一个int类型的形参
C. f是指向int类型一维数组的指针变量
D. f是函数名,该函数的返回值是基类型为int类型的地址
判断题(1)
1.C语言允许访问变量的地址。
2.下面程序段的输出结果是9。
int a=9;
printf(“%o\n”,a);
3.使用putchar函数可以向终端输出一个字符串。
4.条件运算符的结合方向为“自左而右”。
5.C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况。
6.数组必须先定义,然后使用。
c语言只能逐个引用数组元素而不能一次引用整个数组。
7.不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。
8.设已经定义了指针变量*p,且p指向变量a(即p=&a),则*p与a的含义相同。
9.定义结构体类型后,系统会为之分配实际内存单元。
(只有在定义了结构体变量后,系统才会分配内存单元)
10.在缓冲文件系统中,每个被使用的文件都要在内存中开辟一FILE类型的存储区,存放文件的有关信息。
判断题(2)
1‘好’是合法的字符常量。
2假设有float x=3;则x%2的值为1.
3if(10<=x && x<=20) y=2*x+1; 是合法的语句。
4在c程序中,else子句可以单独使用
5do…while语句循环体至少执行一次。
6二维数组可以这样定义:int a[3 4];
7在C语言中,case可以单独出现。
8函数可以嵌套定义。
9break可以退出函数。
10用"w"方式可以打开一个并不存在的文本文件。
填空题(1)
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出到文件中。
函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 blank1.c 中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, STU n)
{ int p,m;
FILE *fp;
p=sizeof(STU);
m=p*(-1L);
/**********found**********/
fp = fopen(_(1)_, "rb+");
/**********found**********/
fseek(_(2)_, m, SEEK_END);
/**********found**********/
fwrite(&n, sizeof(STU), 1, _(3)_);
fclose(fp);
}
main()
{ STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, {10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("\nThe original data :\n\n");
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
fun("student.dat", n);
printf("\nThe data after modifing :\n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
}
填空题(2)
给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000
移动后的输出为:30 6 17 15 26 46 32 40 45 48
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double *x)
{ int i, j; double av, y[N];
av=0;
/********************found********************/
for(i=0; i<N; i++) av +=_(1)_;
for(i=j=0; i<N; i++)
if( x[i]<av ){
/********************found********************/
y[j]=x[i]; x[i]=-1; _(2)_;}
i=0;
while(i<N)
{ if( x[i]!= -1 ) y[j++]=x[i];
/********************found********************/
_(3)_;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
main()
{ int i; double x[N];
for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);}
printf("\n");
printf("\nThe average is: %f\n",fun(x));
printf("\nThe result :\n",fun(x));
for(i=0; i<N; i++) printf("%5.0f ",x[i]);
printf("\n");
}
填空题(3)
用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有
倍数;依此类推,直到所找的下一个数等于n为止。
这样会得到一个序列: 2,3,5,7,11,13,17,19,23,
……
函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int fun(int n)
{ int a[10000], i,j, count=0;
for (i=2; i<=n; i++) a[i] = i;
i = 2;
while (i<n) {
/********************found********************/
for (j=a[i]*2; j<=n; j+=_(1)_)
a[j] = 0;
i++;
/********************found********************/
while (_(2)_==0)
i++;
}
printf("\nThe prime number between 2 to %d\n", n);
for (i=2; i<=n; i++)
/********************found********************/
if (a[i]!=_(3)_)
{ count++; printf( "count%5d:%5d\n",i,a[i]); }
return count;
}
main()
{ int n=20, r;
r = fun(n);
printf("\nThe number of prime is : %d\n", r);
}
填空题(4)
程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。
函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
struct student {
long sno;
char name[10];
float score[3];
};
void fun(struct student a[], int n)
{
/********************found********************/
int _(1)_;
int i, j;
/********************found********************/
for (i=0; i<_(2)_; i++)
for (j=i+1; j<n; j++)
/********************found********************/
if (strcmp(_(3)_) > 0)
{ t = a[i]; a[i] = a[j]; a[j] = t; }
}
main()
{ struct student s[4]={{10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78}, {10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}};
int i, j;
printf("\n\nThe original data :\n\n");
for (j=0; j<4; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]);
printf("\n");
}
fun(s, 4);
printf("\n\nThe data after sorting :\n\n");
for (j=0; j<4; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]);
printf("\n");
}
}
填空题(5)
函数fun的功能是进行数字字符转换。
若形参ch中是数字字符'0'~'9', 则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符则保持不变;并将转换后的结果作为函数值返回。
#include <stdio.h>
/********************found********************/
_(1)_fun(char ch)
{
/********************found********************/
if (ch>='0' && _(2)_)
/********************found********************/
return '9'- (ch-_(3)_);
return ch ;
}
main()
{ char c1, c2;
printf("\nThe result :\n");
c1='2'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
填空题(6)
给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是"幻方",若是,函数返回值为1;不是,函数返回值为0。
"幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如,以下3×3的矩阵就是一个"幻方":
4 9 2
3 5 7
8 1 6
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 3
int fun(int (*a)[N])
{ int i,j,m1,m2,row,colum;
m1=m2=0;
for(i=0; i<N; i++)
{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }
if(m1!=m2) return 0;
for(i=0; i<N; i++) {
/********************found********************/
row=colum= _(1)_;
for(j=0; j<N; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
/********************found********************/
if( (row!=colum) _(2)_ (row!=m1) ) return 0;
}
/********************found********************/
return _(3)_;
}
main()
{ int x[N][N],i,j;
printf("Enter number for array:\n");
for(i=0; i<N; i++)
for(j=0; j<N; j++) scanf("%d",&x[i][j]);
printf("Array:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%3d",x[i][j]);
printf("\n");
}
if(fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
}
填空题(7)
给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9以下数字字符。
例如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 blank1.c 中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 9
long ctod( char *s )
{ long d=0;
while(*s)
if(isdigit( *s)) {
/**********found**********/
d=d*10+*s-_(1)_;
/**********found**********/
_(2)_; }
return d;
}
long fun( char *a, char *b )
{
/**********found**********/
return _(3)_;
}
main()
{ char s1[N],s2[N];
do
{ printf("Input string s1 : "); gets(s1); }
while( strlen(s1)>N );
do
{ printf("Input string s2 : "); gets(s2); }
while( strlen(s2)>N );
printf("The result is: %ld\n", fun(s1,s2) );
}
填空题(8)(出现三次)
给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。
ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#define N 5
#define M 10
int fun(char (*ss)_(1)_, int k)
{ int i,j=0,len;
/********************found********************/
for(i=0; i<10 ; i++)
{ len=strlen(ss[i]);
/********************found********************/
if(len<= _(2)_)
/********************found********************/
strcpy(ss_(3)_,ss[i] );}
return j; }
main()
{ char x[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};
int i,f;
printf("\nThe original string\n\n");
for(i=0;i<N;i++)puts(x[i]); printf("\n");
f=fun(x,7);
printf("The string witch length is less than or equal to 7 :\n");
for(i=0; i<f; i++) puts(x[i]);printf("\n");
}
填空题(9)
给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。
ss所指字符串数组中共有M个字符串,且串长<N。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 blank1.c 中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
int fun(char (*ss)[N], int *n)
{ int i, k=0, len= N;
/**********found**********/
for(i=0; i<_(1)_; i++)
{ len=strlen(ss[i]);
if(i==0) *n=len;
/**********found**********/
if(len _(2)_ *n)
{ *n=len;
k=i;
}
}
/**********found**********/
return(_(3)_);
}
main()
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};
int n,k,i;
printf("\nThe original strings are :\n");
for(i=0;i<M;i++)puts(ss[i]);
k=fun(ss,&n);
printf("\nThe length of shortest string is : %d\n",n);
printf("\nThe shortest string is : %s\n",ss[k]);
}
填空题(10)
程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。
函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
struct student {
long sno;
char name[10];
float score[3];
};
void fun(struct student a[], int n)
{
/********************found********************/
struct student_(1)_;
int i, j;
/********************found********************/
for (i=0; i<_(2)_; i++)
for (j=i+1; j<n; j++)
/********************found********************/
if (strcmp(_(3)_) > 0)
{ t = a[i]; a[i] = a[j]; a[j] = t; }
}
main()
{ struct student s[4]={{10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78}, {10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}};
int i, j;
printf("\n\nThe original data :\n\n");
for (j=0; j<4; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]);
printf("\n");
}
fun(s, 4);
printf("\n\nThe data after sorting :\n\n");
for (j=0; j<4; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name);
for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]);
printf("\n");
}
}
改错题(1)
给定程序modi1.c中函数fun的功能是:将s所指字符串中出现的、t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。
在此处,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为:"abcdabfab",t1所指子串中的内容为:"ab",t2所指子串中的内容为:"99"时,结果,在w所指的数组中的内容应:"99cd99f99"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构
#include <conio.h>
#include <stdio.h>
#include <string.h>
int fun (char *s, char *t1, char *t2 , char *w)
{
int i; char *p , *r, *a;
strcpy( w, s );
while ( *w )
{ p = w; r = t1;
/************found************/
while ( r )
if ( *r == *p ) { r++; p++; }
else break;
if ( *r == '\0' )
{ a = w; r = t2;
/************found************/
while ( *r ){ *a == *r; a++; r++; }
w += strlen(t2) ;
}
else w++;
}
}
main()
{
char s[100], t1[100], t2[100], w[100];
system("cls");
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) ) {
fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("Error : strlen(t1) != strlen(t2)\n");
}
改错题(2)
给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符, 形成新的字符串, 并取代原字符串。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意:不要改动main函数, 不得增行或删行, 也不得#include <stdio.h>
void fun(char *s)
{ int i,j;
for(i=0,j=0; s[i]!='\0'; i++)
if(s[i]>='0' && s[i]<='9')
/********************found********************/
s[j]=s[i];
/********************found********************/
s[j]="\0";
}
main()
{ char item[80];
printf("\nEnter a string : ");gets(item);
printf("\n\nThe string is : \"%s\"\n",item);
fun(item);
printf("\n\nThe string of changing is : \
"%s\"\n",item );
改错题(3)
给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。
例如,若输入:I am a student to take the examination.,
则应输出:I Am A Student To Take The Examination.。
请改正程序中的错误,使程序能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构
#include <ctype.h>
#include <string.h>
/********************found********************/
#include <stdio.h>
/********************found********************/
int upfst ( char p ) ;
{ int k=0;
for ( ; *p; p++ )
if ( k )
{ if ( *p == ' ' ) k = 0; }
else if ( *p != ' ' )
{ k = 1; *p = toupper( *p ); }
}
main( )
{ char chrstr[81];
printf( "\nPlease enter an English text line: " ); gets( chrstr );
printf( "\n\nBefore changing:\n %s", chrstr );
upfst( chrstr );
printf( "\nAfter changing:\n %s\n", chrstr );
}
改错题(4)
给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t 中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:8642。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun (long s, long *t)。