朱昌杰 C语言程序设计课本习题解答 - 图文

更新时间:2024-05-31 13:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题1

一.选择题

(1) 以下叙述正确的是( )

A. 计算机不仅能执行机器语言程序,也可以直接执行其它高级语言编写的程序

B. 汇编语言是一种面向机器的低级语言,所以计算机可以直接执行用汇编语言编写的源程序

C. 高级语言是与自然语言或数学语言相近的计算机语言,用高级语言编写的源程序计算机都不能直接执行 D. 用高级语言编写的源程序只能经过解释程序边解释边执行 (2) 以下不正确的概念是( ) A. 一个C程序必须包含一个main函数 B. 一个C程序可以只有一个语句 C. 一个C程序可以由一个或多个函数组成 D. 一个C语言函数可以没有任何可执行语句 (3) 在C语言程序中( )。 A. main函数必须放在程序最前头 B. main函数必须放在程序最后 C. main函数必须放在所有函数之前

D. main函数可以放在程序任何允许放置函数的位置 (4) 以下C语言源程序的书写格式不正确的是( ) A. 正确的函数首部,其后必须加上分号 B. 分号是语句的一部分 C. 一行上可以书写多条语句 D. 一个语句可以写在多行之上 (5) 以下不正确的叙述是( )

A. 一个#include命令只能指定一个被包含文件 B. 一个#include命令可以指定多个被包含文件

C. 在#include命令中,文件名可以用尖括号或双引号括起来 D. 一个C程序中,可以使用多个#include文件包含命令 二.填空题

(1) 计算机程序设计语言分为 语言、 语言和 语言。

(2) 正确的算法应具有五个重要的特征是:① ,② ,③ ,④ ,⑤ 。 (3) 算法的表示方法主要有 、 、 、自然语言和 语言等。(4) 程序设计方法主要分为 程序设计方法和 程序设计方法。 (5) C语言的函数一般由 和 两部分组成。 (6) 注释部分从 开始,以 结束。 (7) 任何C程序的执行都是从 函数开始。 (8) 函数体一般包括 部分和 部分。

(9) 一个C语言程序由若干个函数组成,其中必须有一个 函数。 三.编程题

(1) 上机运行本章例题,熟悉所用C语言系统(如:Turbo C/C++和Visual C++ 6.0等)的上机方法与步骤。(2) 参照本章例题编写一个C语言程序,并上机运行,要求输出一下信息: **************************** Hello,World!

****************************

1

【参考答案】

一.选择题 (1) C (2) B (3) D (4) A (5) B

二.填空题 (1) 机器语言、汇编语言、高级语言 (2) ①有穷性、②确定性、③有效性、④输入、⑤输出。 (3) 传统流程图、N-S图、伪代码、计算机程序 (4) 面向过程、面向对象

(5) 函数首部、函数体 (6) /* 、*/ (7) main (8) 声明、执行 (9) main 三.编程题

(1) 例1.3 输出一行信息,内容为:This is my first C program. /* exa1-3.c */ #include void main() { printf(\

}

例1.4 键盘输入两个整数,求两个整数中的较大者。 /* exa1-4.c */

#include \头文件 */ void main() /* 主函数 */ { int max(int x,int y); /* 对被调用函数max的声明 */ int a,b,c; /* 定义三个整型变量a,b,c */ printf(\提示输入 */ scanf(\键盘输入变量a和b的值 */

c=max(a,b); /* 调用max函数,将函数返回值赋值给变量c */ printf(\输出c的值 */ }

int max(int x,int y) /* 定义整型函数max,其两个形式参数x,y也为整型 */ { int z; /* 函数max的声明部分 */ if(x>y) z=x; /* 如果x>y,将x赋值给z */ else z=y; /* 否则,将y赋值给z */

return(z); /* 将z的值返回给调用函数的位置 */ } (2)解答:

/* exe1-3-2.c */ #include void main() { printf(\ printf(\

printf(\

}

2

习题2

一.选择题

(1)以下哪一个可以作为正确的变量名( )。 A.for

B.$abc

C.3*x

D._file

(2)以下哪一个不是正确的C语言常量( )。 A.0x2ac

B.3.25e-8 C.800

