c语言第七次作业解析

合集下载

C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

C语言实验七 函数 实验报告

C语言实验七 函数 实验报告

C语言实验七函数实验报告一、实验目的1、掌握函数的定义和调用方法。

2、理解函数参数的传递方式。

3、学会使用函数实现程序的模块化设计。

二、实验环境1、操作系统:Windows 102、开发工具:Visual Studio 2019三、实验内容本次实验主要涉及以下几个方面的内容:1、编写简单的函数实现特定功能,如计算两个数的和、差、积、商等。

2、理解函数参数的传递方式,包括值传递和引用传递,并通过实例进行验证。

3、利用函数实现程序的模块化设计,将复杂的问题分解为多个相对简单的函数,提高程序的可读性和可维护性。

四、实验步骤及结果(一)函数的定义和调用1、首先,定义了一个计算两个整数之和的函数`int add(int a, intb)`,函数内部通过返回`a + b`的值来实现求和功能。

```cint add(int a, int b) {return a + b;}```2、在`main`函数中调用该函数,并输出结果。

```cint main(){int num1 = 5, num2 = 3;int sum = add(num1, num2);printf("两数之和为:%d\n", sum);return 0;}```运行结果:两数之和为:8(二)函数参数的传递方式值传递1、定义一个函数`void swap_value(int a, int b)`,尝试在函数内部交换两个参数的值。

```cvoid swap_value(int a, int b) {int temp = a;a = b;b = temp;}```2、在`main`函数中调用该函数,并输出交换前后参数的值。

```cint main(){int num1 = 5, num2 = 3;printf("交换前:num1 =%d, num2 =%d\n", num1, num2);swap_value(num1, num2);printf("交换后:num1 =%d, num2 =%d\n", num1, num2);return 0;}```运行结果:交换前:num1 = 5, num2 = 3交换后:num1 = 5, num2 = 3可以看到,值传递方式下,函数内部对参数的修改不会影响到函数外部的实参。

C程序设计(第2版)第七章习题解答.doc

C程序设计(第2版)第七章习题解答.doc

C程序设计(第2版)第七章习题解答第七章动态内存分配习题一、基本概念与基础知识自测题7.1 填空题7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。

答案:(1)代码区,存放程序代码;(2)全局变量与静态变量区,存放全局变量或对象(包括静态);(3)局部变量区即栈(stack)区,存放局部变量;(4)自由存储区(free store),即动态存储区或堆(heap)区。

7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动态建立对象的初始化是通过(3)实现(4)。

答案:(1)命名对象(2)无名对象(3)初始化式(initializer)(4)显式初始化7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。

new返回的指针是指向(3)的指针。

答案:(1)3个(2)1个(3)30行10列的2位数组7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。

如果new返回的指针丢失,则所分配的自由存储区空间无法收回,称为(2)。

这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。

答案:(1)返回一个空指针(NULL)(2)内存泄漏(3)重新启动计算机后(4)并不依赖于建立它的作用域7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。

答案:(1)浅拷贝(2)同一个堆对象7.1.6 单链表的结点包含两个域:(1)和(2)。

使用链表的最大的优点是(3),即使是动态数组也做不到这一点。

答案:(1)数据域(2)指针域(3)用多少空间,开多少空间7.1.7 进入单链表必须通过单链表的(1),如果它丢失则(2),内存也(3),在单链表中进行的查找只能是(4)。

C语言程序设计教程第七章课后习题参考答案

C语言程序设计教程第七章课后习题参考答案

