C语言2作业参考答案

更新时间:2023-03-08 07:45:07 阅读量: 综合文库 文档下载

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

C语言2作业1

一、判断题 (16分)

1. C程序是由函数构成的,每一个函数完成相对独立的功能。

2分

2. 被main函数调用的函数只能是库函数。

2分

3. 只有在函数被调用时,其形式参数才临时地占有存储空间.

2分

4. 函数若无返回值,则它一定无形参.

2分

5. 如果函数类型不定义为空类型,即使在return后面没有表达式,而实际上函数也是有一个不确定的返回值的.

2分

6. 函数必须有形参

2分

7. 函数必须有return语句

2分

8. 函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));中,含有的实参个数是5

2分

二、选择题 (18分)

1.一个数据类型为void的函数中可以没有return语句,那么函数被调用时( ).

[A]

2分

A. 没有返回值 B. 返回一个系统默认值 C. 返回值由用户临时决定 D. 返回一个不确定的值

2.在C语言中,函数的数据类型是指____。

[A]

2分

A. 函数返回值的数据类型 B. 函数形参的数据类型 C. 调用该函数时的实参的数据类型 D. 任意指定的数据类型

3.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是____。

[D]

2分

A. 函数调用可以作为独立的语句存在 B. 函数调用可以作为一个函数的实参 C. 函数调用可以出现在表达式中 D. 函数调用可以作为一个函数的形参

4.阅读下面程序段,则执行后输出的结果是____。 #include void main()

{ int m=4,n=2,k; k=fun(m,n);

printf(\}

int fun(int m,int n) {

return(m*m*m-n*n*n); }

[C]

A. 64 B. 8 C. 56 D. 0

2分

5.编写求两个双精度数之和的函数,选项中正确的是____。 A)double add(double a,double b) { double s; s=a+b;

return s; }

B)double add(double a,b) { double s; s=a+b;

return (s);}

C)double add(double a double b) { double s; s=a+b; returns;} D)double add(a,b) { double a,b,s; s=a+b;

return (s);}

[A]

A. A B. B C. C D. D

2分

6.现有如下程序段 #include int aa(int x,int y); void main()