D.0486

(3)以下哪一个是合法的C语言实型常量( )。 A.3E2.5

B.E6 C.2A8

D.218

(4)以下哪一个整型常数值最大( )。 A.35 B.035

C.0x35

D.50

(5)以下不是字符型常量的是( )。 A.′m′

B.\

C.′\\115′ D.′\\x8c′

(6)以下哪一个字符与其他3个字符不相等( )。 A.′a′

B.′A′

C.′\\X41′ D.′\\101′

(7)以下哪一个是C语言合法的字符串常量( )。 A.I am a student.

B.\中国\C.′\\hello′

D.$abc$

(8)C语言中short型整数占2个字节,则unsigned short型数据的其值范围是:( )。 A.0~65535

B.0~65536

D.-65535~65535

C.-32768~32767

(9)在C语言中,数字018是一个( )。 A.十进制数 B.八进制数 C.十六进制数

D.非法数

(10)在C语言中,不同数据类型占用内存的字节长度是( )。 A.相同的 C.任意的

B.与编译环境有关的 D.由用户自己定义的

(11)以下哪一个不是C语言中的数据类型( )。 A.实型

B.浮点型 C.空类型 D.关系型

(12)以下哪一个是C语言中的数据类型( )。 A.集合型 B.双精度型 C.复数型 D.逻辑型 二、填空题

(1)C语言的常量分为:________常量、________常量、________常量、________常量和________常量。 (2) C语言中的整型数据有三种表示方法,分别是:________进制、________进制和________进制。 (3)C语言规定,变量必须________定义,________使用。

(4)C语言中,sizeof( )是分别是测定某种类型数据所占存储空间长度的________。

(5)C语言中,运算符的结合性有两种:左结合和右结合,左结合是________计算,右结合是________计算。 (6)C语言中,++i是先________,后________;i--是先________,后________。 (7)赋值运算符比逗号运算符的优先级别________。 (8)________运算符的优先级别最低,级别为15。

(9)C语言的类型转换有三种方式:________类型转换、________类型转换和________类型转换。 三、计算与编程题

(1)给出下列公式的C语言表达式。 ① y=ax2+bx+c

② y=ax+b/cx+d ③ 3.25×10+√(b2-4ac)-x2-y3 ④ y=1/2+2/3+(x2+y2)/(a2+b2)

8

⑤ 求表达式3*2+4.0/5?15%?4+(5*8/9+4)%5?1/2+1.0/2的值。 (2)上机运行本章例题,熟悉所用C语言编译系统的使用。

(3)用运算符sizeof( )测试以下数据类型在内存中所占空间的大小:char、unsigned char、int、short、long、unsigned、

3

unsigned short、unsigned long、float、double、long double,输出时一行输出一种数据类型的内存字节大小,并给出清晰的提示信息。

【参考答案】 一.选择题

(1) D (2) D (3) D (4) C (5) B (6) A (7) B (8) B (9) D (10) B (11) D (12) B 二.填空题

(1) 字符、整型、实型、字符串、符号 (2) 十、八、十六 (3) 先、后 (4) 运算符

(5) 从左到右、从右到左 (6) 加1、引用、引用、减1 (7) 高 (8) 逗号

(9) 自动、赋值、强制 三、计算与编程题 (1) ① y=a*x*x+b*x+c ② y=(a*x+b)/(c*x+d)

③ 3.25e8+sqrt(b*b-4*a*c)-x*x-y*y*y ④ y=1.0/2+2/3.0+x*x/(a*a)+y*y/(b*b) ⑤ 7.3 (2) 略 (3)

/* exe2-3-3.c */ #include int main() {