C语言程序设计教程第七章课后习题参考答案P198 3 求主、副对角线元素之和#include#define M 4#define N 4int main(){int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int i,j,m=0,n=0;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i==j)m+=a[i][j];}}printf("主对角线元素之和为:%d\n",m);for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i+j==3)n+=a[i][j];}}printf("副对角线元素之和为:%d\n",n); return 0;}P198 4数组逆序存放#includevoid input(int a[],int n);void reverse(int a[],int n);int main(){int a[5];int size=sizeof(a)/sizeof(int);input(a,size);reverse(a,size);printf("\n");return 0;}void input(int a[],int n){int i;printf("请输入%d个整数:\n",n);for(i=0;i<n;i++)< p="">{scanf("%d",&a[i]);}}void reverse(int a[],int n) {int i,t;for(i=0;i<="" p="">{t=a[i];a[i]=a[5-i-1];a[5-i-1]=t;}for(i=0;i<n;i++)< p=""> {printf("%-3d",a[i]);}}198 4数组逆序存放(2)#includevoid reverse(int a[],int n); void print(int a[],int n);int main(){int a[]={1,2,3,4,5,11,16,13}; int size=sizeof(a)/sizeof(int); print(a,size);reverse(a,size);printf("\n");return 0;}void print(int a[],int n){int i;printf("原:\n");for(i=0;i<n;i++)< p="">{printf("%-4d",a[i]);}printf("\n");}void reverse(int a[],int n){int t,i;printf("逆序:\n");for(i=0;i<="" p="">{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}for(i=0;i<n;i++)< p="">{printf("%-4d",a[i]);}}P198 5对称矩阵#includevoid print(int a[][3],int rows,int cols); int fun(int a[][3],int rows,int clos); void main(){int a[3][3],i,j;printf("input:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)scanf("%d",&a[i][j]);}print(a,3,3);if(fun(a,3,3)==0)printf("此矩阵是对称矩阵\n");elseprintf("此矩阵不是对称矩阵\n"); } void print(int a[][3],int rows,int cols) {int i,j;for(i=0;i<rows;i++)< p="">{for(j=0;j<cols;j++)< p="">printf("%-4d",a[i][j]);printf("\n");}}int fun(int a[][3],int rows,int clos) {int i,j,x=0;for(i=0;i<rows;i++)< p="">{for(j=0;j<clos;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) return 1;else return 0;}P198 5对称矩阵(2)#include#define M 3#define N 3void print(int a[][N],int m,int n); int yan(int a[][N],int m,int n); int main(){int a[][N]={1,2,3,4,5,6,7,8,9}; print(a,M,N);if(yan(a,M,N))printf("YES\n");elseprintf("NO\n");return 0;}void print(int a[][N],int m,int n) {int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%-4d",a[i][j]);}printf("\n");}}int yan(int a[][N],int m,int n){int i,j,x=0;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) //不是对称矩阵return 0;return 1;}P198 6矩阵求和#include#define M 3#define N 3void input(int a[][N],int m,int n);void sum(int a[][N],int b[][N],int m, int n); void print(int a[][N],int m,int n);int main(){int a[M][N];int b[M][N];printf("请输入%d*%d阶矩阵A:\n",M,N);input(a,M,N);print(a,M,N);printf("请输入%d*%d阶矩阵B:\n",M,N);input(b,M,N);print(b,M,N);printf("A+B=\n");sum(a,b,M,N);return 0;}void input(int a[][N],int m,int n){int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{scanf("%d",&a[i][j]);}}}void print(int a[][N],int m,int n){int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}}void sum(int a[][N],int b[][N],int m,int n) {int i,j;int c[M][N];for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{c[i][j]=a[i][j]+b[i][j];}}print(c,M,N);}P198 7模拟骰子投掷#include#include#define N 10000int main(){int a[N],i;double x=0,y=0,z=0,l=0,m=0,n=0; for(i=0;i<n;i++)< p="">{a[i]=rand()%6+1;if(a[i]==1)x++;if(a[i]==2)y++;if(a[i]==3)z++;if(a[i]==4)l++;if(a[i]==5)m++;if(a[i]==6)n++;}printf("出现1的概率为:%lf\n",x/N); printf("出现2的概率为:%lf\n",y/N); printf("出现3的概率为:%lf\n",z/N); printf("出现4的概率为:%lf\n",l/N); printf("出现5的概率为:%lf\n",m/N); printf("出现6的概率为:%lf\n",n/N); return 0;}P67 1最大奇、偶数#include#define M 10int main(){int i,a[M];int max1=-1,max2=-1;for(i=0;i<m;i++)< p="">{printf("请输入第%d个正整数:",i+1); scanf("%d",&a[i]);}for(i=0;i<m;i++)< p="">{if(a[i]%2!=0){if(a[i]>max1)max1=a[i];}else{if(a[i]>max2)max2=a[i];}}if(max1==-1)printf("没有奇数\n");elseprintf("最大奇数是%d\n",max1); if(max2==-1)printf("没有偶数\n");elseprintf("最大偶数是%d\n",max2); return 0;}P69 3#includeint main(){int a[20];int p=0,n=0,i,j=0;double avg,sum=0;printf("请输入非0整数:"); while(1){scanf("%d",&a[j]);if(a[j]==0)break;j++;}for(i=0;i<j;i++)< p="">{sum=sum+a[i];}avg=sum/j;printf("平均数:%lf",avg);for(i=0;i<j;i++)< p="">{if(a[i]>0)p++;if(a[i]<0)n++;}printf("正数个数:%d 负数个数:%d\n",p,n); return 0;}P75 2冒泡排序#include#define N 10void bubble_sort(int a[],int n);void main(){int i, a[N]={1,3,6,8,9,2,11,12,14,7}; printf("原数组为:\n");for(i=0;i<n;i++)< p="">{printf("%4d",a[i]);}bubble_sort(a,N);printf("\n");}void bubble_sort(int a[],int n) {int i,j,tmp;for(i=0;i<n-1;i++)< p=""> {for(j=0;j<n-i-1;j++)< p=""> {if(a[j]>a[j+1]){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}}}printf("\n");printf("排序后的数组为:\n"); for(i=0;i<n;i++)< p=""> {printf("%4d",a[i]);}}P76 3 成绩#includevoid input(int cla[50][3],int n); void print(int cla[50][3],int n);void sort(int cla[50][3],int n);void main(){int cla[50][3];int n;printf("请输入学生人数(小于50):\n"); scanf("%d",&n);if(n<=0 || n>=50)printf("error,请输入正确的人数。

c语言教材第七章习题答案

c语言教材第七章习题答案

c语言教材第七章习题答案《C语言教材第七章习题答案》在学习C语言的过程中,掌握基本的语法和逻辑结构是非常重要的。

第七章的习题涉及到了一些较为复杂的概念和技巧,需要我们对C语言有更深入的理解和掌握。

