C语言模拟考试错题集3(个人)
C语言模拟试卷3

C语言模拟试卷3 一、基本题(30分,每小题3分) (1)(填空)试写出以下数学式的C语言表达式。
(2)(多选)以下变量命名中,哪些是合法的? A. I B. long C. INT D. 6K E. K6 F. xY_0
(3)求表达式 (int)5.5/(float)2 的值。 A. 3 B. 2.75 C. 2.5 D. 2
(4)已知 a=b=c=0;则语句x=(a=100)&&(b=0)&&(c=200);运行后,各变量的值为: A. x=0,a=100,b=0,c=200 B. x=1,a=100,b=0,c=0 C. x=0,a=100,b=0,c=0 D. x=0,a=0,b=0,c=0
(5)已知变量 float x=1.2, y=-23.41; int z=345; 要使输出为 x=1.20,y=-23.4,z=345(中间无空格) 则应使用语句 printf( “____”, x, y, z ); A. %4.2f,%6.1f,%5d B. %4.2f,%5.1f,%5d C. %4.2f,%5.1f,%2d D. %4.1f,%5.1f,%2d
(6)已知有语句 scanf(“%d%d”,&a,&b); 要使整型变量 a = 6, b = 8 运行时,屏幕上应输入: A. a=6,b=8 B. a=6 b=8 C. 6,8 D. 6 8
(7)已知变量 int a = -1;则 printf(“%d,%u,%x,%o”,a,a,a,a); 的输出为:
aacb242A. –1,-1,-1,-1 B. –1,65535,-1,-1 C. –1,65535,ffff,177777 D. –1,65535,-ffff,-177777
(8)表达式 (11 ^ 5) 的结果为: A. 15 B. 1 C. 14 D. 8
(9)(填空)试写出逻辑判断“条件x的值大于100和y的值小于100,要么同时成立要么同时不成立”对应的C表达式。
c语言易错题目及其解析

c语言易错题目及其解析答:死循环是指程序进入一个无限循环的状态,无法正常结束。
造成死循环的情况可能包括以下几种:- 循环条件永远为真,如while(1)- 循环变量未被改变,导致循环一直执行同一次- 函数调用自身,形成递归调用但没有递归结束条件- 程序逻辑出现错误,导致循环无法正常退出2. 下面代码的输出结果是什么?```cint a = 1;if(a++ == 1)printf('a=%d', a);elseprintf('a=%d', ++a);```答:输出结果为a=2。
这是因为if语句中的条件表达式使用了后自增运算符,会先用变量a的值进行比较,再将a的值加1。
因此,if语句中的条件表达式为假,else语句执行,a的值先加1再输出。
3. 下面代码的输出结果是什么?```cchar str[] = 'abc';printf('%s', str);```答:输出结果为abc。
这是因为printf函数的%s格式化符号可以输出一个字符串,而在C语言中,字符数组也可以看作是一个字符串。
4. 下面代码的输出结果是什么?```cint a = 3, b = 4;printf('%d', a+b);printf('%d', 'a+b');```答:第一行输出结果为7,第二行会出现编译错误。
这是因为第二行使用了双引号将a+b括起来,使其变成了一个字符串常量,而printf函数的%d格式化符号无法输出字符串。
5. 下面代码的输出结果是什么?```cint a = 10;float b = 3.1415;printf('%f', a/b);```答:输出结果为3.183099。
这是因为当进行算术运算时,如果参与运算的类型不同,C语言会进行自动类型转换。
在这个例子中,整型的a被强制转换成了浮点型,然后与浮点型的b进行了除法运算,得到的结果为浮点型。
国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)题型有:1. 选择题选择题1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。
A.可用S定义结构体变量B.可用T定义结构体变量C.S是struet类型的变量D.T是struet S类型的变量正确答案:B解析:本题考查typedef重新声明一种结构体类型。
那么T为结构体类型,而不是结构体变量,所以B选项正确。
知识模块:结构体和共用体2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。
A.CIN是struet TT类型的变量B.TT是struet类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量正确答案:D解析:本题考查typedef重新声明一种结构体类型。
其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。
知识模块:结构体和共用体3.下列叙述中错误的是( )。
A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名正确答案:B解析:本题考查typedef的用法。
typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
知识模块:结构体和共用体4.有以下程序:#include<stdio.h>main( ){struet STU{char name[9];char sex;double score[2];};struet STU a={“Zhao”,’m’,85.0,90,0},b={“Qian”,’f’,95.0,92.0};b=a;prinff(“%s,%c,%2.0f,%2.0f\n”,b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。
c语言 经典易错题

