C语言各章习题集(4)

来源:网络收集 时间:2025-08-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2. 3. 4. 5. 6. 7. 8. 在C语言中,函数可以嵌套定义。

函数是C程序的主体,任何C程序必须有且只有一个main函数。

c语言本身没有输入输出语句,其输入、输出是通过函数调用来完成的。 c程序可由若干个源程序文件组成。

实参变量对形参变量的数据传递是“值传递”,即单向传递。

在C语言中,函数中的任何变量都可以赋初值,每调用一次该函数,就赋一次初值。 c语言中函数定义不允许嵌套,但调用可嵌套。

四. 阅读程序

1. #include int a=10; int fun(void)

{ int b=0; static int c=2; b++; c++; return a+b+c; }

main()

{ int i;

for (i=0; i<4; i++) printf(\

}

2. #include int fun(int a,int b)

{ if (a%b==0) return b;

else return fun(b,a%b); }

main()

{ int a=20,b=24;

printf(\} 3.

#include

void fun(int n,char a,char b,char c) { if (n>0)

{

fun(n-1,a,c,b); printf(\}

} main() {

fun(3,'1','2','3'); }

五. 程序判断题

1. 下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b) { int c ; c = a + b; return (c) ; }

2. 下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,注意:字母不分大,

小写;判断下面程序的正误,如果错误请改正过来。 fun (char s[ ], int num[5]) { int k; i=5;

for (k=0; k

switch ( s ) {

case ?a?: case ?A?: i=0; case ?e?: case ?E?: i=1; case ?i? : case ?I? : i=2; case ?o?: case ?O?: i=3; case ?u?: case ?U?: i=4; }

if (i >= 0) num[i]++; } }

3. 下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;判

断下面程序的正误,如果错误请改正过来。 void fun (char s[ ]) { int i,j;

for (i=0,j=0; s[i]!=?\\0?; i++) if (s[i]>=?0? && s[i]<=?9?) s[j]=s[i]; s[j]=”\\0”; }

六. 程序填空

1. 下面程序是求100~200间的全部素数(每10个素数输出在一行上)。

int prime( int m) { int n;

for (n=2; n

main()

{ int m,n=0; /* n用来统计素数的个数*/

for (m=100; m<=200; m++)

if (prime(m) ) printf(“M%c”,m , _______________ ); return 0; }

2. 下面程序的功能是把十进制正整数转换成2到16进制中任一数制的程序。

如:输入 10 2 则输出 1010。 输入 10 8 则输出 12。

#include

void fun(int num, int base)

{ char s[]=\int p[20],n=0;

do { p[n++]=numose; } while ( ______________ );

for ( ______________ ; n>=0; --n) printf(\ ] ); printf(\ }

main()

{ int num,base;

scanf(\ fun(num,base); }

3. 下面函数的作用是通过递归的方法将字符串倒置,请填空使程序完整。

void fun(char s[ ],int l,int h) { if ( ) return ; else { char t ;

fun ( ) ; t = s[l] , s[l]=s[h] , s[h]=t ; } }

4. 设数组a中的n个整数已按从小到大的顺序排列,函数bin_search用折半法找出整数x是否在数组中,

找到则返回对应元素的下标,否则返回-1。

int bin_search(int a[],int x,int n) { int left,right,mid; left=0; right=n-1; while (left<=right) { mid=(left+right)/2;

if (______________ ) return mid;

else if (______________ ) right=mid-1; else ______________; }

______________ ; }

七. 程序编写

1. 编写一函数,由实参传来字符串,统计其中字母、数字、空格的个数,在主函数中输入串,并输出

统计结果。

2. 编一个函数sort,使10个整数按从大到小的顺序排列,在main函数中输入这10个数,并输出排好

序的数。

3. 写一个函数,使给定的一个二维数组(N×N)转置,即行列互换。(N是不大于10的数,由输入决

定)。

4. 用递归法将一个整数转换成字符串。例如,输入12345,应输出字符串“54321”。n的位数不确定,

可以是任意的整数。

5. 编写一个fun函数void fun(char s1[],char s2[]),将两个字符串s1和s2连接起来存放在s1中。

6. 编写一个fun函数:int fun(int a[], int n),删去一维数组中所有相同的数,使之只剩一个。数组中的数

已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 7 7 8 9 9 10 10 10,删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10

7. 设计一个程序,统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:(1)由键盘输

入每个学生的四门课程的成绩;(2)计算每个学生的平均分和总分,这个功能模块由自定义函数实现;(3)计算每个学生的总分与平均分。同样用自定义函数实现;(4)根据用户的要求输出某门课程不及格的学生。

第 9 章

一. 选择题

编译预处理

1. 以下叙述不正确的是( )。

A. 预处理命令行都必须以#开始

B. 在程序中凡是以#开始的语句行都是预处理命令行 C. C程序在执行过程中对预处理命令行进行处理 D. 预处理命令行可以出现在C程序中任意一行上 2. 以下叙述中正确的是( )。

A. 在程序的一行上可以出现多个有效的预处理命令行 B. 使用带参数的宏时,参数的类型应与宏定义时的一致 C. 宏替换不占用运行时间,只占用编译时间

D. C语言的编译预处理就是对源程序进行初步的语法检查 3. 以下有关宏替换的叙述不正确的是( )。

A. 宏替换不占用运行时间 B. 宏名无类型

C. 宏替换只是字符替换 D. 宏名必须用大写字母表示

4. 在“文件包含”预处理命令形式中,当#include后面的文件名用\(双引号)括起时,寻找被包含

文件的方式是( )。

A. 直接按系统设定的标准方式搜索目录

B. 先在源程序所在目录中搜索,再按系统设定的标准方式搜索

5. 6.

7.

8.

C. 仅仅搜索源程序所在目录 D. 仅仅搜索当前目录

在宏定义 #define PI 3.1415926 中,用宏名PI代替一个( )。 A.单精度数 B.双精度数 C.常量 D.字符串 以下程序的运行结果是( )。 A.9 B.10 C.12 D.18 #define ADD(x) x+x main ( )

{ int m=1,n=2,k=3,sum ;

sum = ADD(m+n)*k ; printf(“%d\\n”,sum) ; }

以下程序的运行结果是( )。 A.10 B.15 C.100 D.150 #define MIN(x,y) (x)>(y) ? (x) : (y) main ( )

{ int i=10, j=15 , k; k = 10*MIN(i,j); printf(“%d\\n”,k); }

在任何情况下计算平方数都不会引起二义性的宏定义是( )。

A. #define POWER(x) x*x B. #define POWER(x) (x)*(x) C. #define POWER(x) (x*x) D. #define POWER(x) ((x)*(x))

二. 判断题

1. 宏替换时先求出实参表达式的值,然后代入形参运算求值。 2. 宏替换不存在类型问题,它的参数也是无类型。

3. #include 和 #include \的搜寻方式相同。 4. 带参数的宏与函数类似,但不等价。

5. 凡是c源程序中行首以\标识的控制行都是预处理命令。 6. #include 命令中的文件名是不能包括路径的。 7. 可以使用条件编译命令来选择某部分程序是否被编译。

8. 在软件开发中,常用条件编译命令来形成程序的调试版本或正式版本。

三. 阅读程序

1. #define S x=y

#define P2(x,y) printf(\

main()

{ int x,y;

S=1; ++x || ++y; P2(x,y); S=1; ++x && ++y; P2(x,y); S=-1; ++x || ++y; P2(x,y); }

2. #define M(x,y,z) x*y+z

main()

{ int a=1,b=2, c=3;

printf(\}

四. 程序编写

1. 定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交

换后的两个值。说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,B.,不能用三个实参。

1s?(a?b?c)area?s(s?a)(s?b)(s?c)22. 三角形的面积为,其中,a,b,c为三角形的三边。定

义两个带参数的宏,一个用来求s,另一个用来求area。写程序,在程序中用带实参的宏名来求面积area。

第 10 章

一. 选择题

指针

1. 变量的指针,其含义是指该变量的( )。

A.值 B.地址 C.名 D.一个标志

2. 已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是

( )。 A.k=*ptr1+*ptr2 B.ptr2=k C.ptr1=ptr2 D.k=*ptr1*(*ptr2) 3. 若有说明:int *p,m=5,n; 以下程序段正确的是( )。

A.p=&n; scanf(“%d”,&p); B.p = &n ; scanf(“%d”,*p);

C.scanf(“%d”,&n); *p=n ; D.p = &n ; *p = m ; 4. 若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是( )。

A.p1=&m; p2=&p1 ; B.p1=&m; p2=&n; *p1=*p2 ; C.p1=&m; p2=p1 ; D.p1=&m; *p1=*p2 ;

5. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是( )。

A.a, p, *&a B.&*a,&a,*p C.*&p,*p,&a D.&a,&*p,p 6. 下面程序段中,for循环的执行次数是( )。

A.9 B.7 C.6 D.5

char *s=”\\ta\\018bc” ;

for ( ; *s!=?\\0? ; s++) printf(“*”) ;

7. 下面能正确进行字符串赋值操作的是( )。

A.char s[5]={“ABCDE”}; B.char s[5]={?A?,?B?,?C?,?D?,?E?}; C.char *s ; s=”ABCDE” ; D.char *s; scanf(“%s”,s) ; 8. 下面程序段的运行结果是( )。

char *s=”abcde” ; s+=2 ; printf(“%d”,s);

A.cde B.字符?c? C.字符?c?的地址 D.不确定

9. p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是

( )。

A.c=*p1+*p2 B.p2=c C.p1=p2 D.c=*p1*(*p2) 10. 以下说明不正确的是( )。

A.char a[10]=”china” ; B.char a[10],*p=a; p=”china”; C.char *a; a=”china” ; D.char a[10],*p; p=a=”china”; 11. 若有定义:int a[5];则a数组中首元素的地址可以表示为( )。

A.&a B.a+1 C.a D.&a[1]

12. 已有函数max(a,b),为了让函数指针变量p指向max,正确的方法是( )。

A.p=max; B.p=max(a,b); C.*p=max; D.*p=max(a,b); 13. 对于类型相同的指针变量,不能进行哪种运算?

A. + B. - C. = D. == 14. 若有以下说明和语句,则p1-p2的值为多少?

int a[10], *p1, *p2; p1=a; p2=&a[5]; A. 5 B. 6 C. 10 D. 非法

15. main()函数可以带两个形参,一般分为argc和argv,其中argv可以定义为( )。

A. int argv; B. char * argv[]; C. char argv[]; D.char ** argv[]; 16. 若有定义:int (*p)[4];则标识符p( )。

A.是一个指向整型变量的指针 B.是一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一维数组 D.定义不合法

百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库C语言各章习题集(4)在线全文阅读。

C语言各章习题集(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.70edu.com/wenku/380672.html(转载请注明文章来源)
Copyright © 2020-2025 70教育网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备16052595号-17
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219