1. 题目:编写一个程序,计算并输出1到100之间所有偶数的和。

答案:我们可以使用循环结构和条件判断来解决这个问题。

具体的代码如下: ```#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("1到100之间所有偶数的和为:%d\n", sum);return 0;}```这段代码使用了for循环来遍历1到100之间的所有数字,然后通过条件判断判断是否为偶数,如果是偶数则累加到sum中,最后输出sum的值。

2. 题目:编写一个程序,输出九九乘法表。

答案:九九乘法表是一个经典的练习题,通过嵌套循环可以很容易地实现。

具体的代码如下:```#include <stdio.h>int main() {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%d*%d=%d\t", j, i, i*j);}printf("\n");}return 0;}```这段代码使用了两层嵌套的for循环,外层循环控制行数,内层循环控制列数,通过printf语句输出乘法表中的每一项。

通过解答以上两道习题,我们不仅复习了C语言中的循环结构和条件判断,还锻炼了我们的编程思维和逻辑能力。

希望大家在学习C语言的过程中能够多多练习,不断提升自己的编程水平。

C语言习题集合7(指针)

C语言习题集合7(指针)

第七部分 指针7.1 选择题1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。

A . p=q;B . *p=*q;C . a=*q;D . q=a;2. 若定义:int a=511, *b=&a ;,则printf("%d\n ", *b);的输出结果为:A . 无确定值B . a 的地址C . 512D . 5113. 已有定义 int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是()。

A . a=*p1+*p2;B . p1=a;C . p1=p2;D . a=*p1*(*p2);4. 变量的指针,其含义是指该变量的()。

A . 值B . 地址C . 名D . 一个标志5. 若有说明语句:int a, b, c, *d=&c ;,则能正确从键盘读入三个整数分别赋给变量a 、b 、c 的语句是()。

A . scanf("%d%d%d ", &a, &b, d);B . scanf("%d%d%d ", a, b, d);C . scanf("%d%d%d ", &a, &b, &d);D . scanf("%d%d%d ", a, b,*d);6. 若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是()。

(1) int *p=&a; (2) *p=a;A . 语句(1)和(2)中的*p 含义相同,都表示给指针变量p 赋值。

B . (1)和(2)语句的执行结果,都是把变量a 的地址值赋给指针变量p 。

C . (1)在对p 进行说明的同时进行初始化,使p 指向a ;(2)变量a 的值赋给指针变量p 。

D . (1)在对p 进行说明的同时进行初始化,使p 指向a ;(2)将变量a 的值赋予*p 。

C语言第7次作业

C语言第7次作业

C语⾔第7次作业单选题:1、若要求在if后⼀对圆括号中表⽰a不等于0的关系,则能正确表⽰这⼀关系的表达式为________。

A.a < > 0B.!aC.a=0D.a!=0学⽣答案: C参考答案: D2、若变量都已经说明,则以下程序段输出为( )a=10;b=50;c=30;if (a > b) a=b; b=c;c=a;printf("a=%db=%dc=%d\n",a,b,c);A.a=10 b=50 c=10B.a=10 b=30 c=10C.a=50 b=30 c=10D.a=50 b=30 c=50学⽣答案: C参考答案: B3、以下程序的输出结果是main(){ int a= -1,b=1;if((++a < 0)&& ! (b-- < =0))printf("%d %d\n",a,b);elseprintf("%d %d\n",b,a);}A.-1 1B.0 1C.1 0D.0 0学⽣答案: B参考答案: C{ int a,b,s;scanf("%d%d",&a,&b);s=a;if (a < b) s=b;s=s*s;printf("%d\n",s);}A.14B.16C.18D.20学⽣答案: C参考答案: B5、下⾯的程序是______main(){ int x=3,y=0,z=0;if (x==y+z) printf("****");else printf("####");}A.有语法错误不能过通过编译B.输出****C.可能通过编译,但是不能通过连接,因⽽不能运⾏D.输出####学⽣答案: C参考答案: D6、请读程序:main(){ float x,y;scanf("%f",&x);if(x < 0.0) y=0.0else if((x < 5.0)&&(x!=2.0))y=1.0/(x+2.0);else if( x < 10.0) y=1.0/x;}若运⾏时从键盘上输⼊2.0(表⽰回车),则上⾯程序的输出结果是A.0.000000B.0.250000C.0.500000D.1.000000学⽣答案: B参考答案: C7、执⾏下⾯语句后的输出为( )int i= -1;if (i < =0)printf("****\n")else printf("%%%%\n")A.****B.%%%%C.%%%%CD.有语法错,不能执⾏学⽣答案: B参考答案: D8、在执⾏以下程序时,为了使输出结果为t=4,则给a和b输⼊的值应满⾜的条件是main( ){ int s,t,a,b;scanf("%d,%d",&a,&b);s=1;t=1;if(a < 0)s=s+1;if(a > b)t=s+1;else if(a= =b)t=5;else t=2*s;printf("t=%d\n",t);}A.0 > a > bB.a=0 < b参考答案: D9、下列语句正确的是( )A.if(a > b > c) temp=aB.if((a=b) > 0) temp=aC.int a=b=c=4D.int a;scanf(%d,a)学⽣答案: C参考答案: B10、与 y=(x > 0?1:x < 0?-1:0);的功能相同的if语句是A.if(x > 0) y=1; else if(x < 0) y=-1; else y=0;B.if(x) if(x > 0) y=1; else if(x < 0) y=-1; else y=0;C.y=-1 if(x) y=1; else if(x==0) y=0; else y=-1;D.y=0 if(x > -0) if(x > 0) y=1; else y=-1;学⽣答案: B参考答案: A11、有如下程序main0{ int x=1,a=0,b=0;switch(x){case 0: b++;case 1: a++case 2: a++;b++}printf("a=%d,b=%d\n",a,b);}该程序的输出结果是A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=2学⽣答案: B参考答案: Aif(x < 0.0) y=0.0;else if(x < 10.0) y=1.0/x; else y=1.0;printf("%f\n",y);}该程序的输出结果是A.0.000000B.0.250000C.0.500000D.1.000000学⽣答案: C参考答案: C13、有如下程序main(){ int a=2,b=-1,c=2;if(a < b)if(b<0) c=0;else c++printf("%d\n",c);}该程序的输出结果是A.0B.1C.2D.3学⽣答案: C参考答案: C14、若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是A.switch(a+b); {case 1:y=a+b;break; case 0:y=a-b;break; case3:y=b-a,break; }B.switch(a*a+b*b) {case 3: case 1:y=a+b;break; }C.switch a {case c1:y=a-b;break; case c2:y=a*d;break; default:x=a+b; }D.switch(a-b) {default:y=a*b;break; case 4:x=a+b;break; case15、已知 int x=10,y=20,z=30;以下语句执⾏后x,y,z的值是if(x>y)z=x;x=y;y=z;A.x=10,y=20,z=30B.x=20,y=30,z=30C.x=20,y=30,z=10D.x=20,y=30,z=20学⽣答案: C参考答案: B16、请阅读以下程序:main( ){int a=5,b=0,c=0;if(a==b+c) printf("***\n");else printf("$$$\n");}以上程序A.有语法错不能通过编译B.可以通过编译但不能通过连接C.输出***D.输出$$$学⽣答案: B参考答案: D17、读下列程序:#includemain(){float a,b,t;scanf(”%f,%f”,&a,&b);if(a>b){t=a;}prinff(”%5.2f,%5.2f'’,a,b);}运⾏时从键盘输⼊3.8和-3.4,则正确的输出结果是( )。

