C语言程序设计题目及解答-12.doc
如有侵权,请联系网站删除,仅供学习与交流C语言程序设计题目及解答-12【精品文档】第 6 页一、判断题 (20分)1. 语句char *p = "Turbo C"的含义是将字符串赋给字符型指针变量p。2分 2. 若指针变量指向一维数组的第一个元素,将指针变量加整数3,即指针后移3个元素。 3. b是一维数组名,数组元素b1还可写成*(b+)。2分 4. 对二维数组a来说,由于a+1与*(a+1)的值相等,因此二者的含义是一样的。2分 5. 在二维数组中,行指针是指向一维数组的指针变量.2分 6. 取地址运算符&与指针运算符*的优先级相同,结合方向为自右向左。2分 7. 两个字符串中的字符个数相同时才能进行字符串大小的比较2分 8. 字符串不能用指针进行引用2分 9. char c="Very Good" 是一个合法的为字符串数组赋值的语句。2分 10. char *p="girl"的含义是定义字符型指针变量p,p的值是字符串"girl"。2分 二、选择题 (24分)1.下面程序段的运行结果是( )。 B 2分char str="ABC",*p=str;printf("%dn",*(p+3);A. 67 B. 0 C. 字符C的地址 D. 字符C 2.阅读下列程序,则执行后的结果为( )。 B 2分#include "stdio.h" int main() int c4=1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56; printf("%x,%x",c22,*(*(c+1)+1);A. 62,5 B. 3e,6 C. 56,5 D. 3E,6 3.下面程序段的运行结果是( )。 C 2分 char *s="abcde"s+=2;printf("%d",s);A. cde B. 字符c C. 字符c的地址 D. 无确定的输出结果 4.若有变量定义 int x=3,*p;,则下面语句不正确的是( )。 A 2分 A. p=&(x+1); B. p=&x; C. p=&x+1; D. p=&x, p+; 5.指针变量p1、p2类型相同,要使p2、p1指向同一变量,哪一个语句是正确的()。A 2分 A. p2=*&p1; B. p2=*p1; C. p2=&p1; D. p2=*p1 6.若有语句:char *line5;,以下叙述中正确的是( )。 A 2分 A. 定义line是一个数组,每个数组元素是一个基类型为char为指针变量。B. 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组。C. 定义line是一个指针数组,语句中的*号称为间址运算符。D. 定义line是一个指向字符型函数的指针。7.若有数组定义为int a10,i; 与ai=100 等价的赋值表达式是 B 2分 A. a+i=100 B. *(a+i)=100 C. (a+i)=100 D. &ai=100 8.定义函数int *max()的正确含义是()。 B 2分 A. 返回整型值的函数 B. 返回指向整型变量的指针 C. 返回指向函数max()的指针 D. 上面的叙述都不正确 9.若有定义“int (*ptr)(float);”,其正确的含义是()。 C 2分 A. ptr是指向一维数组的指针变量B. ptr是指向int型数据的指针变量C. ptr是指向函数的指针变量,该函数有一个float型参数,返回值是整型D. ptr是一个函数名,该函数的返回值是指向int型数据的指针10.若有定义char a15="ab110cd'ne"则strlen(a)返回值和sizeof(a)的返回值分别为()。 C 2分 A. 11,15 B. 17,11 C. 10,15 D. 18,11 11.若有定义char a15="ab110cd'ne"则strlen(a+5)返回至为()。 D 2分 A. 8 B. 10 C. 17 D. 5 12.char s="a128btcdxdgn"则数组s的字符串长度为()。 C 2分 A. 12 B. 10 C. 11 D. 18 三、程序填空题 (26分)1. 功能:建立一个如下的二维数组,并按以下格式输出。 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 10分 #include <stdio.h>int main() int a55=0,*p5,i,j; for(i=0;i<5;i+) pi=_(1)_; for(i=0;i<5;i+) *( _(2)_ +i)=1; *(pi+5-( _(3)_ )=1; for(i=0;i<5;i+) for(j=0;j<5;j+)printf("%2d",pij); putchar('n'); (1)答案 4分 &ai0 (2)答案 3分 pi (3)答案 3分 i+1 2. 输入一个星期几的数值(0-6),输出该星期几的英文名 8分 #include <stdio.h>void week(int no) char *w="Sunday","Monday","Tuesday.","Wednesday","Thursday","Friday","Saturday" if(no>=0&&no<=6)puts(_(1)_); elseprintf("星期数值输入错误n");void main() int w; scanf("%d",&w); _(2)_;(1)答案 4分 wno (2)答案 4分 week(w) 3. 功能:输入3个字符串,输出最大字符串。 8分 #include<stdio.h>#include<string.h>void main() char s80,_(1)_; int i; scanf("%s",s); strcpy(max,_(2)_); for(i=1;i<=2;i+) scanf("%s",s); if(strcmp(_(3)_,s)<0)strcpy(max,s); printf("%sn",max); (1)答案 3分 max80 (2)答案 3分 s (3)答案 2分 max 四、程序设计题 (30分)1. 输入10个数,按绝对值从小到大排序后输出,要求定义一个函数sort,完成绝对值从小到大排序。(用指针完成) 10分 题目描述输入10个数,按绝对值从小到大排序后输出,要求定义一个函数sort,完成绝对值从小到大排序。(用指针完成) 输入描述输入10个数 输出描述按绝对值从小到大排序 样例输入3 5 7 2 1 -15 3 8 9 4 样例输出1 2 3 3 4 5 7 8 9 -15 #include <stdio.h>#include <math.h>void sort ( float *p, int n )int i,j;float *q, temp;/选择法排序 for (i=0;i<n-1;i+) q=p+i;for(j=i+1;j<n;j+) if(fabs(*(p+j)<fabs(*q)q=p+j;temp=*q;*q=*(p+i);*(p+i)=temp;void main()float a10,*p;int i;for(p=a,i=0;i<10;i+)scanf("%f",p+);p=a;sort( p, 10 );for(i=0;i<10;i+,p+)printf("%.0f ",*p);2. 输入n和x, n和x分别表示对数组前n个元素赋初值为x,要求定义一个函数value,完成对一维整形数组的n个元素进行赋值,具体赋值为x. 10分 题目描述输入n和x, n和x分别表示对数组前n个元素赋初值为x,要求定义一个函数value,完成对一维整形数组的n个元素进行赋值,具体赋值为x.(要求用指针实现) 输入描述输入n和x 输出描述输出一维数组的前n个元素的值 样例输入5 1 样例输出1 1 1 1 1 #include <stdio.h>void value ( int *p, int n, int x )int i;for ( i=0; i<n; i+ )*( p+i )=x;void main()int a100, n, x, i;scanf( "%d%d", &n, &x );value ( a, n, x );for ( i=0; i<n; i+ )printf( "%d ", ai );3. 字符串连接 10分 题目描述分别输入两个字符串保存在两个字符数组中,将其中较小的一个字符串连接到较大的字符串后面,然后输出连接后的字符串。 输入描述输入两个字符串 输出描述输出连接后的字符串,其中较小的连接在较大的字符串后面。 样例输入appleorange 样例输出orangeapple #include <string.h>#include <stdio.h>void main() char str180, str280; gets(str1); gets(str2); if(strcmp(str1, str2)>0) strcat(str1,str2); puts(str1); else strcat(str2,str1); puts(str2);