c语言第六次作业解析
C语言程序谭浩强第四版 第六章课后习题解析
1.程序如下:#include "stdio.h"#include<math.h>void main(){ int i,j,n,a[101];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,n=0;i<=100;i++){if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\n");n=0;}}printf("\n");}运行结果:2.程序如下:#include "stdio.h"void main(){ int i,j,min,temp,a[11];printf("enter data:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");printf("The orginal numbers:\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("\nThe sorted numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}运行结果: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("%3d",&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6d\n",sum); }运行结果:4.程序如下:#include "stdio.h"void main(){ int a[11]={1,4,6,9,12,15,19,32,45,100}; int temp1,temp2,number,end,i,j;printf("arry a:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert data:");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;}}}printf("Now arry a:\n");for(i=0;i<11;i++)printf("%5d",a[i]); printf("\n");}运行结果:5.程序如下:#include "stdio.h"#define N 5void main(){ int a[N],i,temp;printf("enter arry a:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);printf("arry 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,arry a:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");}运行结果:6.程序如下:#include "stdio.h"void main(){ int i,j,n=0,a[31][31]={0};while(n<1||n>30) /*最多可输出30行*/ {printf("请输入杨辉三角形的行数:");scanf("%d",&n);}for(i=0;i<n;i++)a[i][0]=1; /*第一列全置为一*/ for(i=1;i<n;i++)for(j=1;j<=i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/ for(i=0;i<n;i++) /*输出杨辉三角*/{ for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:7.程序如下:#include "stdio.h"void main(){ int a[15][15],i,j,k,p,n;p=1;while(p==1){printf("enter n(n=1--15):");scanf("%d",&n);if((n!=0)&&(n<=15)&&(n%2!=0))p=0;}//初始化for(i=1;i<=n;i++);for(j=1;j<=n;j++);a[i][j]=0;//建立魔方阵j=n/2+1;a[1][j]=1;for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i=i+2;j=j-1;}else{if(i<1) i=n;if(j>n) j=1;}if(a[i][j]==0)a[i][j]=k;else{i=i+2;j=j-1;a[i][j]=k;}}//输出魔方阵for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:(错误)8.程序如下:#include "stdio.h"#define N 4#define M 5void main(){ int i,j,k,a[N][M],max,maxj,flag;printf("please input matrix:\n");for(i=0;i<N;i++)for(j=0;j<M;j++)scanf("%d",&a[i][j]);for(i=0;i<N;i++){max=a[i][0];maxj=0;for(j=0;j<M;j++)if(a[i][j]>max){max=a[i][j];max=j;}flag=1;for(k=0;k<N;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("It is not exist!\n");}运行结果:9.程序如下:#include "stdio.h"#define N 15void main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf("enter data:\n");scanf("%d",&a[0]);i=1;while(i<N){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enter this data again:\n");}printf("\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");while(flag)printf("input number to look for:");scanf("%d",&number);sign=0;top=0;bott=N-1;if((number<a[0])||(number>a[N-1]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Has found %d,its position is %d\n",number,loca+1);sign=1;}else if(number<a[mid])bott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannot find %d.\n",number);printf("continue or not(Y/N)?");scanf("%c",c);if(c=='N'||c=='n')flag=0;}运行结果:(死循环)10.程序如下:#include "stdio.h"void main(){ int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){ printf("please input line %d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!=0;j++){ if (text[i][j]>='A'&&text[i][j]<='Z')upp++;else if (text[i][j]>='a'&&text[i][j]<='z')low++;else if (text[i][j]>='0'&&text[i][j]<='9')dig++;else if (text[i][j]==' ')spa++;elseoth++;}}printf("\nupper case:%d\n",upp);printf("lower case:%d\n",low);printf("digit :%d\n",dig);printf("space :%d\n",spa);printf("other :%d\n",oth); }14.#include<stdio.h>main(){int i,ans;char str1[100],str2[100];printf("input string 1:");gets(str1);printf("input string 2:");gets(str2);i=0;while((str1[i]==str2[i]) && (str1[i]!='\0')) i++;if((str1[i]=='\0') && (str2[i]=='\0'))ans=0;elseans=str1[i]-str2[i];printf("\nans:%d\n",ans);}15.#include<stdio.h>#include<string.h>main(){int i;char str1[100],str2[100];printf("input string 2:");scanf("%s",str2);for(i=0;i<=strlen(str2);i++)str1[i]=str2[i];printf("str1:%s\n",str1); }。
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语言第六章课后题详解
C语言第六章课后题详解第六章课后题(仅供参考)1、用筛选法求100之内的素数。
筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。
1不是质数,也不是合数,要划去。
第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。
2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。
3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。
这样一直做下去,就会把不超过 N的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。
(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。
)公元前250年同样是古希腊的数学家埃拉托塞尼提出一种筛法:“要得到不大于某个自然数N的所有素数,只要在2---N中将不大于的素数的倍数全部划去即可”。
筛法如下:<1> 先将1挖掉(因为1不是素数)。
<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 用3去除它后面的各数,把3的倍数挖掉。
<4> 分别用5…各数作为除数去除这些数以后的各数,能除尽的挖掉,剩下的就是素数。
算法如下:<1> 用数组a[1]……a[100]分别存放1~100各数,先将a[1]挖掉(因为1不是素数),我们可以把挖的数组元素统一置为0,既a[1]=0。
<2> 设第一个除数i=2,<3> 令被除数j为i+1<4> 若a[j]不等于0,用i去除a[j],若能整除则令a[j]=0。
即把a[i]的倍数挖掉。
<4> 下一个被除数,既j=j+1,若j≤100,回到第<4>步。
C语言第五六次作业
——第四弹
。。原来真正变态的是这两作业哇~ 原本是做完第五次作业等大家数分期中考完以后给大家,结果 直接出了第六次。就顺便做了。买一送一还包邮哦亲~ 虽然这两次作业比较难。理解起来困难无比。。不过考试的时 候不会有这么变态的题目啦~放心
当前编程题:11级第五次作业---凸多边形面积1. 【问题描述】给出平面上一组顶点的坐标,计算出它们所围成的凸多 边形的面积。 【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数 N(3≤N≤15),后面紧接着N行,每行两个数字 (由空格隔开),分 别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同, 且按顺时针次序给出。 输入数据确保该多边形是一个凸多边形。 【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮 点数保留两位小数。 【输入样例】 4 3 3 3 0 1 0 1 2 【输出样例】 5.00 【样例说明】输入数据表示了如图所示的四边形。其面积为5.00。 提示:求三角形面积可用海伦公式,求平方根可用<math.h>头文件中 定义的sqrt函数。 【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为: points.c。
当前编程题:11级第五次作业---求两组整数的异或集 3.【问题描述】从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素 不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序 输出(即两组整数集“异或”)。 【输入形式】首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上 输入第二组整数,以一个空格分隔,行末有回车换行。 【输出形式】按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现 的整数,以一个空格分隔各个整数)。 【样例输入】 5 1 4 32 8 7 9 -6 5 2 87 10 1 【样例输出】 87 32 10 9 8 7 4 2 -6 【样例说明】第一组整数为5 1 4 32 8 7 9 -6,第二组整数分别为 5 2 87 10 1。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5 和1),并从大到小顺序排序后结果为87 32 10 9 8 7 4 2 -6。 【评分标准】该题要求输出两组整数的异或集,共有5个测试点,提交程序文件名 为xor.c。
c语言第六次作业解析
第六次作业:指针(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)1.数组元素循环移位有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。
写一函数实现以上功能。
在主函数中输入n及n个整数,输入m (m<n),调用编写的上述函数,然后输出调整后的n个整数。
#include<stdio.h>void main(){void inv(int *p,int n,int m);int n,m,a[20],*p;printf("please input n=");scanf("%d",&n);printf("please input %d numbers:",n);p=a;while(p<a+n)scanf("%d",p++);printf("please input m=");scanf("%d",&m);p=a;inv(a,n,m);printf("the new array:\n");while(p<a+n)printf("%d ",*p++);putchar('\n');}void inv(int *p,int n,int m){int i;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i<m;i++)*(p+i)=*(p+n+i);}2. 矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。
排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。
c语言第六次作业解析
c语⾔第六次作业解析第六次作业:指针(以下题⽬如⽆特殊声明,请使⽤指针技术实现,尽量不要使⽤数组作为形参,也尽量避免使⽤数组下标引⽤数组元素)1.数组元素循环移位有n个整数,使前⾯的各整数顺序向后移动m个位置,后⾯的m个整数则变成最前⾯的m个数。
写⼀函数实现以上功能。
在主函数中输⼊n及n个整数,输⼊m (m#includevoid main(){void inv(int *p,int n,int m);int n,m,a[20],*p;printf("please input n=");scanf("%d",&n);printf("please input %d numbers:",n);p=a;while(pscanf("%d",p++);printf("please input m=");scanf("%d",&m);p=a;inv(a,n,m);printf("the new array:\n");while(pprintf("%d ",*p++);putchar('\n');}void inv(int *p,int n,int m){int i;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i*(p+i)=*(p+n+i);2. 矩阵元素的排序将⼀个5×5的整数型矩阵中各元素重新排序。
排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。
要求编写⼀个函数实现上述排序功能。
在主函数中输⼊该矩阵,调⽤编写的上述函数,然后输出排序后的矩阵。
C语言程序设计教程第六章课后习题参考答案
C语⾔程序设计教程第六章课后习题参考答案P158 1求三个实数最⼤值#includefloat max(float,float,float);int main(){float a,b,c,m;printf("请输⼊三个实数:");scanf("%f %f %f",&a,&b,&c);printf("最⼤数为%f\n",max(a,b,c));return 0;}float max(float a,float b,float c){float t;if(a>b&&a>c)t=a;else if(b>a&&b>c)t=b;elset=c;return t;}P158 2求最⼤公约数最⼩公倍数#includeint fun1(int a,int b);int fun2(int a,int b);int main(){int a,b;printf("请输⼊两个整数:");scanf("%d %d",&a,&b);printf("最⼤公约数为:%d\n",fun1(a,b));int t,r;if(a{t=a;a=b;b=t;}while((r=(a%b))!=0) {a=b;b=r;}return b;}int fun2(int a,int b) {int n;n=(a*b)/fun1(a,b); return n;}P158 3求完全数#includevoid wan(int n); void main(){int n;for(n=1;n<1000;n++) wan(n);printf("\n");}void wan(int n){if(n%i==0)s=s+i;}if(n==s)printf("%d\t",n); }P158 4⽆暇素数#include#includeint nixvshu(int n);int isPrime(int n);int main(){int n,t;printf("⽆暇素数:\n");for(n=100;n<=999;n++) {t=nixvshu(n);if(isPrime(n)&&isPrime(t)) printf("%d\t",n);}printf("\n");return 0;}int nixvshu(int n){int x=0;while(n){x=x*10+n%10;n=n/10;}return x;int i;for(i=2;i<=sqrt(n);i++)if(n%i==0) return 0;return n;}P158 7递归函数#includeint Y(int n){if(n==0)return 0;if(n==1)return 1;if(n==2)return 2;elsereturn (Y(n-1)+Y(n-2)+Y(n-3)); } int main(){int n,k=0;for(n=0;n<=19;n++){printf("%d\t",Y(n));k++;if(k%5==0)printf("\n");}return 0;}P124 6分解质因数#include#includevoid fenjie(int );int main(){int n;printf("请输⼊⼀个正整数:"); scanf("%d",&n);if(isPrime(n)){printf("%d=1*%d\n",n,n);}else{fenjie(n);printf("\n");}return 0;}int isPrime(int n){int i;for(i=2;i<=sqrt(n);i++){if(n%i==0) return 0;}return 1;}int zhi(int n){int m;for(m=2;m<=n;m++){if(isPrime(m)&&(n%m==0)) break;void fenjie(int n){int m;printf("%d=%d",n,zhi(n));while(n>zhi(n)){m=zhi(n);n=n/m;printf("*%d",zhi(n));}}P47 1输出闰年#includeint f(int year);int main(){int year,k=0;for(year=1900;year<=2000;year++){if(f(year)){printf("%d\t",year);k++;if(k%5==0)printf("\n");}}return 0;}int f(int year){if((year%4==0&&year%100!=0)||(year%400==0)) return year;P47 2输出回⽂数#includeint fun(int n);int main(){int n,k=0;for(n=10;n<=2000;n++) {if(n == fun(n)){printf("%d\t",n);k++;if(k%5==0)printf("\n");}}return 0;}int fun(int n){int i=0;while(n>0){i=i*10+n%10;n=n/10;}return i;}P47 3进制转换#includevoid trans(int n,int base); int main()printf("请输⼊要转换的⼗进制数:"); scanf("%d",&n);printf("请输⼊转换的进制:"); scanf("%d",&base);trans(n,base);printf("\n");return 0;}(⽅法⼀)void trans(int n,int base){if(n){trans(n/base,base);if(n%base>=10)switch(n%base){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;}elseprintf("%d",n%base);}}(⽅法⼆)void trans(int n,int base){int r;char c;trans(n/base,base); r=n%base;if(r>=10)c='A'+r-10;elsec='0'+r;printf("%c",c);}}。
C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案
C语言第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#include <stdio.h>void main(){ int a,b,num1,num2,temp;printf("请输入两个正整数:\n");scanf("%d,%d",&num1,&num2);if(num1<num2){temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf("它们的最大公约数为:%d\n",a);printf("它们的最小公倍数为:%d\n",num1*num2/a);}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数. 解:#include <stdio.h>void main(){char c;int letters=0,space=0,degit=0,other=0;printf("请输入一行字符:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z' || c>'A'&&c<='Z')letters++;else if(c==' ')space++;else if(c>='0'&&c<='9')digit++;elseother++;}printf("其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%d\n",letters,space, digit,other);}6.3求s(n)=a+aa+aaa+…+aa…a之值,其中a是一个数字,n表示a的位数。
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语言编程第六章作业答案
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();}评析:关键是判断两数的大小,先排好位置,再大除小,一直除尽即可。
C语言实验报告第6章答案
C语⾔实验报告第6章答案6.2基础实验⼀、程序分析分析以下程序段完成的功能,填写在序号后的空⽩处,并运⾏验证结果。
1. ⊙以下程序的运⾏结果是:_______s=12345↙____________________。
#includeint main( ){ inta[]={1,2,3,4,5},i,j=1,s=0;for(i=4;i>=0;i--){ s=s+a[i]*j;j=j*10;}printf(“ s= %d \n” , s );return 0;}2. 以下程序的运⾏结果是:_____7 5 3______________________。
#includeint main( ){ int k ;int a[3][3]={9,8,7,6,5,4,3,2,1};for(k=0;k<3;k++)printf(“%d ”,a[k][2-k]);return 0;}3. 以下程序的功能是:____查找最⼤值元素及下标_________________。
#includeint main( ){ int i, j ,x =0 ,y = 0 , m ;int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 };m = a [0][0] ;for (i=0 ;i < 3 ;i++)for (j = 0 ; j<3 ; j++ )if ( a[ i] [ j ] >m ){ m = a[ i ][ j ] ;x = i ;printf(“ ( % d , % d ) = % d \n”, x , y,m );return 0;} 运⾏结果:___(1 , 2 ) = 6↙_________________4. 以下程序的的运⾏结果是:__8,I am student!___________________。
#include int main( ){ char s1[50]= “I am ”;char s2[ ]=“student!” ;printf(“%d,”, strlen(s2) );strcat(s1,s2);printf(“%s\n”,s1);return 0;}5.以下程序的运⾏结果是:_______6_____________________。
C语言第六章答案及详解
第六章指针一、选择题1 答案:A分析:本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。
2 答案:B分析:本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。
3 答案:C分析:本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。
4 答案:C分析:本题主要考指针的定义及赋值,开始时使p指向a,q指向b,把它们的值交换,然后再显示。
故得正确答案C。
5 答案:C分析:本题主要考函数指针的定义,函数前面的*号表求返回值是指针类型,void表示返回无值弄的。
故选C。
6 答案:A分析:本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A7 答案:D分析:本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。
B的正确形式是**q=2;C的正确形式应该是q=&p。
8 答案:C分析:本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2。
9 答案:A分析:本题主要考的是变量自加,指针传值,以及指针的赋值。
通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象’a’,由于(*a)++;是实现a所指对象的自加,故由’a’变成’b’,故最终选A。
10 答案:A分析:本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0。
11 答案:C分析:本题考的是指针变量的赋值,虽然p没有赋值,表示没有指向某个具体的对象,但事实上系统会让它随机的指向存储单元里的一个对象,那么它的返回值应该是所指存储单元中的值。
12 答案:B分析:本题主要考函数中参数变量的定义,在B中连续定义两个变量,这在函数中是不可以的。
蓝桥杯第六届c语言试题及答案
蓝桥杯第六届c语言试题及答案蓝桥杯第六届C语言试题及答案1. 题目一:字符串反转编写一个函数,实现字符串的反转。
```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int len = strlen(str);char temp;for (int i = 0; i < len / 2; i++) {temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```答案:函数`reverseString`通过交换字符串的前后字符来实现反转功能。
2. 题目二:计算阶乘编写一个函数,计算并返回一个非负整数的阶乘。
```c#include <stdio.h>unsigned long long factorial(int n) {if (n == 0) return 1;unsigned long long result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;}int main() {int number = 5;printf("Factorial of %d is %llu\n", number,factorial(number));return 0;}```答案:函数`factorial`通过一个循环计算给定数字的阶乘。
3. 题目三:寻找最大值编写一个函数,找出一个整数数组中的最大值。
C语言习题六(数组部分)习题及答案
C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。
A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是 D 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。
A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。
AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。
A)int a[2][]={{1,0,1},{5,2,3}} ;B)int a[][3]={{1,2,3},{4,5,6}} ;C)int a[2][4]={{1,2,3},{4,5},{6}} ;D)int a[][3]={{1,0,1},{},{1,1}} ;7.以下不能对二维数组a进行正确初始化的语句是。
CA)int a[2][3]={0} ;B)int a[][3]={{1,2},{0}} ;C)int a[2][3]={{1,2},{3,4},{5,6}} ;D)int a[][3]={1,2,3,4,5,6} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。
A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。
河南理工大学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
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语言test6答案
1.阅读、调试、运行程序,比较阅读的结果和运行的结果(1)运行结果:(2)运行结果:(3)运行结果:(4)运行结果:(5)运行结果:2. 完善程序,并调试运行1) (1) s[i]!= (2) || (3) s[j]=s[i];2)(1)i=0 (2)'\0' (3)str1[i]-str2[i] 3)(1)j+=2 (2)a[i]>a[j]4)(1)i=1(2)a[i-1](3)a[i]5)(1)&a[i] (2)a[0](3)a[i]6)(1)a[N] (2)a[i]!=k (3)i<N3. 修正程序,并调试运行(1)修正的程序:/**********found**********/else if('0'<=s[i]&&s[i]<='9') /**********found**********/printf("%4d",b[k]);}(2)修正的程序/**********found**********/char a[10];/**********found**********/put (s[i]);(3)修正的程序/**********found**********/(1)s1=0,s2=0,s3=0,s4=0/**********found**********/(2)s2=s2+a[m-1][j] /**********found**********/ (3)for(i=1;i<m-1;i++)/**********found**********/ s=s1+s2+s3+s4(4)修正的程序/**********found**********/ for(i=j+1;i<4;i++)/**********found**********/ break;4.编写程序,并调试运行(1)参考程序#include <stdio.h>#define M 4#define N 3void main(){int a[M][N],b[N][M],c[M][M]; int i,j,k,s;printf("input array a:\n"); for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]); printf("input array b:\n"); for(i=0;i<N;i++)for(j=0;j<M;j++)scanf("%d",&b[i][j]); for(i=0;i<M;i++)for(j=0;j<M;j++){s=0;for(k=0;k<N;k++)s=s+a[i][k]*b[k][j];c[i][j]=s;}for(i=0;i<M;i++){for(j=0;j<M;j++)printf("%4d",c[i][j]); printf("\n");}}(2)参考程序#include "stdio.h"void main(){char str[100];puts("请输入字符串:\n"); gets(str);int i=0;while(str[i]!='\0'){if('A'<=str[i]&&str[i]<='Z') str[i]=str[i]+32;i++;}puts(str);}(3)参考程序#include "stdio.h"void main(){char str[100];int t=0;puts("请输入字符串:\n"); gets(str);int i=0;while(str[i]!='\0'){if(str[i]=='c')t++;i++;}printf("%d",t);}(4)参考程序#include <stdio.h>void main(){int a[20];int i=0,j,m;scanf("%d",&m);if(m>=1&&m<=65535){while(m!=0){a[i]=m%2;m=m/2;i++;}for(j=i-1;j>=0;j--)printf("%d",a[j]);} }(5)参考程序#include <stdio.h>void main(){char m[5][5];int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)m[i][j]='*';for(i=0;i<5;i++){for(j=0;j<5;j++)if(i>j)printf(" ");else printf("%c",m[i][j]); printf("\n");}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六次作业:指针(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)1.数组元素循环移位有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。
写一函数实现以上功能。
在主函数中输入n及n个整数,输入m (m<n),调用编写的上述函数,然后输出调整后的n个整数。
#include<stdio.h>void main(){void inv(int *p,int n,int m);int n,m,a[20],*p;printf("please input n=");scanf("%d",&n);printf("please input %d numbers:",n);p=a;while(p<a+n)scanf("%d",p++);printf("please input m=");scanf("%d",&m);p=a;inv(a,n,m);printf("the new array:\n");while(p<a+n)printf("%d ",*p++);putchar('\n');}void inv(int *p,int n,int m){int i;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i<m;i++)*(p+i)=*(p+n+i);}2. 矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。
排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。
要求编写一个函数实现上述排序功能。
在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。
#include<stdio.h>void main(){void inv(int (*x)[5]);int i,j,a[5][5];int (*p)[5];printf("please input an 5*5 array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("the new array:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}void inv(int (*x)[5]){int i,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。
例如:如用户输入3,则输出“星期三”。
要求:用指针数组的方法来实现。
#include<stdio.h>void main(){int n;char (*p)[3];char a[7][3]={"一","二","三","四","五","六","七"};printf("please input n=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char * strncpy( char *s, char * t, int n) //复制t的前n个字符至sChar * strncat( char *s, char * t, int n) //连接t的前n个字符至s的末尾int strncmp( char *s, char * t, int n) //比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。
#include<stdio.h>#include<string.h>char *strncpy(char *s,char *t,int n){int i,length;length=strlen(s);for(i=0;i<n;i++)*(s+i)=*(t+i);if(length<n)*(s+n)='\0';return(s);}char *strncat(char *s,char *t,int n){int i,length;length=strlen(s);for(i=0;i<n;i++)*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}int strncmp(char *s,char *t,int n){int i;for(i=0;i<n;i++){if(*(s+i)==*(t+i))continue;else if(*(s+i)>*(t+i)){return(1);break;}else {return(-1);break;}}}void main(){char a[20],b[20];int n;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。
该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。
#include<stdio.h>#include<time.h>#include<stdlib.h>int result=1;void GetRanddomExpression(int *num1,char *a,int *num2){int n;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case 0:{while(*num2>*num1) *num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case 1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case 2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case 3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}int judge(int answer){if(answer==result)return(1);else return(0);}void main(){int num1,num2;char a;int answer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("please input the result of the expression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("you are right!");else printf("sorry,it not the right answer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。
该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。
该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。
(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。
#include <stdio.h>#include<malloc.h>#include<time.h>#include<stdlib.h>void CountEvensAndOdds(int *parr,int arr_len,int *even_count,int *odds_count) {int i;int count_even=0,count_odds=0;for (i=0;i<arr_len;i++){if ((*(parr+i)%2)==0)count_even++;else count_odds++;}*even_count=count_even;*odds_count=count_odds;}void Partition(int *parr,int arr_len,int **even_arr,int *even_len,int **odds_arr,int *odds_len){int even_count,odds_count,i,m=0,n=0;int count_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int *)malloc(sizeof(int)*even_count);*odds_arr=(int *)malloc(sizeof(int)*odds_count);for (i=0;i<arr_len;i++){if((*(parr+i)%2)==0){*(*even_arr+m) = *(parr+i);m++;}else{*(*odds_arr+n) = *(parr+i);n++;}}*even_len=m;*odds_len=n;}void print_arr(int *parr,int arr_len){int i;for(i=0;i<arr_len;i++){printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}void main(){int *parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len = rand()%50;parr=(int *)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;i<arr_len;i++)parr[i] = rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arr len=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arr len=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。