1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

#include<stdio.h>
void main(void)
{int maxgy(int x,int y);int mingb(int x,int y);int a,b;printf("输入两个整数:\n");scanf("%d%d",&a,&b);printf("最大公约数为:%d\n",maxgy(a,b));printf("最小公倍数为:%d\n",mingb(a,b));} int maxgy(int x,int y){int z; while(y!=0){z=x%y;x=y;y=z;}return x;}int mingb(int x,int y){int z;z=x*y/maxgy(x,y);return z;}

2.求方程式ax^2+bx+c=0的根,用3个函数分别求当:b^2-4ac大于0,等于0,和小于0时的根并输出结果。从主函数输入a,b,c的值。

#include<stdio.h>
#include<math.h>
#define disc b*b-4*a*c
double x1,x2;
void m(float a,float b,float c)
{printf("方程式有两个不相等的实根:\n");x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("方程式的根是:%.2lf\t%.2lf",x1,x2);
}
void n(float a,float b,float c)
{printf("方程式有两个相等的实根:\n");x1=x2=(-b)/(2*a);printf("方程式的根是:%.2lf\t%.2lf",x1,x2);
}
void f(float a,float b,float c)
{printf("方程式没有实根");
}
main()
{float a,b,c;printf("请输入a,b,c的值:\n");scanf("%f%f%f",&a,&b,&c);if(disc>0) m(a,b,c);else if(disc==0) n(a,b,c);else f(a,b,c);
}

3.写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。

#include<stdio.h>
#include<math.h>
int sushu(int a)
{int i,k=sqrt(a);for(i=2;i<=k+1;i++)if(a%i==0)break;if(i<k+1) return 0;else return 1;
}
main()
{int a,b;printf("请输入一个整数:\n");scanf("%d",&a);b=sushu(a);if(b) printf("%d是一个素数\n",a);else printf("%d不是一个素数\n",a);
}

4.写一函数,使给定一个3*3的二维整型数组转置,即行列互换。

