C语言编程第六章作业答案

合集下载

c语言第六章 答案(全)

c语言第六章 答案(全)

6.1用筛选法求100以内的素数。

参考答案如下:# include “math.h”main(){ int i,j,a[101];for(i=1;i<=100;i++) a[i]=i; /*初始化数组*/a[1]=0; //1不是素数,所有将a[1]赋值为0for(i=2;i<=sqrt(100);i++) //循环2,3,4-----10if(a[i]!=0) //只要a[i]不是0,那么i就是素数,再把100以内该素数的倍数赋值为0 for(j=i+1;j<=100;j++) //因为给素数的倍数肯定不是素数if (a[j]!=0&&a[j]%i==0) a[j]=0;for(i=1;i<=100;i++) //输出所有素数,只要不是素数的值通过上面for语句赋值为0了if (a[i]!=0) printf(“%d ”,a[i]);//即只要a[i]不是0,那么i就是素数}算法思想:首先,将1,2,3---100存在数组a的a[1],a[2],a[3]----a[100]中,即计算时数组元素下标就表示对应的自然数。

然后从2,3到10中的素数,逐一将10以内的素数的倍数的元素置为0(对应的自然数就是合数)。

最后,将所有素数输出(对应的元素值不为0就是素数)。

6.2用选择法对10个数进行排序(从大到小)。

参考答案如下(降序排列):用逐个比较的方法进行。

*/#include <stdio.h>main(){ int a[10],i,j,k,x;printf("Input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=0;i<9;i++) //10个数要排9趟,每趟确定a[i],即从a[i]到a[n-1]找到最大的数// 用k记录其下标,然后a[k]和a[i]交换{ k=i; //假设当前无序序列第一个数为最大数for(j=i+1;j<10;j++) //从下一个数开始到最后去找//是否有更大的数if(a[j]<a[k]) k=j; //若有,则把下标记录在k变量中if(i!=k) //将找到的最大数k下标元素和当前的第一个元素i下标元素交换{ t=a[i]; a[i]=a[k]; a[k]=t; }}printf("The sorted numbers:\n");for(i=0;i<10;i++)printf("%d ",a[i]);}6.3 求一个3*3的整型矩阵对角线元素之和参考答案如下:(思考如果求N*N的整型矩阵对角线元素之和怎么修改程序)main(){ int a[3][3],i,j,sum;for(i=0;i<3;i++) //输入3行3列的矩阵{printf("\nInput three integar for %d line",i+1);for(j=0;j<3;j++)scanf("%d",&a[i][j]);}printf("\nThe array is:\n");for(i=0;i<3;i++) //输出3行3列的矩阵{ for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("\n");}sum=0; //sum累加器,初值为0for(i=0;i<3;i++) //将对角线的元素值累加到sum中sum=sum+a[i][i];for(i=2;i>=0;i--) //将反对角线的元素值累加到sum中sum=sum+a[i][2-i];sum=sum-a[1][1]; //a[1][1]加了2次,所以减去一次printf("sum=%d",sum);}思考如果求N*N的整型矩阵对角线元素之和怎么修改程序?参考答案如下:#define N 5main(){ int a[N][N],i,j,sum;for(i=0;i<N;i++){printf("\nInput %d integar for %d line",N,i+1);for(j=0;j<N;j++)scanf("%d",&a[i][j]);}printf("\nThe array is:\n");for(i=0;i<N;i++){ for(j=0;j<N;j++)printf("%5d",a[i][j]);printf("\n");}sum=0;for(i=0;i<N;i++)sum=sum+a[i][i];for(i=N-1;i>=0;i--)sum=sum+a[i][N-1-i];if((N-1)%2==0) sum=sum-a[(N-1)/2][(N-1)/2]; //当N为偶数时,//没有叠加两次的中间对角线元素printf("sum=%d",sum);}6.4已有一个排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中。

C语言第6章习题解答

C语言第6章习题解答

第6章函数和模块设计【习题6-1】更正下面函数中的错误。

(1)返回求x和y平方和的函数。

(2)返回求x和y为直角边的斜边的函数。

sum_of_sq(x,y) hypot(double x,double y){ {double x,y; h=sqrt(x*x+y*y);return(x*x+y*y); return(h);} }程序如下:/*c6_1(1).c*/ /*c6_1(2).c*/(1) (2)double sum_of_sq(double x,double y) double hypot(double x,double y) { {return(x*x+y*y); double h;} h=sqrt(x*x+y*y);return(h);}【习题6-2】说明下面函数的功能。