printf(\

printf(\ printf(\ printf(\ printf(\ printf(\

printf(\ printf(\ printf(\ printf(\

printf(\}

4

习 题 3

一.选择题

(1)若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是( ) A. a=a++,i++; B. i=(a+k)<=(i+k); C. i=a; D. i=!a;

(2) 若有定义:int x,y; char a,b,c; 并有以下输入数据(此处,代表换行符) 1 2 A B C

则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是() A. scanf(\B. scanf(\C. scanf(\D. scanf(\

(3)若有定义:int a,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给变量a,5付给变量b的输入数据是()A. 3 5 B. 3,5 C. 3;5 D. 35

(4)若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为() A. 0和1 B. 0和20 C. 10和1 D. 10和20

(5)以下不能输出字符A的语句是()(注:字符A的ASCII码值为65,字符a的ASCII码值为97) A.printf(“%c\\n”,’A’-32) B.printf(“%d\\n”,’A’); C.printf(“%c\\n”,65); D.printf(“%c\\n”,’B’-1); 二.填空题

(1) 有以下程序(说明:字符0的ASCII码值为48) void main(void) #include { (1) main()

a=50.0;b=20.0;

{ char c1,c2; printf(\scanf(\printf(\c2=c1+9;

printf(\printf(\printf(\}

}

若程序运行时从键盘输入48<回车>,则输出结果为将缺少的部分填在空白处。

____________。

(4)下列程序的输出结果是____________。 (2) 以下程序的输出结果为:____________。 #include main( )

main() { float a=3.14, b=3.14159; {

char a;

printf(\a='A';

}

printf(\(3) 编制程序对实数a与b进行加,减,乘,除计算,要求}

显示如下结果。 (5)分析下面程序 jia=70.000000 main() jian=30.000000 {

int x=2,y,z;

cheng=1000.000000 x*=3+2;printf(\chu=2.5000000 x*=y=z=4;printf(\程序:

x=y=1;

#include

z=x++-1;printf(\

5

z+=-x++ +(++y);printf(\(1) 从键盘上输入一个大写字母,要求改用小写字母输出。 }

(2) 请编写一个程序,能显示出以下两行文字。 程序的输出结果是____________。 I am a student. 三.编程题 I love China.

【参考答案】 一.选择题

(1) C (2) C (3)A (4) B (5) B 二.填空题

(1)09 (2)3.140000, 3.142 double a,b a+b a-b a*b a/b (4)65A (5) 10 40 2.0 3.0 三、编程题 (1)

#include void main() { char c; scanf(\ if ((c>='A')&&(c<='Z')) printf(\

else

printf(\输入的不是大写字母\\n\ } (2)

#include void main() { printf(\

}

6

习 题4

一.选择题 (1) 以下程序段: int i,a=3,b=2; i=(--a==b++)?--a:++b;

printf(\输出结果是 。 A)i=1 a=1 b=3 B)i=3 a=2 b=3 C)i=4 a=1 b=4

D)i=4 a=2 b=4

(2)若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是 。

A)1 B)0 C)2 D)不知道a的值,不能确定

(3)能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是 。

A)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) B)(x>=-10)&&(x<=-5)||(x>=0)&&(x<=100) C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100) D)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100) (4)以下程序的运行结果是 。 main( ) {

int c,x,y; x=1; y=1; c=0;

c=x++||y++;

printf(“\\n%d%d%d\\n”,x,y,c); }

A)110 B)211 C)011 D)001 (5)两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 。 main( ) { int x;

scanf(“%d”,&x);

if(x++>5) printf(“%d”,x); else printf(“%d\\n”,x--);

}

A)7和5 B)6和3 C)7和4 D)6和4 (6)写出下面程序的执行结果 。 main( ) { int x,y=1; if(y!=0) x=5; printf(“%d\\t”,x);

if(y= =0) x=3; else x=5;

printf(“%d\\t\\n”,x); }

A)1 3 B)1 5 C)5 3 D)5 5

(7)写出下面程序的执行结果 。 main() {

int x=1,y=1,z=0;

if(z<0) if(y>0) x=3; else x=5; printf(\if(z=y<0) x=3; else if(y= =0 ) x=5; else x=7; printf(\printf(\}

A)1 7 0 B)3 7 0 C)5 5 0 D)1 5 1

(8)假定所有变量均已正确说明,下列程序段运行后x的值是 。 a=b=c=0;x=35; if(!a) x=-1; else if(b); if(c) x=3; else x=4;

A)34 B)4 C)35 D)3 (9)以下选项中与if(a==1)a=b;else a++;语句功能不同的switch语句是 。 A)switch(a) {

case1:a=b; break;

default:a++; }

B)switch(a==1) {

case 0:a=b; break;

case 1:a++; }