c语言第七章课后题

c语言第七章课后题

一、第七章习题7(p184-p187),7.1-7.7全做,7.8-7.12中选做两道,要求给出程序执行结果。

7-1、#include <stdio.h>int Square(int i){return i*i;}int main(){int i=0;i=Square(i);for(; i<3;i++){static int i=1;i+=Square(i);printf("%d,",i);}printf("%d\n",i);return 0;}结果:结果分析:开头定义square()函数功能:计算一个数的平方入口参数:整数x返回值:i*i主函数:i=0;进入循环:静态变量i=1;i=i+square(1)=2;输出2;循环变量i=0+1=1;}int main(){int i;second=0;for(i=0;i<1000000;i++){update(); /*利用循环控制时钟运行时间*/display(); /*显示时,分,秒*/delay(); /*模一尺时间为1秒*/ }return 0;}结果:自动跳出时间7-3、#include <stdio.h>/*max()函数功能:找两个数的最大值入口参数:两个整数a,b返回值:两数的最大值*/int max(int a, int b){int max=0;max = (a>b)?a:b;return max;}void main(){int x=0; /*输入的两个数x,y*/int y=0;int m=0; /*m用于接收max()函数的返回值*/printf("input two integer numbers:");scanf("%d,%d",&x,&y);m=max(x,y);printf("the max number is %d\n",m);}结果:7-4#include <stdio.h>/*LCM()函数功能:计算两个整数的最小公倍数入口参数:两整数a,b返回值:最小公倍数*/int LCM(int a,int b){int i=0; /*循环变量*/int min=0; /*循环寻找范围的最小值*/int max=0; /*循环寻找范围的最大值*/min = (a>b)?a:b; /*最小值为a,b中的最大值*/ max = a*b; /*最大值为a*b*/for (i=min; i<=max; i++){if(i%a==0 && i%b==0)return i;}}void main(){int x; /*键盘输入两整数x,y*/int y;int m; /*m用于接收LCM()函数的返回值*/do{ /*输入整数的合法数据*/ printf("输入两个正整数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = LCM(x,y);printf("最小公倍数为:%d\n",m);}结果:7-5、#include <stdio.h>long fact(int n);void main(){int i=0; /*循环变量*/int n=0; /*输入的值*/int m=0; /*接收fact()函数的返回值*/do{printf("input n:");scanf("%d",&n);}while(n<0);for(i=1; i<=n; i++){m=fact(i);printf("%d!=%ld\n",i,m);}}/*fact函数功能:计算n!入口参数:n返回值:n!*/long fact(int n){static long p=1;p=p*n;return p;}结果:7-6、#include <stdio.h>}结果:7-7、(1)穷举法:#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/do{printf("输入两个正数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf("最大公约数:%d\n",m); }/*Gcd()函数功能:计算两数的最大公约数入口参数:两个正数a,b返回值:最大公约数*/int Gcd(int a,int b){int i=0;int t=0;t=(a<b)?a:b; /*t为a,b中的较小者*/ for(i=t; i>=1; i--){if(a%i==0 && b%i==0)return i;}}结果:(2)欧几里得算法#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/do{printf("输入两个正数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf("最大公约数:%d\n",m); }/*Gcd()函数功能:计算两数的最大公约数入口参数:两个正数a,b返回值:最大公约数*/int Gcd(int a,int b){int r=0;r=a%b;if(r!=0){do{a=b;b=r;r=a%b;}while(r!=0);}return b;}结果:(3)递归方法:7-9、#include <stdio.h>/*old()函数功能:计算第i个人的年龄入口参数:人数i返回值:年龄*/int old(int i){if(i==1)return 10;elsereturn old(i-1)+2;}void main(){int x=5; /*人数为5*/int y=0; /*接收old()函数的返回值*/y=old(x);printf("第五个人的年龄为:%d\n",y);}结果:7-10、#include <stdio.h>void main(){int flag=0; /*设置标志变量*/if ((m+n+p+q+r)==sum){flag=1; /*一旦找到就退出循环*/break;}}if(flag==0) /*未找到说明计算错误*/{printf("你算错了!");}else{printf("你想的数是%d %d %d \n",a,b,c);}}结果:二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。

