1. 从键盘输入任意三个数,要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者, 然后从大到小输出三个数。
运行时分别输入3,7,5和6,-4,2,记录运行结果。
#include <stdio.h>
int main(){int a,b,c;// 最大 , 次大 , 最小 int *pMax,*pMid,*pMin;scanf("%d,%d,%d",&a,&b,&c);if(a>b){// pMax 指 a pMax=&a;// pMin 指 b pMin=&b;}else {// pMax 指 bpMax=&b;// pMin 指 a pMin=&a;}if(c<*pMin){// pMin 指 cpMin=&c;// pMid 指 b pMid=&b;}else if(c>*pMax){// pMax 指 cpMax=&c;// pMid 指 apMid=&a;}else{// pMid 指 c pMid=&c;}printf("%d,%d,%d\n",*pMax,*pMid,*pMin);return 0;
}
2. 求一元二次方程ax2+bx+c的根。要求用函数实现。提示:一元二次方程的求根公式:
#include <stdio.h>
#include <math.h>/** * x1 x2 为两个解 * 返回有几个解 */
int getSolve(int a,int b,int c,double *x1,double *x2){int dt = b*b-4*a*c;if(dt>=0){*x1 = (-b+sqrt(dt))/2*a;*x2 = (-b-sqrt(dt))/2*a;if(dt==0){return 1;}else{return 2;}} else {*x1=0;*x2=0;return 0;}
}
int main(){double x1,x2;int a,b,c;scanf("%d%d%d",&a,&b,&c);if(getSolve(a,b,c,&x1,&x2)){printf("x1=%lf,x2=%lf\n",x1,x2);} else {printf("无解\n");}return 0;
}
3.拆分实数的整数与小数部分:输入一个实数x (0<=x<=10000) ,输出其整数和小数。自定义一个函数void splitfloat(float x, int * intpart, float *fracpart),其中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分。自定义主函数,并在其中调用splitfloat()函数。试编写相应函数。
输入输出示例
Enter x: 5.34
The intpart is 5
The fracpart is 0.34
#include <stdio.h>
void splitfloat(float x, int *intpart, float *fracpart){// 获取x的整数部分 *intpart = (int)x;// 获取x的小数部分 *fracpart = x - (int)x;
}
int main(){int intpart;float x,fracpart;printf("Enter x:");scanf("%f",&x);splitfloat(x, &intpart,&fracpart);printf("The intpart is %d\n",intpart);printf("The fracpart is %.2lf\n",fracpart);return 0;
}
4.删除字符:输入一个字符串s,再输入一个字符c,将字符串s中出现的所有字符c删除。要求定义并调用函数delchar(s,c),它的功能是将字符串s中出现的所有c字符删除。试编写相应程序。
输入输出示例
Enter s string: Nice to meet you!
Enter a character: o
Nice t meet yu!
#include <stdio.h>
#include <string.h>
void delchar(char s[],char c){char copyS[100];int i,j;for(i=0,j=0;s[i]!='\0';i++){// 发现字符cif(s[i]==c){continue;}copyS[j] = s[i];j++;// printf("%c\t",s[i]);}strcpy(s,copyS);
}
int main(){char c,s[100]="\0";printf("Enter s string: ");gets(s);printf("Enter s character: ");scanf("%c",&c);delchar(s,c);puts(s);return 0;
}
5. 编写函数int charAt(char c, char s[], int begin),判断某个字符c在字符串s中出现的位置,从begin个字符开始判断,输出字符c首次出现的位置,如果begin开始的字符串中不存在字符c,输出-1。编写主程序,输入一个字符和一个字符串,利用上面的函数,输出字符在字符串中出现的次数,并输出字符出现的每一个位置。(字符串相关内容在教材第9章)
输入输出示例1
Hello world
o
5,8,字符o在字符串Hello world中出现了2次。
输入输出示例2
Hello world
a
字符a不在字符串Hello world中
#include <stdio.h>
#include <string.h>
int charAt(char c, char s[], int begin){int cnt=0;int i;for(i = begin-1;s[i]!='\0';i++){// 如果发现 c 字符 if(s[i]==c){cnt++;printf("%d,",i+1);}}// 如果 cnt 是 0 就返回-1 return (cnt)?cnt:-1;
}
int main(){char c,s[100]="\0";gets(s);scanf("%c",&c);// 从第一个字符开始判断 int cnt = charAt(c,s,1);if(cnt != -1){printf("字符%c在字符串%s中出现了%d次。\n",c,s,cnt);} else {printf("字符%c不在字符串%s中\n",c,s);}return 0;
}