#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int length;
}SqList;
SqList *InitList(SqList *L); // 初始化
void DestroyList(SqList *L); // 销毁
void ClearList(SqList *L); // 清空列表
int ListEmpty(SqList *L); // 判断是否为空
int ListLength(SqList *L); // 返回线性表的长度
int GetElem(SqList *L,int i,int *c); // 销毁获取第i个元素
int LocateElem(SqList *L,int e); // 定位值为e的位置
int PrioElem(SqList *L,int e); // 查找前项
int NextElem(SqList *L,int e); // 查找后项
int ListInsert(SqList *L,int i,int e); // 插入元素
int ListDelete(SqList *L,int i); // 删除剩余第i个元素
int TraverseList(SqList *L); // 遍历线性表
int main()
{
//int idx,len;
SqList *L = NULL;
printf("\n请输入数字x初始化线性表:\n");
L = InitList(L);
printf("\n线性表的长度为%d \n",ListLength(L));
if (ListEmpty(L))
{
printf("\n线性表为空\n\n");
}
else
{
printf("\n线性表不为空\n\n");
}
return 0;
}
SqList *InitList(SqList *L) // 初始化
{
int x, index =0;
L = (SqList*)malloc(sizeof(SqList));
if(L)
{
printf("\n输入-1时,程序停止操作。\n");
while(1)
{
scanf("%d",&x); // 获取s输入数据放入x;
if(x==-1)
{
printf("\n线性表初始化成功!\n");
break;
}
L->data[index++]=x; // 把书记放在线性表中;
}
L->length = index;
}
else
{
printf("\n线性表初始化失败,请重新操作!\n");
}
return L;
}
void DestroyList(SqList *L) // 销毁
{
free(L);
printf("\n线性表销毁成功!\n");
}
void ClearList(SqList *L) // 清空列表
{
int len = L->length;
int i;
for (i=0; i<len; i++)
L->data[i]=0;
printf("\n线性表清除成功!\n");
}
int ListEmpty(SqList *L) // 判断是否为空
{
return (L->length == 0);
}
int ListLength(SqList *L) // 返回线性表的长度
{
return (L->length);
}
// 1 输入一个数字n,求1到n的和
/*/ while
#include <stdio.h>
int main()
{
int i=1,num,sum=0;
printf("Please input a integer:");
scanf("%d",&num);
while(i<=num)
{
sum += i;
++i;
}
printf("sum:%d\n",sum);
return 0;
}
*/
/*/ 递归
#include <stdio.h>
int acumunum(int num); // 声明函数;
int main()
{
int num,sum=0;
printf("Please input a integer:");
scanf("%d",&num);
sum=acumunum(num);
printf("sum:%d.\n",sum);
return 0;
}
int acumunum(int num)
{
if (num==0)
{
return 0;
}
else
{
return num + acumunum(num-1);
}
}
*/
/*/ for
#include <stdio.h>
int main()
{
int i,num,sum=0;
printf("Please input a integer:");
scanf("%d",&num);
// sum=0;
for (i=1; i<= num;++i)
{
sum += i;
}
printf("sum:%d\n",sum);
return 0;
}
*/
/*/ 求和公式
#include <stdio.h>
int main()
{
int num,sum=0;
printf("Please input a integer:");
if(scanf("%d",&num)==1)
{
sum = (1+num)*num/2;
}
printf("sum:%d\n",sum);
return 0;
}
*/
/* 2 九九乘法口诀表
#include <stdio.h>
int main()
{
int i,j;
for (i=1;i<=9;++i)
{
for(j=1;j<=i;++j)
{
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
return 0;
}
*/
//3 斐波那契数列 1, 1, 2, 3, 5, 8, 13, 21, 34,...... 这个数列从第3项开始,每一项都等于前两项之和。
/* 3 斐波那契数列--递归
#include <stdio.h>
int fibo(int num);
int main()
{
int num,re;
printf("求第几项的数值:");
scanf("%d",&num);
re = fibo(num);
printf("第%d项的数值:%d\n",num,re);
return 0;
}
int fibo(int num)
{
if (num<3)
{
return 1;
}
else
{
return fibo(num-1)+fibo(num-2);
}
}
*/
/* 3 斐波那契数列--指针
#include <stdio.h>
int fibo_(int num);
int main()
{
int num,re;
printf("求第几项的数值:");
scanf("%d",&num);
re = fibo_(num);
printf("第%d项的数值:%d\n",num,re);
return 0;
}
int fibo_(int num)
{
int a=1,b=1,c=0;
printf("1\t1\t");
if (num<3)
{
return 1;
}
while(num-2>0)
{
c = a+b;
printf("%d\t",c);
a = b;
b = c;
--num;
}
return c;
}
*/
/* 4 求两数的最大公约数
#include <stdio.h>
int gcd(int num1,int num2);
int main()
{
int num1,num2,re;
num1 = 60;
num2 = 30;
re = gcd(num1,num2);
printf("gcd:%d\n",re);
return 0;
}
int gcd(int num1,int num2)
{
int i=0,t=0;
for (i=1;i<=num2 && i<=num1;++i)
{
if (num1%i==0 && num2%i==0 )
{
t = i;
}
}
return t;
}
*/
/* 4
#include <stdio.h>
int gcd_(int num1,int num2);
int main()
{
int num1,num2,re;
num1 = 60;
num2 = 30;
re = gcd_(num1,num2);
printf("gcd:%d\n",re);
return 0;
}
int gcd_(int num1,int num2)
{
while (num1 != num2)
{
if(num1 > num2)
{
num1 -= num2;
}
else
{
num2 -= num1;
}
}
return num1;
}
*/
/* 5 求两数最小公倍数_遍历
#include <stdio.h>
int main()
{
int num1,num2,re;
num1 = 17;
num2 = 30;
re = num1>=num2? num1: num2;
while (1)
{
if (re%num1==0 && re%num2==0 )
{
printf("%d和%d的最小公倍数:%d\n",num1,num2,re);
return re;
}
++re;
}
return 0;
}
*/
/* 6 一个正整数的阶乘 n! = 1x2x3x4x...xn
#include <stdio.h>
int main()
{
int i=1,n,re=1;
n = 5;
for(i=1;i<=n;++i)
{
re *= i;
}
printf("re:%d\n",re);
return 0;
}
*/
/* 7 判断数字为几位数
#include <stdio.h>
int main()
{
int num=123;
int count=1;
while(num/10>0)
{
count++;
num /= 10;
printf("num:%d\n",num);
}
printf("count:%d\n",count);
return 0;
}
*/
/* 8 判断回文数
#include <stdio.h>
int main()
{
int num = 12343219;
int org = num;
int new = 0;
// 翻转
while(num>0)
{
new = new*10 +num%10;
num /= 10;
}
// 判断
if (new==org)
{
printf("%d是回文数\n",org);
}
else
{
printf("%d不是回文数\n",org);
}
return 0;
}
*/
/* 9 判断素数
#include <stdio.h>
int main()
{
int num=21;
int i = 2;
if (num>2)
{
while(i<num)
{
if(num % i==0)
{
printf("num %d is not a prime\n",num);
break;
}
++i;
}
if (i==num)
printf("num %d is a prime\n",num);
}
else
{
printf("2 is not a prime\n");
}
return 0;
}
*/
/* 10 计算一个数是否可为两个素数之和
*/
/* 11 二进制与十进制相互转换
#include <stdio.h>
#include <math.h>
int two2ten(long long num);
long long ten2two(int num);
int main()
{
int num = 1111; // 1 2 4 8
int num0 = 15;
int two2ten_ = two2ten(num);
long long ten2two_ = ten2two(num0);
printf("two2ten_ : %d\n",two2ten_);
printf("ten2two_ : %lld\n",ten2two_);
return 0;
}
long long ten2two(int num)
{
long long result=0;
int i=1,re=0;
while(num>0)
{
re = num%2;
num /=2;
result += i*re;
i *= 10;
}
return result;
}
int two2ten(long long num)
{
int i=0,re=0,sum=0;
while (num>0)
{
re = num % 10;
num /= 10;
sum += re*pow(2,i);
++i;
}
return sum;
}
*/
/* 12 八进制与十进制相互转换
// 八进制与十进制相互转换
#include <stdio.h>
#include <math.h>
int eight2ten(long long num);
long long ten2eight(int num);
int main()
{
int num8 = 7635; // 1 2 4 8
int num10 = 3997;
int eight2ten_ = eight2ten(num8);
long long ten2eight_ = ten2eight(num10);
printf("eight2ten_ : %d\n",eight2ten_);
printf("ten2eight_ : %lld\n",ten2eight_);
return 0;
}
long long ten2eight(int num)
{
long long result=0;
int i=1,re=0;
while(num>0)
{
re = num % 8;
num /= 8;
result += i*re;
i *= 10;
}
return result;
}
int eight2ten(long long num)
{
int i=0,re=0,sum=0;
while (num>0)
{
re = num % 10;
num /= 10;
sum += re*pow(8,i);
++i;
}
return sum;
}
*/
/* 13 八进制与二进制相互转换
*/
/* 14 字符串翻转
#include <stdio.h>
void reverseChar(void);
int main()
{
printf("输入一个字符串: ");
reverseChar();
return 0;
}
void reverseChar()
{
char c ;
scanf("%c", &c);
if (c != '\n')
{
reverseChar();
printf("%c",c);
}
}
*/
/* 15 计算数组元素平均值
#include <stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9};
int i;
for (i=0;i<10;++i)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
*/
/* 16 输出数组
*/
/* 17 计算数组元素之和
*/
/* 18 查找数组中最大的元素值
#include <stdio.h>
int main()
{
int a[11]={1,2,3,4,5,6,7,8,9,100};
int i,largest=0;
for (i=0;i<10;++i)
{
if (largest<a[i])
{
largest=a[i];
}
}
printf("largest: %d \n",largest);
return 0;
}
*/
/* 19 查找数组中最小的元素
*/
/* 20
*/
/* 21 数组拆分与合并
*/
/* 22 数组拷贝
*/
/* 23 计算标准偏差
*/
/* 24 两个矩阵相乘
// 矩阵乘法 A(m,n),B(n,o)
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,k;
int arr1[2][3] = { {1,2,3},{4,5,6} };
int arr2[3][4]= { {1,1,1,1},{2,2,2,2},{3,3,3,3}};
int re[2][4];
for (i=0;i<2;++i)
{
for(j=0;j<4;++j)
{
re[i][j]=0;
for(k=0;k<3;++k)
{
re[i][j] += arr1[i][k]*arr2[k][j];
}
printf("%d ",re[i][j]);
}
printf("\n");
}
return 0;
}
*/
/* 25 矩阵转换
t[j][i]= a[i][j]
*/
/* 26 使用指针访问数组元素
*/
/* 27 使用引用循环替换数值
#include <stdio.h>
void cicleSwap(int *a,int *b,int *c);
int main()
{
int a,b,c;
printf("Please input three integer:");
scanf("%d %d %d",&a,&b,&c);
printf("Before:%d,%d,%d\n",a,b,c);
cicleSwap(&a,&b,&c);
printf("After:%d,%d,%d\n",a,b,c);
return 0;
}
void cicleSwap(int *a,int *b,int *c)
{
int t = *c;
*c = *b;
*b = *a;
*a = t;
}
*/
/* 28 判断最大值
// 判断最大值: 1.给指针分配内存;在分配的内存中存储数据;找出最大值;
#include <stdio.h>
void cicleSwap(int *a,int *b,int *c);
int main()
{
int i,n;
float *data;
printf("please input a interger:");
scanf("%d",&n);
data = (float*) calloc(n, sizeof(float));
if (data==NULL)
{
printf("Error!!!");
//exit(0);
}
for (i=0;i<n;++i)
{
printf("please input : %dnum: ",i+1);
scanf("%f",data+i);
}
for (i=0;i<n;++i)
{
if(*data<*(data+i))
{
*data = *(data+i);
}
}
printf("Max num :%.2f\n",*data);
return 0;
}
*/
/* 29 删除字符串中的特殊字符
#include <stdio.h>
#include <string.h>
int main()
{
char line[100];
int i,j;
long len;
printf("输入一个字符串: ");
scanf("%s",line);
len = strlen(line);
for(i=0;i<len+1;i++)
{
if((line[i]>='a'&&line[i]<='z') || (line[i]>='A'&&line[i]<='Z'))
continue;
for(j=i;j<len;j++)
{
line[j] = line[j+1];
}
len--;
i--;
}
*/
/* 30 连接字符串
// 连接字符串
#include <stdio.h>
#include <string.h>
int main()
{
char s1[100],s2[100];
unsigned long n1,n2;
int i;
printf("输入第一个字符串: ");
scanf("%s", s1);
printf("输入第二个字符串: ");
scanf("%s", s2);
n1 = strlen(s1);
n2 = strlen(s1);
for (i=0;i<=n2;++i)
{
s1[i+n2]=s2[i];
}
printf("%s\n", s1);
return 0;
}
*/
/* 31 计算字符串长度
*/
/* 32 查找字符在字符串中出现的次数
// 查找字符在字符串中出现的次数
#include <stdio.h>
#include <string.h>
int main()
{
char str[100],ch;
int i,fre=0;
printf("输入字符串: ");
fgets(str, (sizeof(str)/sizeof(str[0])), stdin);
printf("输入要查找的字符: ");
scanf("%c",&ch);
for (i=0;str[i] != '\0';++i)
{
if (ch==str[i])
{
++fre;
}
}
printf("字符 %c 在字符串中出现的次数为 %d\n", ch, fre);
return 0;
}
*/
/* 33 字符串中各种字符计算
*/
/* 34 字符串复制
*/
/* 35 字符串排序
*/
/* 36 使用结构体(struct)
*/
/* 37 复数相加
*/
/* 38 计算两个时间段的差值
*/
/* 39 将字符串写入文件
*/
/* 40 从文件中读取一行
*/
/* 41 输出当前文件执行代码
*/
/* 42 约瑟夫生者死者小游戏
*/
/* 43 五人分鱼
*/
/* 数据结构--线性表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int length;
}SqList;
SqList *InitList(SqList *L); // 初始化
void DestroyList(SqList *L); // 销毁
void ClearList(SqList *L); // 清空列表
int ListEmpty(SqList *L); // 判断是否为空
int ListLength(SqList *L); // 返回线性表的长度
int GetElem(SqList *L,int i,int *c); // 销毁获取第i个元素
int LocateElem(SqList *L,int e); // 定位值为e的位置
int PrioElem(SqList *L,int e); // 查找前项
int NextElem(SqList *L,int e); // 查找后项
int ListInsert(SqList *L,int i,int e); // 插入元素
int ListDelete(SqList *L,int i); // 删除剩余第i个元素
int TraverseList(SqList *L); // 遍历线性表
int main()
{
//int idx,len;
SqList *L = NULL;
printf("\n请输入数字x初始化线性表:\n");
L = InitList(L);
printf("\n线性表的长度为%d \n",ListLength(L));
if (ListEmpty(L))
{
printf("\n线性表为空\n\n");
}
else
{
printf("\n线性表不为空\n\n");
}
return 0;
}
SqList *InitList(SqList *L) // 初始化
{
int x, index =0;
L = (SqList*)malloc(sizeof(SqList));
if(L)
{
printf("\n输入-1时,程序停止操作。\n");
while(1)
{
scanf("%d",&x); // 获取s输入数据放入x;
if(x==-1)
{
printf("\n线性表初始化成功!\n");
break;
}
L->data[index++]=x; // 把书记放在线性表中;
}
L->length = index;
}
else
{
printf("\n线性表初始化失败,请重新操作!\n");
}
return L;
}
void DestroyList(SqList *L) // 销毁
{
free(L);
printf("\n线性表销毁成功!\n");
}
void ClearList(SqList *L) // 清空列表
{
int len = L->length;
int i;
for (i=0; i<len; i++)
L->data[i]=0;
printf("\n线性表清除成功!\n");
}
int ListEmpty(SqList *L) // 判断是否为空
{
return (L->length == 0);
}
int ListLength(SqList *L) // 返回线性表的长度
{
return (L->length);
}
*/
C语言学习笔记
最新推荐文章于 2023-11-20 12:25:48 发布