(1)itoa(int n,char s[ ])(2)int htod(char hex [ ]){ { int i,dec=0;static int i=0,j=0; for(i=0;hex[i]!='\0';i++)int c; { if(hex[i]>='0'&&hex[i]<='9') if(n!=0) dec=dec*16+hex[i]-'0';{ if(hex[i]>='A'&&hex[i]<='F') j++; dec=dec*16+hex[i]-'A'+10;c=n%10+'0'; if(hex[i]>='a'&&hex[i]<='f') itoa(n/10,s); dec=dec*16+hex[i]-'a'+10;s[i++]=c; }} return(dec);else }{ (3)void stod(int n)if(j==0) s[j++]='0'; { int i;s[j]='\0'; if(n<0){ putchar('-');n=-n;} i=j=0; if((i=n/10)!=0) stod(i);} putchar(n%10+'0');} }功能:(1)(略)(2)(略)【习题6-3】编写已知三角形三边求面积的函数,对于给定的3个量(正值),按两边之和大于第三边的规定,判别其能否构成三角形,若能构成三角形,输出对应的三角形面积。

C语言第6章习题答案

C语言第6章习题答案
(2) #include <stdio.h> #include <stdlib.h> void inputdata(int a[],int n); void process(int a[],int n); void outputdata(int a[],int n); int main() {
int a[10],n=10; inputdata(a,n); outputdata(a,n); process(a,n); outputdata(a,n); system("Pause"); return 0; } void inputdata(int a[],int n) //0~99 之间的数 {
string_b=You are a student.
(5) A (10) D (15) A
(16) A
string_a=I am a teacher. string_b=I am a teacher. 4、程序填空 (1) *p != '\0', *p-'0', j— (2) i <strlen(str), j=i, k+1 (3)a+i, (char)(n%10) + '0' (4)*pk = i, a,n,i+1,pk (5) s1++, *s2, s1=p 5、编程题 (1) #include <stdio.h> int main() { int a=3,b=7,c=2; int *ptra = &a,*ptrb = &b,*ptrc = &c; int temp; printf("a=%d,b=%d,c=%d\n",a,b,c); printf("*ptra=%d,*ptrb=%d,*ptrc=%d\n",*ptra,*ptrb,*ptrc); if ( *ptra > *ptrb ) {

游洪跃C语言程序设计第6章 习题解答

