1.输入3个整数,按由小到大的顺序输出。

#include<stdio.h>
main()
{int a,b,c,*p1,*p2,*p3;p1=&a;p2=&b;p3=&c;printf("请输入三位整数:\n");scanf("%d%d%d",p1,p2,p3);int *p;if(*p1>*p2){p=p1;p1=p2;p2=p;}if(*p1>*p3){p=p1;p1=p3;p3=p;}if(*p2>*p3){p=p2;p2=p3;p3=p;}printf("\n小到大排序为:%d %d %d",*p1,*p2,*p3);
}

2.输入3个字符串,由小到大的顺序输出。

#include<stdio.h>
#include<string.h>
main()
{char a[20],b[20],c[20],d[20],*i,*j,*k,*p;i=a;j=b;k=c,p=d;printf("请输入3行字符串:\n");gets(i);gets(j);gets(k);printf("\n");int x,y,z;x=strcmp(i,j);if(x>0) {strcpy(p,i);strcpy(i,j);strcpy(j,p);}y=strcmp(i,k);if(y>0) {strcpy(p,i);strcpy(i,k);strcpy(k,p);}z=strcmp(j,k);if(z>0) {strcpy(p,j);strcpy(j,k);strcpy(k,p);}printf("从小到大输出这3个字符串:\n");puts(i);puts(j);puts(k);
}

3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。

#include<stdio.h>
void f1(int *p1)
{int i=0;printf("请输入10个整数:\n");for(;i<10;i++,p1++)scanf("%d",p1);printf("\n");
}
void f2(int *p2)
{int *p0,*p1,min,max,t,i;min=max=*p2;p0=p1=p2;for(i=0;i<10;i++){if(*(p2+i)<min) {min=*(p2+i);p1=p2+i;}else if(*(p2+i)>max) {max=*(p2+i);p0=p2+i;}}t=*p1;*p1=*p2;*p2=t;t=*p0;*p0=*(p2+9);*(p2+9)=t;
}
void f3(int *p3)
{int i=0;printf("处理后的10位整数排列为:\n");for(;i<10;i++,p3++)printf("%3d",*p3);
}
int main()
{int a[10],*p;p=a;f1(p);f2(p);f3(p);return 0;
}

4.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。写一函数实现以上功能,在主函数中输入n个整数和输出调整后n的个数。

#include<stdio.h>
void move(int * p, int n)
{n = ( ( n % 10 ) + 10 ) % 10; int b[10],i;for (i = 0; i < 10; i++)b[(i + n)%10] = * (p + i);for (i = 0; i < 10; ++i)*(p + i) = b [i];
}
main()
{int a[10], i, m;int * p;p = a; //a首地址赋给pprintf("随机输入随机个整数:\n");for (i = 0; i < 10; i++, p++)scanf("%d", p);p = a; //输入数据后p已改变,重新将a首地址赋给pprintf("\n输入各整数后移位置个数:\n");scanf("%d", & m);move(p, m);printf("\n输出调整后的各整数:\n");for (i = 0; i < 10; i++)printf("%5d", * (p + i));
}

5.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

#include<stdio.h>
int last(int *p0,int m)
{int i,temp,lastone,count=0;temp=m;for(i=0;i<temp;i++)*(p0+i)=i+1;//数组序号换成正常序号 i=0;//上循环i值改变,重新赋初值 while(temp>1){if(*(p0+i)!=0) count++;//使count计数 if(count==3){count=0;*(p0+i)=0;//报数到3时此人退出,count归0 temp--;//总人数递减 }       i++;//循环次数递增 if(i==m) i=0;//如果循环到最后一个人,i重新赋初值 }for(i=0;i<m;i++){if(*(p0+i)!=0)lastone=*(p0+i);//前面已将退出的人赋值为0,不为0的元素即为最后留下的人 }return lastone;
}
int  main()
{int n,*p;printf("请输入人数:\n");scanf("%d",&n);int a[n];p=a;printf("\n最后留下来的是原来的第%d号\n",last(p,n));
}

6.写一函数,求字一个字符串的长度。在main函数中输入字符,并输出其长度。

#include<stdio.h>
char size(char *p0)
{int i,b;
for(i=0;*(p0+i)!='\0';i++);return i;
}
char main()
{char a[20],*p;gets(a);p=a;printf("\n字符串长度为%d个字节",size(p));
}

7.有一字符串,包含n个字符。写一函数,将此字符串中从m个字符开始的全部字符复制成为另一个字符串。