c语言经典易错题在学习C语言的过程中,我们经常会遇到一些经典的易错题。
这些题目看似简单,但往往会隐藏一些陷阱。
下面我将介绍一些常见的C 语言易错题,并通过详细的解析帮助大家更好地理解和掌握。
题目一:```c#include <stdio.h>int main() {int a = 5, b = 3;a = b++;printf("a=%d, b=%d\n", a, b);return 0;}```在上面的代码中,我们定义了两个变量a和b,并且使用后置递增操作符将b赋值给a。
最后通过printf函数打印出a和b的值。
请问,代码执行后a和b的值分别是多少?解析:在执行 `a = b++` 这一行代码时,先将 `b` 的值赋给 `a`,然后再将`b` 自身进行自增操作。
`b++` 的返回值是原始的 `b` 的值,在本例中即为 `3`。
所以执行完这一行代码后,`a` 的值为 `3`,`b` 的值为 `4`。
因此,最后打印出的结果是 `a=3, b=4`。
题目二:```c#include <stdio.h>int main() {int a = 5, b = 3;a = ++b;printf("a=%d, b=%d\n", a, b);return 0;}```与题目一类似,下面的这段代码中我们只是将递增操作符从后置变为前置。
请问,代码执行后a和b的值分别是多少?解析:在执行 `a = ++b` 这一行代码时,先对 `b` 进行自增操作,然后再将自增后的 `b` 的值赋给 `a`。
`++b` 的返回值就是自增后的 `b` 的值,在本例中即为 `4`。
所以执行完这一行代码后,`a` 的值为 `4`,`b` 的值也为 `4`。
因此,最后打印出的结果是 `a=4, b=4`。
题目三:```c#include <stdio.h>int main() {int a = 5, b = 3;int c = a++ + ++b;printf("a=%d, b=%d, c=%d\n", a, b, c);return 0;}```在上面的代码中,我们定义了三个变量a、b和c,并使用了后置递增和前置递增操作符。
c语言面试找错题