游洪跃C语言程序设计第6章 习题解答
return dt.day;
break;
case 2:/* 2月份*/
return 31 + dt.day;
break;
case 3:/* 3月份*/
if (IsLeapYear(dt.year))
{/*闰年*/
return 31 + 29 + dt.day;
}
else
{/*平年*/
return 31 + 28 + dt.day;
}
else
{/*平年*/
return 31 + 28 + 31 + 30 + 31 + dt.day;
}
break;
case 7:/* 7月份*/
if (IsLeapYear(dt.year))
{/*闰年*/
return 31 + 29 + 31 + 30 + 31 + 30 + dt.day;
}
else
答案:A
7.有以下程序:
/*文件路径名:ex5_1_7\main.c */
#include <stdio.h>/*标准输入/输出头文件*/
int main(void)/*主函数main() */
{
int c = 168;/*定义变量*/
printf("%d\n", c | c);/*输出c | c */
{/*闰年*/
return 31 + 29 + 31 + 30 + dt.day;
}
else
{/*平年*/
return 31 + 28 + 31 + 30 + dt.day;

c语言课后答案第四版第六章答案

c语言课后答案第四版第六章答案

c语言课后答案第四版第六章答案《C语言课后答案(第四版)第六章详细解析:助你轻松掌握章节知识点》。

亲爱的在学习C语言的过程中,课后习题可是巩固知识的好帮手呢。

今天呀,咱们就一起来看看C语言第四版教材第六章的课后答案,顺便讲讲为啥是这样的答案,让你真正把知识点搞懂。

习题1(假设题目是关于数组的简单定义和使用)。

题目:定义一个包含5个整数的数组,并给数组元素赋值,然后输出数组中的所有元素。

答案代码示例:#include <stdio.h>.int main() {int arr[5] = {1, 2, 3, 4, 5};int i;for (i = 0; i < 5; i++) {printf("%d ", arr[i]);}.return 0;}.原因讲解:- 首先呢,`int arr[5]` 这行代码就是定义了一个能装5个整数的数组,就好比你准备了5个小盒子来放整数。

- 然后 `{1, 2, 3, 4, 5}` 就是给这5个小盒子分别放上了1、2、3、4、5这几个数字。

- 那个 `for` 循环呀,就像是你依次去打开这5个小盒子,把里面的数字拿出来给大家看。

`i` 从0开始,因为数组的下标是从0开始计数的哦,一直到 `i < 5`,也就是把5个小盒子都打开看一遍,每次通过 `arr[i]` 来取出对应小盒子里的数字,再用 `printf` 函数打印出来。

案例分析:比如说,你要记录班上5个同学的考试成绩,就可以用这样的数组来存。

每个同学的成绩就放在对应的小盒子(数组元素)里,需要查看成绩的时候,就像上面代码那样一个一个拿出来看。

习题2(假设题目是关于函数调用和数组作为参数传递)。

题目:编写一个函数,接受一个整数数组和数组的大小作为参数,计算数组中所有元素的和并返回。

答案代码示例:#include <stdio.h>.int sumArray(int arr[], int size) {int sum = 0;int i;for (i = 0; i < size; i++) {sum += arr[i];}.return sum;}.int main() {int arr[5] = {1, 2, 3, 4, 5};int total = sumArray(arr, 5);printf("数组元素的和是:%d\n", total);return 0;}.原因讲解:- `sumArray` 这个函数呢,它接受一个整数数组 `arr` 和数组的大小 `size`。

C语言第六章习题答案

C语言第六章习题答案

6.1 用筛选法求100之内的素数. #include <stdio.h>#define N 101void main(){ int i,j,line,a[N];for(i=1;i<=100;i++)a[i]=i;a[1]=0;for(i=2;i<sqrt(100);i++)for(j=i+1;j<=100;j++){ if(a[i]!=0 && a[j]!=0) if(a[j]%a[i]==0)a[j]=0;}printf("n");for(i=2,line=0;i<=100;i++) { if(a[i]!=0){ printf("%5d",a[i]); line++;if(line==10){ printf("n");line=0;}}}}6.2 用选择法对10个数排序.#define N 10main(){int i,j,min,temp,a[N];printf("请输入十个数:n"); for (i=0;i<=10;i++){ printf("a[%d]=",i);scanf("%d",&a[i]);}printf("n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("n");for (i=1;i<=9;i++){ min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j]) min=j; temp=a[i];a[i]=a[min];a[min]=temp;}printf("n排序结果如下:n");for(i=0;i<N;i++)printf("%5d",a[i]);}6.3 对角线和:main(){float a[3][3],sum=0;int i,j;printf("请输入矩阵元素:n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%f",&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("对角元素之和= 6.2f",sum); }6.4 插入数据到数组{ int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j;printf("初始数组如下:");for (i=0;i<10;i++)printf("%5d",a[i]);printf("n");printf("输入插入数据:");scanf("%d",&number);end=a[9];if(number>end)a[10]=number;else{ for(i=0;i<10;i++){ if(a[i]>number){ temp1=a[i];a[i]=number;}for(j=i+1;j<11;j++){ temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}for(i=0;j<11;i++)printf("a%6d",a[i]);}6.5 将一个数组逆序存放。

C语言6章作业答案

C语言6章作业答案

6.3#include <stdio.h>void main(){int a[3][3],sum=0;int i,j;printf("enter data:\n");for (i=0;i<3;i++)for (j=0;j<3;j++)scanf("%d",&a[i][j]);for (i=0;i<3;i++)for(j=0;j<3;j++)if(i==j||i+j==2)sum=sum+a[i][j];printf("sum=%6d\n",sum);}6.4解一:#include <stdio.h>void main(){ int a[11]={1,4,6,9,13,16,19,28,40,100}; int number,i,j;printf("array a:\n");for (i=0;i<10;i++)printf("%d ",a[i]);printf("\n");printf("insert data:");scanf("%d",&number);if (number>a[9])a[10]=number;elsefor (i=0;i<10;i++)if (a[i]>number){ for(j=9;j>=i;j--) //从后往前移a[j+1]=a[j];a[i]=number;break;}printf("Now array a:\n");for (i=0;i<11;i++)printf("%d ",a[i]);printf("\n");}解二:#include <stdio.h>void main(){ int a[11]={1,4,6,9,13,16,19,28,40,100}; int number,i,j;printf("array a:\n");for (i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert data:");scanf("%d",&number);for(i=9;i>=0&&a[i]>number;i--)a[i+1]=a[i];a[i+1]=number;printf("Now array a:\n");for (i=0;i<11;i++)printf("%5d",a[i]);printf("\n");}6.5#include <stdio.h>#define N 5void main(){ int a[N],i,temp;printf("enter array a:\n");for (i=0;i<N;i++)scanf("%d",&a[i]);printf("array a:\n");for (i=0;i<N;i++)printf("%4d",a[i]);for (i=0;i<N/2;i++) //循环的作用是将对称的元素的值互换{ temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nNow,array a:\n");for (i=0;i<N;i++)printf("%4d",a[i]);printf("\n");}6.8解一:设置两个标志变量:flag用来标记数组是否有鞍点,flag1用来标记第maxj列上是否有鞍点。

c语言教学资料—第6章课后答案.docx

c语言教学资料—第6章课后答案.docx

第6章练习与思考1.指针变量有哪几种运算类型?除了一般变量能做的它都能做以外,还有取地址和取内容运算。

2.有一个4x4的矩阵,试用指针变量按照4行4列格式,输岀矩阵中各元素的值。

#include "stdio.h"void main(){int 询4][4]={{1,1丄1},{1丄1,1},{1丄1,1},{1,1,1,1}};int *p=a;for(i=0;i<4*4;i++){ printf(n%3d",*(p+i));if((i+l)%4=0)printf(H\n H);}}3•输出一个字符串,将这个字符串屮大写字母改为小写字母,第一个字母变大写。

#include "stdio.h"void main(){char a[100],*p 二NULL;int i;printf(n Please input a string:\n H);gets(a);P=a;if(*p>=,a,&&*p<=,z,)*p=*p・32;for(i=l;a[i]!='\O f;i++){if(*(p+i)>='A '&&*(p+i)v=Z) *(p+i)=*(p+i)+32;}puts(a);}4.指向函数的指针有哪些特点?(1)可以通过调用指向函数的指针来调用函数。

(2)对于已定义的函数指针可以指向返回值类型相同的不同函数。

(3)函数指针可做函数的参数。

5.编写程序,在己知字符串str中截取一子串。

要求该子串是从血的第m个字符开始, 由n个字符组成。

#include "stdio.h"void main()char str[100],s[100];char *pl=str,*p2=s;int i,m,n;printf(n please input string:\n");scanf(n%s n,str);printf(”please input m,n:\n n);scanf("%d,%d",&m,&n);for(i=0;i<n;i++)*(p2+i)=*(pl+m+i);for(i=0;*(p2+i)U\0:i++) prin(f(”%c”,*(p2+i));}6.编写程序,利用指针将二维数组屮各元素输出。

C语言第六章习题带答案

C语言第六章习题带答案

练习6-1答案一、选择题1.已知函数abc的定义为:void abc(){……}则函数定义中void的含义是( A )。

A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回C.执行函数abc后,可以返回任意类型 D.以上三个答案全是错误的2.已知:int p();,p是( C )。

A.int型变量B.函数p的调用C.一个函数声明,该函数的返回值是int型的值D.强制类型转换表达式中的变量3.以下正确的函数形式是( D )。

A.double fun(int x, int y) B.fun(int x, y){ z=x+y; return z; } { int z; return z; }C.fun(x, y) D.double fun(int x, int y) { int x, y; double z; z=x+y; return z; } { double z; z=x+y; return z; }4.以下说法正确的是( C )。

A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值表达式的类型不一致,以函数值类型为准D.如果形参与实参的类型不一致,以实参类型为准5.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。

A.float 型B.int型C.long型D.double型6.下面函数调用语句含有实参的个数为( B )。

func((exp1, exp2), (exp3, exp4, exp5));A.1 B.2 C.4 D.57.以下程序的功能是计算函数F(x, y, z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。

#include <stdio.h>#include <math.h>float f(float, float);main(){float x, y, z, sum;scanf("%f%f%f", &x, &y, &z);sum=f( ①B )+f( ②C ); (注:或者选择sum=f( ①C )+f( ②B ))printf("sum=%f\n", sum);}float f(float a, float b){float value;value=a/b;return(value);}①A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y②A.x-y, x+y B.x+y, x-y C.z+y, z-y D.z-y, z+y二、填空题8.以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。

c语言第六章函数习题答案

c语言第六章函数习题答案

c语言第六章函数习题答案C语言第六章函数习题答案在C语言学习的过程中,函数是一个非常重要的概念。

函数不仅可以提高代码的可读性和可维护性,还可以使程序模块化,提高代码的复用性。

在C语言的第六章中,我们学习了关于函数的一些基础知识,并进行了一些习题的练习。

下面,我将为大家提供一些常见的函数习题答案,希望能够对大家的学习有所帮助。

1. 编写一个函数,实现两个整数的交换。

```c#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int num1 = 10;int num2 = 20;printf("交换前:num1 = %d, num2 = %d\n", num1, num2);swap(&num1, &num2);printf("交换后:num1 = %d, num2 = %d\n", num1, num2);return 0;}```2. 编写一个函数,实现判断一个数是否为素数。

```c#include <stdio.h>int isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i < num; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数。

\n", num);} else {printf("%d不是素数。

\n", num);}return 0;}```3. 编写一个函数,实现计算一个数的阶乘。

C语言程序设计 第六章 函数 试题及答案

C语言程序设计 第六章 函数 试题及答案
参考答案:B
6.3以下正确的函数定义形式是。
A)double fun(int x,int y) B)double fun(int x;int y)
C)double fun(int x,int y); D)doubel fun(int x;int y);
参考答案:A
*6.4以下正确的函数形式是。
A)double fun(int x,int y){z=x+y;return z;}
C) 7 9 11 D) 7 8 9
参考答案:D
*6.30以下程序的正确运行结果是。
#include<stdio.h>
main()
{int k=4,m=1,p;
p=func(k,m); printf("%d,",p);
p=func(k,m); printf("%d"\n",p);
}
func(int a,int b)
参考答案:B
6.21若使用一位数组名作为函数实参,则以下正确的说法是。
A)必须在主调函数中说明此数组的大小
B)实参数组类型与形参数组类型可以不匹配
C)在被调函数中,不需要考虑形参数组的大小
D)实参数组名与形参数组名必须一致
参考答案:C
6.22以下函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。
参考答案:【1】函数声明【2】函数体
*6.33若输入的值是-125,以下程序的执行结果是。
#include<math.h>
main()
{int n;
scanf("%d",&n);

C语言习题答案(6-7章)

C语言习题答案(6-7章)
#include<stdio.h>
#include<math.h>
main()
{
int x[21],i;
x[1]=0,x[2]=1;
i=3;
do
{
x[i]=x[i-2]+x[i-1];
x[i+1]=fabs((double)(x[i-1]-x[i]));
i=i+2;
}while(i<=20);
for(i=1;i<=20;i++)
解:384
4.编写程序,求 的结果。
解:4037913
5.已知y= ,其中,f(x,n)=1x2/2!+x4/4!…(1)nx2n/(2n)!(n≥0),当x=5.6,n=7时,求y的值。
解:-0.074521
6.编写程序,求三个数的最小公倍数。
#include<stdio.h>
int fun(int x,int y,int z)
(3)最大的超级素数。
解:(1)spn=30(2)sps=10012(3)spm=7393
2.其平方等于某两个整数平方和的正整数称为弦数,例如因52=32+42,故5是弦数,求(121,130)这间的弦数个数以及最大和最小的弦数。
解:n=4 max=130 min=122
3.有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数。
#include<stdio.h>
main()
{
int a[1001],i,s=0,n=1;
for(i=1;i<=1000;i++) a[i]=i;
a[1]=0;

C语言程序与设计 第6章 实验与习题答案

C语言程序与设计 第6章 实验与习题答案

第6章指针及其应用6.3 实验实验任务1 指针的应用1(P194)1.验证性实验(1)输入并运行下面程序,回答题后问题。

# include <stdio.h>main (){ int a = 12 , b = 34 , s , *pa , *pb ;pa = &a ; pb = &b ; s = *pa + *pb ;printf ( " s = %d \n " , s ) ;}①程序的输出结果是s = 46。

②变量pa、pb与变量a、b的区别是pa、pb是指针变量。

③变量a的值是整数12,变量pa 的值是变量a的内存地址。

(2)输入并运行下面程序,回答题后问题。

# include <stdio.h>main (){ int a = 10 , b = 20 , *p = &a , *pa = &a , *pb = &b ;pa = pb ;printf ( " %d %d %d \n " , *p , *pa , *pb ) ;}①程序的输出结果是10 20 20。

②若把“pa = pb ;”改为“*pa = *pb ;”后,程序的输出结果是20 20 20。

(3)输入并运行下面程序,回答题后问题。

# include <stdio.h>main (){ int a[4] = {1 , 2 , 3 , 4 } , *p , i ; p = a ;for ( i = 0 ; i < 4 ; i ++ ){ * ( p + i ) = * ( p + i ) +1 ;printf ( " %d , " , a[i] ) ;}}①程序的输出结果是 2 ,3 ,4 ,5 ,。

②本例对数组的引用方法采用了指针变量指针法和数组名下标法。

(4)输入并运行下面程序,回答题后问题。

河南理工大学C语言课后习题答案精解第六章

河南理工大学C语言课后习题答案精解第六章

a[1][1] a[1][2] a[1][3] 1 0 -1
a[2][1] a[2][2] a[2][3] 2 1 0
a[3][1] a[3][2] a[3][3]
0 1 2
0 1
0
第六章 数组
2. 写出程序的运行结果
(4) 程序四:
#include <stdio.h> main( ) { int i, s; i的ASCII码为105 char s1[100], s2[100]; printf(“input string1:\n”); n的ASCII码为110 gets(s1); printf(“input string2:\n”); gets(s2); s=-5 i=0; while((s1[i]==s2[i]) && (s1[i]!=„\0‟)) i++; if((s1[i] ==„\0‟) && (s2[i]==„\0‟)) s=0; 输入数据: aid else s=s1[i]-s2[i]; printf(“%d\n”,s); and }
B.a[a[4]]
C. a[a[3]]
D. a[a[5]]
第六章 数组
1. 选择题 (6) 要求定义包含8个int类型元素的一维数组,以下错误的定义 语句是 A A. int N=8; B. #define N 3 int a[N]; int a[2*N+2]; C. int a[ ]={0,1,2,3,4,5,6,7} D. int a[1+7]={0}
第六章 数组
3. 程序填空 (3)把一个整数转换成 #include <stdio.h> #define M 80 void main() { long int n=1234567; char s[M]; int j=0; while ( n!=0 ) { s[j]= n%10+’0’; n/=10; j++; } s[j]='\0' ; printf("\n%s",s); }

C第六章习题答案(大题非选做).docx

C第六章习题答案(大题非选做).docx

6-3 (1)#include <iostream>using namespace std;int main(void){int num[10], *p, i, j, temp; cout«**输入10 个整数"vvendl; for(i=0; i<10; i++){ cin»num[订;}for(i=0; i<10; ■++){// 0, 1_________ 8p = &num[i];for(j = i+1; J<10; j++){//1, 2・.・ 9 if(num[i]<=num[J]){p = &num[j];}}cout«*p«endl; temp = *p;*p = num[i]; num[i] = temp;}system(M pause f,);return 0;(2)注:N的数值可以在宏定义中更改,以下是W12的吋候:#include <iostream>using namespace std;#define N 12struct N0DE{int num;NODE *next;};int i:class List{private:NODE list[N];NODE *temp;public:List() {//设置一个结点组成的圈temp = Iist;Iist[0].num = 1 ;Iist[0].next = &list[1];//第一个结点己经完成for(i=1: i<(N-1); ■++){Iist[i].num = i+1:Iist[i].next = &Iist[i+1];}//第二个至倒数第二个已经完成Iist[N-1].num = N;Iist[N-1].next = &list[O];//最后一个结点已经完成void Next2(){temp = temp->next;temp = temp->next;}void Fun(){temp = & list[N-1];//得到链表的最后一个结点地址do{Next2();//当前是0,数到2〃现在temp已经是标号为2的结点的地址了cout«(temp->next)->num«ff M;//$ny出要被删除的结点(p+1) temp->next = (temp->next)->next ;//^ 被删除的结点的前一个(p)和后一个相连接(p+2)}while(temp->next != (temp->next)->next); cout«temp->num;}};int main(void){List one; one.Fun(j; system(ft pause f,); return 0;}(3)#include <iostream>#include <string> using namespace std;#define SIZE 512class Str{private:char str1[SIZE]:char str2[SIZE];char *p;int i, length;public:void set(){cout«ff输入第一个字符串:ff«endl; cin>>str1;cout«ff输人第二个字符串:ft«endl; cin>>str2;}void fun(){Iian(str1, str2):}void Iian(char *m, char *n){ length = strlen(n); for(i=0; i<strlen(n)+1; i++){ P = & n[i];str1 [length+i] = *p;}cout«ft连接之后的结果:\n ft«str1«endl;}};int main(void){ Str one; one.set(); one.funO; system(ft pause f,); return 0;}(4)#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str[SIZE]:int upper, lower, space, number, other, i:public:Str(){upper=Iower=space=number=other=0;void set(){cout«ff输入一个字符ff«endl;gets(str);}void check(){for(i=0; i<strlen(str); i++){if(str[i]>=w A・ && str[i]<="Z>){upper++;}else if(str[i]>=w a w && str[i]<=w z w){lower++;}else if(str[i]=="・){space++;}else if(str[i]>=w O w && str[i]<=w9w){number++;}else{other++;}}}void te11(){check();coutvv"箕冇大写字母ff«upper«ft个,小写字母"«lower«ff个,空格"vvspacevv”个,数字ff«numbervv”个,其他字符■•vvothervv”个”vvendl;}};int main(void){Str one;one.set();one.tel 1();system(ft pause ff);return 0;}(5)代码中要用到strlen函数,所以包含了string头文件,但strcmp函数在string中己经定义,所以下题屮改用Strcmpo#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str1[SIZE];char str2[SIZE];■ nt i;public:void get(){cout«ft输入第一个字符串vvendl;OP+Q(Q+r1\■cout«M输入菊二个字符串:“vvendl; gets(str2);}void fun(){ Strcmp(str1, str2);}void Strcmp(char *m, char *n){int num;for(i=0; i<strlen(str1) || i<strlen(str2); i++){if(str1[i]==str2[i]){num = 0;}else{num = str1[i] - str2[i]; break;}}}};irrt main(void){Str one;one.get();one・fun();system(fl pause f,); return 0;}(6)注意:原有数组是不变的,但指针数组是排序Z后的。

C语言程序设计第六章数组习题及答案

C语言程序设计第六章数组习题及答案

C语言程序设计第六章数组习题及答案1.以下对一维整型数组a的定义,正确的是_。

(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。

(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。

(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。

(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。

(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。

(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。

(2分)#includeint main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ; for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。

C语言谭浩强版本第6章课后练习题答案

C语言谭浩强版本第6章课后练习题答案

第6章课后练习题一、单项选择题1.以下程序执行后,a是:int a =0,i,j;for (i=5;i>0;i--)for(j=0;j<4;j++) a++;A)20B)25C)24D)302.执行以下程序段,正确的是:int x=-1;do {x=x*x; } while(! x);A)循环体将执行一次B)循环体将执行两次C)循环体将执行无限次D)系统将提示有语法错误3.执行以下程序int y=10; do { y - -;} while(- - y); printf("%d\n",y - -);输出的结果是:A)-1B)1C)8D)04.在下列选项中,没有构成死循环的程序段是:A)int i=100 ;while(1){ i=i%100+1;if(i>100) break; }B)for( ; ;) ;C)int k=1000; do{++k;} while(k>=10000);D)int s=36; while(s);--s;5.执行语句: for(i=l;i<4;i++);后,变量i的值是:A)3B)4C)5D)不定6.以下叙述正确的是:A)do-while语句构成的循环不能用其它语句构成的循环来代替。