#include<stdio.h>
char copy(char *p3,char *p4,int p)
{int i,j=0;for(i=p-1;*(p3+i)!='\0';i++){*(p4+j)=*(p3+i);j++;}*(p4+j)='\0';return;
}
main()
{char a[100],b[100],*p1,*p2;int m;printf("请输入字符串:\n");gets(a);p1=a;p2=b;printf("\n从第几个字符开始复制:\n");scanf("%d",&m);copy(p1,p2,m);printf("\n处理后的字符串为:\n");puts(b);
}

8.输入一行文字,找出其中大写字母,小写字母,空格,数字以及其他字符各有多少个。

#include<stdio.h>
int chazhao(char *p2,int *p3)
{int i=0;for(;*(p2+i)!='\0';i++){if(*(p2+i)>=65&&*(p2+i)<=90) (*p3)++;else if(*(p2+i)>=97&&*(p2+i)<=122) (*(p3+1))++;else if(*(p2+i)==32) (*(p3+2))++;else if(*(p2+i)>=48&&*(p2+i)<=57) (*(p3+3))++;else (*(p3+4))++;}return;
}
main()
{char str[100],*p;int a[5]={0,0,0,0,0},*p1;printf("输入字符串:\n");gets(str);p=str;p1=a;chazhao(p,p1);printf("\n大写字母有%d个\n",a[0]);printf("小写字母有%d个\n",a[1]);printf("空格有%d个\n",a[2]);printf("数字有%d个\n",a[3]);printf("其他字符有%d个\n",a[4]);
}

9.写一函数,将一个3*3的矩阵转置。

#include<stdio.h>
void zhuanhuan(int (*p3)[3],int (*p4)[3])
{int i,j;for(i=0;i<3;i++){for(j=0;j<3;j++)*(*(p4+j)+i)=*(*(p3+i)+j);}
}
main()
{int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},b[3][3],*p1,*p2,i,j;printf("原矩阵为:\n");for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%5d",a[i][j]);   }printf("\n");}p1=a;p2=b;zhuanhuan(p1,p2);printf("转置后的矩阵为:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%5d",b[i][j]); printf("\n");}} 

10.将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。