{ int a=24,b=16,c; c=aa(a,b);

printf(\}

int aa(int x,int y) { int w; while(y) { w=x%y; x=y; y=w; }

return x; }

则程序段的输出结果是____。

[D]

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

2分

7.函数的值通过return语句返回,下面关于return语句的形式描述错误的是____。

[C]

2分

A. return 表达式; B. return (表达式);

C. 一个return语句可以返回多个函数值 D. 一个return语句只能返回一个函数值

8.阅读下面程序,则执行后的结果为____。 #include void main()

{ fun3(fun1(),fun2());} fun1()

{ int k=20; return k;} fun2()

{ int a=15; return a;}

fun3(int a,int b) { int k;

k=(a-b)*(a+b); printf(\

[B]

2分

A. 0 B. 175 C. 184 D. 编译不通过

9.阅读下列程序,则执行后输出的结果是____。 #include void fun(int k) { k++; k=k*6;} void main() { int k=1; fun(k);

printf(\

[A]

A. 1 B. 2 C. 6 D. 12

2分

三、程序设计题 (30分) 1. 第5章 四、1

10分

题目描述

输入一个整数x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。当x>0时 f(x)=1;当x=0时 f(x)=0;当x<0时 f(x)=-1。

输入描述

输入一个整数

输出描述

输出分段函数f(x)的值

样例输入

100

样例输出

f(100)=1 【参考答案1】 #include

int f(int x) // 函数定义 {

if(x>0) return 1;

else if(x==0) return 0; else return -1; }

void main() { int x,y;

scanf(“%d”,&x); y=f(x); // 函数调用

printf(\}

【参考答案2】 2. 第5章 四、4

10分

#include int f(int x) { int y; if(x>0) y=1; else if(x==0) y=0; else y=-1; return y; } void main() { int x; scanf(“%d”,&x); printf(\} 题目描述

输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。

输入描述

输入三个实数中间用空格间隔

输出描述

输出结果保留三位小数

样例输入

5.7 98.32 -123.45678 样例输出

【参考答案2】 -123.457 【参考答案1】 #include

double min(double x,double y) { if(x

void main()

{ double a,b,c,m;

scanf(\ m=min(min(a,b),c); printf(\}

3. 第5章 四、5

10分

#include double min(double x,double y) { double m; if(x

在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。

输入描述

先输入要输出字符,再输入一个整数,两者之间用空格间隔

输出描述

在一行中输出

样例输入

# 5

样例输出

##### 【参考答案】

#include

void prn(char c,int m) { int i;

for(i=1;i<=m;i++) putchar(c); printf(\}

void main() { char c;

int m;

scanf(\ prn(c,m); }

C语言2作业2

一、判断题 (18分)

1. 函数即可以嵌套定义,又可以嵌套调用。

2分

2. 空函数没有返回值,除此之外,有些函数可以带回一个或一个以上的返回值。

2分

3. return后面括号里的表达式的值即是此函数的值。

2分

4. 定义在main函数后的任何函数都需在main中进行函数声明。

2分

5. 如果被定义函数的返回值是整型,可以不必进行声明。

2分

6. 求n!既可以用递归的方式,也可以用递推的方式。

2分

7. 递归函数在实现过程中,要使用“堆栈”这种数据结构来保存递归调用过程中的值。

2分

8. 在C语言中,所有函数之间都可以相互调用。

2分

9. 函数的递归调用不过是一个函数直接或间接地调用它自身。

2分

二、选择题 (22分)

1.在下面的函数声明中,存在着语法错误的是( ).

[C]

A. BC(int a, int); B. BC(int, int); C. BC(int, int=5); D. BC(int x, int y);

2分

2.以下程序的输出结果是____。 #include int fun( int n ) { int s;

if(n==1||n==2)s=2; else s=n-fun(n-1);

return s; }

void main() {

printf(\ }

[A]

A. 1 B. 2 C. 3 D. 4

2分

3.C语言中,若未说明函数的类型,则系统默认该函数的类型是( )。

[C]

2分

A. float型 B. double型 C. int型 D. void型

4.以下程序中有语法错误,有关错误原因的正确说法是( )。 main()

{int G=5,k;

void par_char(int x,int y); ??

k=par_char(G); ?? }

[C]

2分

A. 语句void par_char();有错,不能用void说明函数的类型 B. 变量名G不能使用大写字母 C. 函数说明和函数调用语句之间有矛盾 D. 函数名中不能使用下划线

5.在C语言中,以下正确的说法是( )。

[D]

2分

A. 形参不占用存储单元

B. 只有当实参和与其对应的形参同名时才共占用存储单元 C. 实参和与其对应的形参共占一个存储单元 D. 实参和与其对应的形参各占用独自的存储单元

6.下列叙述中,正确的叙述项是( )。

[B]

2分

A. 定义函数时,必须要有形参

B. 函数中可以没有return语句,也可以有多条return语句

C. 函数f可以用f(f(x))形式调用,这种调用形式是递归调用 D. 函数必须有返回值

7.根据下面函数print的定义,选出调用函数print(5378)的值是( )。 void print(long n) { if (n==0) return ; else{ print(n/10); printf(\ return ; } }

[A]

A. 5 3 7 8 B. 8 7 3 5 C. 3 5 7 8 D. 8 7 5 3

2分

8.下述程序输出的结果是( )。 #include

void fun(int a,int b,int c) { a=456;b=567;c=678; }

void main()

{ int x=10,y=20,z=30; fun(x,y,z);

printf(\}

[A]

A. 30,20,10 B. 10,20,30 C. 456,567,678 D. 678,567,456

2分

9.下述程序输出的结果是( )。 #include Fun(int a,int b,int c) { c=a*a+b*b;} void main() { int x=22; fun(4,2,x); printf(\}

[C]

A. 20 B. 21 C. 22 D. 23

2分

10.在下列程序中,调用f(8)的值是( ) int f(int n)

{ if(n==1) return(1);

else if(n==2) return(2); else return(f(n-1)+f(n-2));

}

[D]

A. 13 B. 21 C. 55 D. 34

2分

11.有函数定义int fun() {return (3,4);},则调用fun后的函数返回值是____。

[B]

2分

A. 3 B. 4 C. 3和4 D. 程序出错 三、程序设计题 (20分) 1. 水仙花数2

10分

题目描述

“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。现在要求输出所有在m和n范围内的水仙花数。 (100<=m<=n<=999)。 编程要求,要求编写一个判断水仙花数的函数,在主函数调用该函数判断某个数是否为水仙花数。

输入描述

输入数据包括两个整数m和n

输出描述

要求输出所有在给定范围内的水仙花数如果有多个,则要求在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no;(注意:输出字母小写)

样例输入

样例输入1: 100 999

样例输入2:

200 300

样例输出

样例输出1: 153 370 371 407

样例输出2:

no 【参考答案】

#include #include

int isflower(int x) // 判断整数x是否水仙花数 { int a,b,c; a=x; b=x/10; c=x/100;

if (a*a*a+b*b*b+c*c*c==x) return 1; // 若是水仙花数返回1,否则返回0 else return 0; }

void main()

{ int n,m,i,c=0; // 变量c统计水仙花数个数 scanf(\ for(i=m;i<=n;i++) { if (isflower(i)==1) { printf(\ c++; // 或c=1; 则用变量c标识有否水仙花数 } } if (c==0) printf(\// 若在此范围内无水仙花数,则输出no }

2. 计算x的n次幂2

10分

题目描述

输入一个实数x和一个整数n(n≥0),计算x的n次幂。要求将计算x的n次幂定义成函数,不允许使用库函数pow。

输入描述

一个实数和一个整数,中间用空格间隔

输出描述

输出结果保留三位小数

样例输入

2.4 3

样例输出

13.824 【参考答案1】 #include

double mypow(double x,int n) { int i;

double y;

for(i=y=1;i<=n;i++) y=y*x; return y; }

void main() { int n;

double x,y=1;

scanf(\ y=mypow(x,n);

printf(\}

【参考答案2】 #include double f(double x,int n) //递归函数 { if(n==0) return 1;// x0=1 else return x*f(x,n-1); // xn=x?xn-1 } void main() { double x,y; int n; scanf(\ y=f(x,n); printf(\}

C语言2作业3

一、判断题 (8分)

1. 静态局部变量只在本函数内可用。

2分

2. 外部变量是全局变量。

2分

3. 如果函数类型不定义为空类型,即使在return后面没有表达式,而实际上函数也是有一个不确定的返回值的.

2分

4. 在函数体内定义的变量称全局变量,可以被程序中的所有函数引用。 2

二、选择题 (10分)

1.以下程序的输出结果是______。 int f( )

{ static int i=0; int s=1; s+=i; i++; return s; }

main()

{ int i,a=0;

for(i=0;i<5;i++) a+=f( ); printf(\\}

[D]

A. 20 B. 24 C. 25 D. 15

2分

2.若有以下程序

#include void f(int n); main()

{ void f(int n); f(5); }

void f(int n)

{ printf(\

则以下叙述中不正确的是______。

[C]

2分

A. 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

B. 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f

C. 对于以上函数程序,编译时系统会提示出错信息;提示对f函数重复说明

D. 函数f无返回值,所以可用void将其类型定义为无值型

3.以下程序的输出结果是______。 int x=3; main() { int i;

for(i=1;i

incre()

{ static int x=1; x*=x+1;

printf(\}

[C]

A. 3 3 B. 2 2 C. 2 6 D. 2 5

2分

4.设有以下函数; f(int a) { int b=0;

static int c=3; b++;c++;

return(a+b+c); }

如果在下面的程序中调用该函数,则输出结果是______。 main()

{ int a=2, i;

for(i=0;i<3;i++) printf(\ }

A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7

[A]

2分

A. A) B. B) C. C) D. D)

5.若程序中定义了以下函数

double myadd(double a,double b) {return(a+b);}

并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。

[A] 2分

A. double myadd(double a, b); B. double myadd(double,double); C. double myadd(double b, double a); D. double myadd(double x, double y);

三、程序填空题 (10分)

1. 功能:通过函数的递归调用计算阶乘。#include long power(int n) {

long f; if(n>1)

f=__(1)__; else f=1; return(f); }

void main() {

int n; long y;

scanf(\ y=__(2)__;

printf(\}

(1)答案 2分

power(n-1)*n

(2)答案 2分

power(n)

(3)答案 1分

y

5分

2. 功能:利用全局变量计算长方体的体积及三个面的面积。

5分

#include int s1,s2,s3;

int vs(int a,int b,int c) {

int v;

v=__(1)__; s1=a*b; s2=__(2)__; s3=a*c; return v; }

int main() {

int v,l,w,h;

printf(\:\ scanf(\ __(4)__;

printf(\}

(1)答案 2分

a*b*c

(2)答案 1分

b*c

(3)答案 1分

&l

(4)答案 1分

v=vs(l,w,h)

四、程序设计题 (20分) 1. 统计整数中含某数字个数

10分

题目描述

编写函数int ndigit(int n,int k)统计整数n中含数字k的个数。

如:ndigit(38987,8)返回值为2, ndigit(24226,2)返回值为3, ndigit(24226,9)返回值为0。

在主函数中输入整数n和k,调用函数ndigit计算出n中含k的个数,并在主函数输出。如果输入的k值不是一位整整则输出error。

输入描述

输入一个整数和一个0~9的数字

输出描述

输出一个相应的 整数

样例输入

输入样例1: 345464 4

输入样例2: 0 0

输入样例3:

4565 -6

样例输出

输出样例1: 3

输出样例2: 1

输出样例3:

error 【参考答案】

#include

int ndigit(int n,int k) { int c=0;

do { // 若用while语句,则在前面要加if(n==0&&k==0) return 1; if (n==k) c++; n/=10; }while(n!=0); return c; }

void main() { int n,k;

scanf(\ if(k>9||k<0) printf(\

else

printf(\}

2. 双胞胎数

10分

题目描述

除1和它本身外,不能被其它整数整除的正整数称为素数(注:1不是素数,2是素数)。若两素数之差为2 ,则称两素数为双胞胎数,给定一段连续的正整

数,请判断其中有多少对双胞胎数。要求将判断某数是否素数写成函数。

输入描述

输入数据包含2个正整数A和B(0

输出描述

请判断并输出[A,B]范围内一共有多少对双胞胎数。

样例输入

31 601

样例输出

22 【参考答案】

#include int prime(int x) { int i,k;

if(x<2) return 0; k=sqrt(x);

for(i=2;i<=k;i++)

if (x%i==0) return 0; return 1; }

void main()

{ int i,n=0,a,b;

scanf(\ for(i=a;i<=b-2;i++)

if (prime(i)&&prime(i+2)) n++;

printf(\}

C语言2作业4

一、选择题 (20分)

1.下列能正确定义一维数组a的语句是____。

A.int a(10); B.int n=10,a[n];

C.int n;scanf(\,&n);int a[n]; D.#define n 10 int a[n];

[D]

A. A B. B C. C D. D

2分

2.若有定义语句“int a[10];”则下列对a中数组元素正确引用的是______。

[A]

A. a[10/2–5] B. a[10] C. a[4.5] D. a(1)

2分

3.设有程序: main()

{ int i,a[11];

printf(\给数组赋值:\\n\; for (i=0;i<=10;i++)

scanf(\,( )); ... ...

printf(\输出数组:\\n\; for(i=0;i<=10;i++)

printf(\; }

则在程序中的两个园括号中分别应填入:______

[C]

2分

A. &a[i]和&a[i] B. a[i]和&a[i] C. &a[i]和a[i] D. a[i]和a[i]

4.阅读程序:

#include void main()

{ int a[2]={0},i,j,k=2; for(i=0;i

以上程序的输出结果是____。

[D]

2分

A. 1 B. 2 C. 3 D. 不确定的值

5.若定义数组int a[10] ,其最后一个数组元素为______。

[C]

A. a[0] B. a[1] C. a[9] D. a[10]

2分

6.若定义数组并初始化int a[10]={ 1,2,3,4},以下哪一个不成立______。

[B]

2分

A. a[8] 的值为0 B. a[1] 的值为1 C. a[3] 的值为4 D. a[9] 的值为0

7.在定义一个一维数组时,不能用来表示数组长度的是______。

[D]

2分

A. 常量 B. 符号常量 C. 常量表达式 D. 已被赋值的变量

8.若float型变量占用4个字节,有定义float a[20]={1.1,2.1,3.1};则数组a在内存中所占的字节数是______。

[D]

A. 12 B. 20 C. 40 D. 80

2分

9.以下程序的输出结果是______。 #include void 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(\}

[B]

A. 20 B. 21 C. 22 D. 23

2分

10.有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\}

执行后输出结果是_______。

[D]

A. 58 B. 56 C. 45 D. 24

2分

二、程序设计题 (20分) 1. 与平均值最接近的数

10分

题目描述

输入n(n≤20)和n个实数,输出平均值及与平均值相差最小的数(若有多个,只需输出第一个)。

输入描述

输入n和n个实数,各数之间用空格分隔

输出描述

第一行输出平均值,第二行输出与平均值相差最小的数。输出结果均保留两位小数。

样例输入

6 2.3 4 -5 8.5 -9 15

样例输出

2.63 2.30

【参考答案1】

【参考答案2】 #include #include #define N 20 void main()

{ double x[N],v,d; int i,n;

scanf(\

for(i=0,v=0;i

for(i=1;i

if(fabs(d-v)>fabs(x[i]-v)) d=x[i];

printf(\}

#include #include #define N 20 void main() { double a[N],v=0; int i,k=0,n; scanf(\// 实际元素个数 for(i=0;i

10分

题目描述

输入n(n≤20)和n个整数放在一维数组中,找出其中最大的数,将它与数组最前面的元素交换后输出这些数。 输入描述

【参考答案2】 #include void main() 输出描述

{ int a[20],max,k,i,n; 输出数据占一行,数据间用一个空格分开。 scanf(\样例输入

for(i=0;i

scanf(\样例输出

max=a[0]; 112 99 34 78 67

k=0; // 用来记录最大元素下标 【参考答案1】

for(i=1;i

if(a[i]>max) #define N 20

{ max=a[i]; // max放最大元素值 void main()

k=i; } // 还要记录最大元素下标 { int a[N],n;

a[k]=a[0];a[0]=max; //原元素值在max中 int i,k=0,t;

for(i=0;i

printf(\ for(i=0;i

} scanf(\

// 思考:若交换时用语句t=a[0];a[0]=max; for(i=1;i

// max=t; 有何问题? if(a[k]

t=a[k];a[k]=a[0]; a[0]=t; for(i=0;i

printf(\ printf(\ }

C语言2作业5

一、判断题 (12分)

1. 如果想使一个数组中全部元素的值为1,可以写成 int a[10]={1*10};

2分

2. C允许对数组的大小作动态定义,即可用变量定义数组的大小。

2分

3. 数组定义 int a[10]; 也可以写成 int a(10); 。

2分

4. 在对全部数组元素赋初值时,可以不指定数组长度。

2分

5. 数组定义 int a[10]; 表示数组名为a,此数组有10个元素。

2分

6. 数组定义 int a[10]; 表示数组名为a,此数组有10个元素,第10个元素为a[10]。 2

二、选择题 (8分)

1.下面的程序中哪一行有错误____。 #include void main()

{ float array[5]={0.0}; //第A行 int i;

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

scanf(\ for(i=1;i<5;i++)

array[0]=array[0]+array[i];//第B行 printf(\第C行 }

[D]

2分

A. 第A行 B. 第B行 C. 第C行 D. 没有

2.int a[4]={5,3,8,9};其中 a[3]的值为______。

[D]

A. 5 B. 3 C. 8 D. 9

2分

A. int N=5,b[N][N]; B. int a[1][2]={{1},{3}}; C. int c[2][]= {{1,2},{3,4}}; D. int d[3][2]={{1,2},{34}}; 6.有以下程序 main()

{ int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2;

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

{ printf(\}

执行后输出结果是______。 [C]

A. 4 5 6 B. 2 5 8 C. 3 6 9 D. 7 8 9 7.以下程序的输出结果是_______。 main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\}

[B]

A. 3 B. 4 C. 1 D. 9

8.设int a[][4]={1,2,3,4,5,6,7,8,9};则数组a的第一维的大小是 [B]

A. 2 B. 3 C. 4 D. 无确定值 9.以下程序的输出结果是_________ main()

{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++)

for(j=0;j<=i;j++)s+=a[i][j]; printf(\}

[A]

A. 18 B. 19 C. 20 D. 21 10.有以下程序 main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\}

程序运行后的输出结果是______。 [B]

A. 11 B. 19 C. 13 D. 20

2分2分2分2分2分

二、程序填空题 (5分)

1. 输出以下图形:

1 2 2 2 2 2 1 3 1 2 2 2 1 4 3 3 1 2 1 4 4 3 3 3 1 4 4 4 3 3 1 5 1 4 4 3 1 5 5 5 1 4 1 5 5 5 5 5 1 #include int main()

{ int a[7][7]; int i,j;

for (i=0;i<7;i++) for (j=0;j<7;j++)

{ if (__(1)__) a[i][j]=1;

else if (ij&&i+j<6) a[i][j]=3; else if (__(3)__) a[i][j]=4; else a[i][j]=5; }

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

printf(\ printf(\ }

}

(1)答案 2分

i == j || i + j == 6

(2)答案 2分

a[i][j]=2

(3)答案 1分

i6

三、程序设计题 (20分)

1. 输出矩阵中每行最大值 题目描述

10分

输入一个3行5列的矩阵数据,输出矩阵中每行最大值. 输入描述

输入3行5列共15个整数。 输出描述

输出每行的最大值。每个最大值占一行 样例输入 6 7 8 2 8 0 -3 4 5 9

5 6 1 2 0 样例输出 8 9

6

【参考答案】

#include void main()

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

scanf(\ for(i=0;i<3;i++) {

max=a[i][0]; // 每行第一个元素作为找该行最大值的初始值 for(j=1;j<5;j++)

if(max

2. 计算对角线元素和 题目描述 求一个 N×N(N不超过10) 矩阵两条对角线上元素之和(每个元素只加一次)。 输入描述

输入一个整数表示矩阵的阶数,再输入矩阵的内容,设元素值均为整数。 输出描述

输出其对角线元素之和(每个元素只加一次) 【参考答案2】 样例输入 #include 输入样例1: #define N 10 3 void main() 2 3 4 { int a[N][N],i,j,sum=0,n; 5 6 7 scanf(\9 12 6 for(i=0;i

if(i==j || i+j==n-1) // 对角线元素 sum+=a[i][j]; } printf(\} 5 6 9 4 9 7 8 3

5 1 7 6 样例输出 输出样例1: 27

输出样例2: 51

【参考答案3】 #include #define N 10 void main() { int a[N][N],i,j,sum=0,n; scanf(\【参考答案1】 for(i=0;i for(j=0;j

sum+=a[i][i]; // 加主对角线元素

if(i!=n-1-i) sum+=a[i][n-1-i]; // 加副对角线元素 }

printf(\}

C语言2作业8

一、选择题 (20分)

1.下面程序的输出结果是____。#include void main( )

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

n[i+1][j+1]+=n[i][j]; printf(\}

[C]

A. 14 B. 0 C. 6 D. 不确定 2.下面程序的输出结果是____。

2分

#include main( )

{ int a[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4}; int i,j,n; n=9; i=n/5;

j=n-i*5-1;

printf(\}

[B]

A. 6 B. -3 C. 2 D. 不确定

3.若有定义char st[20]=\,则st中所存放字符串的长度和数组st的长度分别是____。 [C]

A. 20和20 B. 13和20 C. 5和20 D. 9和9

4.若有定义char s[]=\,则s中所存放的字符串的长度是____。 [A]

A. 9 B. 12 C. 13 D. 14 5.若有定义和语句:

char s[10]; s=\; 则结果是_____。 [D]

A. 输出 abcd B. 输出 a C. 输出 adcb D. 编译不能通过 6.若给出以下定义: char x[]=\

char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为_____。 [C]

A. 数组x和数组y等价 B. 数组x和数组y的长度相同 C. 数组x的长度大于数组y的长度 D. 数组y的长度大于数组x的长度 7.下面程序的输出结果是____。 #include void main()

{ char s[]=\ int v[4]={0},k,i;

for (k=0;s[k]!='\\0';k++){ switch(s[k]) { case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++;

2分2分2分2分2分

}

for(k=0; k<4;k++) printf(\}

[B]

A. 4 2 1 1 B. 0 0 0 8 C. 4 6 7 8 D. 8 8 8 8

8.设已定义char a[10]和 int j,则下面输入函数调用中错误的是_________。 [B]

A. scanf(\

B. for(j=0;j<9;j++) scanf(\C. gets(a);

D. for(j=0;j<9;j++) scanf(\9.下列程序的输出结果是________。 main()

{char ch[7]={\int j,s=0;

for(j=0;ch[j]>='0'&&ch[j]<='9';j+=2) s=10*s+ch[j]-'0'; printf(\}

[C]

A. 12ba56 B. 66521 C. 6 D. 62

10.设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是_______。 [D]

A. x[8]=\for(j=0;j<7;j++) x[j]=getchar();

2分2分2分2分

二、程序填空题 (10分)

1. 功能:产生并输出杨辉三角的前七行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 #include void main ( ) {

int a[7][7]; int i,j,k;

for (i=0;__(1)__;i++) {

a[i][0]=1; a[i][i]=1; }

for (i=2;i<7;i++)

5分

for (j=1;j

a[i][j]= a[i-1][j-1]+__(2)__; for (i=0;i<7;i++) {

for (j=0;i+1>j;j++)

printf(\ printf(\ }

}

(1)答案 2分

i<7

(2)答案 2分

a[i-1][j]

(3)答案 1分

a[i][j]

2. 功能:输入一行电报文字,要求将电报内的各字母转换为其对应的下一个字母,即A转换为B,B转换为C,C转换为D,依次类推,其中Z转换为A。 #include int main() {

char str[101]; int i,j;

printf(\ __(1)__;

for(i=0;__(2)__;i++) { if(str[i]=='z') str[i]='a'; else if(str[i]=='Z') str[i]='A'; else __(3)__; }

printf(\ __(4)__; return 0;

}

5分

(1)答案 1分

gets(str)

(2)答案 2分

str[i]!='\\0'

(3)答案 1分

str[i]+=1

(4)答案 1分

puts(str)

三、程序设计题 (20分)

1. 矩阵乘法 题目描述

给定2个矩阵A和B,请计算A * B.

(题目测试数据会确保A*B有意义) 输入描述

输入数据首先给出4个正整数A1,A2,B1,B2(1<=A1,A2,B1,B2<=10),然后是A1行A2列的整数,再然后是B1行B2列的整数,分别表示矩阵A和B. 输出描述

请计算并输出矩阵A和B相乘的结果(结果的每个元素都在32位整数范围之内),输入和输出格式参见样例. 样例输入 2 3 3 2 1 2 0 2 0 4 1 4 0 2

3 0 样例输出 1 8

14 8

10分

【参考答案】 #define N 10

#include void main()

{ int A[N][N],B[N][N],C[N][N],A1,A2,B1,B2; int i,j,k;

scanf(\ for (i=0;i

for(j=0;j for(i=0; i

2. 回文串 题目描述

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。 输入描述

每组测试数据包含一个字符串。 输出描述

如果一个字符串是回文串,则输出\否则输出\样例输入 【参考答案2】 level #include abcde void main() noon { char s[100]; haha int i,j; 样例输出 gets(s); yes for(j=0;s[j]!='\\0';j++); no for(i=0,j--;i

【参考答案】 #include void main()

{ char s[100]; int i,j; gets(s);

for(j=0;s[j]!='\\0';j++); for(i=0,j--;i

{ printf(\ printf(\}

else printf(\} 【参考答案3】 #include void main() { char s[100]; int i,j,flag=1; gets(s); for(j=0;s[j]!='\\0';j++); for(i=0,j--;i

一、判断题 (8分)

1. 字符常数和字符串常数的存储是相同的,都是以字符的ASCII码值进行存放。

2. 用gets函数可以接收一个含有空格的字符串。

3. 用printf函数输出一个字符串时,格式字符为%S,输出项可以是此字符串或存放此字符串的数组的数组名。

4. char c[]=\是一个合法的为字符串数组赋值的语句。

2分2分2分2分

二、选择题 (20分)

1.有定义语句:int b; char c[10];,则正确的输入语句是( )。 [B]

A. scanf(\scanf(\2.下列数组s中所存放字符串的长度为____。 char s[]=\ [C]

A. 9 B. 10 C. 11 D. 18

3.有数组定义语句“char a[20];”,则正确的输入语句为____。 [D] A. scanf(\,&a); B. scanf(\,a[]); C. gets(a[20]); D. gets(a); 4.有以下程序

#include void main()

{ char s[][10]={\ printf(\}

执行后输出结果是_____。 [C]

A. n,two B. t,one C. w,one D. o,two

5.下面程序的功能是将字符串中所有的字符c删除。__(1)__处应填? #include void main()

{ char s[80]; int i,j;

2分2分2分2分

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

Top