C语言程序设计第四版第七章答案-谭浩强

C语言程序设计第四版第七章答案-谭浩强

C语言程序设计第四版第七章答案-谭浩强第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

maxyueshu(m,n)int m,n;{ int i=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeishu(m,n)int m,n;{int j;if(m>=n) j=m;else j=n;for(;!(j%m==0&&j%n==0);j++);return j;}main()整数,输出是否是素数的消息。

psushu(m)int m;{int i=2,t;for(;i<=m;i++)if(m%i==0&&i<m) break;if(m-i==0) t=1;else t=0;return m;}main(){int a,s;printf("enter sushu is \n");scanf("%d",&a);s=psushu(a);if(s==1) printf("a is sushu\n");else printf("s is not sushu\n");}7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

int zhuangzhi(b)int b[3][3];{int i,j,t;for(i=0;i<3;i++)for(j=0;j>=i&&j<3-i;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("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}zhuangzhi(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}}7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。

【免费下载】c语言程序设计课后习题答案 第7章

【免费下载】c语言程序设计课后习题答案 第7章
}
/*习题七 2*/ #include<stdio.h> main() {
int x,n,a[10],i,j,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf(" %d ",a[i]); printf("\n"); }
/*练习 7-11*/ #include<stdio.h> main() {
char str[80]; int i,j,count=0; printf("输入一个以回车符结束的字符串:\n"); i=0; while((str[i]=getchar())!='\n')
putchar(str[j]); printf("\n");
}
/*习题七 1*/ #include<stdio.h> main() {
int x,y,n,a[10],i,min,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
i++; str[i]='\0'; printf("再输入一个(); for(j=0;j<=i-1;j++)
if(str[80]==str[j]) count++;

C语言实验七函数实验报告

C语言实验七函数实验报告

C语言实验七函数实验报告一、实验目的本次 C 语言实验七函数实验的目的在于深入理解和掌握 C 语言中函数的定义、声明、调用以及参数传递等重要概念和操作。

通过实际编写和调试函数相关的程序,提高编程能力和问题解决能力,培养良好的编程习惯和代码结构组织能力。

二、实验环境本次实验使用的编程环境为 Visual Studio 2019 集成开发环境,操作系统为 Windows 10 专业版。

三、实验内容与步骤(一)函数的定义和声明首先,学习了函数的定义格式和声明方法。

函数的定义包括函数头和函数体两部分,函数头指定了函数的返回值类型、函数名和参数列表,函数体则包含了函数的具体实现逻辑。

例如,定义一个计算两个整数之和的函数:```cint add(int a, int b) {return a + b;}```在使用函数之前,需要在程序的适当位置进行函数声明,以告知编译器函数的存在及其参数和返回值类型。

```cint add(int, int);```(二)函数的调用掌握了函数的调用方法,通过传递实际参数来执行函数,并获取返回值。

```cint num1 = 5, num2 = 10;int result = add(num1, num2);printf("两数之和为:%d\n", result);```(三)参数传递学习了值传递和地址传递两种参数传递方式。

值传递是将实参的值复制给形参,在函数内部对形参的修改不会影响实参的值;地址传递则是将实参的地址传递给形参,通过指针在函数内部可以修改实参的值。

```cvoid swap(int a, int b) {int temp = a;a = b;b = temp;}int num3 = 20, num4 = 30;printf("交换前:num3 =%d, num4 =%d\n", num3, num4);swap(&num3, &num4);printf("交换后:num3 =%d, num4 =%d\n", num3, num4);```(四)函数的嵌套调用和递归调用了解了函数的嵌套调用和递归调用的概念和应用。

明解C语言入门篇第七章答案

明解C语言入门篇第七章答案

明解C语⾔⼊门篇第七章答案练习7-1#include <stdio.h>int main() {int n;printf("%d\t%d\t%d\n", sizeof1,sizeof(unsigned)-1,sizeof n+2 ); //此⾏显⽰结果为 4 3 6 因为1的字节就是为4,⽽-1的字节也是4再减去-1所以显⽰为3,最后是n+2为6printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));//此⾏显⽰结果是 4 7 4 因为1的字节是4,double的字节长是8 -1是7,把(n+2)括起来之后使其为⼀个值,所以是4;printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0) );//此⾏结果是 4 8 8 因为1的字节是4,把double-1都括起来之后,就是double类型字节为8,同理最后也是8}练习7-2#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("左移多少位:");scanf("%d", &x);number <<= x;printf("左移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 *= 2;}printf("乘以2的指数幂的值:%d", number1);}#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("右移多少位:");scanf("%d", &x);number >>= x;printf("右移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 /= 2;}printf("除以2的指数幂的值:%d", number1);}练习7-3#include <stdio.h>#include<math.h>unsigned rrotate(unsigned x,int n){x >>=n;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("右移多少位:");scanf("%d", &x);printf("右移后的值:%d", rrotate(number, x)); }#include <stdio.h>#include<math.h>unsigned lrotate(unsigned x,int n){x <<=n;return x;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("左移多少位:");scanf("%d", &x);printf("左移后的值:%d", lrotate(number, x)); }练习7-4unsigned set(unsigned x, int pos){unsigned mask = (1u << pos);x = (mask | x);return x;}//将第pos位设置为1unsigned reset(unsigned x, int pos) {unsigned mask = 1u;if (x & (1u<<pos))return (x ^ (1u << pos));elsereturn x;}//将第pos为设置为0unsigned inverse(unsigned x, int pos) {unsigned mask = 1u << pos;x = (x ^ mask);return x;}//将第pos位取反练习7-5unsigned set_n(unsigned x, int pos, int n) {for (i = 0; i < n - pos; i++) {unsigned mask = (1u << (pos + i));x = (mask | x);}return x;}//⼀个位段都设置为1unsigned reset_n(unsigned x, int pos, int n) {unsigned mask = 1u;int i;for (i = 0; i < n-pos; i++) {if (x & (1u<<pos+i))x= (x ^ (1u << pos+i));}return x;}//⼀个位段都设置为0unsigned inverse_n(unsigned x, int pos, int n) {int i;unsigned mask = 1u;for (i = 0; i < n - pos; i++) {x = (x ^ (mask << pos + i));}return x;}//⼀个位段都取反练习7-6#include <stdio.h>// 显⽰unsigned类型的值最⼤值,同时验证最⼤值+1是0. int main() {unsigned a = 0;while (++a > 0);printf("%u", a - 1);putchar('\n');printf("%u", a);}练习7-7#include <stdio.h>int main() {float a;double b;long double c;scanf("%f",&a);printf("a=%f", a);putchar('\n');scanf("%lf", &b);printf("b=%f", b);putchar('\n');scanf("%lf", &c);printf("c=%f", c);}练习7-8#include <stdio.h>int main() {float a;double b;long double c;printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c)); }练习7-9#include <stdio.h>#include<math.h>int main() {double m;double x;printf("正⽅形的⾯积是:");scanf("%lf", &m);printf("边长是:%.2f", sqrt(m));}练习7-10#include <stdio.h>int main(void){float x;int i;float m = 0.0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;}return0;}练习7-11#include <stdio.h>int main(void){float x;int i;float m = 0.0;float sum1 = 0;float sum2 = 0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;sum1 += m;sum2 += x;}printf("%f,%f", sum1, sum2);return0;}。

第七次作业参考答案_668804622

第七次作业参考答案_668804622
for(int i=0; i<N; i++) {
printf("请输入第%d个学生的信息:\n", i+1); printf("姓名: "); scanf("%s", stu[i].name); printf("学号: "); scanf("%s", stu[i].num);
printf("籍贯: "); scanf("%s", stu[i].place); printf("身份证号: "); scanf("%s", stu[i].id); printf("年龄: "); scanf("%d", &stu[i].age); printf("家庭住址: "); scanf("%s", stu[i].address); fflush(stdin); printf("性别(M/F): "); scanf("%c", &stu[i].sex); printf("电话: "); scanf("%s", stu[i].phone); printf("\n"); } }
stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address, stu[i].sex,
if(isLeap(i)) day += 366;
else dayBiblioteka += 365;// day1变量为年份a年初到当天的年内总天数 for(i=1; i<a.month; ++i)

第3、4、5、6、7章C语言设计 习题答案

第3、4、5、6、7章C语言设计 习题答案

第三章习题答案1.掌握算法必须要掌握的五个特性:a)有穷性。