#include<stdio.h>
int main()
{printf("将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素\n\n");void change(int *p);int a[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};int *p;int i;int j;printf("   原矩阵为:\n");for(i=0;i<5;i++){for(j=0;j<5;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");p=&a[0][0];change(p);printf("   处理后的矩阵为:\n");for(i=0;i<5;i++){for(j=0;j<5;j++){printf("%5d",a[i][j]);}printf("\n");}return 0;
}
void change(int *p)
{int i;int j;int temp;int *pmax;int *pmin;pmax=p;pmin=p;for(i=0;i<5;i++){for(j=i;j<5;j++){if(*pmax<*(p+5*i+j)){ pmax=p+5*i+j;}//求max if(*pmin>*(p+5*i+j)){pmin=p+5*i+j;}//求第一min }} temp=*(p+12);*(p+12)=*pmax;*pmax=temp;//将max放在中心 也即是12位置 temp=*p;*p=*pmin;*pmin=temp;//将第一min放在第0位置 pmin=p+1;//把第二min指向第1位置 for(i=0;i<5;i++){for(j=0;j<5;j++){if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))){//第一min已存放在0位置 求第二min pmin=p+5*i+j;}}}temp=*pmin;*pmin=*(p+1);*(p+1)=temp;//把第二min存放在1位置 pmin=p+2;//把第三min指向2位置 for(i=0;i<5;i++){for(j=0;j<5;j++){   if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+1))&&(*pmin>*(p+5*i+j))){//第一,二min已存放 求第三min pmin=p+5*i+j;}}}temp=*pmin;*pmin=*(p+2);*(p+2)=temp;//将第三min存放在2位置 pmin=p+3;//把第四min指向3位置 for(i=0;i<5;i++){for(j=0;j<5;j++){if(((p+5*i+j)!=p)&&(p+5*i+j)!=(p+1)&&(p+5*i+j)!=(p+2)&&(*pmin>*(p+5*i+j))){//第一,二,三min已存放 求第四min pmin=p+5*i+j;}}}temp=*pmin;*pmin=*(p+24);*(p+24)=temp;//将第四min存放在3位置*(p+4)=*(p+1);*(p+20)=*(p+2);//第一,四min为第一次和最后一次筛选,第二,三min是中间排查最后再放入角
}

11-12.在主函数中输入10个的字符串。用另一函数对他们排序。然后在主函数输出这10个已排好序的字符串。

#include "stdio.h"
#include <string.h>
int main()
{void paixu(char **p);printf("用指针方法写一函数对10个字符串按从大到小顺序排序\n");char str[10][10],*p[10]={str[0],str[1],str[2],str[3],str[4],str[5],str[6],str[7],str[8],str[9]};int i;printf("输入10行字符串:\n");for(i=0;i<10;i++)scanf("%s",str[i]);paixu(p);printf("\n排序后的字符串:\n");for(i=0;i<10;i++){printf("%s",p[i]);printf("\n");}return 0;
}
void paixu(char **p){int i,j;char *pt;for(i=0;i<9;i++){//外循环9次for(j=0;j<9-i;j++){//内循环为j字符串与j后的字符串比较if(strcmp(p[j],p[j+1])<0)//字符串j<字符串j+1 函数值<0{pt=p[j];p[j]=p[j+1];p[j+1]=pt;}}}
}

14.将n个数按输入时顺序的逆序排列,用函数实现。

#include<stdio.h>
int main()
{void sort(char*p,int m);int i,n;char*p,num[20];printf("input n:");scanf("%d",&n);printf("please input these numbers :\n");for(i=0;i<n;i++)scanf("%d",&num[i]);p=&num[0];sort(p,n);printf("Now ,the sequence is :\n");for(i=0;i<n;i++)printf("%d  ",num[i]);return 0;}
void sort(char *p,int m)
{int i;char temp,*p1,*p2;for(i=0;i<m/2;i++){p1=p+i;p2=p+(m-1-i);temp=*p1;*p1=*p2;*p2=temp;}
}

15.有一个班4个学生,5门课程,(1)求第1门课程的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部成绩在85分以上的学生。分别编3个函数实现以上3个要求。

#include<stdio.h>
void ave(float *p)
{float sum=0;int i;for(i=0;i<4;i++)sum+=(*(p+i));printf("学生第一门课程平均分为:\n");printf("%.2f\n\n",sum/4);
}
void fail(float (*p)[5])
{int i,j,flag;float sum;for(i=0;i<4;i++){flag=0;sum=0;for(j=0;j<5;j++){if(*(*(p+i)+j)<60) flag++;sum+=*(*(p+i)+j);}if(flag>=2){printf("第%d号学生有两门以上不及格课程,成绩为:\n",i+1);for(j=0;j<5;j++) printf("%.2f\t",*(*(p+i)+j));printf("\n学生平均成绩为:%.2f\n\n",sum/5);}}
}
void excellent(float (*p)[5])
{int i,j;float sum,average;for(i=0;i<4;i++){ sum=0;for(j=0;j<5;j++)sum+=*(*(p+i)+j);average=sum/5;if(average>=90){printf("\n第%d号学生平均分为90分以上,学生成绩为:\n");for(j=0;j<5;j++) printf("%.2f\t",*(*(p+i)+j));}   }
}
void main()
{float a[4][5]={{96,100,79,88,99},{56,58,97,65,74},{78,89,87,98,65},{54,45,65,58,74}};ave(*a);fail(a);excellent(a);
}

16.输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到已数组a中,例如,123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。

#include<stdio.h>
main()
{void f(char *p);char str[50],*p=str;printf("输入一个字符串:\n");gets(p);f(p);
}
void f(char *p)
{int a[10],i,j=0,b=0;for(i=0;*(p+i)!='\0';i++){if(*(p+i)>='0'&&*(p+i)<='9'){b=*(p+i)-48+b*10;//如果检测到数字减去48=本身,b*10位数递增 if(*(p+i+1)<'0'||*(p+i+1)>'9'){a[j]=b;j++;b=0;//检测到非数字将整数b赋值给数组a的元素,b重置 }}   }printf("\n一共有%d个整数,分别为:\n",j);for(i=0;i<j;i++)printf("%4d",a[i]);
}

17.写一函数,实现两个字符串的比较。即自己写一个strcmp的函数,函数原型为 int strcmp(char *p1,char p2);
设p1指向字符串s1,p2指向字符串s2.要求当s1=s2时,返回值为0;若s1!=s2,返回它们二者第一个不同字符的ASCII码差值。如果s1>s2输出正值;否则s1

#include<stdio.h>
int cmp(char *p,char *q)
{int i,k;for(i=0;*(p+i)!='\0'||*(q+i)!='\0';i++){if(*(p+i)>*(q+i)) {k=*(p+i)-*(q+i);break;}else if(*(p+i)<*(q+i)){k=*(p+i)-*(q+i);break;} else if(*(p+i)=*(q+i)){k=0;break;  }}return k;
}
int main()
{char a[20],b[20],*p=a,*q=b;printf("输入字符串1:\n");gets(a);printf("\n输入字符串2:\n");gets(b);int k=cmp(p,q);if(k>0) printf("\n字符串1>字符串2\n");else if(k<0) printf("\n字符串1<字符串2\n");else printf("\n字符串1=字符串2\n");
}

18.编一程序,输入月份号,输出该月的英文名。例如,输入3,则输出“March”,要求用指针数组处理。

#include<stdio.h>
main()
{char *month[]={"Janurary","February","March","April","May","June","July","August","September","October","November","December"};int n;printf("输入月份号:\n");scanf("%d",&n);if(n>=1&&n<=12)printf("\n%d月份的英文名是%s",n,month[n-1]);else printf("月份错误");
}

19.(此题简单题目又长不想打字了直接扔代码)

#include"stdio.h"
#include<stdlib.h>
char *new(int n)
{char *p=(char *)malloc(n*sizeof(char));if(p==NULL){printf("存储空间开辟失败!\n");exit(0);}else return p;
}
int main(int argc,char *argv[])
{char *a;int n;printf("输入字符个数:\n");scanf("%d",&n);a=new(n);printf("输入字符:\n");scanf("%s",a);printf("%s\n",a);free(a);
} 

20.用指向指针的指针的方法对5个字符串排序并输出。

#include<stdio.h>
#include<string.h>
main()
{char str[5][10],pt[10];char **q,*p[]={str[0],str[1],str[2],str[3],str[4]};int i,j;printf("输入5行字符串:\n");for(i=0;i<5;i++)scanf("%s",str[i]);q=p;for(i=0;i<4;i++){for(j=0;j<4-i;j++){if(strcmp(*(q+j),*(q+j+1))>0){strcpy(pt,*(q+j));strcpy(*(q+j),*(q+j+1));strcpy(*(q+j+1),pt);}}}printf("\n字符串小到大排序:\n");for(i=0;i<5;i++)printf("%s\n",*(q+i));
}

21.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

#include"stdio.h"
main()
{void sort(int **p,int n);int a[5],*p[]={&a[0],&a[1],&a[2],&a[3],&a[4]},i,n;scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",p[i]);sort(p,n);printf("\n从下到大排序:\n");for(i=0;i<n;i++)printf("%3d",**(p+i));
}void sort(int **p,int n)
{int *pt,i,j;for(i=0;i<n;i++){for(j=0;j<n-i;j++){if(*p[j]>*p[j+1]){pt=p[j];p[j]=p[j+1];p[j+1]=pt;}}}
}

C语言程序设计第五版谭浩强著 第8章291-292指针系列相关推荐

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

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

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

    1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输入. #include<stdio.h> void main(void) {in ...

  3. 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; } ...

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

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

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

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

  6. 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 ...

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

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

  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语言程序设计》第五版谭浩强课后答案 第九章《用户自己建立数据类型​》习题答案 (大一大二、考研、计算机二级必看)

    第九章<用户自己建立数据类型​>习题答案 1.定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年问题. 2.写一个函数days,实现第1 题的计算.由主函数将年.月. ...

最新文章

  1. 杂谈 | 当前知识蒸馏与迁移学习有哪些可用的开源工具?
  2. FastQC结果解读
  3. GridView中如何实现checkbox 默认选中
  4. Java 11 已发布,String 还能这样玩!
  5. Java 随心笔记10
  6. 科大星云诗社动态20210327
  7. xml突然变成空白_“侏罗纪中期”出现了型增转变填补食肉性恐龙体型发展当中的空白...
  8. html5判断设备的动作
  9. TranslateMessage ,GetMessage, DispatchMessage分析
  10. linux的驱动开发——内核模块如何使用?
  11. Webservice接口
  12. ansys通过扫掠(sweep)方法划分网格的方法
  13. 华雨欢:5月硬分叉的BCH未来可期
  14. 计算机DNS怎么配置,dns设置,教您怎么设置dns地址
  15. page8-JQ的点击隐藏与显示
  16. 湖南启动CCTV《星光达人秀》 《宾导会客厅》全球直播发布
  17. 游山西村 陆游- 南宋
  18. 【重装系统Win10】U盘安装windows10正版操作系统 - 固体硬盘版(¥4.5-200)
  19. CentOS7如何设置屏幕不休眠
  20. Centos7 安装RVM

热门文章

  1. 最近在读的一些文章和书
  2. python五行代码解决滑块验证的缺口距离识别,破解滑块验证
  3. 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独
  4. henauOJ1050(凑零钱)
  5. html3d模型制作,数百个 HTML5 例子学习 HT 图形组件 – 3D 建模篇
  6. netsh查看wifi密码
  7. 经常戴耳机有什么危害呢?如何做到在戴耳机听歌时保护耳朵听力
  8. 绘图与可视化(数据分析)
  9. repo用法及原理详解,干了啥干了啥
  10. Busybox DHCP数据结构