B)do-while语句构成的循环只能用break语句退出。

C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。

D)用do-while语句构成的循环,在while后的表达式为零时结束循环。

7.下列程序执行后,输出结果是:main(){ int i, j, m=0;for(i=0; i<2; i++)for(j=0; j<2; j++)if(j>=i) m++;printf("%d \n",m);}A)1B)2C)3D)48.以下程序段的执行结果是:int a, y;a=10; y=0;do{ a+=2; y+=a;printf("a=%d y=%d\n",a,y);if(y>20) break;} while(a=14);A)a=12 y=12B)a=12 y=12回车换行a=16 y=28C)a=12 y=12回车换行a=14 y=26D)a=12 y=12回车换行a=14 y=26回车换行a=16 y=28 9.Break语句的正确的用法是:A)无论在任何情况下,都中断程序的执行,退出到系统下一层。

C语言第6章作业(1)参考答案

C语言第6章作业(1)参考答案

第六章数组习题1㈠.填空题:1.若有定义:double w[10];则引用w的元素时下标的上限(最大)是 9 ,下限(最小)是 0 。

2.构成数组的各个元素必须具有相同的数据类型。

㈡.选择题:1.以下关于数组的描述正确的是( C )。

A. 数组的大小是固定的,可以有不同的类型的数组元素。