C)switch(a) {

default:a++;break;

case1:a=b; }

7

D)switch(a==1) {

case 1:a=b;break;

if(a++<9) printf(\ else printf(\}

程序运行时从键盘输入9<回车>,则输出的结果是 。 A)10 B)11 C)9 D)8

(15) 已知 int x=30,y=50,z=80;以下语句执行后变量x、y、case 0:a++; }

(10)有如下嵌套的if语句 if(a

以下选项中与上述if语句等价的语句是 。 A)k=(a

B)k=(a main() {

int a=1,b=0; if(--a) b++; else if(a==0) b+=2; else b+=3; printf(“%d\\n”,b); }

程序运行后的输出结果是 。 A)0 B)1 C)2 D)3

(12)下列条件语句中输出结果与其他语句不同的是 。

A)if(a) printf(“%d\\n”,x); else printf(“%d\\n”,y); B)if(a==0) printf(“%d\\n”,y); else printf(“%d\\n”,x); C)if(a!=0) printf(“%d\\n”,x); else printf(“%d\\n”,y); D)if(a==0) printf(“%d\\n”,x); else printf(“%d\\n”,y); (13) 以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是 。

A)switch(a) {case 1:a=b;break; default:a++; } B)switch(a==1) {case 0:a=b;break;case 1:a++; } C)switch(a) {default:a++;break;case 1:a=b;} D)switch(a==1) {case 1:a=b;break; case 0:a++;} (14) 有以下程序 #include main() { int a;

scanf(\

z的值分别为: 。 if (x>y||xz) z=x; x=y; y=z;

A)x=50, y=80, z=80 B)x=50, y=30, z=30 C)x=30, y=50, z=80 D)x=80, y=30, z=50 二.填空题

(1) 以下程序运行的输出结果是 。 main()

