文章目录
- 1.输入3个整数,按由小到大的顺序输出
- 2.输入3个字符串,按由小到大的顺序输出。
- 3.输入10个整数,将其中最小的值与第一个数对换,把最大的数与最后一个数对换。写3个函数:(1)输入10个数(2)进行处理(3)输出10个数。
- 4.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。写以函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
- 5.n个人围成一圈,顺序排号。从第一个开始报数(从一报到三),凡报到三的人退出圈子,问最后留下来的是原来的第几号的那位。
- 6.写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。
- 7.有一字符串,包含n个字符。写一函数,将此字符串中第m个字符开始的全部字符复制成为另一个字符串。
- 8.输入一行文字,找出其中大写字母,小写字母,空格,数字以及其它字符各有多少。
- 9.写一函数,将一个3*3的整型矩阵转置。
- 10. 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小元素(顺序为从左到右,从上到下依次从小到大存放)写一函数实现之,用main函数调用。
- 11.在主函数中输入10个等长的字符串,用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串
- 12 用指针数组处理上一题目,字符串不等长。
- 13.写一个矩阵法求定积分的通用函数。分别求sinx从0到1的定积分,cosx从-1到1的定积分,1ex从0到2的定积分
- 14.将n个数按输入时的逆序排列
- 15.有一个班4个学生,5门课程。(1)求第一门课程的平均分。(2)找出两门以上课程不及格的学生,输出他们的学号和全部客户曾成绩及平均成绩(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。
- 16 输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整体,依次存放到一数组a中。统计共有多少个整数,并输出这些数
- 17.编写一个函数,实现两个字符串的比较,即自己写一个strcmp函数。
- 18.编一函数,输入月份号,输出该月的英文月明。要求用指针数组处理。
- 19 (1)编写一个函数new,对n个字符开辟连续的内存空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间 (2)写一函数free,将前面用new函数占用的空间释放。free(p)表示将p(地址)指向的单元以后的内存段释放
- 20 用指向指针的指针的方法对5个字符串排序并输出。
- 21.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数输出。
1.输入3个整数,按由小到大的顺序输出
。
#include <stdio.h>
int main()
{
void swap(int*p1, int* p2);
int n1,n2,n3;
int* p1,*p2,*p3;
printf("please input three number:");
scanf("%d%d%d",&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n2>n3)swap(p2,p3);
printf("now,the order is: %d,%d,%d\n",n1,n2,n3);
return 0;
}
void swap(int*p1, int* p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
2.输入3个字符串,按由小到大的顺序输出。
#include <stdio.h>
#include <string.h>
int main()
{
void swap(char*, char*);
char str1[20],str2[20],str3[20];
printf("please input three line:\n");
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0)swap(str1,str2);
if(strcmp(str1,str3)>0)swap(str1,str3);
if(strcmp(str2,str3)>0)swap(str2,str3);
printf("now,the order is :\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
return 0;
}
void swap(char* p1, char* p2)
{
char p[20];
strcpy(p,p1);
strcpy(p1,p2);
strcpy(p2,p);
}
3.输入10个整数,将其中最小的值与第一个数对换,把最大的数与最后一个数对换。写3个函数:(1)输入10个数(2)进行处理(3)输出10个数。
#include <stdio.h>
int main()
{
void input(int *);
void max_min(int *);
void output(int *);
int number[10];
input(number);
max_min(number);
output(number);
return 0;
}
void input(int *number)
{
int i;
printf("please input 10 integer:\n");
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
void max_min(int *number)
{
int *min,*max,*p,temp;
max=min=number;
for(p=number+1;p<number+10;p++)
if(*p>*max)max = p;
else if(*p<*min)min = p;
temp=number[0];
number[0]=*min;
*min = temp;
if(max==number)max=min;
temp=number[9];
number[9]=*max;
*max= temp;
}
void output(int *number)
{
int*p;
printf("now,they are:\n");
for(p=number;p<number+10;p++)
printf("%5d",*p);
printf("\n");
}
4.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。写以函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
#include <stdio.h>
int main()
{
void move(int [20],int, int);
int number[20],n,m,i;
printf("how many numbers?\n");
scanf("%d",&n);
printf("input %d numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
printf("how many place you want move?\n");
scanf("%d",&m);
move(number,n,m);
printf("now, they are:\n");
for(i=0;i<n;i++)
printf("%d",number[i]);
printf("\n");
return 0;
}
void move(int number[20],int n, int m)
{
int *p,array_end;
array_end = *(number+n-1);
for(p=number+n-1;p>number;p--)
*p=*(p-1);
*number=array_end;
m--;
if(m>0)move(number,n,m);
}
5.n个人围成一圈,顺序排号。从第一个开始报数(从一报到三),凡报到三的人退出圈子,问最后留下来的是原来的第几号的那位。
#include <stdio.h>
int main()
{
int i,k,m,n,number[50],*p;
p=number;
printf("please input the number of person\n");
scanf("%d",&n);
for(i=0;i<n;i++)
*(number+i)=i+1;
i=k=m=0;
while(m<n-1)
{
if(*(number+i)!=0)k++;
if(k%3==0)
{
m++;
k=0;
*(number+i)=0;
}
i++;
if(i==n)i=0;
}
while(*p==0)p++;
printf("The last one is No.%d\n",*p);
return 0;
}
6.写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。
#include <stdio.h>
int main()
{
int length(char* p);
int len;
char str[20];
printf("please input string:\n");
scanf("%s",str);
len=length(str);
printf("The length of string is %d\n",len);
return 0;
}
int length(char* p)
{
int len=0,i=0;
while(*p='\0')
{
len++;
p++;
}
return len;
}
7.有一字符串,包含n个字符。写一函数,将此字符串中第m个字符开始的全部字符复制成为另一个字符串。
#include <stdio.h>
#include <string.h>
int main()
{
void copystr(char *,char *,int);
int m;
char str1[20],str[20];
printf("please input string\n");
gets(str1);
printf("which characters that begin to copy\n");
scanf("%d",&m);
if(strlen(str1)<m)
printf("input error");
else
{
copystr(str1,str,m);
printf("result:%s\n",str);
}
return 0;
}
void copystr(char *p1,char *p2,int n)
{
int i=0;
while(i<n-1)
{
i++;
p1++;
}
i=0;
while(*p1!='\0')
{
*(p2+i)=*(p1+i);
i++;
}
*(p2+i)='\0';
}
8.输入一行文字,找出其中大写字母,小写字母,空格,数字以及其它字符各有多少。
#include <stdio.h>
int main()
{
int upper = 0, lower = 0,digit=0,space=0,other=0,i=0;
char *p,s[20];
printf("please input string:");
while(s[i]=getchar()!='\n')i++;
p=&s[0];
while(*p!='\n')
{
if((*p>='a')&&(*p<='z'))
lower--;
else if((*p>='A')&&(*p<='Z'))
upper--;
else if((*p>='0')&&(*p<='9'))
lower--;
else if(*p==' ')
space--;
else
other++;
p++;
}
printf("upper case:%d lower case:%d",upper,lower);
printf("space:%d digit:%d other:%d",space,digit,other);
return 0;
}
9.写一函数,将一个3*3的整型矩阵转置。
#include <stdio.h>
int main()
{
void move (int *p);
int a[3][3],*p,i;
printf("input matrix:\n");
for(i=0;i<3;i++)
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("now,matrix:\n");
for(i=0;i<3;i++)
printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]);
}
void move (int *p)
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
t=*(p+3*i+j);
*(p+3*i+j)=*(p+3*j+i);
*(p+3*j+i)=t;
}
}
10. 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小元素(顺序为从左到右,从上到下依次从小到大存放)写一函数实现之,用main函数调用。
#include <stdio.h>
int main()
{
void change(int *p);
int a[5][5],*p,i,j;
printf("input matrix:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p=&a[0][0];
change(p);
printf("now, matrix:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
scanf("%d",a[i][j]);
printf("\n");
}
return 0;
}
void change(int *p)
{
int i,j,temp;
int *pmax,*pmin;
pmax=pmin=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*(p+i*5+j)>*pmax)
pmax=p+i*5+j;
else if(*(p+i*5+j)<*pmin)
pmin=p+i*5+j;
}
temp=*(p+12);
*(p+12)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
pmin = p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*(p+i*5+j)<*pmin)&&((p+i*5+j)!=p))
pmin=p+i*5+j;
temp=*(p+4);
*(p+4)=*pmin;
*pmin=temp;
pmin = p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*(p+i*5+j)<*pmin)&&((p+i*5+j)!=p)&&(*(p+i*5+j)!=*(p+4)))
pmin=p+i*5+j;
temp=*(p+20);
*(p+4)=*pmin;
*pmin=temp;
pmin = p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((*(p+i*5+j)<*pmin)&&((p+i*5+j)!=p)&&(*(p+i*5+j)!=*(p+4))&&(*(p+i*5+j)!=*(p+20)))
pmin=p+i*5+j;
temp=*(p+20);
*(p+24)=*pmin;
*pmin=temp;
}
11.在主函数中输入10个等长的字符串,用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char s[][6]);
int i;
char str[10][6];
printf("please input 10 string\n");
for(i=0;i<10;i++)
scanf("%s\n",str[i]);
sort(str);
printf("now,the sequence is:\n");
for(i=0;i<10;i++)
printf("%s\n",str[i]);
return 0;
}
void sort(char s[10][6])
{
int i,j;
char *p,temp[10];
p=temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
strcpy(p,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],p);
}
}
12 用指针数组处理上一题目,字符串不等长。
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char s[];
int i;
char str[10][6];
printf("please input 10 string\n");
for(i=0;i<10;i++)
scanf("%s\n",str[i]);
sort(str);
printf("now,the sequence is:\n");
for(i=0;i<10;i++)
printf("%s\n",str[i]);
return 0;
}
void sort(char *s[])
{
int i,j;
char *temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(*(s+j),*(s+j+1))>0)
{
temp = *(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=temp;
}
}
13.写一个矩阵法求定积分的通用函数。分别求sinx从0到1的定积分,cosx从-1到1的定积分,1ex从0到2的定积分
#include <stdio.h>
#include <math.h>
int main()
{
float fsin(float);
float fcos(float);
float fexp(float);
float integal(float(*)(float),float,float,int);
float a,b,c,n,(*p)(float);
printf("input a and b:\n");
scanf("%f%f",&a,&b);
n = 20;
p=fsin;
c=integal(fsin,a,b,n);
printf("The integal of sin(x) is :%f\n",c);
p=fcos;
c=integal(fcos,a,b,n);
printf("The integal of sin(x) is :%f\n",c);
p=fexp;
c=integal(fexp,a,b,n);
printf("The integal of exp(x) is :%f\n",c);
return 0;
}
float fsin(float x)
{
return sin(x);
}
float fcos(float x)
{
return cos(x);
}
float fexp(float x)
{
return exp(x);
}
float integal(float(* p)(float),float a,float b,int n)
{
int i;
float x,h,s;
h=(b-a)/n;
x=a;
s=0;
for(i=1;i<=n;i++)
{
x=x+h;
s=(*p)(x)*h+s;
}
return s;
}
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,these sequence is:\n");
for(i=0;i<n;i++)
printf("%d",num[i]);
printf("\n");
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;k
}
}
15.有一个班4个学生,5门课程。(1)求第一门课程的平均分。(2)找出两门以上课程不及格的学生,输出他们的学号和全部客户曾成绩及平均成绩(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。
#include <stdio.h>
int main()
{
void avsco(float *,float *);
void avsco1(char(*)[10],float *);
void fail2(char course[5][10],int num[],float *pscore,float aver[4]);
void good(char course[5][10],int num[],float *pscore,float aver[4]);
int i,j,*pnum,num[4];
float score[4][5],aver[4],*pscore,*paver;
char course[5][10],(*pcourse)[10];
pcourse = course;
pscore = &score[0][0];
printf("input course:\n");
for(i=0;i<5;i++)
scanf("%s",course[i]);
printf("input NO. and scores\n");
pnum = &num[0];
pscore=&score[0][0];
for(i=0;i<4;i++)
{
printf("NO.");
scanf("%d",pnum+i);
fflush(stdin);
for(j=0;j<5;j++)
{
printf("\n%s scores is ",pcourse+j);
scanf("%f",pscore+5*i+j);
printf("\n");
}
}
paver = &aver[0];
printf("\n\n");
avsco(pscore,paver);
avsco1(pcourse,pscore);
printf("\n\n");
fail2(pcourse,pnum,pscore,paver);
printf("\n\n");
good(pcourse,pnum,pscore,paver);
printf("\n\n");
return 0;
}
void avsco(float *pscore,float *paver)
{
int i,j;
float sum,average;
for(i=0;i<4;i++)
{
sum=0;
for(j=0;j<5;j++)
sum = sum+*(pscore+5*i+j);
average = sum/5;
*(paver+i)=average;
}
}
void avsco1(char(*pcourse)[10],float *pscore)
{
int i;
float sum=0,average;
for(i=0;i<4;i++)
sum=sum+*(pscore+5*i);
average=sum/4;
printf("course1:%s average score :%7.2f\n",*pcourse,average);
}
void fail2(char course[5][10],int num[],float *pscore,float aver[4])
{
printf("Student who is fail in two courses\n");
int i,j,k,flag=0,sign=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
if(*(pscore+5*i+j)<60)
flag++;
if(flag>=2){
sign++;
printf("NO.");
printf("%d",num[i]);
for(k=0;k<5;k++)
printf("%s score is %f\n",course[k],*(pscore+5*i+k));
printf("his average score is %f\n",aver[i]);
}
flag=0;
}
if(sign==0)
printf("No student failed\n");
}
void good(char course[5][10],int num[],float *pscore,float aver[4])
{
printf("Student whose score is good\n");
int i,j,k,flag=0,sign =0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
if(*(pscore+5*i+j)>85)
flag++;
if(aver[i]>90)
flag=5;
if(flag==5)
{
sign++;
printf("NO.%d",num[i]);
for(k=0;k<5;k++)
printf("%s score is %f\n",course[k],*(pscore+5*i+k));
printf("his average score is %f\n",aver[i]);
}
flag=0;
}
if(sign==0)
printf("no student do well\n");
}
16 输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整体,依次存放到一数组a中。统计共有多少个整数,并输出这些数
。
#include <stdio.h>
int main()
{
char str[50],*pstr;
int a[10],i,num = 0,digit = 0,*pa;
printf("input string\n");
pstr=&str[0];
pa=&a[0];
gets(str);
for(i=0;*(pstr+i)!='\0';i++)
{
if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))
{
digit*=10;
digit+=*(pstr+i)-'0';
*pa=digit;
if((*(pstr+i+1)<'0')||(*(pstr+i+1)>'9') )
{
pa++;
num++;
}
}
else
digit=0;
}
pa=&a[0];
printf("There are %d numbers in this line, they are:\n",num);
while(*pa!='\0')
{
printf("%-5d",*pa++);
}
return 0;
}
17.编写一个函数,实现两个字符串的比较,即自己写一个strcmp函数。
#include <stdio.h>
int main()
{
int strcmp(char *,char *);
char str1[20],str2[20],*p1,*p2;
int m;
printf("input two string\n");
scanf("%s",str1);
scanf("%s",str2);
p1=&str1[0];
p2=&str2[0];
m= strcmp(p1,p2);
printf("result:%s\n",m);
return 0;
}
int strcmp(char *p1,char *p2)
{
int i;
i=0;
while(*(p1+i)==*(p2+i))
if(*(p1+i++)=='\0')return 0;
return *(p1+i)-*(p2-i);
}
18.编一函数,输入月份号,输出该月的英文月明。要求用指针数组处理。
#include <stdio.h>
int main()
{
char *month_name[13]={"illegal","January","February","March","April","May","June","July","August","September","October","November","December"};
int n;
printf("please input month:\n");
scanf("%d",&n);
if((n>=1)&&(n<=12))
printf("It is %s\n",*(month_name+n));
else
printf("It is wrong\n");
return 0;
}
19 (1)编写一个函数new,对n个字符开辟连续的内存空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间 (2)写一函数free,将前面用new函数占用的空间释放。free§表示将p(地址)指向的单元以后的内存段释放
#include <stdio.h>
#define NEWSIZE 1000
char newbuff[NEWSIZE];
char *newp = newbuff;
char *new(int n)
{
if(newp+n<=newbuff+NEWSIZE)
{
newp+=n;
return (newp-n);
}
else
return NULL;
}
void free(char *p)
{
if(p>=newbuff&&p<newbuff+NEWSIZE)
newp =p;
}
20 用指向指针的指针的方法对5个字符串排序并输出。
#include <stdio.h>
#include <string.h>
#define LINEMAX 20
int main()
{
void sort(char **p);
int i;
char **p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr[i]=str[i];
printf("please input 5 strings\n");
for(i=0;i<5;i++)
scanf("%s",pstr[i]);
p=pstr;
sort(p);
printf("\n string sorted:\n");
for(i=0;i<5;i++)
printf("%s\n",pstr[i]);
return 0;
}
void sort(char **p)
{
char *temp;
int i,j;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(strcmp(*(p+i),*(p+j))>0)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}
21.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数输出。
#include <stdio.h>
#define LINEMAX 20
int main()
{
void sort(int **p,int n);
int i,n;
int **p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr[i]=str[i];
printf("please input n:\n");
scanf("%d",&n);
printf("please input %d numbers\n",n);
for(i=0;i<5;i++)
scanf("%d",pstr[i]);
p=pstr;
sort(p,n);
printf("\n string sorted:\n");
for(i=0;i<5;i++)
printf("%d\n",*pstr[i]);
return 0;
}
void sort(int **p,int n)
{
int *temp;
*temp = 0;
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(**(p+i)>**(p+j))
{
*temp=**(p+i);
**(p+i)=**(p+j);
**(p+j)=*temp;
}
}
}
}