B. 数组的大小是可变的,所有数组元素的类型必须相同。

C. 数组的大小是固定的,所有数组元素的类型必须相同。

D. 数组的大小是可变的,可以有不同的类型的数组元素。

2.在定义int a[10];之后,对a的元素引用正确的是( D )。

A. a[10]B. a[6.3]C. a(6)D. a[10-10]3.以下正确的是( D )。

A.char a(10); B.int a[ ];C.int k=5,a[k]; D.int a[ ]={1,2,3};4.执行下面的程序段后,变量k的值为( A )。

int k=3, s[2];s[0]=k; k=s[1]*10;A. 不定值B. 33C. 30D. 10㈢.程序阅读题:1.写出以下程序的输出结果。

main(){int a[8]={1,0,1,0,1,0,1,0},i;for(i=2;i<8;i++)a[i]= a[i-1] + a[i-2];for(i=0;i<8;i++)printf(“%d,”,a[i]);}输出结果: 1, 0, 1, 1, 2, 3, 5, 82.如果以下程序运行时输入为如下5个整数:1 2 3 4 5 ,写出输出结果。

main(){ int i,sum=0,a[5];for (i=0; i<=4;i++)scanf(“%d”,&a[i]);for(i=0; i<=4; i++)sum=sum+a[i];printf("%d\n",sum);}输出结果:15㈣程序设计题:1.编写程序,完成输入任意5个实数给一个数组,然后求这些数的平均值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 输入两个正整数m和n,求其最大公约数和最小公倍数。