c语言面试找错题C语言面试中经常会出现找错题,考察面试者在代码中找出错误的能力。
下面给出一些常见的C语言找错题,供大家练习。
题目1:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum = a + b;printf("The sum of a and b is: %d\n", sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码没有错误。
题目2:```c#include <stdio.h>int main() {int a = 10;int b = 20;printf("The sum of a and b is: %d\n", a, b);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的使用。
`printf`函数的第一个参数是一个格式化字符串,后续参数是格式化字符串中使用的参数。
在上述代码中,格式化字符串中只有一个`%d`,但是后续提供了两个参数`a`和`b`。
正确的写法应该是`printf("The sum of a and b is: %d\n", sum);`。
题目3:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum;sum = a + b;printf(“The sum of a and b is: %d\n”, sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的格式化字符串中使用的双引号是中文引号,而不是英文引号。
C语言中使用的是英文引号,因此应该修改为`printf("The sum of a and b is: %d\n", sum);`。
C语言改错题-含答案

第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*sl] = "0";}main(){char s[100], t[100];printf("\nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %s\n", t);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功能:求出以下分数序列的前n项之和。
和值通过函数值返回main 函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>/**********FOUND**********/fun ( int n ){int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k <= n; k++ ){/**********FOUND**********/s = (double)a / b;c = a;a = a + b;b = c;}/**********FOUND**********/return c;}main( ){int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}答案:1). double fun(int n)2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或s=s+a/(double)b;3). return s;第3题【程序改错】功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。
c语言改错题题库及详解答案
c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。
然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。
下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。
为了修复这个错误,我们应该在声明变量时对其进行初始化。
```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。
访问数组的第6个元素会导致越界错误。
```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。
```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
C语言易错题集(选择、填空)
以下各个项中,可作为C语言中合法整数的是( )。
A.10110BB.0386C.0XffaD.x2a2错解:B 错认为是十进制整形数据,开头为0,后面无意义。
整形常量:十进制 +(-)0—9八进制 +(-)O 0—7十六进制 +(-)OX 0—f或OX 0—F在输出是不会输出前导符。
下列定义变量的语句中错误的是()A.int _int;B.double int_;C.char For;D.float US$;正解:D 变量格式:数据类型名(整型、实型、字符型)+变量名变量名即格式字符属于标识符(符号常量名、函数名、数组名、文件名)由有效字符序列组成:字母、数字、下划线,且第一个字符不能是数字,另外C语言中大小写字母不等效。
设有定义:int a; float b; ,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876 <空格>543.0<回车>,则a和b的值分别是()A.87 和 6.00000B.876 和 543.0C.87 和 543.0D.76 和 543.0正解:%2d决定了a只能接受两位数字,所以a的值为87%2d%f是连在一起的,所以按照默认规定,输入的数据也是连续的,中间没有空格,否则会将空格作为输入的结束符来看待。
已知字符 'a' 的ASCII码为 97,执行下列语句的输出是____。
printf ("%d, %c", 'b', 'b'+1 ) ;A.98,bB.语法不合法C.98,99D.98,c正解:C.字符数据在内存中以ASCII码存储,因此字符数据和整型数据可以通用,可相互赋值。
有以下程序:main(){int m=0256, n=256;printf("%o %o\n", m, n);}运行程序后的输出结果是( )A.0256 0400B.0256 256C.256 400D.400 400错解:A. %O输出结果无前导符符号,若输出需要带上前导符,则应该为%#O,同理十六进制输出前导符为%#OX。
二级C语言笔试操作题分类模拟题3
二级C语言笔试操作题分类模拟题3一、程序填空题1、给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为1;若不是,则函数返回值为0。
“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如,以下3×3的矩阵就是一个“幻方”:4 9 23 5 78 1 6请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN 3int fun(int(*a)[N]){int i,j,m 1,m2,row,eolum;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=______;for(j=0;j<N;j++)(row+=a[i][j];colum+=a[j][i];}/************found**************/if((row!=colum)______(row!=m1))return0;}/***************found**********/return______;}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");}二、程序改错题1、下列给定程序中,函数fun的功能是:传入一个整数m,计算如下公式的值。
C语言专升本3程序改错题(3月10日终版)
计算机程序设计基础(C语言)程序改错练习题及参考答案F面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1 .求n !=1234 nmain (){ long int sum;int n,i=1;scan f(”%d”, n); printf( n ” );while(i< n){ sum=sum*i; i++;}prin tf("sum=%d",sum);}2 .求一个数组中最大值及其下标。
mai n(){ int max,j,m;int a[5];for(i=1:i<=5:i++)scanf( “ %d”,a) max=a[0];for(i=1:i<=5:i++) for(i=0:i<5:i++)if(max>a[il){ max=a[j];m=i;}printf( 下标:%d\n 最大值:%d }3 .用一个函数求两个数之和。
sum(x,y){ float z;z=x+y;return:}main (){ float a,b;int c:scan f("%f,%f", &a, &b);c=sum(a,b);prin tf("\nSum is %f",sum):}参考答案:sum=1scanf( " %d",&n);while(i<=n)prin tf("sum=%ld",sum);for(i=0;j<5;j++)scanf( “ %d",&a[i]);if(max<a[j]),i, max) : printf( 下标':%d\n 最大值float sum(float x, float y );return(z);float c;prin tf("\nSum is %f',c);4.编程计算下面分段函数,输入x,输出y:%d ” , m,max);x 1 x 0y 2x 1 0 x 103x 11 x 10main (){ int x,y;printf( a n );scanf( “ %d”,x); scanf( “ %&x);,if(x<0)y=x-1;else if(x>=0||x<=10) else if(x<=10)y=2x-1; y=2*x-1;elsey=3x-1; y=3*x-1;printf( “ y=%d ”,&y); printf( “ y=%d ”,}5. 求1+2+3+4+ main ( ){+100 , 并输出•int i, sum sum=0;i=1;while(i<=100){ sum=sum*i ; sum=sum+i ;i++ ;}printf (“}%c ” , sum ) printf( “%” , sun)i ;6. 求100~300间能被3整除的数的和。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言模拟考试错题集31下列关于栈叙述正确的是()。
A) 栈顶元素最先能被删除B) 栈顶元素最后才能被删除C) 栈底元素永远不能被删除D) 栈底元素最先被删除A 解析】栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。
栈底元素最先入栈却最后被删除。
所以选择A)。
2 下列叙述中正确的是()。
A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C) 在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D) 以上说法均不正确C 【解析】栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C)。
3 某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。
A) 3B) 4C) 6D) 7D 【解析】根据二叉树的基本性质3:在任意一棵二叉树中,多为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。
4 软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是()。
A) 学生成绩管理系统B) C语言编译程序C) UNIX 操作系统D) 数据库管理系统【解析】软件按功能可以分为:应用软件、系统软件、支撑软件。
操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。
所以B)、C)、D)都是系统软件,只有A)是应用软件。
5 下面描述中错误的是()。
A) 系统总体结构图支持软件系统的详细设计B) 软件设计是将软件需求转换为软件表示的过程C) 数据结构与数据库设计是软件设计的任务之一D) PAD图是软件详细设计的表示工具A 【解析】详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,所以A)错误。
数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。
6 一个教师可讲授多门课程,一门课程可由多个教师讲授。
则实体教师和课程间的联系是()。
A) 1:1联系B) 1:m联系C) m:1联系D) m:n联系D【解析】因为一个教师可讲授多门课程,而一门课程又能由多个老师讲授所以他们之间是多对多的关系,可以表示为m:n。
7A) 自然连接B) 并C) 交D) 差D 【解析】关系T中的元组是关系R中有而关系S中没有的元组的集合,即从关系R中除去与关系S中相同元组后得到的关系T。
所以做的是差运算。
8 定义无符号整数类为UInt,下面可以作为类UInt实例化值的是()。
A) -369B) 369C) 0.369D) 整数集合{1,2,3,4,5}B 【解析】只有B)选项369可以用无符号整数来表示和存储。
A)选项-369有负号,选项C)0.369是小数都不能用无符号整数类存储。
选项D)是一个整数集合得用数组来存储9 下列程序的输出结果是()。
main(){ double d=3.2;int x,y;x=1.2;y=(x+3.8)/5.0;printf("%d\n",d*y);}A) 3B) 3.2C) 0D) 3.07C 【解析】本题考查复合的赋值表达式。
本题中,程序先执行语句x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。
接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。
小括号内的运算过程:先将整型变量x的值1转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。
接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0,d*y的值也为0。
10 数字字符0的ASCII值为48,若有以下程序:main(){char a= '1' ,b= '2' ;printf("%c,",b++);printf("%d\n",b-a);}程序运行后的输出结果是()。
A) 3,2B) 50,2C) 2,2D) 2,50C 【解析】语句printf("%c,",b++);中b++是先返回后自增,所以执行完该语句后,输出结果是2,变量b的值为'3'。
printf("%d\n",b-a);b='3',ASCII值是51,a= 1 ,ASCII值是49,所以b-a=51-49=2。
11 有以下程序:#include <stdio.h>void f(int *p,int *q);main() { int m=1,n=2,*r=&m;f(r,&n);printf("%d,%d",m,n);}void f(int *p,int *q) {p=p+1;*q=*q+1;}程序运行后的输出结果是()。
A) 1,3B) 2,3C) 1,4D) 1,2A 【解析】在f(int *p,int *q)函数中,执行p=p+1将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,即m的地址所对应的值不变,而n的值为3。
12 阅读下面程序段,则执行后的结果为()。
#include "stdio.h"main(){ int m=4,n=2,k;k=fun(m,n);printf("%d\n",k);}fun(int m,int n){ return(m*m*m-n*n*n);}A) 64B) 8C) 56D) 0C 【解析】函数之间的数据传递。
如果没有指明函数值类型,则默认函数返回值的类型为int 型。
(感觉没有先声明,无法执行)13 以下程序的输出结果是()。
void change(int k[]){k[0]=k[5];}main(){int x[10]={1,2,3,4,5,6,7,8,9,10},n=0;while(n<=4){change(&x[n]);n++;}for(n=0;n<5;n++)printf("%d",x[n]);printf("\n");}A) 678910B) 13579C) 12345D) 62345A 【解析】change函数的功能是将数组中的第6个元素值赋给第1个元素。
第一次调用后,x[0]=x[5]=6。
第二次调用实际是以x的第2个元素作为数组首元素,所以调用结束时x[1]=x[6]=7。
后三次调用分别将x[2]、x[3]、x[4]赋值为8、9、10。
14 若有定义语句:char s[3][10],(*k)[3],*p;,则以下赋值语句正确的是()。
A) p=s;B) p=k;C) p=s[0];D) k=s;C 【解析】字符型一维指针p只能指向一个一维数组如char s[3],而不能指向二维数组的地址,所以A)错误。
p应该为字符型变量的地址,而不能为数组指针的地址,所以B)错误。
k 为数组指针,但如果想将s的地址赋给它,定义形式应为char (*k)[10]而不是char (*k)[3],所以D)错误。
15以下程序运行后的输出结果是()。
#include<stdio.h>void f(char p[][10],int n){char t[10];int i,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strcmp(p[i],p[j])>0){strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}}main(){char p[5][10]={"abc","aabdfg","abbd","dedbe","cd"};f(p,5);printf("%d\n",strlen(p[0]));}A) 2B) 4C) 6D) 3C 【解析】函数f的功能是利用冒泡排序方法,将二维字符数组的前n行进行递增排序。
注意,本题目排序时整个字符串都交换。
数组p排序后的结果为p[5][10]={"aabdfg","abbd","abc","cd","dedbe"}.所以第一行字符串的长度是6。
16 设有定义:struct{char mark[12];int num1;double num2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是()。
A) t1=t2;B) t2.num1=t1.num1;C) t2.mark=t1.mark;D) t2.num2=t1.num2;C【解析】结构体变量中的第一成员都是数组,不能直接将变量t1的成员mark数组的地址赋给另一个变量t2的成员mark数组的地址。
因为地址都是固定值,不能被赋值。
结构体可以进行整体的赋值。
17 有以下程序:#include<stdio.h>int fun(){static int x=1;x*=2;return x;}main(){int i,s=1;for(i=1;i<=3;i++) s=fun();printf("%d\n",s);}程序运行后的输出结果是()。
A) 0B) 1C) 4D) 8D 【解析】x被声明为静态变量,第一次调用fun()后,x值为2,第二次调用时直接执行x*=2,值为4,第三次调用时直接执行x*=2,值为8。
18 设有定义语句int (*f)(int);,则以下叙述正确的是()。
A) f是基类型为int的指针变量B) f是指向函数的指针变量,该函数具有一个int类型的形参C) f是指向int类型一维数组的指针变量D) f是函数名,该函数的返回值是基类型为int类型的地址B 【解析】本题考查的是指向函数的指针。
语句"int (* f)(int);"是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。