C语言等级考试模拟试题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int d,n,sum; int fun(int d, int n); printf("请输入d和n的值:\n");
printf("d="); scanf("%d",&d);
printf("\n"); printf("n="); scanf("%d",&n); printf("\n"); sum=fun(d,n); printf("sum=%d+%d%d+%d%d%d+…… +%d……%d=%d\n",d,d,d,d,d,d,d,d,sum); }
int id ; struct node *next; } *head,*p; 如下图所示:指针p指向一个新结点,将新结点插入到链表成为头结点的两条C语言 语句是【pnext=head;head=p;】
head 7
2
9
p
9
7、设有说明语句:int x=3, y=2; 则计算表达式(x=5) || (y=6*x) 后变量y的值是2
for(n=2;n*n<=p;n++) if(p%n==0) return 0 ;
return 1; } main() { int n=1,p;
do { p=n*n+n+41;
if(!fun(p)) break; printf(“%d是素数 \n”,p); }while(n++); printf(“%d=%d*%d+%d+41不是素数 \n”,p,n,n,n);
}
for(j=0;j<N;j++) printf("%4d",*(a+j));
/*输出交换后的元素*/
printf("\n");
}
2、有人说,满足公式 p=n*n+n+41 (n是正整数)的p一定是素数,下列程序验证 这个说法是错误的。
#include <stdio.h> int fun(int p) { int n;
3、若有定义:int i,j,*pi=&i; 则与i==j等价的比较表达式是*pi==j
4、程序段:int num=0;
while(num<=2) printf(“%d ,”,num++); 的运行结果是0 ,1 ,2 ,
5、若用数组名作为函数调用时的实参,则实际上传递给形参的是数组的首地址
6、若已定义: int x; 则表达式 ((x=4*5,x*5),x+25) 的值是45。
main()
{ int i,j,t;
for(i=0;i<N;i++) printf("%4d",*(a+i));
/*输出交换前的元素*/
printf("\n");
for(i=0;i<N/2;i++)
{ j=N-1-i;
/*需要交换的元素下标*/
t=*(a+i); *(a+i)=*(a+j);
*(a+j)=t;
while (a[i]<=10) { printf(“%d ”, a[i]);
i++; } } main() { int a[]={8,4,10,11,9,20}; f(a+1); }
5、设有说明语句:int a=13, b=6; 则a/b的十进制数值为2
6、假定建立了以下链表结构:struct node{
原程序(见C:\KS\E_3_2.c)】
#include<stdio.h>
long stol( char *s)
{long number=0;
while(*s!='\0')
{ if(*s>='0' && *s<='9') /*modified*/
number=number*10+*s-'0' ;
s++;
7、若有说明:int a[3][4],s; ,则对数组a的元素引用错误的是____________
8、下列C语言的标识符中,合法的标识符为____________
9、若x是int类型变量,y是float类型变量,则为了将数据55和55.5分别赋给x和y,则 执行语句: scanf(“x=%d, y=%f”,&x,&y,); 时,正确的键盘输入是x=55, y=55.5。
一、选择题 1、若有说明语句:int x=10,y=20,z=30; 则执行语句:if(x>y) z=x; x=y; y=z; printf(“%d,%d,%d”,x,y,z); 30,30
后,输出是20,
2、若有以下语句:char x=3,y=6,z; 则z的二进制值是00001010
z=y^x<<2;
}
} 2. 程序调试题2(E_3_2.C)
调试要求:下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增
加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加
/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括E_3_2.c文
件和E_3_2.exe文件)保存到C:\KS\目录中。
10、若有定义:struct person{
int id ; char name[20]; } per,*s=&per; 则以下对结构体成员的引用中错误的是____________
二、填空题 1、下列程序的输出结果是6
long fib(int g) { switch(g){
case 0: return(0); case 1: case 2: return(2); } return ( fib(g-1) + fib(g-2) ); }
例如三个源文件 f1.txt ,f2.txt, 每个文件的内容分别如下
文件名 内容
f1
aaa$aa
f2
bbb$bb
则产生一个新的目标文件fall.txt,包括f1,f2三个文件字符'$'之前的内容,fall的内容
为aaabbb。
#include <stdio.h> #include <stdlib.h> main(){ FILE *f1, *f2,*fall; void sub(FILE *all, FILE *f1, FILE *f2);
printf(" ");
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i][j-1];
printf(" ");
printf("%-3d",a[i][j]);
} printf("\n");
/*modified*/
if ((fall=fopen("fall.txt","w"))==NULL) { printf("Cannot open file!\n"); exit(1); }
if ((f1=fopen("f1.txt","r"))==NULL || (f2=fopen("f2.txt","r"))==NULL) { printf("Cannot open file!\n"); exit(1); } else { sub(fall,f1,f2); fclose(fall);
} fclose (f1); fclose(f2); } void sub(FILE *all, FILE *f1, FILE *f2) { char c; while((c=fgetc(f1))!='$') fputc( c,all); while((c=fgetc(f2))!='$') fputc( c,all); }
1 11 121 1331 14641
原程序(见C:\KS\E_3_1.c】
#include <stdio.h>
main( )
{
static int a[9][9];
int i,j,k,n;
scanf(" %d",&n); for(i=0;i<n;i++) /*modified*/
{ for(k=0;k<18-2*i;k++)
}
3、将两个文本文件中字符'$'之前的内容合并到一个文件中去,其中函数void
sub(FILE*all, FILE*f1 ,FILE *f2 )的功能是将文件指针f1,f2所指向的文件中的内容写
到文件指针all所指向的文件中; main函数完成如下功能:先打开目标文件,再依次
打开源文件,调用sub函数完成文件内容的拷贝。
}
return number;
}
main()
{
char s[80]; gets(s); /*modified*/ printf("number=%ld",stol(s)); /*modified*/ }五. 编程题(2题,18+18=36分)
1.编程题1(E_5_1.c) 编程要求:请按题中的功能要求,编写程序并能得到正确结果。将结果(包括E_5_1.c 文件和E_5_1.exe文件)保存到目录C:\KS\中。 功能说明:函数fun求sum=d+dd+ddd+……+dd...d(n个d),其中d为1-9的数字。从主 函数中输入d和n,调用fun函数,并以sum=XXXXXXX的形式输出结果。 如输入d=3,n=4 则输出:sum=3702 #include <stdio.h> void main() {
三、程序填空题
1、下面程序的功能是:整型数组a中含N个元素,现将元素位置进行前后交换,使
第0个元素与第N-1个元素交换,第1个元素与第N-2个元素交换,以此类推,最后输
出交换后的数ቤተ መጻሕፍቲ ባይዱ元素。
#include <stdio.h>
#define N 8
int a[N]={3,8,5,15,9,7,20,6};
} for(i=0;i<=9;i++)
p[i]=&a[i]; for(i=0;i<=8;i++) {
for(j=i+1;j<=9;j++) {
if(p[i]->score<p[j]->score) {
功能说明:程序功能是输入一个字符串(少于80个字符,以回车结束),把字符串中
的数字字符(0-9)转换为整数,去掉其他字符,要求定义并调用函数long stol (char*s),s
是原字符串。假设不考虑整数数据范围超限的情况。
如输入:
3a56bc77rfasefg fg88fg↙
则输出: 3567788
int fun(int d, int n) {
int i,k=0,sum=0; for(i=1;i<=n;i++) {
k=k*10+d; sum=sum+k; } return sum; } 2.编程题2(E_5_2.c) 编程要求:请按题中的功能要求,编写程序并能得到正确结果。将结果(包括E_5_2.c 文件和E_5_2.exe文件)保存到目录C:\KS\中。 功能说明:某中学要对新入学的10名学生根据考试成绩分到两个班(class1,class2) 中,分班的方法是成绩第1名在class1班,第2名在class2班,第3名在class1班,第4 名在class2班,依次类推,…。 请编写程序,输入这10个学生的编号和成绩,输出如下格式的分班情况: Class1班:编号 成绩; 编号 成绩; … Class2班:编号 成绩; 编号 成绩; … #include <stdio.h> struct student { int num; int score; };
main() { long k;
k = fib(4); printf("k=%ld\n", k); }
2、设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2后,t 的值是1
3、如果函数不要求带回值,可用void来定义函数返回值为空.
4、下列程序的输出结果是4 10 f(int a[]) { int i=0;
四、程序调试题 (2题,4+6=10分) 1. 程序调试题1(E_3_1.c) 调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程
序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。 将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到目录C:\KS\中。 功能说明:程序功能是输入正整数n(1<=n<=9),输出n行杨辉三角形。 如:输入n=5, 则输出如下图形:
void main() {
int i,j; struct student a[10],*p[10],*temp; printf("请输入十名同学的成绩:\n"); for(i=0;i<=9;i++)
{ printf("第%d位同学的编号为:",i+1); scanf("%d",&a[i].num); printf("第%d位同学的成绩为:",i+1); scanf("%d",&a[i].score);
相关文档
最新文档