辗除法——辗转相除法,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。

它是已知最古老的算法,其可追溯至3000年前。

它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

它并不需要把二数作质因子分解。

证明:设两数为a、b(a>b),求它们最大公约数(a、b)的步骤如下:用a除以b,余数为r 1。

若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得r2 .若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。

其最后一个非零余数即为(a,b)。

例如,和7890 的最大公因子是6, 这可由下列步骤看出:a b a mod b7890 51067890 5106 27845106 2784 23222784 2322 4622322 462 12462 12 612 6 0#include<stdio.h>#include<conio.h>main(){int a,b,num1,num2,temp;/*temp主要用来转换大小*/printf("please input two numbers:\n");scanf("%d,%d",num1,&num2);if(num1<num2) /*如果num2比num1大,则执行下面循环体,为调整num1要比num2大*/{temp=num1;num1=num2;num2=temp;}a=num1;b=num2;/*a比b大*/while(b!=0) /*只要b不等于0,就一直执行下面的循环体,直至整除完为止。

*/{temp=a%b;a=b;b=temp;/*以上3句调整了a,b大小,使其整除为止*/}printf("公约数:%d\n",a);printf("公倍数:%d\n",num1*num2/a); /*由公式知*/getch();}评析:关键是判断两数的大小,先排好位置,再大除小,一直除尽即可。

