C语言第七章复习题(不含答案)

合集下载

C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

【C语言】第七章作业

【C语言】第七章作业
修改源程序,把primer函数的定义放在main函数 之后,编译程。出现什么问题?如何修改?
如果要求输出100~200之间的素数,如何修改 main函数。
3.main函数实现
int main() { int i;
printf("100~200之间的素数有:"); for(i=100;i<=200;i++) if (primer(i)) printf("%d ",i);
{ printf("请输入一个大于2的整数:"); scanf("%d",&m);
} flag=primer(m); if (flag) printf("%d是素数。\n",m); else printf("%d不是素数。\n",m); return 0; }
3.运行程序
输入测试数据:17 输入测试数据:34 输入测试数据:2 输入测试数据:1 输入测试数据:0 分别测试程序的正确性。
convert(i); }运行结果是什么?
最小公倍数=(i*j)/最大公约数
1.最大公约数函数实现
int gongyue(int i,int j) { int t,r; if (j>i)
{t=i;i=j;j=t;} while( (r=i%j)!=0) {
i=j; j=r; } return(j); }
1.最小公倍数函数实现
int gongbei(int i,int j,int h) { return(i*j/h); }
9.运行程序
输入测试数据: I am No.201002,You are No.201003! 检测程序的正确性。 正确结果: 字母个数是:13 数字个数是:12 空格个数是:4 其它字符个数是:4

C语言试题 (无答案)

C语言试题  (无答案)

C语言复习题一、选择题1. C语言中,if语句后的表达式()A.只能是关系表达式B. 只能是逻辑表达式C.只能是关系或逻辑表达式D. 可以是任何合法的表达式2 关于与switch语句配套的case语句中所使用的表达式,说法正确的是()。

A.可以是变量B. 可以是常量或变量C.只能是常量或常量表达式D.无论是何种表达式,只要在执行时有确定的值就行3.下列数组定义语句中,正确的是()A. int a[][]={1,2,3,4,5,6};B.char a[2][3]=‟a‟,‟b‟;C.int a[][3]={1,2,3,4,5,6};D.int a[][]={{1,2,3},{4,5,6}};4. 已定义int a[][3]={1,2,3,4,5,6,7,8,9};则a[1][2]的初值为()A. 2B. 4C. 6D. 85.以下正确的函数首部是()。

A. void fun(int x,int y)B. void fun(int x;int y)C. void fun(int x,y)D. void fun(x,y)6.下面语句中,:int *px = &a;其中指针变量的名字应该()A. *pzB. aC. pxD. &a7. 当调用函数时,实参时一个数组名,则向函数传递的是()A. 数组的长度B.数组的首地址C. 数组的每一个元素的地址D. 数组的每一个元素的值8.以下叙述正确的是()A. 全局变量的作用域一定比局部变量的作用域作用范围的B. 静态static类型变量的生存期贯穿于整个程序的运行期间C. 函数的形参都属于全局变量D. 未在定义语句中赋初值的auto变量和static变量的初值都是随机值9.假设已有#define M(r)r*r,则语句printf(“%d”,M(2+3));的执行结果是()A.11B.5C.25D.410. 已知int a=12;a的地址是2200,若想使整型指针变量p指向a,赋值正确的是()A &a=2200;B *p=12;C *p=2200D p=&a;11. 以下可用作C语言用户自定义标识符的一组是()A. Void, return, ifB. printf, include, fabsC. Max, _abs, MainD. 2abc, pay$, sum-1012. 下面定义字符型变量ch的语句不正确的是()A. char ch=‟\X2A‟;B. char ch=”c”;C. char ch=65;D. char ch=NULL;13. 以下选项中,与k=n++;完全等价的语句是()A. k=n;n=n+1;B. n=n+1;k=n;C. k=++n;D. k+=n+1;14. 已定义inta[][3]={1,2,3,4,5,6,7,8,9};,则a[1][2]的初值为()A. 2B. 4C. 6D. 815. 当调用函数时,实参是一个数组名,则向函数传递的是()A. 数组的长度B. 数组的首地址C. 数组的每一个元素的地址D. 数组的每一个元素的值16. 对for(表达式1;;表达式3),可理解为()A. for(表达式1;0;表达式3)B. for(表达式1;1;表达式3)C. 语法错误D. 仅执行循环一次17. 转换说明符%x的输出形式是()。