算法执行步骤的次数有限,能在有限时间内完成。

b)确切性。

每一步操作的执行步骤、执行结果确定,不能有二义性。

c)有效性。

算法中的每一步操作都是可执行的,即算法的每一步都能通过手工或机器在有限时间内完成。

d)必须有零个或多个输入。

e)必须有一个或多个输出。

2.算法是指令的有限序列,是求解问题显式的一步一步进行的过程。

为程序编写提供依据。

程序是用C语言单词将算法表达出来的过程。

算法是程序的灵魂。

3.数据类型总体分为三类:a)对象类型。

对象类型的基本类型又分为整型、浮点型、字符型。

b)函数类型。

c)不完全类型。

4.整型可分为:a)有符号整数。

它又包括 short int、int、long int、long long int。

b)无符号整数。

它又包括unsigned short int、unsigned int、unsigned longint、unsigned long long int。

不同数据类型数据的值域范围不同。

5.合法的标识符有:scanf、x、x1、_y 、_y2x、printf、main合法标识符由英文字母、数字、下划线组成,且第一个字符只能是英文字母或下划线。

关键词不能成为合法标识符。

6.略7.8.变量名:x 数据对象:3存储地址:&x 存储单元:8(在VS2005中)9.0x13B1:十六进制int型字面值;3e3:十进制 int型字面值;‘d’:字符型字面值;“my university”:字符串型字面值;99:十进制int型字面值;023:八进制int型字面值;1.3e-4:double型浮点型字面值;33U:十进制unsigned int型字面值;034L:八进制long int型字面值;0x34UL:十六进制unsigned long int型字面值;30.23L:十进制long double型字面值;30.23F:十进制float型字面值;10.\?:?\’:’\”:”\\:\\233:表示八进制int型整数233\x2f:表示十六进制int型整数 2f。