{ int p=30;

printf(\

(2) 有以下程序 #include main()

{int a=1,b=2,c=3,d=0; if(a==1) if(b!=2) if(c==3) d=1; else d=2;

else if(c!=3) d=3; else d=4; else d=5;

printf(“%d\\n”,d); }

程序运行后的输出结果是 。 (3) 有以下程序 #include main() { int x; scanf(\

if(x>15) printf(\if(x>10) printf(\if(x>5) printf(\

若程序运行时从键盘输入12<回车>,则输出结果为(4)以下两条if语句可合并成一条if语句为 if(a<=b) x=1; else y=2;

if(a>b) printf(\

。 8

。、else printf(\

(5)输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请在( )内填入缺省的内容。 main( ) { char ch; 三.编程题

scanf(“%c”,&ch); if (_______) ch=ch+32;

else if(ch>=’a’&&ch<=‘z’) (_____); printf(”%c\\n”,ch); }

1.编写一个程序,要求有键盘输入三个数,计算以这三个数为边长的三角形的面积。

2.输入圆的的半径r和一个整型数k,当k=1时,计算圆的面积;但k=2时,计算圆的周长,当k=3时,既要求求圆的周长也要求出圆的面积。编程实现以上功能。 3. 编写程序,判断某一年是否是闰年。

4. 有一函数,其函数关系如下,试编程求对应于每一自变量的函数值。 x2 (x<0) y = -0.5x+10 (0≤x<10) x- (x≥10)

【参考答案】

一.选择题

(1) A (2) A (3) B (4) B (5) A (6) D (7) A (8) B (9) B (10) C (11)C (12) D (13) B (14) A (15) A 二.填空题 (1) 0 (2) 4 (3) 1217

(4) if(a<=b) {x=1; printf(\ else {y=2; printf(\ 'A'<=ch && ch<='Z' ch=ch-32 编程题

1 #include #include int main() { 函数

else {

printf(\您输入的三角形边长有误\float a,b,c,z,n,s;

printf(\请输入三角形边长:a,b,c:\scanf(\

if(a+b<=c||fabs(a-b)>=c)//fabs为求浮点数绝对值

z=a+b+c; n=z/2;

s=sqrt(n*(n-a)*(n-b)*(n-c));//sqart为平方

根函数 }

2 #include #define PI 3.14

int main() {

float r; int k;

printf(\请输入半径r: \\n\scanf(\

printf(\请输入处理要求\\n 1. 计算圆的面积 \\n }

printf(\三角形面积是 %f\\n:\

2. 计算圆的周长\\n 3. 计算圆的周长和圆的面积 \\n\

scanf(\switch(k) { case 1:

printf(\圆的面积为: %f\\n\

break;

case 2:

9

printf(\圆的周长为: %f\\n\break; case 3: printf(\圆的面积为: %f\\n\

printf(\圆的周长为: %f\\n\

break; default: printf(\错误要求!! \\n\

}

}

3 #include void main() {

int year,result=0; printf(\输入一个年份:\\n\ scanf(\ if(year0==0) { if(year@0==0) printf(\是闰年\\n\

else

printf(\不是闰年\\n\

}

else if(year%4==0)

printf(\是闰年\\n\

}

4 #include #include void main() { float x,y;

printf(\输入x: \ scanf(\

if(x<0) printf(\

else if(x>=0&&x<10)

printf(\ else if(x>=10)

printf(\

}

10

long factorial(int n) { long t=1;int i; for(i=1;i<=n;i++)

t=t*i;

return t; }

long sum(int m) { long s=0;int i; for(i=1;i<=m;i++)

s=s+factorial(i); return s;

} main() {

int k,num; long result=0; scanf(\for(k=1;k<=num;k++)

result=result+sum(k); printf(\result); }

(7) 编写函数reverse(s),s是一个字符串,实现将字符串s逆序存放。

#include reverse(char s[]) { int i,t,j; char temp; t=strlen(s);

for(i=0,j=t-1;i

}

}

(8) 写一个函数transpose(b),b是一个3阶方阵,实现对方阵的转置,即行列互换。 int transpose(int b[3][3]) { int i,j,t; for(i=0;i<3;i++)

for(j=i+1;j>=i&&j<3;j++) {

t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;

}

}

main() { int a[3][3];int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\

for(i=0;i<3;i++) { for(j=0;j<3;j++)

printf(\

printf(\

}

transpose(a); for(i=0;i<3;i++) { for(j=0;j<3;j++)

printf(\ printf(\

}

}

(9) 某数列为K(n)的定义为:用递归的方法求该数列的第6项k(6)。

#include

int k(int n) { int c; if(n==1)

c=1;

else if(n%2==0)

c=k(n-1)*2;

else

c=k(n-1)*3;

return c;

} main() {

int m; 26

scanf(\if(m>=1)

printf(\

}

else

printf(\

习题8

一、选择题

(1)下面有关宏替换的叙述不正确的是( )。 A.宏替换不占用运行时间 B.宏名无类型 C.宏替换只是字符替换 D.宏名必须用大写字母表示

(2)以下叙述中正确的是( )。 A.预处理命令行必须位于C源程序的起始位置 B.在C语言中,预处理命令行都以“#”开头

C.每个C程序必须在开头包括预处理命令行:#include D.C语言的预处理不能实现宏定义和条件编译的功能 (3)下列关于#include命令的叙述中,错误的是( )。 A.#include命令中,文件名可以用双引号或尖括号括起来 B.一个被包含文件中又可以包含另一个被包含文件 C.一个#include命令中可以指定多个被包含文件 D.一个#include命令中只能指定一个被包含文件 二、填空题

(1)以下程序输出结果是 【1】 。

#include #define MULT(X) X*X void main() { int a=10,c; c=MULT(a); printf(\}

(2)以下程序运行的输出结果是 【2】 。

#include #define S(x) 4*x*x void main() { int a=10,b=11; printf(\}

(3)以下程序中的for循环执行的次数是 【3】 。

#define N 2 #define M N+1 #define NUM 2*M+1 void main() { int i;

for(i=1;i<=NUM;i++)printf(\}

三、编程题

1、用带参数的宏来实现从3个数中找出最大数。

2、请设计输出整数的格式,整数用“]”格式输出。要求: ① 一行内输出2个整数; ② 一行内输出3个整数。

3、输入两个整数,求它们相除的余数,请用带参数的宏来实现。

27

一.选择题 D B C 二.填空题 (1) 100 (2) 161 (3) 1 2 3 4 5 三.编程题

1、用带参数的宏来实现从3个数中找出最大数。具体程序为: #include

#define MAX2(x,y) (x)>(y)?(x):(y) int max(int a,int b, int c) {

int t1 = MAX2(a, b); int t2 = MAX2(b, c); int t3 = MAX2(t1, t2); return t3; }

void main()

{ int d,e,f,m;

scanf(\ m = max(d, e, f); printf(\最大数为%d\}

2、请设计输出整数的格式,整数用“]”格式输出。要求: ① 一行内输出2个整数; ② 一行内输出3个整数。 具体程序为:

3、输入两个整数,求它们相除的余数,请用带参数的宏来实现。 具体程序为: /* exa8-3-3.c */ #include

#define MOD(a, b) ((a) % (b)) void main() {

int a, b;

printf(\ scanf(\

printf(\}

28

【参考答案】 习题9

29

30

【参考答案】

一.选择题

C B B A C B B C D C C C D C B B D B C C 二.填空题 (1) p (2) *p (3) 1 2 3 4 (4) 10,0

(5)strcmp(str2,str1);

(6) 定义指针数组p,它由4个指向整型数据的指针元素组成 (7) p为指向含4个元素的一维数组的指针变量 (8) p是返回一个指针的函数,该指针指向整型数据 (9) p为指向函数的指针,该函数返回一个整型值 (10) abCdabCdabCd 三.编程题

(1)定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出。 #include void main() {

int *p1,*p2,*p3,i,j,k,temp; printf(\scanf(\p1=&i; p2=&j; p3=&k; if(*p1>*p2) {

}

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 #include int main() {

int m,i,j,a[10],*p1,*p2; p1=p2=a; }

if(*p1>*p3) { }

if(*p2>*p3) { }

printf(\

temp=*p3; *p3=*p2; *p2=temp; temp=*p1; *p1=*p3; *p3=temp; temp=*p1; *p1=*p2; *p2=temp;

for(i=0;i<10;i++)

scanf(\输入

31

p2--;

for(m=1,i=0;m<10;m++)

if(a[m]

i=m; //找出最小值

j=a[i]; a[i]=*p1;

*p1=j; //交换最小值与第一个数

for(m=1,i=0;m<10;m++) if(a[m]>a[i])

i=m; //找出最大值

j=a[i]; a[i]=*p2;

*p2=j; //交换最大值与第一个数

for(m=0;m<10;m++)

printf(\ printf(\ return 0;

}

编写程序实现将一个整数字符串转换为一个整数。 #include \#include \int Fun(char *str) {

int num,i,digital,len; num = 0; len=strlen(str); while(*str!='\\0') {

digital=*str-'0'; for(i=0; i

return num; }

int main() {

char n[80 ]; int number;

gets(n); number=Fun(n); printf(\ return 0; }

编写程序实现在主函数中输入字符串,并在lenth 函数中输出其长度。 #include #include int lenth(const char *str) { int i = -1;

while (str[++i]); // while循环在 str[++i] 为

'\\0' 时结束 return i;

}

int main() { char str[1000];

printf(\ gets(str);

printf(\ return 0;

} 编写transposition函数(参数用指针)将一个4×4矩阵转置。

#include \

void transposition(int *str) {

int i,j,t; for(i=0;i<4;i++) for(j=i;j<4;j++) {

t=*(str+4*i+j);

*(str+4*i+j)=*(str+4*j+i); *(str+4*j+i)=t; }

}

int main() {

int a[4][4],*p,i;

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

32

scanf(\[3]);

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

printf(\[i][3]); p=&a[0][0]; transposition(p); printf(\ for(i=0;i<4;i++)

printf(\[i][3]); return 0; }

不用字符串处理函数strcmp,编写自定义函数实现两个字符串的比较。 #include

int scmp(char *p1,char *p2) { int i=0;

while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\\0') return 0;

return(*(p1+i)-*(p2+i)); }

void main() { char str1[80],str2[80],*p1,*p2; int t;

printf(\ gets(str1);

printf(\ gets(str2); p1=str1; p2=str2; t=scmp(p1,p2); printf(\

} 编程实现统计子串substr在母串str中出现的次数。 #include

int count(char *str,char *substr)

{ int i,j,k,num=0; for(i=0;str[i];i++)

for(j=i,k=0;substr[k]==str[j];k++,j++) if(substr[k+1]=='\\0') { num++; break; }

return(num);

}

void main() { char str[80], substr[80]; int n;

printf(\ gets(str);

printf(\ gets(substr);

printf(\

}

不用字符串处理函数strcat,编程实现两个字符串s1和s2连接。

#include \#include \

char *stringcat(char s1[],char s2[]) { int i,j;

for(i=0;s1[i]!=0;i++); for(j=0;s2[j]!=0;i++,j++) s1[i]=s2[j]; s1[i]=0; return s1;

}

int main() { char str1[1000],str2[80],*s; printf(\ gets(str1);

printf(\ gets(str2);

s=stringcat(str1,str2);

printf(\33

return 0;

习 一、选择题

1.以下程序的运行结果是( )。

#include main() { struct date

{ int year,month,day; }today; union

{

long a; int b; char c; }m;

printf(\

}

A.6 4

B.8 5

C.10 6 D.12 7

2.若有以下定义和语句,不正确的引用是( )。

struct student { int age; int num; }; struct

student

stu[3]={{1001,20},{1002,19},{1003,21}}; main()

{ struct student *p; p=stu; ... }

}

题10

A.(p++)->num B.p++ C

(*p).num

D.p=&stu.age

3.以下程序的输出结果为( )。

#include main() { union { int a[2]; long b; char c[4]; }s;

s.a[2]=0x39; s.a[1]=0x38;

printf(\}

A.390039 39 B.380039 9

C

3938

38

D.3839 8

二、填空题

1、在以下嵌套结构中填空,给出李冬的姓名、年龄(20岁)、性别(男)、生日(1993年5月16日)、语种(c)及系别(计算机系)的信息,并输出这些信息。

#include struct date

{ int month; int day; int year; };

struct student {

_________ name[20]; _________ age;

34

_________sex;

_________date_birthday; _________Language; _________department[30]; }; main() {

struct student s1=_________; printf ___________; }

2.结构体数组中存有3个人的姓名和年龄,以下程序输出3个人中最年长者的姓名和年龄,在横线上填上正确的内容。

static struct man { char name[20]; int age;

}person[]={{\ng\main()

{ struct man *p,*q; int old=0;

for(_______;______;p++) if (oldage) { q=p;

________; }

printf(\ }

三、编程题

1.定义一个结构体变量(包括年、月、日),计算该天在本年中为第几天?(需考虑闰年问题)要求写一个days函数来实现。由主函数将年月日传递给days函数,计算后将天数传回主函数输出。

2.有若干个学生,每个学生的记录包括学号、姓名和三门课的成绩,从键盘输入学生数据(学号为0000时,输入结束),要求输出每个学生的三门课总平均成绩。

3.编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。

4.设计候选人得票统计的程序,要求随机设定候选人,每次输入一个得票候选人的名字,最后输出各人得票情况。 5.有一个链表,每个结点包括:学号、姓名、性别和年龄。编写函数,实现如下功能:每输入一个学生信息,比较新输入学生学号与框表中已有结点的学号信息是否重复,如果重复则提示“学号重复!”,并重新输入下一个学生信息;如果不重复,则把该学生信息放到链表的最后,输出该链表中的学生信息。

【参考答案】

一.选择题 1 D 2 D 3 B 二.填空题

1.char 、int、char、struct data、char、char、(“李冬,20,1,1993-5-16

c,

int days(date d) {

int num = 0; int m, da, i;

if ((d.year %4 == 0 && d.year 0!=0)||(d.year % 400 == 0)) {

for (m = 1; m <= d.month ; m++) {

if (m == 2) da = 29;

else if (m==4||m==6||m==8||m==11) da = 30; else da = 31;

for (i = 1; i <= da;i++) {

(“%s,%d,%d,%s,%s\\n”,s1.name,s1.age,s1.data_birthday,s1.Language,s1.departmet)

2. p=person、p<3、old=p->age、q->nam,q->old 三.编程题 1、

#include typedef struct {

int year; int month; int day; }date;

35

本文来源:https://www.bwwdw.com/article/za06.html

Top