作业一:素数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int a)
{
int count=0;
for(int i=1;i<=a;i++)
{
if(a%i==0)
{
count++;
}
}
return count;
}
int main(int argc,const char *argv[])
{
int a;
printf("请输入一个数:");
scanf("%d",&a);
int t=fun(a);
if(t==2)
printf("%d是素数\n",a);
else if(t!=2)
printf("%d不是素数\n",a);
return 0;
}
作业二:完美数 (返回和)
6=1+2+3 28=1+2+4+7+14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int a,int sum)
{
for(int i=1;i<a;i++)
{
if(a%i==0)
{
sum+=i;
}
}
return sum;
}
int main(int argc, const char *argv[])
{
int a;
printf("请输入一个数:");
scanf("%d",&a);
int t=fun(a,0);
if(t==a)
printf("%d是完美数\n",a);
else
printf("%d不是完美数\n",a);
return 0;
}
作业三:图形打印
F F
_FE _ FE
__FED = __ + FED
___FEDC ___ FEDC
____FEDCB ____ FEDCB
_____FEDCBA _____ FEDCBA
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int i,int j)
{
printf("F");
for(i=0;i<7;i++)
{
for(j=0;j<i;j++)
{
printf("_");
}
for(j=0;j<i;j++)
{
printf("%c",'F'-j);
}
printf("\n");
}
}
int main(int argc, const char *argv[])
{
int i,j;
fun(i,j);
return 0;
}
作业四(一维数组):
最值 指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Max(int n,int *p)
{
int max=*p;
for(int i=0;i<n;i++)
{
if(max<*(p+i))
max=*(p+i);
}
return max;
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组元素个数:");
scanf("%d",&n);
int arr[n];
int *p=arr;
for(int i=0;i<n;i++)
{
printf("arr[%d]=",i);
scanf("%d",p+i);
}
int max=Max(n,arr);
printf("最大值为:%d\n",max);
return 0;
}
冒泡 指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Max(int n,int *p)
{
for(int i=1;i<n;i++)
{
int count=0;
for(int j=0;j<n-i;j++)
{
if(*(p+j)<*(p+j+1))
{
int t=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=t;
count++;
}
}
if(count==0)
break;
}
printf("冒泡排序后的顺序为:\n");
for(int i=0;i<n;i++)
{
printf("%d\t",*(p+i));
}
printf("\n");
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组元素个数:");
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
{
printf("arr[%d]=",i);
scanf("%d",&arr[i]);
}
Max(n,arr);
return 0;
}
简单选择 指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Min(int n,int *p)
{
int min;
for(int i=0;i<n-1;i++)
{
min=i;
int count=0;
for(int j=i+1;j<n;j++)
{
if(*(p+min)>*(p+j))
{
min=j;
count++;
}
}
if(min!=i)
{
int t=*(p+min);
*(p+min)=*(p+i);
*(p+i)=t;
}
if(count==0)
break;
}
printf("简单排序后的顺序为:\n");
for(int i=0;i<n;i++)
{
printf("%d\t",*(p+i));
}
printf("\n");
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组元素个数:");
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
{
printf("arr[%d]=",i);
scanf("%d",&arr[i]);
}
Min(n,arr);
return 0;
}
交换最大值和最小值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Fun(int n,int *p)
{
int min,mini=0,max,maxi=0;
min=max=*p;
for(int i=0;i<n;i++)
{
if(min>*(p+i))
{
mini=i;
}
if(max<*(p+i))
{
maxi=i;
}
}
int a=*(p+mini);
*(p+mini)=*(p+maxi);
*(p+maxi)=a;
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组元素个数:");
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
{
printf("arr[%d]=",i);
scanf("%d",&arr[i]);
}
printf("交换前的数组为:");
for(int i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
Fun(n,arr);
printf("交换后的数组为:");
for(int i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}
作业五(二维数组):
最值 、最值的下标 指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int m,int n,int (*p)[n])
{
int max=*(*p);
int maxi=0,maxj=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
maxi=i;
maxj=j;
}
}
}
printf("最大值max=arr[%d][%d]=%d\n",maxi,maxj,max);
}
int main(int argc, const char *argv[])
{
int m,n;
printf("请输入行列:");
scanf("%d%d",&m,&n);
int arr[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("arr[%d][%d]=",i,j);
scanf("%d",&arr[i][j]);
}
}
fun(m,n,arr);
return 0;
}
杨辉三角
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Yanghui(int m,int (*p)[m])
{
for(int i=0;i<m;i++)
{
for(int j=0;j<=i;j++)
{
if(j==0||i==j)
{
*(*(p+i)+j)=1;
}
else
*(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
}
}
for(int i=0;i<m;i++)
{
for(int k=0;k<m-i;k++)
{
printf(" ");
}
for(int j=0;j<=i;j++)
{
printf("%d ",*(*(p+i)+j));
}
printf("\n");
}
printf("\n");
}
int main(int argc, const char *argv[])
{
int m;
printf("请输入杨辉三角的阶数:");
scanf("%d",&m);
int arr[m][m];
Yanghui(m,arr);
return 0;
}
正对角线求和
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Dui(int m,int (*p)[m])
{
int sum=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
if(i==j)
{
//正对角线和
sum+=*(*(p+i)+j);
}
}
}
return sum;
}
int main(int argc, const char *argv[])
{
int m;
printf("请输入数组的行数/列数:");
scanf("%d",&m);
int arr[m][m];
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
printf("arr[%d][%d]=",i,j);
scanf("%d",&arr[i][j]);
}
}
printf("对角线元素和=%d",Dui(m,arr));
return 0;
}
作业六(字符串):
4个字符串函数【非函数实现】 重点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//字符串比较大小
int my_strcmp(char *p,char *q)
{
int i=0,j=0;
while(*(p+i)==*(q+j))
{
if(*(p+i)='\0')
break;
i++;
j++;
}
int dev=*(p+i)-*(q+j);
return dev;
}
//字符串连接
void my_strcat(char *p,char *q)
{
int i;
for(i=0;*(p+i)!=0;i++);
int j;
for(j=0;*(q+j)!=0;j++)
{
*(p+i)=*(q+j);
i++;
}
*(p+i)='\0';
}
//字符串拷贝
void my_strcpy(char *p,char *q)
{
int i;
for(i=0;*(q+i)!=0;i++)
{
*(p+i)=*(q+i);
}
*(p+i)='\0';
}
//字符串计算长度
int my_strlen(char *p)
{
int count=0;
for(int i=0;*(p+i)!='\0';i++)
{
count++;
}
return count;
}
int main(int argc, const char *argv[])
{
char str1[30]="wwww";
char str2[]="hello world";
char str3[]="yyyy";
printf("字符串长度为:%d\n",my_strlen(str1));
my_strcpy(str1,str2);
printf("拷贝后的字符串为:%s\n",str1);
my_strcat(str2,str3);
printf("连接后的字符串为:%s\n",str2);
//字符串比较大小
char a[20]="wwy";
char b[20]="wwyc";
int d=my_strcmp(a,b);
if(d>0)
printf("a>b\n");
else if(d<0)
printf("a<b\n");
else if(d==0)
printf("a=b\n");
return 0;
}
字符串单词逆置 指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Danci(char *p)
{
int i=0,j=strlen(p)-1;
while(i<j)
{
char t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
i++;
j--;
}
j=0;
for(i=0;i<strlen(p);)
{
while(*(p+j)!=' '&&*(p+j)!='\0')
{
j++;
}
int k=j-1;
while(i<k)
{
char t=*(p+k);
*(p+k)=*(p+i);
*(p+i)=t;
i++;
k--;
}
while(*(p+j)==' ')
{
j++;
}
i=j;
}
printf("单词逆置后为:");
puts(p);
}
int main(int argc, const char *argv[])
{
char str[30]="";
printf("请输入字符串:");
gets(str);
Danci(str);
return 0;
}
作业七(二维字符数组):
二维字符数组的排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Paixu(int m,char (*p)[50])
{
for(int i=1;i<m;i++)
{
for(int j=0;j<m-i;j++)
{
if(strcmp(*(p+j),*(p+j+1))<0)
{
char t[20]="";
strcpy(t,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),t);
}
}
}
}
int main(int argc, const char *argv[])
{
int m;
printf("请输入数组行数:");
scanf("%d",&m);
char str[m][50];
for(int i=0;i<m;i++)
{
scanf("%s",str[i]);
}
Paixu(m,str);
for(int i=0;i<m;i++)
{
printf("%s\t",str[i]);
}
printf("\n");
return 0;
}
二维字符数组的查找
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Paixu(int m,char (*p)[50],char *key)
{
int count=0;
for(int i=0;i<m;i++)
{
if(strcmp(key,*(p+i))==0)
count++;
}
return count;
}
int main(int argc, const char *argv[])
{
int m;
printf("请输入数组行数:");
scanf("%d",&m);
char str[m][50],key[20]="";
for(int i=0;i<m;i++)
{
printf("请输入第%d个字符串:",i+1);
scanf("%s",str[i]);
}
printf("请输入需要查找的字符串:");
scanf("%s",key);
int t=Paixu(m,str,key);
if(t!=0)
{
printf("存在字符串%s\n",key);
}
else
printf("不存在字符串%s\n",key);
return 0;
}
作业八:递归
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(int n)
{
if(n==1)
{
return 1;
}
else
{
return n*fun(n-1);
}
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入n的值:");
scanf("%d",&n);
int mul=fun(n);
printf("n的阶乘为: %d\n",mul);
return 0;
}