C语言PTA平台习题与答案

C语言PTA平台习题与答案

第二章作业1①.本题要求编写程序,输出一个短句“Welcome to You!”#include<stdio.h>int main(){printf("Welcome to You!\n");return 0;}②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。

计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

fahr = 100, celsius = 计算所得摄氏温度的整数值#include<stdio.h>int main(){int fahr = 100;int celsius = 5*(fahr-32)/9;printf("fahr = 100,celsius = %d\n",celsius);return 0;}第二章作业2①求整数均值本题要求编写程序,计算4个整数的和与平均值。

题目保证输入与输出均在整型范围内。

在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位#include<stdio.h>int main(){int a,b,c,d,Sum;double Average;scanf("%d %d %d %d",&a,&b,&c,&d);Sum = a + b + c + d;Average = (a + b + c + d)/4.0;printf("Sum = %d,Average = %.1f\n",Sum,Average);return 0;}②整数四则运算本题要求编写程序,计算2个正整数的和、差、积、商并输出。

题目保证输入和输出全部在整型范围内输入在一行中给出2个正整数A和B。

在4行中按照格式“A 运算符B = 结果”顺序输出和、差、积、商。

C语言第7章习题及实验参考答案~1

C语言第7章习题及实验参考答案~1

C语言第7章习题及实验参考答案~1第7章习题及参考答案1. 编程,从键盘上输入n个整数,按逆序输出这些数。

参考程序:#include#define N 5void main(){int i,t,a[N];for(i=0;i<n;i++)< p="">scanf("%d",&a[i]);for(i=0;i<n;i++)< p="">printf("%5d ",a[i]);printf("\n");for(i=0;i<="" p="">{t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;}for(i=0;i<n;i++)< p="">printf("%5d ",a[i]);}2. 编程,已知某同学某门课程的平时、实习、测验和期末成绩,求该同学该门课程的总评成绩。

其中,平时、实习、测验和期末分别占10%、20%、20%、50%。

参考程序:#includevoid main(){int i ;float tot,a[4];for(i=0;i<4;i++)scanf("%f",&a[i]);tot=0.1*a[0]+0.2*a[1]+0.2*a[2]+0.5*a[3];printf("%f ",tot);}3. 编程,输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。

参考程序:# include "stdio.h"#define N 10void main(){int term[N];int i,max,min;for(i=1;i<n,i++)< p="">scanf("%d",&term[i]);max=0;min=0;for(i=1;i<10;i++){if (term[i]< term[min])min=i;if (term[i]> term[max])max=i;}if(term[min]!=term[0]){ t=term[min]; term[min]= term[0]; term[0]=t;}if(term[max]!=term[N-1]){ t=term[max]; term[max]= term[N-1]; term[N-1]=t;}for(i=1;i<n,i++)< p="">printf("%d",trem[i]);}4. 编程,已有一个已排好序的数组(由小到大),今输入另一个数,要求仍然有序。

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

第七次作业:结构体1.计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。

日期以年、月、日表示。

“时间差”以天数表示。

注意考虑日期之间的闰年。

函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。

(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。

为了计算简便,假设用户输入的日期1总是早于日期2。

#include<stdio.h>#include<math.h>struct date{int day;int month;int year;}date1,date2;int totaldays(struct date *p,struct date *q){int years,total=0,i;int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};years=q->year-p->year;if(years==0){if(p->month==q->month)total=q->day-p->day;else{for(i=p->month;i<q->month-1;i++)total+=monthday[i];total+=monthday[p->month-1]-p->day+q->day;}if(((q->year)%4==0&&(q->year)%100!=0)||(q->year)%400==0)if(p->month<=2||q->month>2)total++;}else if(years!=0){for(i=p->month;i<12;i++)total+=monthday[i];total+=monthday[p->month-1]-p->day;for(i=0;i<q->month-1;i++)total+=monthday[i];total+=q->day;for(i=p->year+1;i<(q->year);i++){total+=365;if((i%4==0&&i%100!=0)||i%400==0)total++;}if(((p->year%4==0&&p->year%100!=0)||p->year%400==0)&&p->month<=2)total++;if(((q->year%4==0&&q->year%100!=0)||q->year%400==0)&&q->month>2 )total++;}return total;}void main(){int days;printf("please input date1(year,month,day):");scanf("%d,%d,%d",&date1.year,&date1.month,&date1.day);printf("please input date2(year,month,day):");scanf("%d,%d,%d",&date2.year,&date2.month,&date2.day);days=totaldays(&date1,&date2);printf("days=%d\n",days);}2.结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。

并定义一个结构体数组。

编程:a)编写函数input() , 输入基本信息(3~5条记录);b)编写函数print(),输出全体记录信息;c)编写函数search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上;d)说明,访问结构的时候,什么时候应该用运算符“.”,什么时候应该用运算符“->”。

