c语言试卷第四套
- 格式:docx
- 大小:27.56 KB
- 文档页数:9
2024年6月青少年软件编程C语言等级考试试卷四级真题分数:100 题数:41.人以群分(25分)。
社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。
要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。
输入:第一行给出一个正整数N(2≤N≤105)。
随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。
题目保证这些数字以及它们的和都不会超过231。
输出:按下列格式输出:,其中N1是外向型人的个数;N2是内向型人的个数;N3是两群人总活跃度之差的绝对值。
2.那就别担心了(25分)。
下图转自“英式没品笑话百科”的新浪微博——所以无论有没有遇到难题,其实都不用担心。
博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题(开玩笑的,千万别以为这是真正的逻辑自洽的定义……)。
现给定一个更为复杂的逻辑推理图,本题就请你检查从一个给定命题到另一个命题的推理是否是“逻辑自洽”的,以及存在多少种不同的推理路径。
例如上图,从“你遇到难题了吗?”到“那就别担心了”就是一种“逻辑自洽”的推理,一共有3条不同的推理路径。
输入:首先在一行中给出两个正整数N(1<N≤500)和M,分别为命题个数和推理个数。
这里我们假设命题从1到N编号。
接下来M行,每行给出一对命题之间的推理关系,即两个命题的编号S1 S2,表示可以从S1推出S2。
题目保证任意两命题之间只存在最多一种推理关系,且任一命题不能循环自证(即从该命题出发推出该命题自己)。
最后一行给出待检验的两个命题的编号A B。
输出:在一行中首先输出从A到B有多少种不同的推理路径,然后输出Yes如果推理是“逻辑自洽”的,或No如果不是。
题目保证输出数据不超过109。
3.凑零钱(25分)。
韩梅梅喜欢满宇宙到处逛街。
套题4---C语言程序设计---答案 试题四 参考答案与评分标准 一、判断对错(6分,每题1分,对:√,错:×) 1.在C语言中,可以用typedef定义一种新的类型。() 2.C语言中基本数据类型包括整型、实型、字符型。()3.不同的函数中可以使用相同的变量名。() 4.形式参数是局部变量。() 5.若有定义int *p[4];则标识符p是一个指向有四个整型元素的一维数组的指针变量。() 6. 共用体所占的内存空间大小取决于占空间最多的那个成员变量。() 二、单项选择题:(10分,每题2分) 1.判断字符串s1与字符串s2相等,应当使用:。 A) if (s1 = s2) B) if (strcmp(s1, s2)) √C) if (!strcmp(s1, s2)) D) if (strcmp(s1, s2) = 0) 2.二维数组a有m行n列,则在a[i][j]之前的元素个数为()。 A. j*n+i √ B. i*n+j C. i*n+j-1 D. i*n+j+1 3. #include #include main() { printf("%d\n", strlen("IBM\n012\t\"\\\0")); } 则程序运行后的输出结果是。 √A) 10 B) 11 C) 16 D) 12 4.有如下程序片段: int i = 0; while(i++ <= 2); printf("%d", i); 则正确的执行结果是: A) 2B) 3 √C) 4D) 程序陷入死循环 5. 下面哪个定义是合法的。 A) char a[8] = "language"; B) int a[5] = {0,1,2,3,4,5}; √C) char *a = "string"; D) int a[2][] = {0,1,2,3,4,5,6}; 三、 1. #include main( ) { int a = 5, b = 4, x, y; x = 2 * a++ ; printf("a=%d, x=%d\n", a, x); y = --b * 2 ; printf("b=%d, y=%d\n", b, y); } 则程序运行结果是: a=6, x=10 b=3, y=6 2. #include void fun1(int x) { x=20; } void fun2(int b[4]) { int j; for(j=0; j<4; j++) { b[j]=j; } } main() { int x = 10; int a[4] = {1,2,3,4}, k; fun1(x); printf("x = %d\n", x); fun2(a); for(k=0; k<4; k++) { printf("%d\n", a[k]); } } 运行结果是: x = 10 1 2 3 3. #include main() { int x, y; scanf("%2d%*4s%2d", &x, &y); printf("%d", y-x); } 程序运行时输入:123456789↙ 则程序运行结果是:66 4. #include struct date { int year; int month; int day; }; void func(struct date p) { p.year = 2000; p.month = 5; p.day = 22; } main() { struct date d; d.year = 1999; d.month = 4; d.day = 23; printf("%d,%d,%d\n", d.year, d.month, d.day); func(d); printf("%d,%d,%d\n", d.year, d.month, d.day); } 程序运行结果为: 1999,4,23 1999,4,23 5. #include void Fun(int *y) { printf("*y = %d\n", *y); *y += 20; printf("*y = %d\n", *y); } main() { int x = 10; printf("x = %d\n", x); Fun(&x); printf("x = %d\n", x); } 程序运行结果是: x = 10 *y = 10 *y = 30 x = 30 四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,评分标准:每空1分,正确得1分,错误扣1分) 1.从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年: 能被4整除,但不能被100整除。 能被400整除。 #include main() { int year, flag; printf("Enter year:"); scanf("%d", &year ); if ( year%4==0&&year%100!=0 || year%400==0 ) { flag = 1; } else { flag = 0; } if ( flag ) { printf("Yes\n"); } else { printf("No\n"); } } 2. 编程判断m是否为素数。 #include #include main() { int n, flag; printf("Input n:"); scanf("%d", &n); flag = IsPrime(n); if (flag) { printf("它是素数\n"); } else { printf("它不是素数\n"); } } int IsPrime(int m) { int i, k; if (m <= 1) { return 0; } for (i=2; i<=sqrt(m); i++) { k = m % i; if (k == 0) { return 0; } } return 1 ; } 五、在下面给出的4个程序中,共有18处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(34分,每找对1个错误,加1分,每修改正确1个错误,再加1分。只要找对17个即可,多找不加分。) 1.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分开。已知:判断是否有新单词出现的方法——当前被检验字符不是空格,而前一被检验字符是空格,则表示有新单词出现。(5个错误)#include main() { int i, num, n=20; char str[n]; // char str[20]; scanf("%s", str); //gets(str); if (str[0] != ' ') { num = 1; } else { num = 0; } for (i=1; i<20; i++) //for (i=1; str[i]!=’\0’; i++) { if (str[i]!=' '|| str[i-1]==' ') //if (str[i]!=' '&& str[i-1]==' ') { num = num++; // num++; } } printf("num=%d\n", num); } 2.编写一个函数Inverse(),实现将字符数组中的字符串逆序存放的功能。(5个错误) #include #include #define ARR_SIZE = 80; //#define ARR_SIZE 80 void Inverse(char str[]) // void Inverse(char str[]); main() { char a[ARR_SIZE] ; printf("Please enter a string: "); gets(a); Inverse(char a[]); // Inverse(a); printf("The inversed string is: "); puts(a); } void Inverse(char str[]) { int len, i = 0, j; char temp; len = strlen(str); for (j=len; i<="" p=""> // for (j=len-1; i<="" p=""> { temp = str[i]; str[j] = str[i]; // str[i] = str[j]; str[j] = temp; } }
《C语言程序设计》模拟试卷四一、单项选择题(每题2分,共30分)1、下列对C语言特点的描述中,错误的是。
A)C语言不是结构化程序设计语言B)C语言编程简洁明了C)C语言功能较强D)C语言移植性好2、设变量a是整型,b是实型,c是双精度型,则表达式2+‘ a ’+b*c值的数据类型。
A)int B)float C)double D)不确定3、在a=2,b=0,c;则执行c=b||a--;语句后,a和c的结果是。
A)0,1 B)1,0 C)1,1 D)2,04、在scanf()函数的给是说明符中,长整型数的输入格式说明符是。
A)%d B)%ld C)%lf D)%x5、以下程序的执行结果是。
main(){ int n=1;printf(“%d,%d,%d”,n,++n,n--); }A)1,1,1 B)1,2,1 C)0,1,1 D)1,2,26、判断char型变量ch是否为大写字母的正确表达式是。
A)‘A’<=ch<=‘Z’B)(ch>=‘A’)&(ch<=‘Z’)C)(‘A’<=ch)AND(‘Z’>=ch)D)(ch>=‘A’)&&(ch<=‘Z’)7、能够完成如下函数计算的程序段是。
- 1 x < 0y = 0 x = 01 x > 0A)y = - 1 ; B)if ( x > = 0 )if ( x != 0 ) if ( x > 0 ) y = 1 ;if ( x > 0 ) y = 1 ; else y = 0 ;else y = 0 ; else y = -1 ;C)y = 0 ; D)y = - 1 ;if ( x > = 0 ) if ( x > 0 ) y = 1 ;if ( x > 0 ) y = 1 ; else y = 0 ;else y = -18、下列循环语句中,执行循环体的次数是。
国家二级C语言机试(函数和数组)模拟试卷4(题后含答案及解析) 题型有:1. 选择题选择题1.若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是A.main( ){……x=fun(2,10);……}floatfun(inta,intb){……)B.floatfun(inta,intb){……)main( ){……x=fun(i,j);……)C.floatfun(int,int);main( ){……x:fun(2,10);……)floatfun(inta,intb){……)D.main( ){floatfun(inti,intj);……x=fun(i,j);……)floatfun(inta,intb){……}正确答案:A解析:C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char 时除外)。
在选项A中,调用的子函数在调用后面定义,所以不正确。
在选项B、C中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项D中,在主函数中先对子函数floatfun(inti,inti)进行了声明,然后进行调用。
知识模块:函数和数组2.有以下程序#}include<string-h>main( ){charp[20]:{‘a’,’b’,’C’,’d’),q[]=‘‘abc’’,r[]=‘‘abcde’’;strcat(p,r);strcpy(p+strlen(q),q);printf(‘‘%d\n’’,strlen(p));}程序运行后的输出结果是A.9B.11C.6D.7正确答案:C解析:字符串连接函数scrcat(*p,r)的功能是把字符数组p[]和r[]连接起来,此时字符数组p[]的有效字符长度为9,冉执行strcpy(p+strlen(q),q)字符串复制函数,把字符数组q[]复制到字符数组p[]从p[3]开始到p[5]数组位置中,由于字符数组q[]中的内容为字符串”abc”复制时把字符串结束标志’\null也复制到字符数组p[]中,这时字符函数strlen(p)返同字符数组p[]的有效字符长度为6。
一、单项选择题(本大题共20小题,每小题1分,共20分)1. 构成一个可执行的C 程序的是 A. 一个主函数和若干个非主函数 B.若干个主函数和若干个非主函数 C. 一个主函数和最多一个非主函数C.若干个主函数和最多一个非主函数2. 下面那一个是合法的C 语言标识符:( )A. abcB. longC. 4thD. a-33.用十进制数表示表达式“12|012”的运算结果是( )A. 1B. 0C. 14D. 124.以下哪一个不是C 语言合法的运算符()A. *B. &C. @D. +5. 按照结构化程序设计的概念,C 语言程序设计的基本单位是()A.过程B.函数C.子程序D.语句 6. 下面哪个表达式的值为4.()A. 11/3B. 11.0/3C. (float) 11/3D. (int) (11.0/3+0. 5) 7. 下面C 代码的输出结果是()int answer, result;answer=100;result 二answerT0;printf ( "The result is %d” , result+5); A. The result is 90 B. The result is 95 C. The result is 10 D. The result is 1008. 设x 和y 均为int 型变量,则执行下面的循环后,y 的值为() for(y=l, x=l;y<=50;y++) { if (x>=10)break;if(x%2==l){x+=5;continue;}A. 2.B. 4C. 6D. 8 9. 有如下程序,输出结果是( )main() {float x=4. 0, y; if(x<0. 0)y=0. 0;else if (x<8. 0) y=l. 0/x; else y=l. 0; printf( "%f\n" , y);11. 语句 printf ( “%d\n” , strlen( “ats \n\\g”));的输出结果是() A. 5 B. 6 C. 7 D 812. 设有定义:char s[20] = { “Good morning” };则s 所占的字节数为:A. 0. 000000B. 0. 250000 10. 合法的数组定义是() A. int a[] = { "String” };C. char a={ "String” };C. 0. 500000D. 1. 000000B. int a[5] = {0, 1, 2, 3, 4, 5}D. char a[] = {0, 1, 2, 3, 4, 5}A. 20B. 12C. 13D. 2113. C 语言规定,函数返回值的类型由什么决定()A return 语句中的表达式类型B 调用该函数吋的主调函数类型C 调用该函数时的形参类型D 在定义该函数时所指定的函数类型 14. C 语言中函数的隐含存储类型是 A. auto B. static C. extern D.无存储类型15. 以下函数的功能是交换x 和y 的值,不正确的是:16. 设有以下宏定义,则执行语句z 二2*(N+Y (5+1));后,z 的值为()^define N 3 #define Y(n)((N+l)*n)A.出错B. 42C. 48D. 54 17. 以下程序的输出结果是()#define ADD(x) (x) + (x) mainO{ i nt a=4, b=6, c=7, d 二ADD (a+b) *c;printf( "d=%d" , d) ; }A d=70B d 二 140C d 二280D d=8018. 设有定义语句 struct {int x; int y;} d[2]二{{1,3}, {2, 7}};贝ij printf ( "%d\n”,d[0]・ y/d[O]・ x*d[l]・x);的输出是( )A. 0B. 1C. 3D. 619. 设int b[20];则对b 数组元素的错误引用是: A. b[5] B. *(b+l) C. b[20%2] D. b(5)20. 若文件型指针fp 己指向某文件的末尾,则函数feof(fp)返回值是() A. 0 B. - 1 C.非零值 D. NULL二、填空题(本大题共10小题,每小题2分,共20分)1. _________________________________________________________________________ 若自定义函数要求返回一个值,则应在该函数体中有一条 ____________________________________________ 语句,若自定义函数要求不返回值,则应该在定义该函数时的返回类型是 ____________________ .2. 当a 二3, b 二4, c 二5时,写出下列各式的值。
C语言模拟试卷4一、基础题(30分,每小题3分)1.已知int a = 5, b = 8; 求表达式++a / 2 + b-- 的值。
2.已知in a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 求表达式*p*a[3]的值。
3.写出将实数x 的小数点后第三位四舍五入的表达式。
4.已知有职工结构体数组struct { int num; char name[20]; } per[100];请使用scanf函数写出:输入下标为i的职工的num和name的语句。
5.请写出表达式:将整数n(0≤n≤9)转化为ASCII字符。
6.请写出逻辑表达式:x大于10与y不大于10至少有一个成立。
7.写出表达式(0x1234 & 0xFF) << 8 的16进制结果。
8.请计算for ( i = 3; i <= 99; i+=5 ) 的循环次数是多少?9.请说明表达式(x%2) && !(y%3==0) 的逻辑含义。
10.请简要描述循环体中break 语句和continue 语句的主要区别。
二、改错程序(12分,每错误点3分)以下程序求 e = 1 + 1/1! + 1/2! + … + 1/n! + …的解,本程序有4个错误,请仔细阅读程序,指出所在的行号,并写出该行正确的程序内容。
(1)#include <stdio.h>(2)main()(3){(4)double e, a;(5)int n;(6) e = 0.0;(7) a = 1.0;(8)i = 1;(9)do {(10) a /= i;(11) e += a;(12)i = i + 1;(13)} while ( a<=1e-12 );(14)printf( "0.12f\n", e );(15)}三、阅读程序(24分,每小题6分)仔细阅读下列程序,写出各程序的运行结果。
国家二级(C语言)机试模拟试卷4(题后含答案及解析)题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题程序填空题(30分)1.请补充main函数,该函数的功能是求方程ax2+bx+c=0的根(方程的系数a,b,c从键盘输入)。
例如,当a=1,b=2,c=1时,方程的两个根分别是:x1=-1.00,x2=-1.00。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:#include <stdio.h>#include <conio.h>#include <math.h>main( ) { float a,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,&a,&b,&c);disc=b*b-4*a*c;clrscr( );printf(“****** the result ****+*+\n”);if(disc>=0) {x1=【】;x2=(-b-sqrt(disc))/(2*a);printf(“x1=%6.2f,x2=%6.2f\n”,x1,x2);} else { p=【】;q=【】;printf(“x1=%6.2f+%6.2f i\n”,p,q);printf(“x2=%6.2f-%6.2f i\n”,p,q);} }正确答案:(-b+sqrq(disc))/(2*a)-b/(2*a)sqrt(fabs(disc))/(2*a)解析:程序修改题(30分)2.下列给定程序中函数fun( )的功能是计算1/n!的值。
例如:给n 输入5,则输出0.0083330 请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:#include <stdio.h>#include <conio.h>/******+****found*************/ int fun(int n) {double result=1.0;if(n==0) return 1.0;while(n> 1 && n<170) /**********found************/ result *=n++;result=1/result;return result;} main( ) { int n;printf(“Input N:”);scanf(“%d”,&n);printf(“\n1/%d!=%If\n”,n,fun(n));}正确答案:(1)错误:int fun(int n) 正确:double fun(int n)(2)错误:result*=n++;正确:result*=n--;解析:错误1:函数的返回值为实型数据,所以函数的返回类型应为double。
国家二级C语言(函数)机试模拟试卷4 (总分:46.00,做题时间:90分钟) 一、 选择题(总题数:23,分数:46.00)
1.若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( )。 (分数:2.00) A.sqrt(fabs(pow(n,x)+exp(X))) √ B.sqrt(fabs(pow(n,x)+pow(x,e))) C.sqrt(abs(n^x+e^x)) D.sqrt(fabs(pow(x,n)+exp(x))) 解析:解析:B选项中函数pow(x,e)错误,应该直接使用exp(x)函数。C选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。 2.下列叙述中错误的是( )。 (分数:2.00) A.可以给指针变量赋一个整数作为地址值 √ B.函数可以返回地址值 C.改变函数形参的值,不会改变对应实参的值 D.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL值 解析:解析:不能将一个整数直接赋给指针变量作为地址,所以A选项是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。 3.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。 (分数:2.00) A.函数的形参和实参分别占用不同的存储单元 √ B.形参只是形式上的存在,不占用具体存储单元 C.同名的实参和形参占同一存储单元 D.函数的实参和其对应的形参共占同一存储单元 解析:解析:本题重点考查的是函数的形参和实参。在定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元,因此A选项正确。 4.下列叙述中错误的是( )。 (分数:2.00) A.C程序必须由一个或一个以上的函数组成 B.函数调用可以作为一个独立的语句存在 C.若函数有返回值,必须通过return语句返回 D.函数形参的值也可以传回给对应的实参 √ 解析:解析:形参是函数定义时由用户定义的形式上的变量。实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是“值传递”,因此D选项正确。 5.下列关于return语句的叙述中正确的是( )。 (分数:2.00) A.一个自定义函数中必须有一条return语句 B.一个自定义函数中可以根据不同情况设置多条return语句 √ C.定义成void类型的函数中可以有带返回值的return语句 D.没有return语句的自定义函数在执行结束时不能返回到调用处 解析:解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值,A选项描述错误。定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,D选项描述错误。因此B选项正确。 6.已定义以下函数int fun(int*p){return*p;}fun函数的返回值是( )。 (分数:2.00) A.一个整数 √ B.不确定的值 C.形参p中存放的值 D.形参P的地址值 解析:解析:返回值为指针变量指向的数据,该数据已被定义为整型,因此A选项正确。 7.下列叙述中错误的是( )。 (分数:2.00) A.用户定义的函数中可以没有return语句 B.用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 √ C.用户定义的函数中若没有return语句,则应当定义函数为void类型 D.函数的return语句中可以没有表达式 解析:解析:本题重点考查函数返回值的相关知识。函数的值只能通过return语句返回主调函数,在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为void。因此选择B选项。 8.若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,下列选项中错误的程序是( )。 (分数:2.00) A.main() {…x=fun(2,10);…} float fun(int a,int B){…} √ B.float fun(int a,int B){…} main() {…x=fun(i,j);…} C.float fun(int,int); main() {…x=fun(2,10);…} float fun(int a,int B){…} D.main()… {float fun(int i,int j);…x=fun(i,j);…} float fun(int a,int B){…} 解析:解析:在调用子函数时,应对其进行说明。A选项中,调用时没有对子函数进行说明。B、C选项中,被调用函数在主调函数之前定义,不用说明;D选项中,在主函数中对被调用函数的返回值类型进行了说明。因此选择A选项。 9.有以下程序:#include<stdio.h>void fun(int a,int b){int t;t=a:a=b;b=t;}main(){int c[10]={1,2,3,4,5,6,7,8,9,0},i;for(i=0;i<10;i+=2)fun(c[i],c[i+1]);for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");}程序的运行结果是( )。 (分数:2.00) A.0,2,3,4,5,6,7,8,9,0, √ B.2,1,4,3,6,5,8,7,0,9, C.0,9,8,7,6,5,4,3,2,1, D.0,1,2,3,4,5,6,7,8,9, 解析:解析:函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参的值不会变化,所以数组c中的元素值并没有变化,选择A选项。 10.有以下程序:#include<stdio.h>double f(double x);main(){doublea =0;int i;for(i=0;i<30;i+=10)a+=f((double)i);printf("%3.0f\n",a);}double f(double x){return x*x+1:}程序的运行结果是( )。 (分数:2.00) A.500 B.401 C.503 √ D.1404 解析:解析:本题重点考查函数的定义和调用。第一次循环,a=0,i=0,返回值a=0*0+1=1;第二次循环,a=1,i=10,返回值a=10*10+1+1=102;第三次循环,a=102,i=20,返回值a=20*20+1+102=503;第四次循环,a=503,i=30,不符合i<30,跳出循环,最后结果输出a=503。 11.有以下程序:#include<stdio.h>main(){int m=1,n=2,*p=&m,*q=&n,*r;r=p:p=q:q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序的运行结果是( )。 (分数:2.00) A.2,1,1,2 B.1,2,1,2 C.2,1,2,1 D.1,2,2,1 √ 解析:解析:int m=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针P和指针q的指向交换,因此最后输出1,2,2,1。 12.若有函数首部int fun(double x[10],int,*n),则下列针对此函数的函数声明语句中正确的是( )。 (分数:2.00) A.int fun(double,int); B.int fun(double*,int*); √ C.int fun(double*x,int n); D.int fun(double x,int*n); 解析:解析:函数声明的一般形式为:类型说明符被调函数名(类型形参,类型形参……);或为类型说明符被调函数名(类型,类型……)。由于函数首部为int fun(double x[10j,int*n),因此B选项正确。 13.有以下程序:#include<stdio.h>int f(int x);main(){int n=1,m;m=f(f(f(n)));pfinff("%d\n",m);}int f(int x){return x*2;}程序的运行结果是( )。 (分数:2.00) A.8 √ B.2 C.4 D.1 解析:解析:第一次调用m=f(f(f(1))),第二次为m=f(f(2)),第三次为m=f(4),即返回值为8。 14.有以下程序:#include<stdio.h>int fun(int x,int y){if(x!=y)return((x+y)/2);else return(x);}main(){int a=4,b=5,c=6;pfinff("%d\n",fun(2*a,fun(b,c)));}程序的运行结果是( )。 (分数:2.00) A.6 √ B.3 C.8 D.12 解析:解析:本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)的返回值为5,所以第二次调用为fun(8,5)=6,所以选择A选项。 15.有以下程序:#include<stdio.h>int f(int x,int y){return((y-x)*x);}main(){int a=3,b=4,c=5,d;d=f(f(a,b),f(a,c));pfinff("%d\n",d);}程序的运行结果是( )。 (分数:2.00) A.7 B.10 C.8 D.9 √ 解析:解析:调用f(a,b)函数返回3,调用f(a,c)函数返回6,所以外层调用f(f(a,b),f(a,c)):即调用f(3,6)函数返回9。
一、单选题(每题2分,共30分)1.以下叙述正确的是________。
A) C程序的每行只能写一条语句B) C语言本身没有输入输出语句C) 在C程序中,注释说明只能位于一条语句的后面D) 在对C程序进行编译的过程中可发现注释中的拼写错误2.下面正确的int型常量表示是________。
A)0xag B)16.700 C)089 D)0XABC3.以下C语言标识符中错误的是________。
A)_3max B)s_1_2 C)int3 D)p&sum4.以下关于C语言数据类型使用的叙述中错误的是________。
A)若要准确无误差的表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度类型C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型5.当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符),则输出结果是________。
12<CR>34<CR>void main(){ chara,b,c,d;scanf("%c%c",&a,&b);c=getchar(); d=getchar();printf("%c%c%c%c\n",a,b,c,d);}A)1234B)12 C)12 D)123 346. 设有如下程序段,则描述中正确的是______ 。
inti=5;while(i=0) i=i-1;A)while循环执行5次B) 循环是无限循环C)循环体语句一次也不执行D) 循环体语句只执行一次7.以下不正确的一组语句是________。
A)char a[10]="hello"; B)char *p="hello";C)char a[10]; a="hello"; D)char *p; p="hello";8.若有struct complex{ intreal,unreal;} data1={1,8},data2;则以下赋值语句中错误的是________。
第 1 页 共 2 页 一、单项选择题。从A、B、C、D四个选项中,选择一个最佳答案填入括号内( 每题1分,共30分)。
二、填空题(每空2分,共20分)。 题 号 1 2 3 4 5 答 案 循环 15 回车 a>b&&b>c 0 题 号 6 7 8 9 10 答 案 函数参数 数组 0,4,5,15 11,22 FILE
三、程序阅读,写出程序运行结果(每题4分,共20分) 题 号 1 2 3 4 5
答 案 a=2,b=1 -850, 2, 0 !uoy era woH 11 10,x
四、程序改错题(共2题5处错误,每正确修改一处错误得2分,共10分)。 注意:不要增行或删行,修改指定行的错误,使它能够得出正确的结果。要求写出改正后这一行正确的完整语句。 1. 1)scanf("%d", &n); 2)if(n%i==0) break; 2. 1)char *ptr1,*ptr2; 2)while(--ptr2>=ptr1) 3)putchar('\n'); 五、程序设计题(共20分) 评分总则:考虑到程序编写没有统一标准答案,若考生给出的程序完整,语法正确,能够实现具体功能,满足题目所给出的具体要求,即可得满分;若程序存在错误(包括语法错误),不能得出正确结果,由评卷教师按照步骤酌情给分,给分方法参考下列评分标准,具体由评卷教师灵活掌握。 1)源程序代码 (6分) #include "stdio.h" main() {int a,b,c,max; printf("请输入三个整数(中间用逗号分隔):"); scanf("%d,%d,%d",&a,&b,&c); ………………………………2分 max=a; if (max if (max printf("最大值是:%d\n",max); ……………………………… 1分 } 说明:若有语法错误,酌情扣分。
2)源程序代码 (7分) #include "stdio.h"
国家二级C语言机试(C语言程序设计)模拟试卷4(题后含答案及解析)题型有:1. 选择题选择题1.以下叙述中正确的是A.赋值语句是一种执行语句,必须放在函数的可执行部分B.scanf和printf是C语言提供的输入和输出语句C.由printf输出的数据都隐含左对齐D.由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的正确答案:A解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以存格式控制中的”%”和宽度之间加一个”-”号来实现,选项C错误;printf的输出精度由变量的类型决定,与域宽无关,选项D错误。
知识模块:C语言程序设计2.有如下程序段:intx=12;doubley=3.141593;printf(‘‘%d%8.6t’’,x,y);其输出结果是A.123.141593B.12,3.141593C.123.1415930D.123.142正确答案:D解析:本题考查printf语句。
printf( )函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。
在编写程序时经常会用到此函数。
printf( )函数的调用格式为:print(‘‘<格式化字符串>’’,<参量表>)。
其中,”格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符,以”%”开始,后跟一个或几个规定字符,用来确定输出内容格式。
格式化字符串的格式是:%[标志][输出最小宽度][精度][长度]格式字符①标志:标志字符为-、+、空格等,其意义如下所示:.-:结果左对齐,右边填空格;.+:输出符号(正号或负号):.空格:输出值为正时冠以空格,为负时冠以负号。
②输出最小宽度:用十进制整数来表示输出的最少位数(包括小数点在内至少要输出这么多位)。
c本科四试题及答案一、选择题(每题2分,共20分)1. 以下哪项是C语言中合法的标识符?A. 2variableB. variable2C. _variableD. variable$答案:C2. C语言中,用于定义一个整型变量的关键字是?A. intB. floatC. doubleD. char答案:A3. 下列哪个选项不是C语言中的控制结构?A. 顺序结构B. 选择结构C. 循环结构D. 函数结构答案:D4. 在C语言中,以下哪个运算符用于比较两个数是否相等?A. ==B. !=C. <=D. >=答案:A5. C语言中,以下哪个函数用于计算并返回字符串的长度?A. strcat()B. strcpy()C. strlen()D. strcmp()答案:C6. 在C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. returnD. function答案:B7. C语言中,以下哪个函数用于将一个字符串复制到另一个字符串?A. strcat()B. strcpy()C. strcmp()D. strlen()答案:B8. 在C语言中,以下哪个关键字用于声明一个函数的返回类型?A. intB. voidC. returnD. function答案:A9. C语言中,以下哪个运算符用于执行算术运算?A. %B. +C. &&D. ||答案:B10. 在C语言中,以下哪个函数用于将浮点数转换为字符串?A. sprintf()B. printf()C. scanf()D. atoi()答案:A二、填空题(每题2分,共20分)1. 在C语言中,定义一个整型变量的正确语句是___________。
答案:int variable;2. C语言中,用于输出的函数是___________。
答案:printf();3. 用于在C语言中声明一个字符型变量的关键字是___________。
若x,i,j,k 都是int型变量,则计算x=(i=4,j=16,k=i+32)后,x的值为:(D).
A.52
B.16
C.4
D.36
整型变量x=1,y=3,经下列计算后,x的值不等于6的是(D)。
A.x=y*4/2
B.x=9-(--y)-(--y)
C.x=(x=1+2,x*2)
D.x=y<2?6:5
以下程序的输出结果为(A)。
main()
{int i=010,j=10;
printf("%d,%d\n",++i,j--);
}
A.9,10
B.10,9
C.010,9
D.11,10
如下说法不正确的是(D).
A.若b为假a为真,则 a||b为真
B.若b为真a为假,则 a||b为真
C.若b为真a为真,则 b&&!a为假
D.若b为假,则!b+1为假
下列(C)表达式的值为真,其中a=5;b=8;c=10;d=0
A.(a*2-c)||d
B.a*2>8+2
C.a-b
以下能计算1×2×3×┈×10的程序段是(C).
A.do{ i=1;s=1;s=s*i;i++;}while(i>=10) ;
B.do{ i=1;s=1;s=s*i;i++;}while(i<=10) ;
C.i=1;s=1;do {s=s*i; i++; }while(i<=10) ;
D.i=1;s=1; do { s=s*i; i++;}while(i>=10) ;
以下正确的描述是(A).
A.continue语句用来终止本次循环,继续下一次循环。
B.switch语句中不能出现continue语句
C.在循环中break语句不能独立出现
D.goto语句只能用于退出多层循环
下面各语句中,能正确进行赋字符串操作的语句是(B).
A.char s1[5][ ]={"ABCDE"};
B.char s2[6]={'A','B','C','D','E'};
C.char st[ ][ ]={"ABCDE"};
D.char s[5]={'A','B','C','D','E'};
下述对C语言字符数组的描述中,错误的是(C).
A.不可以用关系运算符对字符数组中的字符串进行比较.
B.字符数组中的字符串可以整体输入、输出.
C.可以通过赋值运算符"="对字符数组整体赋值.
D.字符数组中可以存放字符串.
若有说明 int a[3][4];则对a数组元素的正确引用是(C)。
A.a[1,3]
B.a[2][4]
C.a[1+1][0]
D.a(2)(1)
程序运行结束后,屏幕上输出值为(B).
static int x=10;
f( )
{ x++;
}
main( )
{ int x=3;
f( );
x- -;
printf("%d",x);
}
A.10
B.2
C.11
D.3
C语言规定,函数返回值的类型是由(A)。
A.在定义该函数时所指定的函数类型所决定
B.return语句中的表达式类型所决定
C.调用该函数时系统临时决定
D.调用该函数时的主调函数类型所决定
若调用一个函数,且此函数中没有return语句,则正确的说法是:
该函数(B)。
A.没有返回值
B.返回一个不确定的值
C.返回若干个系统默认值
D.能返回一个用户所希望的值
设有宏定义#define PI 3.14 和#define S(r) PI*r*r,则S(2)的值为(B).
A.6.28
B.12.56
C.3.14
D.9.42
下面选择中正确的赋值语句是(设char a[5],*p=a;)(A)。
A.p="abcd";
B.a="abcd";
C.*a="abcd";
D.*p="abcd";
static struct {int a1;float a2;char a3;}a[10]={1,3.5,'A'}; 说明数组a是地址常量,它
有10个结构体型的下标变量,采用静态存
储方式,其中被初始化的下标变量是(A)。
A.a[0]
B.a[10]
C.a[1]
D.a[-1]
在C程序中,可以一次写入一组数据到指定文件中的函数是(C)。
A.fprintf
B.fread
C.fwrite
D.fputc
整型变量在可输出字符范围内,可以和字符型数据相互转化. T
putchar 函数的原型(函数说明)在 stdio.h 内. T
设i=1,j=2,k=3,则逻辑表达式!(i>j)||!k&&1的值为0. F
已知三目运算exp1?exp2:exp3的含义是先求exp1,若为0,则求解exp2,则表达式值为exp2的值,
否则是exp3的值. F
对于for(表达式1;表达式2;表达式3)语句来说,continue语句意味着转去执行表达式2. F
for循环可以用于循环次数不确定而给出循环条件的情况下. T
设有数组定义: char array[ ]="hello"; 则数组 array所占的内存空间为5字节. F
数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素. T
puts 函数用来输出一个字符. F
在一个函数中定义的静态局部变量不能被另外一个函数所调用. T
C语言中,只允许直接递归调用而不允许间接递归调用. F
数组名可作为函数的实参,但不能作为函数的形参. F
计算机编译系统对宏定义在编译时进行语法检查. F
定义 int k[ ]={1,2,3,4},y,*p=&k[1];,则执行y=(*--p)++后, y的值不是2. T
在定义结构体变量时,允许使用初始化方法对其整体赋初值. T
C语言中,在打开文件时,必须说明文件的使用方式,"w"用于文件的读写. F
若x和n均是int型变量,且x和n的初值均为5,则计算表达式 x+=n++ 后x的值为 __10___,n
的值为__6___.
设(k=a=5,b=3,a*b),则表达式的值为__15___.
若int x=6;则x+=x-=x*x表达式最后x的值是__-60___.
设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2 后,t的值是
__1___.
C语言中,数组元素的下标下限为__0___.
局部静态变量是在静态存储区分配存储单元的,在整个程序运行期间始终占__内存___的.
设有以下共用体类型说明和变量定义,在TC编译环境下,变量d在内存所占字节数是 __12___。
union stud
{ short int num;
char name[8];
float score[3];
double ave;
}d,stu[3];
feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为__非零值___。
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:将主函数中输入的字符串反序存放。
例如:输入字符串"abcdefg",则应输出"gfedcba"。
------------------------------------------------*/
#include "stdio.h"
#include "string.h"
#include "conio.h"
#define N 81
void fun(char *str,int n)
{
/*********Begin**********/
/********** End **********/
}
【参考代码】
int i,j;
char c;
for(i=0,j=n-1;i
*(str+i)=*(str+j);
*(str+j)=c;}
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:从低位开始取出长整型变量s中偶数位上的数,依次
构成一个新数放在t中。
例如:当s中的数为:7654321时,t中的数为:642。
------------------------------------------------*/
#include "stdio.h"
long fun (long s)
{
/*********Begin**********/