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 指 b
pMax=&b;
// pMin 指 a
pMin=&a;
}
if(c<*pMin){
// pMin 指 c
pMin=&c;
// pMid 指 b
pMid=&b;
}
else if(c>*pMax){
// pMax 指 c
pMax=&c;
// pMid 指 a
pMid=&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++){
// 发现字符c
if(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;
}