函数编程题(1)编写一个程序实现如下功能:编写两个函数,其功能分别为:①求N个整数的最大值和次大值。
②求两个整数的最大公约数和最小公倍数。
主函数调用这两个函数(程序以文件名sy6_7.c存盘)。
#include<stdio.h>#define N 10void max(int b[],int n) //求最大数和次大数{int i,max,max2;max=max2=b[0];for(i=1;i<n;i++)max=max<b[i]?b[i]:max;for(i=1;i<n;i++)if(max2<b[i] && b[i]<max)max2=b[i];printf("\n%d is max, %d is smax ",max,max2);}int gcd(int m,int n) //最大公约数和最小公倍数{int r;r=m%n;while(r){m=n;n=r;r=m%n;}return n;}void main(){int a1,a2,b,c,i;int a[N];printf("请输入%d个整数:",N);for(i=0;i<N;i++)scanf("%d",&a[i]);max(a,N);printf("输入两个正正数:");scanf("%d%d",&a1,&a2);b=a1*a2;c=gcd(a1,a2);printf("%4d和%4d的最大公约数%4d,最小公倍数%4d\n",a1,a2,c,b/c);}2)编写一个程序实现如下功能:验编一函数,功能为判断一字符串是否为回文。
回文是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。
在主函数中对输入的5个字符串统计其中回文的个数。
(程序以文件名sy6_8.c存盘)。
#include <stdio.h>#include <string.h>int function(char a[]){int i;int l=strlen(a);for(i=0;i<l/2;i++)if(a[i]!=a[l-i-1])return 0;return 1;}void main(){char s[100];int count=0,i;for(i=1;i<=5;i++){ printf("输入第%d个字符串:",i);scanf("%s",s);if(function(s)){printf("%s是回文\n",s);count++;}else printf("%s不是回文\n",s);}printf("共有回文%d个\n",count);}(3)编写一个程序实现如下功能:利用自定义函数,实现将一个十进制数转换成二进制数(程序以文件名sy6_9.c存盘)。
#include "stdio.h"#include "string.h"void main(){int i,n;char a[33];void trans10_2(char x[],int m);printf("\nInput a positive integer:");scanf("%d",&n);trans10_2(a,n);for (i=strlen(a)-1;i>=0;i--)printf("%c",a[i]);printf("\n");}void trans10_2 (char x[],int m){int r,i=0;while(m>0){r=m%2;x[i]=r+48;m=m/2;i++;}x[i]='\0';}指针编程(1)编写一个程序实现如下功能:利用指针作函数参数,设计一函数实现将n个元素进行排序(程序以文件名sy7_7.c存盘)。
#include<stdio.h>void sort(int *p,int n){int i,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(*(p+j)>*(p+j+1)) //由小到大排序{ t=*(p+j); *(p+j)=*(p+j+1);*(p+j+1)=t;}}void main(){int a[10],i;printf("输入%d个正数:",10);for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10); //调用排序函数printf("排序后:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写一个程序实现如下功能:利用指针作函数参数,设计一函数对字母进行简单加密,把当前的字母变成后面第3个字母,如最后三个字母x、y、z变成字母a、b、c。
再设计一函数把加密字符还原(程序以文件名sy7_8.c存盘)。
#include<stdio.h>void jiami(char *ch){ char *p=ch;while(*p!='\0'){ if(*p>='a' && *p<='z'|| *p>='A'&& *p<='Z'){*p=*p+3;if(*p>'Z'&&*p<'a' ||*p>'z') *p=*p-26;}++p;}}void jiemi(char *ch){ char *p=ch;while(*p!='\0'){ if(*p>='a'&& *p<='z'||*p>='A'&& *p<='Z'){ *p=*p-3;if(*p<'A'||*p<'a'&&*p>'Z') *p=*p+26;}++p;}}void main(){char line[80];printf("请输入一行字符:\n");gets(line);jiami(line);puts(line);jiemi(line);puts(line);}(3)编写一个程序实现如下功能:输入一个字符串,内有数字和非数字字符,如:a123x456 17960?302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。
例如123放在a[0]中,456放在a[1]中……统计共有多少个整数,并输出这些数(程序以文件名sy7_9.c存盘)。
#include <stdio.h>#include <string.h>void main(){char ch[1000],*p=ch;int a[50],*q=a,num=0,i;gets(ch);for( ; *p!='\0'; p++)if(*p>='0' && *p<='9'){*q=(*p)-'0';p++;while(*p>='0' && *p<='9')*q=(*q)*10+(*(p++)-'0');num+=1;q+=1;}for(i=0,q=a; i<num; i++,q++)printf("%d ",*q);printf("\n一共输入了%d个数字。
\n",num);}结构体链表编程题(1)编写一个程序实现如下功能:有4名学生,每个学生信息包含学号、姓名、数学成绩、英语成绩、C语言成绩和三门课程的总分,并对数据进行输入和输出(程序以文件名sy8_7.c存盘)。
#include<stdio.h>#define N 4void main(){ struct student{ int no;char name[16];float math,eng,c;float sum;};struct student st[N];int i;printf("请输入%4d 个学生的学号、姓名、数学、英语、C++成绩\n",N);for (i=0;i<N;i++){scanf("%d %s",&st[i].no,&st[i].name);scanf("%f%f%f",&st[i].math,&st[i].eng,&st[i].c);st[i].sum=st[i].math+st[i].eng+st[i].c;}printf("\n%10s%10s%5s%5s%5s%10s\n","NO","NAME","MATH","ENG","C++","SUM");printf("\n\n");for(i=0;i<N;i++)printf("%10d%10s%5.1f%5.1f%5.1f%10.1f\n",st[i].no,st[i].name,st[i].math,st[i].eng,st[i].c,st[i].su m);}(2) 编写一个程序实现如下功能:定义一个点的结构数据类型,实现下列功能:①为点输入坐标值。
②求两个点中点坐标。
③求两点间距离。
(程序以文件名sy8_8.c存盘) #include<stdio.h>#include<math.h>struct point{ float x,y; } ; /*定义一个点结构*/ struct point inputpoint( ) ; /*输入点坐标值*/struct point midpoint(struct point p1,struct point p2 ); /*两个点中点坐标*/double dists(struct point p1,struct point p2 ); /*两点间距离*/void main(){ struct point a,b,c;printf("输入第一个点坐标:\n");a=inputpoint( );//printf("输入第二个点坐标:\n");b=inputpoint( );c=midpoint(a,b );printf("中点坐标为:(%5.1f,%5.1f)\n",c.x,c.y);printf("两点站距离为:%10.4f\n",dists(a,b));}struct point inputpoint( ){ struct point t;scanf("%f%f",&t.x,&t.y);return t;}struct point midpoint(struct point p1,struct point p2 ){ struct point t;t.x=(p1.x+p2.x)/2;t.y=(p1.y+p2.y)/2;return t;}double dists(struct point p1,struct point p2 ){ double d;d=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));return d;}(3)编写一个程序实现如下功能:建立一个单链表,每个结点数据要有职工号、工资。