《数据结构(C语言版 第2版)》(严蔚敏 著)第七章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第七章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第七章练习题答案第7章查找1.选择题(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()。

A.(n-1)/2B.n/2C.(n+1)/2D.n答案:C解释:总查找次数N=1+2+3+…+n=n(n+1)/2,则平均查找长度为N/n=(n+1)/2。

(2)适用于折半查找的表的存储方式及元素排列要求为()。

A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序答案:D解释:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

(3)如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用()查找法。

A.顺序查找B.折半查找C.分块查找D.哈希查找答案:C解释:分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。

由于块内是无序的,故插入和删除比较容易,无需进行大量移动。

如果线性表既要快速查找又经常动态变化,则可采用分块查找。

(4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。

若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。

A.20,70,30,50B.30,88,70,50C.20,50D.30,88,50答案:A解释:表中共10个元素,第一次取⎣(1+10)/2⎦=5,与第五个元素20比较,58大于20,再取⎣(6+10)/2⎦=8,与第八个元素70比较,依次类推再与30、50比较,最终查找失败。

(5)对22个记录的有序表作折半查找,当查找失败时,至少需要比较()次关键字。

A.3B.4C.5D.6答案:B解释:22个记录的有序表,其折半查找的判定树深度为⎣log222⎦+1=5,且该判定树不是满二叉树,即查找失败时至多比较5次,至少比较4次。

(6)折半搜索与二叉排序树的时间性能()。

C语言题库第7章宏定义与预处理√

C语言题库第7章宏定义与预处理√

第七章宏定义与预处理一.单项选择1. 以下程序的运行结果是( D )。

#include<stdio.h>#define ADD(x) x+xint main ( ){int m=1,n=2,k=3,sum ;sum = ADD(m+n)*k ;printf(“%d\n”,sum) ;return 0;}A.18B.9C.12D.102. 以下程序的运行结果是( C )。

#include<stdio.h>#define MIN(x,y) (x)>(y) ? (x) : (y)int main ( ) {int i=10, j=15 , k;k = 10*MIN(i,j);printf(“%d\n”,k);return 0;}A.15B.100C.10D.1503. 以下程序的运行结果是( A )。

#include<stdio.h>#define X 5#define Y X+1#define Z Y*X/2int main ( ) {int a=Y;printf(“%d\n”,Z);printf(“%d\n”,--a);return 0;}A.75B.125C.76D.1264. 以下程序的运行结果是( C )。

#include<stdio.h>#define DOUBLE(r) r*rint main ( ) {int x=1,y=2,t;t = DOUBLE(x+y) ;printf (“%d\n”,t); return 0;}A.7B.6C.5D.85. 在“文件包含”预处理命令形式中,当#include后面的文件名用””(双引号)括起时,寻找被包含文件的方式是( C )。

A.仅仅搜索源程序所在目录B.直接按系统设定的标准方式搜索目录C.先在源程序所在目录中搜索,再按系统设定的标准方式搜索D.仅仅搜索当前目录6. 若有定义#define N 2#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5));后,z的值为( C )。

☆C语言实验五(第七章一维数组:排序综合题)

☆C语言实验五(第七章一维数组:排序综合题)

【2008春上机编程题_C07】【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”形式、一行五个数据将满足条件的数据输出到屏幕:【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。

(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。

(参考教科书P134)(参考上机指导书P54例7.5、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k个整数从大到小排序。

排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。

”P50例7.2)【软件第七章】选择:1,下列一维数组的声明中,正确的是____(22)_____。

A. int a[];B. int n=10,a[n];C. int a[10+1]={0};D. int a[3]={1,2,3,4};5.以下程序运行后的输出结果是_____(25)___。

main(){ char a[7]="a0\0a0\0";int i,j;i=sizeof(a);j=strlen(a);printf("%d %d",i,j);}A.2 2B.7 2C.7 5D.6 28.以下声明中错误的是_____(27)_____。

C语言程序设计教程 第七章 课后习题参考答案

C语言程序设计教程 第七章 课后习题参考答案
printf("原数组为:\n");
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.下列对C语言字符数组的描述中错误的是( )。

(A)字符数组可以存放字符串 (B)字符数组中的字符串可以整体输入、输出(C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值(D)不可以用关系运算符对字符数组中的字符串进行比较2.不能把字符串:Hello!赋给数组b的语句是( )。

(A)char b[10]={'H','e','l','l','o','!'};(B)char b[10];b="Hello!";(C)char b[10];strcpy(b,"Hello!");(D)char b[10]="Hello!";3.若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;则数值为4的表达式是( )。

(A)a[g-c] (B)a[4] (C)a['d'-'c'] (D)a['d'-c]4.以下程序的输出结果是( )(A) 20 (B) 21 (C) 22 (D)23main(){ int i, k, a[10], p[3];k=5;for (i=0;i<10;i++) a[i ]=i;for (i=0;i<3;i++) p[i ]=a[i *(i+1)];for (i=0;i<3;i++) k+=p[i] *2;printf("%d\n",k);5.以下程序的输出结果是( )。

(A) 1,5,9 (B) 1,4,7 (C) 3,5,7 (D)3,6,9main(){ int i, x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++) printf("%d,",x[i][2-i]);6.下面程序运行的结果是( )。

(A) 2ba56 (B) 6521 (C) 6 (D) 62main(){ char ch[7]={“65ab21“};int i,s=0for(i=0;ch[i]>='0' && ch[i]<='9';i+=2)s=10*s+ch[i]-'0';printf("%d\n",s);}7.合法的数组定义是( )。

(A)int a[]="string"; (B)int a[5]={0,1,2,3,4,5};(C)char s[6]="string"; (D)char a[]={0,1,2,3,4,5};8.函数调用:strcat(strcpy(str1,str2),str3)的功能是( )。

(A)将串str1复制到串str2中后再连接到串str3之后(B)将串str1连接到串str2之后再复制到串str3之后(C)将串str2复制到串str1中后再将串str3连接到串str1之后(D)将串str2连接到串str1之后再将串str1复制到串str3中9.以下程序输出的结果是( )。

main(){ char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},k;for (k=1;k<3;k++)printf("%s\n",&w[k][k]);}(A)ABCD (B)ABCDFGH EFGKL IJM(C)EFG (D)FGHJK KLO10.有以下程序main(){int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf("%d",t[2-i][i]);}程序执行后的输出结果是( )。

(A)7 5 3 (B)3 5 7 (C)3 6 9 (D)7 5 111.给出以下定义:char x[ ]="abcdefg";char y[ ]={'a','b','c','d','e','f','g'};则正确的叙述为( )。

(A) 数组x和数组y等价(B) 数组x和数组y的长度相同(C) 数组x的长度大于数组y的长度(D) 数组x的长度小于数组y的长度12.以下程序的输出结果是( )。

main(){ int i,k,a[10],p[3]:k=5;for (i=0;i<10;i++) a[i]=i;for (i=0;i<3;i++) p[i]=a[i*(i+1)];for (i=0;i<3;i++) k+=p[i]*2;printf("%d\n",k);}(A) 20 (B) 21 (C) 22 (D)2313.下面能正确进行字符串赋值操作的语句是 ( )。

(A) char s[5]={"ABCDE"}; (B) char s[5]={'A','B','C','D','E'};(C) char *s;s="ABCDEF"; (D) char *s; scanf("%s",s);14.下列描述中不正确的是( )。

(A) 字符型数组中可以存放字符串(B) 可以对字符型数组进行整体输入、输出(C) 可以对整型数组进行整体输入、输出(D) 不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值15.有以下程序main(){ char p[]={'a', 'b', 'c'}, q[]="abc";printf("%d %d\n", sizeof(p),sizeof(q));};程序运行后的输出结果是( )。

(A)4 4 (B)3 3 (C)3 4 (D)4 316.以下程序的输出结果是( )。

(A)6 (B) 6789 (C) '6' (D) 789main( ){ char a[10]={'1','2','3','4','5','6','7','8','9'},*p;int i;i=8;p=a+i;printf("%s\n",p-3);}17.执行下面的程序段后,变量k中的值为 ( )。

(A) 不定值(B) 33 (C) 30 (D) 10int k=3, s[2];s[0]=k; k=s[1]*10;18.设有数组定义: char array [ ]="China"; 则数组 array所占的空间为 ( )。

(A) 4个字节 (B) 5个字节 (C) 6个字节 (D) 7个字节19.下列程序执行后的输出结果是 ( )。

(A) you&me (B) you (C) me (D) errmain(){ char arr[2][4];strcpy(arr,"you"); strcpy(arr[1],"me");arr[0][3]='&';printf("%s \n",arr);}20.以下程序的输出结果是( )main(){ int i, k, a[10], p[3];k=5;for (i=0;i<10;i++) a[i ]=i;for (i=0;i<3;i++) p[i ]=a[i *(i+1)];for (i=0;i<3;i++) k+=p[i] *2;printf("%d\n",k);}(A) 20 (B) 21 (C) 22 (D)2321.若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是( )。

(A) &t[3][2] (B) t[3] (C) t[1][0] (D) t[2]22.以下程序的输出结果是()。

(A) 20 (B) 21 (C) 22 (D)23main(){ int i, k, a[10], p[3];k=5;for (i=0;i<10;i++) a[i ]=i;for (i=0;i<3;i++) p[i ]=a[i *(i+1)];for (i=0;i<3;i++) k+=p[i] *2;printf("%d\n",k);}23.以下程序的输出结果是()。

(A) 1,5,9 (B) 1,4,7 (C) 3,5,7 (D)3,6,9main(){ int i, x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++) printf("%d,",x[i][2-i]);}24.以下程序的输出结果是()。

(A) ABCD (B) ABCD (C) EFG (D) EFGHFGH EFG JK IJKLKL IJ OMmain(){ char w[ ][10]={ "ABCD","EFGH","IJKL","MNOP"},k;for(k=1;k<3;k++) printf("%s\n",w[k]);}25.当执行下面的程序时,如果输入ABC,则输出结果是()。

(A) ABC6789 (B) ABC67 (C) 12345ABC6 (D) ABC456789#include "stdio.h"#include "string.h"main(){ char ss[10]="1,2,3,4,5";gets(ss); strcat(ss, "6789"); printf("%s\n",ss);}26.假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是()。

相关文档
最新文档