用了if判大小,while 判除尽语句2. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include<stdio.h>#include<conio.h>main(){char c;int letter=0,space=0,digit=0,others=0;printf("please input some characters\n");while((c=getchar())!='\n') /*终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于’\n’,如果不等于,就执行循环体*/{if(c>='a'&&c<='z'||c>='A'&&c<='Z') /*如果满足字符那么就在此条件范围内*/letter++; /*字符累加*/else if(c==' ')space++; /*空格的累加*/else if(c>='0'&&c<='9')digit++;/*数字累加*/elseothers++;/*其他字符累加*/}printf("all in all:letter=%d,space=%d,digit=%d,others=%d",letter,space,digit,others);getch();评析:此程序最主要是用while,if复合语句(利用while语句,条件为输入的字符不为'\n'.)3. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

#include<stdio.h>#include<conio.h>main(){int a,n,count=1;long int sn=0,tn=0; /*长整型变量*/printf("please input a and n\n",a,n); /*打印输出please input a and n */scanf("%d,%d",&a,&n); /*定义输入的a和n都是整型*/while(count<=n) /*while条件语句在count<=n 的情况下执行*/{tn=tn+a; /*一轮中初始值*/sn=sn+tn; /*除最高位的数就是sn*/a=a*10; /*每次以的最高位*10再带入上循环。