#include<stdio.h>#include<string.h>struct student{char name[20];int num;char home[20];char IDnum[20];int age;char addr[50];char sex;char phone[20];}stu[10];void input(struct student *p){scanf("%s %d %s %s %d %s %c %s",&p->name,&p->num,&p->home,&p->IDn um,&p->age,&p->addr,&p->sex,&p->phone);}void print(struct student *p){printf("%s,%d,%s,%s,%d,%s,%c,%s\n",p->name,p->num,p->home,p->IDnum ,p->age,p->addr,p->sex,p->phone);}int search(struct student stu[],int n,char stu_name[20]){int i;for(i=0;i<n;i++){if(strcmp(stu_name,stu[i].name)==0){return i;break;}else continue;}return n+1;}void main(){int n,i;char a[20];printf("please input the number of the students:");scanf("%d",&n);for(i=0;i<n;i++)input(&stu[i]);for(i=0;i<n;i++)print(&stu[i]);printf("please input the name of the student you want to search:\n");scanf("%s",&a);i=search(stu,n,a);if(i<n)print(&stu[i]);else if(i==n+1)printf("No this student!\n");}3.一元多项式加法编写一元多项式加法器,输入两个一元稀疏多项式,然后对它们进行加法操作。

在具体实现上,要求用线性链表形式来存储一个多项式,每个链表的节点包括两个成员变量,系数和指数(均为整数)。

例如989087xxxA-x++=,+B=+(x(50)80259530xx)75x可以用下面的链表表示:说明:(1)每个链表节点都是根据需要动态创建的;(2)程序采用多函数形式来实现,至少包括创建链表、打印链表、加法函数等。

(3)多项式系数可正、可负;指数肯定是非负整数,且按照递增顺序排列输入格式:第一行是一个整数M,表示第一个多项式的项数。

接下来有M行,每行有两个整数ci和ei,分别表示第i项的系数和指数。

再接下来是输入第二个多项式,方法同第一个多项式输入。

输出格式:输出两个多项式相加的结果。

第一行是整数K,表示新多项式的项数。

接下来有K行,每一行为两个整数,分别代表系数和指数。

#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct poly)struct poly{int c;int e;struct poly *next;}poly1[10],poly2[10];void input(struct poly a[],int m){for(int i=0;i<m;i++)scanf("%d,%d",&a[i].c,&a[i].e);}struct poly *linkcreate(struct poly a[],int m){struct poly *head;struct poly *p1,*p2;p1=p2=(struct poly*)malloc(LEN);head=p1=&a[0];for(int i=0;i<m;i++){p2=&a[i];p1->next=p2;p1=p2;}p1->next=NULL;return(head);}void linkprint(struct poly *head){struct poly *p;printf("the polynomial:\n");p=head;if(head!=NULL)do{printf("%dx^%d",p->c,p->e);p=p->next;if(p!=NULL)putchar('+');}while(p!=NULL);putchar('\n');}struct poly* add(struct poly *head1,struct poly *head2) {struct poly *p1,*p2,*p3,*p4;p1=p2=p3=p4=(struct poly*)malloc(LEN);p2=head2;do{p1=head1;while(p1!=NULL){if(p2->e==p1->e){p1->c=p1->c+p2->c;p4=p2;p2=p2->next;p1=head1;}else p3=p1;p1=p1->next;}p1=head1;while((p2->e>p1->e)&&(p1->next!=NULL)){p3=p1;p1=p1->next;}p4=p2;p2=p2->next;if(p4->e<p1->e){if(head1==p1)head1=p4;else p3->next=p4;p4->next=p1;}else{p1->next=p4;p4->next=NULL;}}while(p2!=NULL);return (head1);}void addprint(struct poly *head){struct poly *p1;printf("the new polynomial:\n");p1=head;if(head!=NULL)do{printf("%dx^%d",p1->c,p1->e);p1=p1->next;if(p1!=NULL)putchar('+');}while(p1!=NULL);putchar('\n');}void main(){int m,n;struct poly *p,*q,*head;printf("please input the number of first terms:");scanf("%d",&m);input(poly1,m);p=linkcreate(poly1,m);linkprint(p);printf("please input the number of second terms:");scanf("%d",&n);input(poly2,n);q=linkcreate(poly2,n);linkprint(q);head=add(p,q);addprint(head);}4.循环淘汰有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人。

相关文档
最新文档