#include<stdio.h>
int exchange(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 i,j,a[3][3];printf("请输入3*3整形数组:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);printf("原数组:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("\n");}printf("\n");exchange(a);printf("行列互换:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("\n");}
}

5.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

#include<stdio.h>
#include<string.h>
char fanxu(b)
char b[100];
{int i,j,t;char c[100];strcpy(c,b);t=strlen(b);for(i=0,j=t-1;j>-1;i++,j--)b[i]=c[j];}
main()
{char a[100],i;gets(a);fanxu(a);puts(a);
}

6.写一个函数,将两个字符串连接。

#include<stdio.h>
void lianjie(char a[],char b[])
{char c[20];int i,j;for(i=0;a[i]!='\0';i++) c[i]=a[i];for(j=0;b[j]!='\0';j++) c[i+j]=b[j];c[i+j+1]='\0';printf("连接后:\n");puts(c);
}
main()
{char a[10],b[10];printf("输入两个字符串:\n");gets(a);gets(b);lianjie(a,b);
}

7.写一函数,将一个字符串中的元音字母复制到另一字符串,然后输出。

#include<stdio.h>
char copy(char c[],char d[])
{int i,j=0;for (i=0;c[i]!='\0';i++)if(c[i]==97||c[i]==101||c[i]==105||c[i]==111||c[i]==117||c[i]==65||c[i]==69||c[i]==73||c[i]==85) {d[j]=c[i];j++;}
}
main()
{char a[10],b[10];printf("输入一个字符串:\n");gets(a);copy(a,b);printf("输出元音字母的字符串:\n");puts(b);
}

8.写一个函数,输入一个4位数字,要求输出这数字字符,但每两个数字间空一个空格。如 输入1990,应输出“1 9 9 0”.

#include<stdio.h>
void f(int n)
{int a,b,c,d;a=n/1000;//千位 b=(n-a*1000)/100;//百位 c=(n-a*1000-b*100)/10;//十位 d=n-a*1000-b*100-c*10;//个位printf("输出4位数数字字符:\n");printf("%d %d %d %d\n",a,b,c,d);
}
main()
{int n;printf("输入一个4位数字:\n");scanf("%d",&n);f(n);
}

9.编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。在主函数中输入字符串以及输出上述结果。

#include<string.h>
#include<stdio.h>
char f(a1,b1)
char a1[100];
int b1[4];
{int j;for (j=0;a1[j]!='\0';j++) //字符串中字符不为空字符时继续执行下一位{if(a1[j]>=65&&a1[j]<=90||a1[j]>=97&&a1[j]<=122) b1[0]++;//这是大小写字母的条件else if(a1[j]>=48&&a1[j]<=57) b1[1]++; //数字的条件else if(a1[j]==32) b1[2]++; //空格的条件else b1[3]++;//其他字符的条件}
}main()
{char a[100];static int i,b[4];//b[4]是字母 数字 空格 其他 个数的数组gets(a);f(a,b);//函数调用printf("字母   数字   空格   其他字符\n");for (i=0;i<4;i++)printf("%-8d",b[i]);
}

10.写一个函数,输入一行字符,将此字符串中最长的单词输出。

#include<stdio.h>
#include<string.h>
#define M 100
char maxword(p)
char p[M];
{int q,j,x,z,count;//单词起始地址,结束地址,循环变量,中间变量,最长单词长度int q_z,j_z;q=0,j=0,count=0;for (x=0;x<strlen(p);x++) {z=0;q_z=x;//在字符串长度内循环定义单词起始地址while(p[x]!=' '&&p[x]!='\0') {z++;x++;//字符不为空格和空字符时字母自加,指向下一个字母}j_z=x-1;//结束下标减去一个空字符字节if(z>count) //如果第一个单词>max单词长度 {count=z;//则把第一个单词赋值给max单词长度,循环比较q=q_z;j=j_z;}}printf("字符串中最长的单词为:\n");for (x=q;x<=j;x++)putchar(p[x]);//max单词起始,结束地址已求出,输出
}
main()
{char str[M];printf("输入一行字符串:\n");gets(str);maxword(str);
}

11.写一个函数,用“气泡法”对输入的10个字符按由小到大顺序排列。

#include<stdio.h>
#define M 10
char paixu(char p[])
{int a,b;char t;for (a=M-1;a>0;a--) {for (b=0;b<a;b++)if(p[b]>p[b+1]) {t=p[b];p[b]=p[b+1];p[b+1]=t;}}printf("输出排序后的字符:\n");for (b=0;b<M;b++) printf("%4c",p[b]);
}
main()
{char str[M];int i=0;printf("输入10个字符"); for (;i<M;i++)scanf("%c",&str[i]);paixu(str);
}

12.用牛顿迭代法求根。方程为ax3+bx2+cx+d=0 系数a,b,c,d的值依次为1,2,3,4, 由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。

#include <stdio.h>
#include <math.h>
int main()
{float solut(float a,float b,float c,float d);float a,b,c,d;printf("input a,b,c,d:");scanf("%f,%f,%f,%f",&a,&b,&c,&d);printf("x=%10.7f\n",solut(a,b,c,d));return 0;
}
float solut(float a,float b,float c,float d)
{float x=1,x0,f,f1;do{x0=x;f=((a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;}while(fabs(x-x0)>=1e-3);return(x);
}

13.用递归方法求 n 阶勒让德多项式的值,递归公式为

#include <stdio.h>
float p(int x,int n)
{float t,t1,t2;if(n= =0) return 1;else if(n= =1) return x;else{t1=(2*n-1)*x*p(x,(n-1));t2=(n-1)*p(x,(n-2));t=(t1-t2)/n;return t;
}
}
int main()
{int x,n;printf(“input two int (x and n):”);scanf(“%d%d”,&x,&n);printf(“%.2f\n”,p(x,n));return 0;
}

14.输入10个学生5门课成绩,分别用函数实现下列功能
1、 计算每个学生平均分;

2、 计算每科平均分 ;

3 、找出五十个分数中最高分,和对应的学生和课程;

4、求出平均分方差:σ=1/n∑xi2-(∑xi/n)2,xi为某一学生的平均分。

#include<stdio.h>
#include<string.h>
#define N 10
float a_stu[N];
int average1(int str1[][5],int m,int n);
int average2(int str1[][5],int m,int n);
int average3(int str1[][5],int m,int n);
int average4(int str1[][5],int m,int n);
int main()
{int str[10][5]={{87,88,92,67,78},{88,86,87,98,90},{76,75,65,65,78},{67,87,60,90,67},{77,78,85,64,56},{76,89,94,65,76},{78,75,64,67,77},{77,76,56,87,85},{84,67,78,76,89},{86,75,64,69,90}};int i,j;printf("每个学生的平均成绩\n"); average1(str,10,5);  printf("每门课的平均成绩\n"); average2(str,10,5); average3(str,10,5); printf("某个学生的平均成绩的偏差\n"); average4(str,10,5);   return 0;}
int average1(int str1[][5],int m,int n)//单个学生的平均成绩
{int i,j;float average1;for(i=0;i<m;i++){float sum=0;for(j=0;j<n;j++){sum+=str1[i][j];}  a_stu[i]=sum/n;printf("%.2f\n",a_stu[i]); }}int average2(int str1[][5],int m,int n)//单门课的平均成绩
{int i,j;float average2;for(j=0;j<n;j++){float sum=0;for(i=0;i<m;i++){sum+=str1[i][j];}  average2=sum/m;printf("%.2f\n",average2); }}
int average3(int str1[][5],int m,int n)
{int max=str1[0][0];int p,k,i,j;for(i=0;i<10;i++){   for(j=0;j<5;j++)if(str1[i][j]>max){max=str1[i][j];k=i+1;p=j+1;} }printf("最高分对应的学生和课程\n"); printf("max=%d,k=%d,p=%d\n",max,k,p);
}
int average4(int str1[][5],int m,int n)//某个学生的平均偏差
{int i;float sum1=0,sum2=0;float average4;for(i=0;i<m;i++){sum1+=a_stu[i];sum2+= a_stu[i]*a_stu[i];average4=sum2/m-(sum1/m)*(sum1/m);}printf("%.2f\n",average4); }

15.写几个函数:
1. 输入10个职工的姓名和职工号;

  1. 按职工号由小到大顺序排序,姓名顺序也随之调整;

  2. 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

#include <stdio.h>
#include <string.h>
void input (char na[][20], int nu[]);                 //定义输入函数
void sorts (char na[][20], int nu[]);                 //定义排序函数
void search (char na[][20], int nu[], int x);         //定义查找函数
int main()
{char name[10][20];int num[10], numb, i;input(name, num);                                 //调用输入函数sorts(name, num);                                 //调用排序函数for (i=0; i<10; i++){printf("%8s ", name[i]);printf("%d\n", num[i]);}printf("Input your number:");                     //输入一个职工号scanf("%d", &numb);search(name, num, numb);                          //调用查找函数return 0;
}
//输入函数
void input (char na[][20], int nu[])
{int i;for (i=0; i<10; i++){printf("Input No.%d name:", i+1);scanf("%s", na[i]);printf("Input No.%d number:", i+1);scanf("%d", &nu[i]);}
}
//排序函数
void sorts (char na[][20], int nu[])
{int i, j, temp;char tm[20];for (i=0; i<10; i++)for (j=i+1; j<10; j++){if (nu[i]>nu[j]){temp=nu[i];nu[i]=nu[j];nu[j]=temp;strcpy(tm, na[i]);strcpy(na[i], na[j]);strcpy(na[j], tm);}}
}
//查找函数
void search (char na[][20], int nu[], int x)
{int low, high, mid;low = 0;high = 9;while (low<=high){mid=(low+high)/2;if (x>nu[mid])low=mid + 1;else if (x<nu[mid])high=mid-1;else if (x==nu[mid]){printf("%s\n", na[mid]);break;}}if (x!=nu[mid])printf("No match!\n");
}

16.写一个函数,输入一个十六进制数,输出相应的十进制数。

#include<stdio.h>
#include<string.h>
main()
{char a[100];int i,k,sum=0;printf("请输入十六进制数:\n");gets(a);for (i=strlen(a)-1,k=1;i>=0;i--) {if(a[i]>='0'&&a[i]<='9')sum+=(a[i]-'0')*k; else if(a[i]>='A'&&a[i]<='F')sum+=(a[i]-'A'+10)*k;else if(a[i]>='a'&&a[i]<='f')                                                                 sum+=(a[i]-'a'+10)*k;k*=16;                                                                         }printf("\n十六进制数%s转换成十进制数为:\n%d",a,sum);
}

17.用递归法将一个整数n转换成字符串。例如 输入483,应输出字符串“483”。n的倍数不确定,可以是任意倍数的整数。

#include <stdio.h>
int main()
{ void convert(int n);int number;printf("input an integer: ");scanf("%d",&number);printf("output: ");if (number<0){putchar('-');putchar(' ');   /* 先输出一个‘-’号和空格 */number=-number;}convert(number);printf("\n");return 0;
}void convert(int n)
{ int i;if ((i=n/10)!=0)convert(i);putchar(n%10+'0');putchar(32);
}

C语言程序设计第五版谭浩强著 第7章习题以及答案 函数系列相关推荐

  1. C语言程序设计第五版谭浩强著 第8章291-292指针系列

    1.输入3个整数,按由小到大的顺序输出. #include<stdio.h> main() {int a,b,c,*p1,*p2,*p3;p1=&a;p2=&b;p3=&a ...

  2. C语言程序设计第五版谭浩强著 第七章部分课后习题答案

    #include<stdio.h> int gcd(int x,int y) {int z;for(;;){z=x%y;x=y;y=z;if(y==0)break;}return x; } ...

  3. C语言程序设计第五版谭浩强 第七章答案

    C语言程序设计第五版谭浩强著 第七章答案 第七章 用函数实现模块化程序设计 1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输人. 题目解析: ...

  4. C语言程序设计第五版谭浩强课后答案 第九章习题答案

    C语言程序设计第五版谭浩强第九章答案 1.定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年问题. 2.写一个函数days,实现第1 题的计算.由主函数将年.月.日传递给days ...

  5. C语言程序设计第五版 谭浩强 第四章 课后习题 答案

    谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...

  6. C语言程序设计第五版谭浩强课后答案 第六章《利用数组处理批量数据》习题答案 (大一大二、考研、计算机二级必看)

    第六章<利用数组处理批量数据>习题答案 1. 用筛选法求100之内的素数 2. 用选择法对10个整数排序 3. 求一个3 X 3的整形矩阵对角线元素之和 4. 有一个已经排好序的数组,要求 ...

  7. C语言程序设计第五版 谭浩强目录大纲

    第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例5 1.4.2C语言程序的结构9 ...

  8. C语言程序设计第五版谭浩强著 第五章部分课后习题答案

    #include<stdio.h> main() {int x,y,m,n,u,p;scanf("%d%d",&x,&y);m=x;n=y;while( ...

  9. C语言程序设计第四版(谭浩强)4.6 写程序,有一个函数,输入x的值,输出相应的y值

    //有一个函数:y=x (x<1) // 2x-1 (1<=x<10) // 3x-11 (x>=10) //写程序,输入x的值,输出相应的y值 #include<std ...

最新文章

  1. Eclipse创建的Maven项目报错Could not calculate build plan: Plugin
  2. a href=#与 a href=javascript:void(0) 的差别
  3. python OOP (1)
  4. 虚方法(virtual)和抽象方法(abstract)的区别
  5. linux 普通用户crond,linux下普通用户的定时任务
  6. centos 的php5.3.3 升级5.5.3
  7. java前端开发自动生成器_一个简单实用的java代码生成器
  8. ANSYS12.0安装教程
  9. 计算机无法安装蓝牙驱动,Win7蓝牙驱动怎么安装?安装蓝牙驱动的方法
  10. Mdict to macOS Dictionary转换笔记
  11. Axure RP 9.0 中继器增删改查实现[原型图]
  12. mysql数据库应用试卷代号3868_实用数据库期末试卷B卷答题纸
  13. 多家知名企业笔试面试精华
  14. mysql pdo 端口_链接Mysql的api mysqli和pdo
  15. AdaNet: Adaptive Structural Learning of Artificial Neural Networks
  16. home assistant用esphome添加温湿度传感器
  17. MySQL表字段类型
  18. 【236】◀▶IEW-Unit01
  19. —个幸存者游戏给出的10个启示(经典)
  20. 微宝自动更新影视源码全解

热门文章

  1. 【ROS真车篇】激光雷达SLAM建图+自主导航+RGB深度相机
  2. 从UI层到硬件层优化Android应用
  3. iOS--对勾提示动画
  4. 股价SP预测——线性回归
  5. 微信小程序使用WeUi框架教程,真·简单
  6. 东软刘积仁专访:乘势国际化
  7. 六问微信收费:为何收?向谁收?
  8. MYSQL插入数据后返回主键
  9. 【学习日志】2022.08.09 基于Unity的C#函数
  10. smb android 客户端,谷歌放出安卓版Samba客户端 但仅支持SMBv1