*/++count; /*一轮后自加1*/}printf("%ld\n",sn);}4. 输出9*9口诀。

(要求下三角阵)main(){int i,j;for(i=1;i<=9;i++) /*输入整型变量i使其循环9次*/{for(j=1;j<=i;j++) /*i=1时,j循环1次;当i=2时,j循环2次;……i=9时,j循环9次*/ printf("%d*%d=%-2d\t",j,i,i*j); /*输出形式*/printf("\n"); /*每次循环后换行*/}}5. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和于该数本身。

例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

#include"stdio.h"main(){int a,b,c,i,t;for(i=100;i<=999;i++){a=i/100;b=(i-100*a)/10;c=i%10;if((a*a*a+b*b*b+c*c*c)==i)printf("%d ",i);}6. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6=1+2+3.编程找出1000以内的所有完数。

#include<stdio.h>void main(){int m,i,j,s;for(m=6;m<1000;m++) /*m在6到1000内的数,每个循环一次循环体,进行判断*/{s=1;for(i=2;i<m;i++) /*寻找m的所有因子*/if(m%i==0) /*判断i是否为m的因子*/s=s+i;/*每次循环得出的因子想加*/if(m-s==0) /*判断所有的因子加起来是否为m*/{printf("%5d its factors are 1",m); /*输出的格式为m its factors are ……*/for(j=2;j<m;j++) /*为判断出每一个在小于m范围内的因子*/if(m%j==0)printf("%d",j);printf("\n");}}}7. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

#include"stdio.h"main(){int i;float a=1.0,b=2.0,s=0,t;for(i=1;i<=20;i++) /*有20项每一项执行一次循环体*/{s+=(b/a); /*累加分数*/t=a+b;a=b;b=t;/*为了分子,分母的满足条件,因为发现规律中有前一项分子分母和为后一项的分子*/}printf("结果是%f\n",s);}评析:注意是浮点类型,交换变量8. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?#include"stdio.h"main(){int i;float h=100.0,s=0;for(i=1;i<=10;i++) /*共10次执行循环体*/{h=0.5*h;s+=3*h; /*每一次一次落下反弹所经路程为3倍的弹上来的高度,路程用累加*/}s=s-h; /*最后一次并没有落地,因此减去最后反弹上来的高度*/printf("第十次落地路程是%f,第十次反弹高度是%f\n",s,h);}评析:发现3倍的关系,注意最后一次不算反弹上来的路程。

用for语句进行10次循环9. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘了多少。

#include<stdio.h>#include<conio.h>main(){int day,x1,x2;day=9;x2=1;while(day>0) /*在天数大于0的情况下不断循环*/{x1=(x2+1)*2; /*x1作为前一天桃子数,后一天加1个再乘以2即可*/x2=x1;/*转换变量*/day--; /*使其循环9次*/}printf("the total is %d\n",x1);}评析:主要是用while语句,以天数大于0为分界,不断累加与循环。

10. 两个乒乓球队进行比赛,各出三人。

甲队为a,b,c三人,乙队为x,y,z三人。

已抽签决定比赛名单。

有人向队员打听比赛的名单。

a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

#include<stdio.h>#include<conio.h>main(){char i,j,k; /*输入字符变量*/for(i='x';i<='z';i++) /*i属于x和z之间*/for(j='x';j<='z';j++)/* j属于x和z之间*/{if(i!=j) /*如果i与j不同,则执行下面的语句*/for(k='x';k<='z';k++){if(i!='k'&&j!='k')/*I,j,k都不一样,则执行下面语句*/{if(i!='x'&&k!='x'&&k!='z') /*要满足题目条件*/printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);}}}}评析:首先是要判断出I,j,k三者都不一样。

相关文档
最新文档