1. 输入两个整数,要求用两个函数求出其最大公约数和最小公倍数,最大公约数和最小公倍数都在主函数中输出。
#include
int main()
{
int i,j,t;
int max(int,int);
int min(int,int);
scanf("%d%d",&i,&j);
if(i
{t=i;i=j;j=t;}
printf("%d %d\n",max(i,j),min(i*j,max(i,j)));
return 0;
}
int max(int i,int j)
{
int t;
while(j)
{
t=i%j;
i=j;
j=t;
}
return i;
}
int min(int p,int q)
{
return p/q;
}
2. 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。
#include
int main()
{
int max4(int,int,int,int); //对max4的函数声明
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d); //输入4个数
printf("max=%d\n",max4(a,b,c,d));//调用4个数中的最大者
return 0;
}
int max4(int a,int b,int c,int d) //定义max4函数
{
int max2(int,int); //对max2的函数声明
return max2(max2(max2(a,b),c),d); //调用max2把作为函数值带回main函数
}
int max2(int a,int b)
{
return(a>b?a:b); //返回条件表达式的值,即a和b中的大者
}
3. 用递归调用的方法求5!。
#include
int main()
{
int fac(int);
int n;
scanf("%d",&n);
printf("%d!=%d\n",n,fac(n));
return 0;
}
int fac(int n)
{
if(n==0||n==1)
return 1;
else
return fac(n-1)*n;
}
4. 按以下递归公式求函数的值。
10fun(n) fun(n1)2(n1) 例如,当给n输入5时,函数值为18,(要求用递归实现)。 (n1)
#include
int main()
{
int fun(int);
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
int fun(int n)
{
if(n==1)
return 10;
else
return fun(n-1)+2;
}
5. 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数。 #include
void main()
{void fun(int);
int n;
scanf("%d",&n);
if(n
{
n=-n;
putchar('-');
}
fun(n);
puts("");
}
void fun(int m)
{
if(m/10)
fun(m/10);
putchar(m%10+48);
}
6. 写一个函数,完成将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。
#include
#define N 5
int main()
{
void fun(int a[]);
int a[N],i;
for(i=0;i
scanf("%d",&a[i]);
fun(a);
return 0;
}
void fun(int a[N])
{
int t,i;
for(i=0;i
{
t=a[i];
a[i]=a[N-1-i];
a[N-1-i]=t;
}
for(i=0;i
printf("%d ",a[i]);
puts("");
}
7. 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。
#include
#define N 5
#define M 10
int main()
{
int score_1[N],score_2[M];
int i,fun(int a[],int);
for(i=0;i
scanf("%d",&score_1[i]);
for(i=0;i
scanf("%d",&score_2[i]);
printf("average of score_1:%d\n",fun(score_1,N));
printf("average of score_2:%d\n",fun(score_2,M));
return 0;
}
int fun(int c[],int l)
{
int aver=0;
for(int i=0;i
aver+=c[i];
return aver/l;
}
8. 编写一个函数,实现将两个字符串连接起来,并在main函数中调用此函数,不要调用系统提供的strcat函数。
#include
int main()
{
void c(char st1[],char st2[]);
char s1[100],s2[100];
gets(s1); gets(s2);
c(s1,s2); puts(s1);
return 0;
}
void c(char st1[],char st2[])
{
int i=0,k=0;
while(st1[++i]);
while(st1[i++]=st2[k++]);
}
9. 编写一个函数,比较两个字符串的大小,并在main函数中调用此函数,不要调用strcmp函数。
#include
int main()
{
char a[100],b[100];
void fun(char a[],char b[]);
gets(a);
gets(b);
fun(a,b);
return 0;
}
void fun(char a[],char b[])
{
for(int i=0;;i++)
{
if(a[i]>b[i])
{puts(a);break;}
else if(a[i]
{puts(b);break;}
else
continue;
}
}
10. 编写一个函数,实现在一个升序排列的整型数组中插入一个整数的功能,
主函数中实现。
#include
int a[11]={1,3,5,7,14,23,45,87,155,231};
int main()
{
int c,i;
void fun(int a[],int c);
printf("input an integer:");
scanf("%d",&c);
fun(a,c);
for(i=0;i
printf("%d ",a[i]);
printf("\n");
return 0;
}
void fun(int a[],int t)
{
int i,j;
if(t>a[9])
a[10]=t;
else
{
for(i=0;i
if(t
break;
for(j=10;j>i;j--)
a[j]=a[j-1];
并在main函数中调用此函数,输入数据和最后输出都在
a[i]=t;
}
}
11. 写一个判断素数的函数,在主函数输入一个整数,是素数时输出yes,否则输出no,结果要求在主函数中输出。
#include
int main()
{
int a;
int is_prime(int);
scanf("%d",&a);
if(is_prime(a)==0)
printf("yes\n");
else
printf("no\n");
return 0;
}
int is_prime(int a)
{
int j,flag=1;
for(j=2;j
{
if(a%j==0)
break;
}
if(j>=a/2)
flag=0;
return flag;
}
12. 编写一个函数,将一个字符串中的原音字母赋值到另一个字符串中,并在main函数中调用此函数,输入数据和最后输出都在主函数中实现。
#include
char a[50],b[50]={0};
int main()
{
void fun(char a[],char b[]);
gets(a);
fun(a,b);
puts(b);
return 0;
}
void fun(char a[],char b[])
{
int i,j;
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]=='a'||a[i]=='A'||a[i]=='e'||a[i]=='E'||a[i]=='i'||a[i]=='I'||a[i]=='o'||a[i]=='O'||a[i]=='u'||a[i]=='U')
b[j++]=a[i];
}
13. 建立动态数组,输入5个学生的成绩,编写函数检查其中有无低于60分的学生成绩,要求输入和输出功能在主函数中完成。 #include
#include
int main()
{
void check(int *);
int *p,i;
p1=(int *)malloc(5*sizeof(int));
for(i=0;i
scanf("%d",p+i);
check(p1);
return 0;
}
void check(int *p)
{
int i;
printf("They are fail:");
for(i=0;i
if(*(p+i)
printf("%d ",p[i]);
puts("");
}
14. 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。
#include
int main()
{
void ave(int a[10]);
int a[10],i;
for(i=0;i
scanf("%d",&a[i]);
ave(a);
return 0;
}
void ave(int a[10])
{
int i,m=0;
for(i=0;i
{
m=m+a[i];
if(a[i]
printf("%d %d\n",a[i],i);
}
printf("%d\n",m/10);
}
15. 编程实现:从键盘输入两个字符串,统计第二个字符串在第一个字符串中出现的次数,在主函数中调用统计函数并输出结果。 #include
int main()
{
int a[10],i,j,t,*p;
for(i=0;i
scanf("%d",&a[i]);
p=a;
for(i=0;i
for(j=0;j
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
16 编写一程序,实现从键盘接收一个字符串,然后删除其中的空格后并输出。如:输入“I am a student!”,输出“Iamastudent!”,要求用指针实现。
#include
#include
int main()
{
char a[50],*p;
int l,i;
printf("input string a:");
gets(a);
p=a;
l=strlen(a);
for(l;l>0;l--)
{
if(*(p+l)==' ')
for(i=l;*(p+i)!='\0';i++)
*(p+i)=*(p+i+1);
}
puts(p);
return 0;
}
17. 用冒泡法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)。
#include
int main()
{
int a[10],i,j,t,*p=a;
for(i=0;i
scanf("%d",p+i);
for(i=0;i
for(j=0;j
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
18. 用选择法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。
#include
int main()
{
int a[10],i,j,t,*p=a;
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
for(j=i+1;j
if(*(p+i)>*(p+j))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
19. 编写一个函数实现字符串复制功能,不能使用strcpy函数,并在 main函数中调用,输入字符串和输出赋值完后字符串的结果都在主函数中实现。(要求用指针作为函数参数)
#include
int main()
{
char a[100],b[20],*p,*q;
void copy_string(char *,char *);
gets(b);
p=a;q=b;
copy_string(p,q);
puts(p);
return 0;
}
void copy_string(char *p,char *q)
{
while(*p++=*q++);
}
20. 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针实现)
#include
int main()
{
char a[100],*p=a;
int fun(char *);
gets(a);
printf("%d\n",fun(a));
return 0;
}
int fun(char *p)
{
int k=0;
while(*p++)
k++;
return k;
}
21. 输入一个字符串,内有数字和非数字字符,例如:“A123x456 17960? 302tab5876”,将其中连续的数字作为一个整数,依次存在到一数组a中。例如,123放在a[0],456放在a[1]„„统计共有多少个整数,并输出这些数。(要求用指针实现)
#include
char a[100];
int main()
{
void fun(char *);
char *p=a;
gets(p);
fun(p);
return 0;
}
void fun(char *p)
{
int num[100],s,k,j=0,i=0;
s=0;
while(*(p+i))
{
k=0;
while(*(p+i)>='0'&&*(p+i)
{
s*=10;
s+=*(p+i)-48;
i++;k=1;
}
if(k)
{
num[j++]=s;
s=0;
}
else
i++;
}
printf("%d\n",j);
for(i=0;i
printf("%d ",num[i]);
puts("");
}
#include
#include
int main()
{
char a[50],*p;
int b[50],c[50]={0},k,j,i;
gets(a);
p=a;
k=0;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='0'&&*(p+i)
{
j=0;
while(*(p+i)>='0'&&*(p+i)
{
i++;
j++; //j表示每个数字个数(长度)
}
b[k++]=j; //k记录有几个数字
}
printf("%d\n",k);
k=0;
int n=0;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='0'&&*(p+i)
{
while(*(p+i)>='0'&&*(p+i)
{
c[n]=c[n]+(int)(*(p+i)-48)*pow(10,(b[k]--)-1);
i++;
}
k++;
printf("%d ",c[n++]);
}
puts("");
return 0;
}
22. 有一篇文章,共有4行文章,每行有60个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数。(要求用指针实现)
#include
int main()
{
void count(char (*p)[60]);
char stir[4][60];
printf("input 4 string:\n");
for(int i=0;i
gets(stir[i]);
count(stir);
return 0;
}
void count(char (*p)[60])
{ int l=0,L=0,digit=0,space=0,oth=0;
int i,j;
for(i=0;i
for(j=0;*(*(p+i)+j)!='\0';j++)
if((*(*(p+i)+j)>='a')&&(*(*(p+i)+j)='z'))
l++;
else if((*(*(p+i)+j))>='A'&&(*(*(p+i)+j)
L++;
else if(*(*(p+i)+j)>='0'&&*(*(p+i)+j)
digit++;
else if(*(*(p+i)+j)==32)
space++;
else
oth++;
printf("\capital letter:%d\nlower letter:%d\ndigit:%d\nspace:%d\nothers:%d\n",
L,l,digit,space,oth);
}
23. 编程实现从键盘输入任意十个字符串,找出并显示最长的那个字符串。(要求用指针知识实现)
#include
#include
int main()
{
char max[50],b[50];
char *p=max,*p1=b;
gets(max);
for(int i=0;i
{
gets(p1);
if(strlen(p)
{
p1=p;
strcpy(max,p1);
}
puts("");
puts(max);
return 0;
}
24. 利用函数实现如下功能:从键盘输入任意个正整数,求出它的偶数因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回。(自定义函数void fun (int x, int * pp, int *n) )。
#include
int main()
{
void fun (int x,int *pp, int *n);
int x,*pp=anta[100];
scanf("%d",&x);
fun(x,pp,&n);
return 0;
}
void fun (int x,int *pp, int *n)
{
int i,j=0,t;
for(i=2;i
if(axis==0&&i%2==0)
*(pap++)=i;
*n=j;
printf("%d\n",*n);
}
25. 编写一个函数,实现求出一个2维数组中的鞍点,并在main函数中调用此函数,2维数组中数据输入和鞍点数据输出都在主函数中实现。(鞍点是指某个数在该行上最大,同时在该列上最小)
#include
int main()
{
int an(int a[4][5]);
int a[4][5],i,j;
for(i=0;i
for(j=0;j
scanf("%d",&a[i][j]);
printf("%d\n",an(a));
return 0;
}
int an(int a[4][5])
{
int i,j,m,n,b,max,k,f;
for(i=0;i
{
max=a[i][0];
for(j=1;j
if(a[i][j]>max)
{
max=a[i][j];
m=j;
}
f=1;
for(k=0;k
if(max>a[k][m])
f=0;
{
return(a[i][m]);
break;
}
}
}
26. 输入3个学生4门课的成绩,分别用函数实现如下功能:
(1) 计算每个学生平均分;
(2) 计算每门课的平均分;
(3) 找出12个分数中最高分所对应的学生和课程。
#include
int score[3][4];
int a_stu[3],acorn[4];
int race;
int main()
{
int i,j;
void avers();
void aver_cour();
void highest();
printf("\no. cour1 cour2 cour3 cour4\n");
for(i=0;i
{
printf("No %d:",i+1);
for(j=0;j
scanf("%d",&score[i][j]);
}
avers();
aver_cour();
highest();
return 0;
}
void avers()
{
int s;
for(int i=0;i
{
for(int j=0,s=0;j
s+=score[i][j];
a_stu[i]=s/4.0;
}
printf("\average of student:"); //输出每个学生的平均成绩
for(int j=0;j
printf("%2d ",a_stu[j]);
}
void aver_cour() //计算4门课程平均成绩的函数
{
int i,j;
float s;
printf("\average of soure :");
for(j=0;j
{
s=0;
for(i=0;i
s=s+score[i][j];
acorn[j]=s/(float)3;
printf("%2d ",acorn[j]);
}
}
void highest()
{
int high=score[0][0];
int i,j,r=1,c=1;
for(i=0;i
for(j=0;j
if(score[i][j]>high)
{
high=score[i][j];
r=i+1;
c=j+1;
}
printf("\nhighest :%d NO.%d course %2d\n",high,r,c);
}
27. 用一个函数实现将一行字符串中的最长的单词输出。此行字符串从主函数传递给该函数。
#include
char b[50];
int main()
{
char a[50];
void fun(char a[]);
gets(a);
fun(a);
return 0;
}
void fun(char a[])
{
int i,j,max=0,k,n,t;
for(i=0;a[i]!='\0';i++)
{
j=0;n=i;
while((a[n]>='a'&&a[n]='A'&&a[n]
{
j++;
n++;
}
if(max
{
max=j;
k=i;
}
}
for(t=k;t
printf("%c",a[t]);
printf("\n");
}
28. 有3个学生,各学4门课程,输出总平均分数以及第n个学生的所有成绩。(要求定义两个函数分别实现上述功能,用指针作为函数参数)
#include
int main()
{
void average(int *);
void funny(int (*n)[4]);
int score[3][4]={{98,78,87,86},{85,87,76,45},{93,95,67,87}};
average(*score);
funny(score);
return 0;
}
void average(int *p)
{
int sum=0;
for(int i=0;i
sum+=*(p+i);
printf("average of all scores: %d\n",sum/12);
}
void funny(int (*n)[4])
{
int k;
printf("The score of No.");
scanf("%d",&k);
k=k-1;
for(int j=0;j
printf("%d ",*(*(nuke)+j));
puts("");
}
29. 有3个学生,每个学生有4门课程的成绩,要求在用户输入学生学号以后,能输出该学生的全部成绩。(用指针函数知识实现) #include
int main()
{
int score[3][4]={{98,78,87,86},{85,87,76,45},{93,95,67,87}};
void funny(int (*n)[4],int);
int k;
printf("The score of No.");
scanf("%d",&k);
funny(score,k-1);
return 0;
}
void funny(int (*n)[4],int k)
{
for(int j=0;j
printf("%d ",*(*(nuke)+j));
puts("");
}
30. 定义一个结构体变量(包括年、月、日)。计算当天是本年中的第几天,注意闰年问题。
#include
struct
{
int year;
int month;
int day;
}date;
int main()
{
int I, days;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("input year,month,day:");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
days=0;
for(i=1;i
days+=day_tab[i];
days+=date. day;
if(date.year%4==0&&date.year%100!=0||date.year%400==0&&date.month>=3)
days+=1;
printf("%d/%d is the %ditch day in %d.\n",date.month,date.day,days,date.year);
return 0;
}
31. 设计候选人得票统计程序,要求有4个侯选人(分别是Zhang 、Wang 、Li、 Zhao),选民每次输入一个被选人的姓名,最后统计出各人的得票结果。
#include
#include
struct Person
{
char name[20];
int count;
}leader[4]={"Zhang",0,"Wang",0,"Li",0,"Zhao",0};
int main()
{
int i,j;
char leader_name[20];
for(i=1;i
{
scanf("%s",leader_name);
for(j=0;j
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
printf("\nResult:\n");
for(i=0;i
printf("%5s:%d\n",leader[i].name,leader[i].count);
return 0;
}
32. 定义一个包括学号、姓名、成绩的学生结构体,要求实现输入3个学生信息的输入后,按照成绩的高低顺序输出各学生的信息。 #include
#define N 3
struct Student
{
int num;
char name[20];
float score;
};
int main()
{
struct Student stud[N];
struct Student temp;
int i,j;
printf("请输入三个学生的信息:学号、姓名、成绩:\n");
for(i=0;i
{
scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
}
printf("The order is :\n");
for(i=0;i
for(j=i+1;j
{
if(stud[j].score>stud[i].score)
temp=stud[i];
stud[i]=stud[j];
stud[j]=temp;
}
for(i=0;i
printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name’s[i].score);
return 0;
}
33. 有3个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入3个学生数据,要求输出平均成绩最高分的学生的信息(包括学号、姓名、3门课程成绩、平均分数)(用结构体知识)。
#include
#define N 3
struct Student
{
int num;
char name[20];
float score[3];
float aver;
};
int main()
{
void input(struct Student stud[]);
struct Student max(struct Student stud[]);
void print(struct Student stud);
struct Student stud[N],*p=stud;
input(p);
print(max(p));
return 0;
}
void input(struct Student stud[])
{
int i;
printf("请输入各个学生的信息:学号、姓名、三门课成绩:\n");
for(i=0;i
{
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stud[i].aver=(stud[i].score[0]+stud[i].score[1]+stud[i].score[2])/3;
}
}
struct Student max(struct Student stud[])
{
int i,m=0;
for(i=0;i
if(stud[i].aver>stud[m].aver)
m=i;
return stud[m];
}
void print(struct Student stud)
{
printf("\n成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.aver);
}
34. 建立一个链表,每个结点包括:学号、姓名、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。 #include
#include
#define LEN sizeof(struct student)
struct student
{
char num[6];
char name[8];
char sex[2];
int age;
struct student *next;
}stud[10];
int main()
{
struct student *p,*pt,*head;
int i,length,iage,flag=1;
int find=0;
while(flag==1)
{
printf("input length of list
scanf("%d",&length);
if(length
flag=0;
}
for(i=0;i
{
p=(struct student *) malloc(LEN);
if(i==0)
head=pt=p;
else
pt->next=p;
pt=p;
printf("NO.:");
scanf("%s",p->num);
printf("name:");
scanf("%s",p->name);
printf("sex:");
scanf("%s",p->sex);
printf("age:");
scanf("%d",&p->age);
}
p->next=NULL;
p=head;
printf("\n MO.name sex age\n");
while(p!=NULL)
{
printf("%4s%8s%6s%6d\n",p->mump->name->six->age);
p=p->next;
}
printf("input age:");
scanf("%d",&iage);
pt=head;
if(pt->age==iage)
{
p=pt->next;
head=pt=p;
find=1;
}
else
pt=pt->next;
while(pt!=NULL)
{
if(pt->age==iage)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(!find)
printf("not found %d.",iage);
p=head;
printf("\n NO.name sex age\n");
while(p!=NULL)
{
printf("%4s%8s",p->mump->name);
printf("%6s%6d\n",p->six->age);
p=p->next;
}
return 0;
}
35. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位。(要求用指针链表实现)
#include
#define N 13
int main()
{
int I, out=0,sum=0;
struct People
{
int num;
int data;
struct People *next;
}a[N];
struct People *head,*p;
for(i=0;i
{
a[i].num=i+1;
a[i].data=1;
}
head=&a[0];
for(i=0;i
if(i==N-1)
a[i].next=NULL;
a[i].next=&a[i+1];
p=head;
while(out!=N-1)
{
if(p->data==1)
sum++;
if(sum==3)
{
p->data=0;
out++;
sum=0;
}
p=p->next;
if(p==NULL)
p=head;
}
do
{
if(p->data==1)
{
printf("最后留下的学生的学号为:No.%d\n",p->num);
break;
}
p=p->next;
}
while(p!=NULL);
return 0;
}
36. 从键盘上读入3个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。
#include
#include
#include
int main()
{
FILE *fop;
char a[3][20],t[10];
int i,j,k;
printf("Enter three strings:\n");
for(i=0;i
gets(a[i]);
for(i=0;i
for(j=0;j
if(strcmp(a[j],a[j+1])>0)
{
strcpy(tea[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
if((fop=fopen("d:\\file.txt","w"))==NULL)
{
printf("can't open file\n");
exit(0);
}
for(i=0;i
{
puts(a[i],fop);puts("\n",fp);
puts(a[i]);
}
return 0;
}
37. 在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。
38. 有两个磁盘文件“file1”和“file2”,各存放一行字母,要求把两个文件中的信息合并(按字母顺序排序),输出到一个新文件“file3”中去。
1. 输入两个整数,要求用两个函数求出其最大公约数和最小公倍数,最大公约数和最小公倍数都在主函数中输出。
#include
int main()
{
int i,j,t;
int max(int,int);
int min(int,int);
scanf("%d%d",&i,&j);
if(i
{t=i;i=j;j=t;}
printf("%d %d\n",max(i,j),min(i*j,max(i,j)));
return 0;
}
int max(int i,int j)
{
int t;
while(j)
{
t=i%j;
i=j;
j=t;
}
return i;
}
int min(int p,int q)
{
return p/q;
}
2. 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。
#include
int main()
{
int max4(int,int,int,int); //对max4的函数声明
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d); //输入4个数
printf("max=%d\n",max4(a,b,c,d));//调用4个数中的最大者
return 0;
}
int max4(int a,int b,int c,int d) //定义max4函数
{
int max2(int,int); //对max2的函数声明
return max2(max2(max2(a,b),c),d); //调用max2把作为函数值带回main函数
}
int max2(int a,int b)
{
return(a>b?a:b); //返回条件表达式的值,即a和b中的大者
}
3. 用递归调用的方法求5!。
#include
int main()
{
int fac(int);
int n;
scanf("%d",&n);
printf("%d!=%d\n",n,fac(n));
return 0;
}
int fac(int n)
{
if(n==0||n==1)
return 1;
else
return fac(n-1)*n;
}
4. 按以下递归公式求函数的值。
10fun(n) fun(n1)2(n1) 例如,当给n输入5时,函数值为18,(要求用递归实现)。 (n1)
#include
int main()
{
int fun(int);
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
int fun(int n)
{
if(n==1)
return 10;
else
return fun(n-1)+2;
}
5. 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数。 #include
void main()
{void fun(int);
int n;
scanf("%d",&n);
if(n
{
n=-n;
putchar('-');
}
fun(n);
puts("");
}
void fun(int m)
{
if(m/10)
fun(m/10);
putchar(m%10+48);
}
6. 写一个函数,完成将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。
#include
#define N 5
int main()
{
void fun(int a[]);
int a[N],i;
for(i=0;i
scanf("%d",&a[i]);
fun(a);
return 0;
}
void fun(int a[N])
{
int t,i;
for(i=0;i
{
t=a[i];
a[i]=a[N-1-i];
a[N-1-i]=t;
}
for(i=0;i
printf("%d ",a[i]);
puts("");
}
7. 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。
#include
#define N 5
#define M 10
int main()
{
int score_1[N],score_2[M];
int i,fun(int a[],int);
for(i=0;i
scanf("%d",&score_1[i]);
for(i=0;i
scanf("%d",&score_2[i]);
printf("average of score_1:%d\n",fun(score_1,N));
printf("average of score_2:%d\n",fun(score_2,M));
return 0;
}
int fun(int c[],int l)
{
int aver=0;
for(int i=0;i
aver+=c[i];
return aver/l;
}
8. 编写一个函数,实现将两个字符串连接起来,并在main函数中调用此函数,不要调用系统提供的strcat函数。
#include
int main()
{
void c(char st1[],char st2[]);
char s1[100],s2[100];
gets(s1); gets(s2);
c(s1,s2); puts(s1);
return 0;
}
void c(char st1[],char st2[])
{
int i=0,k=0;
while(st1[++i]);
while(st1[i++]=st2[k++]);
}
9. 编写一个函数,比较两个字符串的大小,并在main函数中调用此函数,不要调用strcmp函数。
#include
int main()
{
char a[100],b[100];
void fun(char a[],char b[]);
gets(a);
gets(b);
fun(a,b);
return 0;
}
void fun(char a[],char b[])
{
for(int i=0;;i++)
{
if(a[i]>b[i])
{puts(a);break;}
else if(a[i]
{puts(b);break;}
else
continue;
}
}
10. 编写一个函数,实现在一个升序排列的整型数组中插入一个整数的功能,
主函数中实现。
#include
int a[11]={1,3,5,7,14,23,45,87,155,231};
int main()
{
int c,i;
void fun(int a[],int c);
printf("input an integer:");
scanf("%d",&c);
fun(a,c);
for(i=0;i
printf("%d ",a[i]);
printf("\n");
return 0;
}
void fun(int a[],int t)
{
int i,j;
if(t>a[9])
a[10]=t;
else
{
for(i=0;i
if(t
break;
for(j=10;j>i;j--)
a[j]=a[j-1];
并在main函数中调用此函数,输入数据和最后输出都在
a[i]=t;
}
}
11. 写一个判断素数的函数,在主函数输入一个整数,是素数时输出yes,否则输出no,结果要求在主函数中输出。
#include
int main()
{
int a;
int is_prime(int);
scanf("%d",&a);
if(is_prime(a)==0)
printf("yes\n");
else
printf("no\n");
return 0;
}
int is_prime(int a)
{
int j,flag=1;
for(j=2;j
{
if(a%j==0)
break;
}
if(j>=a/2)
flag=0;
return flag;
}
12. 编写一个函数,将一个字符串中的原音字母赋值到另一个字符串中,并在main函数中调用此函数,输入数据和最后输出都在主函数中实现。
#include
char a[50],b[50]={0};
int main()
{
void fun(char a[],char b[]);
gets(a);
fun(a,b);
puts(b);
return 0;
}
void fun(char a[],char b[])
{
int i,j;
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]=='a'||a[i]=='A'||a[i]=='e'||a[i]=='E'||a[i]=='i'||a[i]=='I'||a[i]=='o'||a[i]=='O'||a[i]=='u'||a[i]=='U')
b[j++]=a[i];
}
13. 建立动态数组,输入5个学生的成绩,编写函数检查其中有无低于60分的学生成绩,要求输入和输出功能在主函数中完成。 #include
#include
int main()
{
void check(int *);
int *p,i;
p1=(int *)malloc(5*sizeof(int));
for(i=0;i
scanf("%d",p+i);
check(p1);
return 0;
}
void check(int *p)
{
int i;
printf("They are fail:");
for(i=0;i
if(*(p+i)
printf("%d ",p[i]);
puts("");
}
14. 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。
#include
int main()
{
void ave(int a[10]);
int a[10],i;
for(i=0;i
scanf("%d",&a[i]);
ave(a);
return 0;
}
void ave(int a[10])
{
int i,m=0;
for(i=0;i
{
m=m+a[i];
if(a[i]
printf("%d %d\n",a[i],i);
}
printf("%d\n",m/10);
}
15. 编程实现:从键盘输入两个字符串,统计第二个字符串在第一个字符串中出现的次数,在主函数中调用统计函数并输出结果。 #include
int main()
{
int a[10],i,j,t,*p;
for(i=0;i
scanf("%d",&a[i]);
p=a;
for(i=0;i
for(j=0;j
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
16 编写一程序,实现从键盘接收一个字符串,然后删除其中的空格后并输出。如:输入“I am a student!”,输出“Iamastudent!”,要求用指针实现。
#include
#include
int main()
{
char a[50],*p;
int l,i;
printf("input string a:");
gets(a);
p=a;
l=strlen(a);
for(l;l>0;l--)
{
if(*(p+l)==' ')
for(i=l;*(p+i)!='\0';i++)
*(p+i)=*(p+i+1);
}
puts(p);
return 0;
}
17. 用冒泡法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)。
#include
int main()
{
int a[10],i,j,t,*p=a;
for(i=0;i
scanf("%d",p+i);
for(i=0;i
for(j=0;j
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
18. 用选择法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。
#include
int main()
{
int a[10],i,j,t,*p=a;
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
for(j=i+1;j
if(*(p+i)>*(p+j))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
for(i=0;i
printf("%d ",*(p+i));
puts("");
return 0;
}
19. 编写一个函数实现字符串复制功能,不能使用strcpy函数,并在 main函数中调用,输入字符串和输出赋值完后字符串的结果都在主函数中实现。(要求用指针作为函数参数)
#include
int main()
{
char a[100],b[20],*p,*q;
void copy_string(char *,char *);
gets(b);
p=a;q=b;
copy_string(p,q);
puts(p);
return 0;
}
void copy_string(char *p,char *q)
{
while(*p++=*q++);
}
20. 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针实现)
#include
int main()
{
char a[100],*p=a;
int fun(char *);
gets(a);
printf("%d\n",fun(a));
return 0;
}
int fun(char *p)
{
int k=0;
while(*p++)
k++;
return k;
}
21. 输入一个字符串,内有数字和非数字字符,例如:“A123x456 17960? 302tab5876”,将其中连续的数字作为一个整数,依次存在到一数组a中。例如,123放在a[0],456放在a[1]„„统计共有多少个整数,并输出这些数。(要求用指针实现)
#include
char a[100];
int main()
{
void fun(char *);
char *p=a;
gets(p);
fun(p);
return 0;
}
void fun(char *p)
{
int num[100],s,k,j=0,i=0;
s=0;
while(*(p+i))
{
k=0;
while(*(p+i)>='0'&&*(p+i)
{
s*=10;
s+=*(p+i)-48;
i++;k=1;
}
if(k)
{
num[j++]=s;
s=0;
}
else
i++;
}
printf("%d\n",j);
for(i=0;i
printf("%d ",num[i]);
puts("");
}
#include
#include
int main()
{
char a[50],*p;
int b[50],c[50]={0},k,j,i;
gets(a);
p=a;
k=0;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='0'&&*(p+i)
{
j=0;
while(*(p+i)>='0'&&*(p+i)
{
i++;
j++; //j表示每个数字个数(长度)
}
b[k++]=j; //k记录有几个数字
}
printf("%d\n",k);
k=0;
int n=0;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='0'&&*(p+i)
{
while(*(p+i)>='0'&&*(p+i)
{
c[n]=c[n]+(int)(*(p+i)-48)*pow(10,(b[k]--)-1);
i++;
}
k++;
printf("%d ",c[n++]);
}
puts("");
return 0;
}
22. 有一篇文章,共有4行文章,每行有60个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数。(要求用指针实现)
#include
int main()
{
void count(char (*p)[60]);
char stir[4][60];
printf("input 4 string:\n");
for(int i=0;i
gets(stir[i]);
count(stir);
return 0;
}
void count(char (*p)[60])
{ int l=0,L=0,digit=0,space=0,oth=0;
int i,j;
for(i=0;i
for(j=0;*(*(p+i)+j)!='\0';j++)
if((*(*(p+i)+j)>='a')&&(*(*(p+i)+j)='z'))
l++;
else if((*(*(p+i)+j))>='A'&&(*(*(p+i)+j)
L++;
else if(*(*(p+i)+j)>='0'&&*(*(p+i)+j)
digit++;
else if(*(*(p+i)+j)==32)
space++;
else
oth++;
printf("\capital letter:%d\nlower letter:%d\ndigit:%d\nspace:%d\nothers:%d\n",
L,l,digit,space,oth);
}
23. 编程实现从键盘输入任意十个字符串,找出并显示最长的那个字符串。(要求用指针知识实现)
#include
#include
int main()
{
char max[50],b[50];
char *p=max,*p1=b;
gets(max);
for(int i=0;i
{
gets(p1);
if(strlen(p)
{
p1=p;
strcpy(max,p1);
}
puts("");
puts(max);
return 0;
}
24. 利用函数实现如下功能:从键盘输入任意个正整数,求出它的偶数因子,并按从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回。(自定义函数void fun (int x, int * pp, int *n) )。
#include
int main()
{
void fun (int x,int *pp, int *n);
int x,*pp=anta[100];
scanf("%d",&x);
fun(x,pp,&n);
return 0;
}
void fun (int x,int *pp, int *n)
{
int i,j=0,t;
for(i=2;i
if(axis==0&&i%2==0)
*(pap++)=i;
*n=j;
printf("%d\n",*n);
}
25. 编写一个函数,实现求出一个2维数组中的鞍点,并在main函数中调用此函数,2维数组中数据输入和鞍点数据输出都在主函数中实现。(鞍点是指某个数在该行上最大,同时在该列上最小)
#include
int main()
{
int an(int a[4][5]);
int a[4][5],i,j;
for(i=0;i
for(j=0;j
scanf("%d",&a[i][j]);
printf("%d\n",an(a));
return 0;
}
int an(int a[4][5])
{
int i,j,m,n,b,max,k,f;
for(i=0;i
{
max=a[i][0];
for(j=1;j
if(a[i][j]>max)
{
max=a[i][j];
m=j;
}
f=1;
for(k=0;k
if(max>a[k][m])
f=0;
{
return(a[i][m]);
break;
}
}
}
26. 输入3个学生4门课的成绩,分别用函数实现如下功能:
(1) 计算每个学生平均分;
(2) 计算每门课的平均分;
(3) 找出12个分数中最高分所对应的学生和课程。
#include
int score[3][4];
int a_stu[3],acorn[4];
int race;
int main()
{
int i,j;
void avers();
void aver_cour();
void highest();
printf("\no. cour1 cour2 cour3 cour4\n");
for(i=0;i
{
printf("No %d:",i+1);
for(j=0;j
scanf("%d",&score[i][j]);
}
avers();
aver_cour();
highest();
return 0;
}
void avers()
{
int s;
for(int i=0;i
{
for(int j=0,s=0;j
s+=score[i][j];
a_stu[i]=s/4.0;
}
printf("\average of student:"); //输出每个学生的平均成绩
for(int j=0;j
printf("%2d ",a_stu[j]);
}
void aver_cour() //计算4门课程平均成绩的函数
{
int i,j;
float s;
printf("\average of soure :");
for(j=0;j
{
s=0;
for(i=0;i
s=s+score[i][j];
acorn[j]=s/(float)3;
printf("%2d ",acorn[j]);
}
}
void highest()
{
int high=score[0][0];
int i,j,r=1,c=1;
for(i=0;i
for(j=0;j
if(score[i][j]>high)
{
high=score[i][j];
r=i+1;
c=j+1;
}
printf("\nhighest :%d NO.%d course %2d\n",high,r,c);
}
27. 用一个函数实现将一行字符串中的最长的单词输出。此行字符串从主函数传递给该函数。
#include
char b[50];
int main()
{
char a[50];
void fun(char a[]);
gets(a);
fun(a);
return 0;
}
void fun(char a[])
{
int i,j,max=0,k,n,t;
for(i=0;a[i]!='\0';i++)
{
j=0;n=i;
while((a[n]>='a'&&a[n]='A'&&a[n]
{
j++;
n++;
}
if(max
{
max=j;
k=i;
}
}
for(t=k;t
printf("%c",a[t]);
printf("\n");
}
28. 有3个学生,各学4门课程,输出总平均分数以及第n个学生的所有成绩。(要求定义两个函数分别实现上述功能,用指针作为函数参数)
#include
int main()
{
void average(int *);
void funny(int (*n)[4]);
int score[3][4]={{98,78,87,86},{85,87,76,45},{93,95,67,87}};
average(*score);
funny(score);
return 0;
}
void average(int *p)
{
int sum=0;
for(int i=0;i
sum+=*(p+i);
printf("average of all scores: %d\n",sum/12);
}
void funny(int (*n)[4])
{
int k;
printf("The score of No.");
scanf("%d",&k);
k=k-1;
for(int j=0;j
printf("%d ",*(*(nuke)+j));
puts("");
}
29. 有3个学生,每个学生有4门课程的成绩,要求在用户输入学生学号以后,能输出该学生的全部成绩。(用指针函数知识实现) #include
int main()
{
int score[3][4]={{98,78,87,86},{85,87,76,45},{93,95,67,87}};
void funny(int (*n)[4],int);
int k;
printf("The score of No.");
scanf("%d",&k);
funny(score,k-1);
return 0;
}
void funny(int (*n)[4],int k)
{
for(int j=0;j
printf("%d ",*(*(nuke)+j));
puts("");
}
30. 定义一个结构体变量(包括年、月、日)。计算当天是本年中的第几天,注意闰年问题。
#include
struct
{
int year;
int month;
int day;
}date;
int main()
{
int I, days;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("input year,month,day:");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
days=0;
for(i=1;i
days+=day_tab[i];
days+=date. day;
if(date.year%4==0&&date.year%100!=0||date.year%400==0&&date.month>=3)
days+=1;
printf("%d/%d is the %ditch day in %d.\n",date.month,date.day,days,date.year);
return 0;
}
31. 设计候选人得票统计程序,要求有4个侯选人(分别是Zhang 、Wang 、Li、 Zhao),选民每次输入一个被选人的姓名,最后统计出各人的得票结果。
#include
#include
struct Person
{
char name[20];
int count;
}leader[4]={"Zhang",0,"Wang",0,"Li",0,"Zhao",0};
int main()
{
int i,j;
char leader_name[20];
for(i=1;i
{
scanf("%s",leader_name);
for(j=0;j
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
printf("\nResult:\n");
for(i=0;i
printf("%5s:%d\n",leader[i].name,leader[i].count);
return 0;
}
32. 定义一个包括学号、姓名、成绩的学生结构体,要求实现输入3个学生信息的输入后,按照成绩的高低顺序输出各学生的信息。 #include
#define N 3
struct Student
{
int num;
char name[20];
float score;
};
int main()
{
struct Student stud[N];
struct Student temp;
int i,j;
printf("请输入三个学生的信息:学号、姓名、成绩:\n");
for(i=0;i
{
scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
}
printf("The order is :\n");
for(i=0;i
for(j=i+1;j
{
if(stud[j].score>stud[i].score)
temp=stud[i];
stud[i]=stud[j];
stud[j]=temp;
}
for(i=0;i
printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name’s[i].score);
return 0;
}
33. 有3个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入3个学生数据,要求输出平均成绩最高分的学生的信息(包括学号、姓名、3门课程成绩、平均分数)(用结构体知识)。
#include
#define N 3
struct Student
{
int num;
char name[20];
float score[3];
float aver;
};
int main()
{
void input(struct Student stud[]);
struct Student max(struct Student stud[]);
void print(struct Student stud);
struct Student stud[N],*p=stud;
input(p);
print(max(p));
return 0;
}
void input(struct Student stud[])
{
int i;
printf("请输入各个学生的信息:学号、姓名、三门课成绩:\n");
for(i=0;i
{
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stud[i].aver=(stud[i].score[0]+stud[i].score[1]+stud[i].score[2])/3;
}
}
struct Student max(struct Student stud[])
{
int i,m=0;
for(i=0;i
if(stud[i].aver>stud[m].aver)
m=i;
return stud[m];
}
void print(struct Student stud)
{
printf("\n成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2],stu.aver);
}
34. 建立一个链表,每个结点包括:学号、姓名、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。 #include
#include
#define LEN sizeof(struct student)
struct student
{
char num[6];
char name[8];
char sex[2];
int age;
struct student *next;
}stud[10];
int main()
{
struct student *p,*pt,*head;
int i,length,iage,flag=1;
int find=0;
while(flag==1)
{
printf("input length of list
scanf("%d",&length);
if(length
flag=0;
}
for(i=0;i
{
p=(struct student *) malloc(LEN);
if(i==0)
head=pt=p;
else
pt->next=p;
pt=p;
printf("NO.:");
scanf("%s",p->num);
printf("name:");
scanf("%s",p->name);
printf("sex:");
scanf("%s",p->sex);
printf("age:");
scanf("%d",&p->age);
}
p->next=NULL;
p=head;
printf("\n MO.name sex age\n");
while(p!=NULL)
{
printf("%4s%8s%6s%6d\n",p->mump->name->six->age);
p=p->next;
}
printf("input age:");
scanf("%d",&iage);
pt=head;
if(pt->age==iage)
{
p=pt->next;
head=pt=p;
find=1;
}
else
pt=pt->next;
while(pt!=NULL)
{
if(pt->age==iage)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(!find)
printf("not found %d.",iage);
p=head;
printf("\n NO.name sex age\n");
while(p!=NULL)
{
printf("%4s%8s",p->mump->name);
printf("%6s%6d\n",p->six->age);
p=p->next;
}
return 0;
}
35. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位。(要求用指针链表实现)
#include
#define N 13
int main()
{
int I, out=0,sum=0;
struct People
{
int num;
int data;
struct People *next;
}a[N];
struct People *head,*p;
for(i=0;i
{
a[i].num=i+1;
a[i].data=1;
}
head=&a[0];
for(i=0;i
if(i==N-1)
a[i].next=NULL;
a[i].next=&a[i+1];
p=head;
while(out!=N-1)
{
if(p->data==1)
sum++;
if(sum==3)
{
p->data=0;
out++;
sum=0;
}
p=p->next;
if(p==NULL)
p=head;
}
do
{
if(p->data==1)
{
printf("最后留下的学生的学号为:No.%d\n",p->num);
break;
}
p=p->next;
}
while(p!=NULL);
return 0;
}
36. 从键盘上读入3个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。
#include
#include
#include
int main()
{
FILE *fop;
char a[3][20],t[10];
int i,j,k;
printf("Enter three strings:\n");
for(i=0;i
gets(a[i]);
for(i=0;i
for(j=0;j
if(strcmp(a[j],a[j+1])>0)
{
strcpy(tea[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
if((fop=fopen("d:\\file.txt","w"))==NULL)
{
printf("can't open file\n");
exit(0);
}
for(i=0;i
{
puts(a[i],fop);puts("\n",fp);
puts(a[i]);
}
return 0;
}
37. 在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。
38. 有两个磁盘文件“file1”和“file2”,各存放一行字母,要求把两个文件中的信息合并(按字母顺序排序),输出到一个新文件“file3”中去。