一个汇总所有知识点的C语言程序
程序员文章站
2022-04-01 08:47:41
...
```c
/*
程序功能:
1、测试字符串的读写
2、测试文件相关操作函数
3、动态分配内存
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
#include <malloc.h>
//常量定义
#define N 20
//子函数声明
void stringTest();
void stringTest2();
void stringTest3();
double jiecheng(int x);
void fileWrite();
void fileRead();
void Cheng();
void printA();
void variable();
void output();
void input();
void calc1();
void point();
void pointUse();
void dou();
void array();
void arrayUse();
void stringUse();
void Struct();
void Enum();
void type();
int f();
void memory();
//枚举
enum week{SUN=10,MON=20,TUE,WED,THU,FRI,SAT};
//结构体声明,定义结构体
struct stu
{
int num ;
char sex ;
char name[N] ;
};
//自定义数据类型
typedef int INT;
typedef int *POINT;//定义指向int型的指针类型
//主函数
void main()
{
//stringTest2();//调用子函数2
//stringTest();//调用子函数1
//stringTest3();//调用子函数3
//printf("%d\n", '\0');
//fileWrite();
//fileRead();
//Cheng();
//printA();
//variable();
//output();
//input();
//calc1();
//point();
//pointUse();
//dou();
/*int x;
printf("%d\n", (x = 30)>10);*/
//array();
//arrayUse();
//stringUse();
//Struct();
//Enum();
//type();
//void (*pf)() = &type;//定义函数指针,指向函数type,其返回值是void
//pf();//调用指向的函数
//int(*p1)() = &f;
//printf("%d\n",p1());
memory();
}
//函数21:分配内存
void memory()
{
/*
p=(int *)malloc(4);//分配长度为4字节的存储空间
p=(int *)calloc(N,4);//分配N 个长度为4字节的存储空间
p=(int *)relloc(p1,4);//对原来的存储区,再开辟4个字节的内存
返回内存的首地址
ch=fgetc();//读文件字符函数
fputc('A',fp);//文件写字符函数
fget(str,11,fp);//读字符串函数,str是字符数组名
fputs("abcd",fp);//文件写字符串函数
*/
int num = 0;
char ch;
//double a[162];
FILE *fp;
double t=10;
char str[100] = "C:\\Users\\Administrator\\Desktop\\Others\\Ren\\data2.txt";
fp = fopen(str, "r");
if (fp == NULL)
{
printf("Open the file error!\n");
exit(0);
}
while ( (ch=fgetc(fp) )!=EOF) //若没有读到数据末尾
{
fscanf(fp, "%lf", &t);
num++;
}//空读一次数据
fclose(fp);
printf("num=%d\n", num);//确定文件中的数据个数
fp = fopen(str, "r");//空读一次后,文件指针已经指到末尾,因此需要再次打开文件
int j = 0;
double *p=NULL;
p=(double *) calloc(num, sizeof(double));//分配相应内存
/*
请注意,此处读走第一个字符!!
因此必须使用do-while语句。而不是while循环
*/
do
{
fscanf(fp, "%lf", p+j);//将数据存到内存中sizeof(double)*
j++;
} while ((ch = fgetc(fp)) != EOF); //若没有读到数据末尾
printf("---------------\n");
/*fscanf(fp, "%lf", &t);
printf("%lf\n", t);*/
for (int i = 0; i < num; i++)
{
printf("%lf\n", p[i]);//输出数组元素sizeof(double)*
}
fclose(fp);//关闭文件
printf("%lf\n", p[0]);//测试第一个数据
free(p);//释放内存
}
//子函数20:函数指针的使用
int f()
{
return 20;
}
//子函数19:typedef自定义数据类型
void type()
{
INT x = 30;
POINT p = &x;
printf("%d,%d\n", x, *p);
}
//子函数18:枚举类型
void Enum()
{
/*
定义枚举元素时,要列举出所有可用的值。
枚举类型被定义之后,可以当成符号常量使用。
枚举元素是一个符号常量,它在内存中以整型数据的方式保存。
可以为枚举元素指定不同的整数值。
*/
enum week x =FRI;//定义枚举变量
printf("%d,%d,%d\n", sizeof(SUN), SUN, MON);
printf("%d\n", x);
}
//子函数17:结构体
void Struct()
{
struct stu st[2],sx;
st[0].num = 1001;
st[0].sex = 'M';
strcpy(st[0].name, "Chenglin Li");//只能用字符串拷贝函数,为字符串数组赋初值
st[1].num = 1002;
st[1].sex = 'F';
strcpy(st[1].name, "Yawen Zhang");
/*sx.name[N] = "My Fu";*/
strcpy(sx.name, "Yawen Zhang");
printf("%s\n", sx.name);
for (int i = 0; i < 2; i++)
{
printf("%5d,%s,%-3c\n", st[i].num, st[i].name, st[i].sex);
}
printf("%s\n", st[0].name);
puts(st[0].name);
}
//子函数16:字符串函数
void stringUse()
{
char str1[30] = "Chenglin ", str2[] = "Chenglin Li";
char *p1 = str1, *p2 = str2;
puts(p1);
puts(p2);
printf("-----------------\n");
strcat(p1,p2);
//strcat(str1, str2);
puts(p1);
printf("%d\n", strcmp(p2, p1));
}
//子函数15:数组的使用
void arrayUse()
{
/*
指针数组用来处理多维数组
1 2 3
4 5 6
*/
//int a[2][3] = {1,2,3,4,5,6};
//int *p[2];//定义指针数组
//p[0] = &a[0];
//p[1] = &a[1];
//printf("%3d%3d\n", *p[0], *p[1]);
//printf("%3d%3d\n", *(p[0]+1), *(p[1]+1));
//char *pc[] = {"Chenglin","Yawen"};
//puts(pc[0]);
//puts(pc[1]);
////int b[3] = { 10, 11, 12 };
////int(*p2)[3]=b;//定义数组指针,指向一个包含3个元素的一位数组
//int b[3][4] = { { 1, 2, 3, 4 }, { 11, 12, 13, 14 }, { 21, 22, 23, 24 } };
//int(*p2)[4]; //定义一个数组指针,指向4个元素的一维数组
//p2= b;
//for (int i = 0; i < 12; i++)
// printf("%3d", (*p2)[i]);//遍历所有元素
//putchar(10);
//int (*p)[4];//存放一个4个元素的数组地址
////int *p = a;
//p = a;//指向数组
//printf("%d\n", sizeof(a));
//for (int i = 0; i < 4; i++)
// printf("%3d\n", p[i]);
//putchar(10);
}
//子函数14:数组的使用
void array()
{
int a[N];
int *p = a;//指向数组的指针
for (int i = 0; i < N; i++)
{
a[i] = i;
}
printf("%d\n", a);//数组首地址,元素a[0]的地址
printf("%d\n", &a);//整个数组的地址
printf("%d\n", a + 1);
printf("%d\n", *(a + 1));
printf("%d\n", &a+1);//
}
//子函数13:逗号表达式
void dou()
{
/*
逗号表达式的要领:
1.从左到右逐个计算;
2.逗号表达式作为一个整体,它的值为最后一个表达式的值;
3. 逗号表达式的优先级别在所有运算符中最低。
*/
/*int x = 0;
x = 10, 12, 100;
printf("%d\n", x);
printf("%d\n", x < 5 ? 100:200);
*/
char c1, c2;
c1 = 65;
putchar(c1);
putchar(10);//换行
c2 = '3';
putchar(c2);
putchar(10);//换行
}
//子函数12:指针使用
void pointUse()
{
/*
指针类型的变量占用4个字节。
*/
int a;
int *p2 = &a;//指针指向变量a
//int *p1 = p;//新建一个整型指针变量,使它和指针p相等
//char c;
//char *pc = &c;//指针指向变量c
//printf("sizeof(int)=%d\n", sizeof(int));
//printf("%d,%d\n",p,p+1);
//printf("%d,%d\n", p, p - 2);
//printf("%d,%d\n", pc, pc+1);
//printf("%d,%d\n", pc, pc - 2);
//printf("%d\n", p !=0);
//printf("%d\n", p1);
//printf("%d\n", p1 + 5);
char *p = "Chenglin Li";//11个字符长度
printf("%d,", sizeof(p));
printf("%d,", strlen("Chenglin Li"));
printf("%d,", sizeof("Chenglin Li"));
printf("%d,", sizeof(p2));//
putchar(10);
double *px = 0;
printf("%d\n", sizeof(p));
printf("%3d\n%3d\n",p,p++);
//int a[10];
//int *pc = a;
//printf("%3d\n%d\n", pc, pc++);//
}
//子函数11:指针运算
void point()
{
/*int a = 0;
int *p = &a;
printf("a=%d\n", a);
*p = 5;
printf("a=%d\n", a);
*/
char *p = "Chenglin Li";
printf("%s", p);//利用指针地址输出字符串
putchar(10);//换行
puts(p);
//putchar(10);//换行
for (int i = 0; p[i] != 0;i++)
putchar(*(p + i));
putchar(10);//换行
}
//子函数10:算术运算
void calc1()
{
int a = 10, b = 4, c = 8;
int c1 = 0,c2 = 0;
c1 = a / 3 % 2;
printf("c1=%d\n", c1);
float d = 1.23;
printf("d=%d\n",(int)d);//强制类型转换
}
//子函数9:基本输入
void input()
{
char c;
puts("Please input a char:");
c = getchar();
putchar(c);
putchar(10);
}
//子函数8:基本输出
void output()
{
float x = 1234.5678;
for (int i = 'a'; i <= 'z'; i++)
{
putchar(i-32);
putchar(i);
putchar(0x20);//空格
}
putchar(10);//换行符
//float x = 1234.5678;
printf("x=%f\n", x);
printf("x=%.2E\n", x);
}
//子函数7:变量
void variable()
{
int a = 5;
int *p = &a;
printf("a=%d\n", a);
printf("&a=%d\n", &a);
printf("p=%d\n", p);
printf("*p=%d\n", *p);
}
//子函数6:打印A
void printA()
{
int x = 10;
for (int i = 1; i <= x; i++)//5行
{
for (int j = x-i; j >= 1; j--)//空格
{
printf(" ");
}
for (int k = 1; k <= 2 * i - 1; k++)
{
printf("A");//打印A
}
printf("\n");//换行
}
}
//子函数5:打印第一个语言程序
void Cheng()
{
printf("Welcome to the C world!\n");
printf("欢迎进入C语言的世界!\n");
}
//子函数1:测试字符串的读写
void stringTest()
{
/*控制台读取一段字符串,以空格或者tab键或者回车键结尾
使用函数printf()和scanf()函数
使用字符数组接收字符串,字符串结束标志'\0'
puts()函数输出字符串,以'\0'作为结束标志.puts()函数自动换行
*/
char s[N];
//char ch;
int i = 0,j;
printf("Please input a string: ");//控制台提示输出一段字符串
while ((s[i++] = getchar()) != '\n');
//{
// s[i++] = getchar();//获取字符,回车键结束
//}
//while ((ch= getchar()) != '\n')
//{
// s[i++] = getchar();//获取字符,回车键结束
//}
//getchar();//舍去回车键
//getchar();//舍去回车键
s[i] = '\0';//添加字符串结束标志
printf("i=%d\n", i);
for (j = 0; j < i; j++)
{
printf("%c", s[j]);//printf()函数格式化输出字符串
//putchar(s[i]);//putchar()函数输出字符串
}
printf("\n");//输出一个换行
puts(s);//puts()函数输出字符串
putchar('\n');//输出一个换行
}
//子函数2:测试字符串的读写
void stringTest2()
{
/*
gets()函数录入字符串,以回车键结束
puts()函数输出字符串,以'\0'作为结束标志
*/
char s[N];
//char ch;
int i = 0;
printf("Please input a string: ");//控制台提示输出一段字符串
gets(s);//输入字符串
puts(s);//输出字符串
}
//子函数3:测试字符串的读写
void stringTest3()
{
/*
scanf()函数录入字符串,以回车键 ,空格键结束
printf()函数输出字符串,以'\0'作为结束标志
*/
char s[N];
//char ch;
//int i = 0, j;
printf("Please input a string: ");//控制台提示输出一段字符串
scanf("%s", s);//输入字符串并换行
printf("%s\n",s);//输出字符串
}
//子函数4:文件的创建与写入
void fileWrite()
{
/*
写方式打开文件,只能向文件中写入,
若不存在,则以指定的文件名新建,若已经存在,则将文件删除,重建一个新文件
*/
char str [N]= "g:\\fileOne.txt";//声明一个文件地址
FILE *fp;//定义文件指针
//fp = fopen("g:\\fileOneNum.txt", "w");//
fp = fopen(str, "r");//
if (fp == NULL)
{
printf("Open Error!\n");
exit(0);//程序终止
}
for (int i = 1; i <= 20; i++)
{
//fprintf(fp, "%d! = %.0lf\n", i,jiecheng(i));
fprintf(fp,"%d\n",i);
}
fclose(fp);//关闭文件
printf("Program running over!\n");
}
//建立一个阶乘的子函数
double jiecheng(int x)
{
if (x <=0)
return 0;
else if (x == 1)
return 1;
else
return x*jiecheng(x - 1);
}
//子函数5:文件的读取
void fileRead()
{
/*
读方式打开文件,只能读取文件,
该文件必须事先存在,且只能从文件中读取,读取一个数据后,指针自动后移。
*/
char str[N] = "g:\\fileOneNum.txt";//声明一个文件地址
int num[N];
char c[] = "r";
FILE *fp;//定义文件指针
//两个反斜杠,第一个表示转义字符,第二个表示根目录
//fp = fopen("g:\\fileOneNum.txt", "r");
fp = fopen(str, c);//
if (fp == NULL)
{
printf("Open Error!\n");
exit(0);//程序终止
}
for (int i = 0; i < 20; i++)
{
//fprintf(fp, "%d! = %.0lf\n", i,jiecheng(i));
fscanf(fp, "%d", &num[i]);//读取数字到数组中
}
fclose(fp);//关闭文件
printf("Program running over!\n");
for (int i = 0; i < 20; i++)
{
printf("%d\n", num[i]);//输出读取的数字
}
}
上一篇: python——用BP神经网络做预测
下一篇: VTK的Mapper
推荐阅读
-
C语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
-
编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
-
9、试编写程序,输入一个字符串,再输入一个字符ch,将字符串中所有的ch字符替换为字符’*’。 要求定义和调用函数mChar(s, c ),该函数将字符串s中出现的所有c字符替换为’*’。
-
C语言 编写加密程序,将用户输入的一个英文句子加密为加密字符串,然后输出加密字符串。
-
使用C语言编写程序,计算N个整数的和(随机输入一个值,例如1到100之间所有整数的和)
-
C语言中的进制类型题目,获取一个数二进制序列中所有的奇数位和偶数位,分别输出二进制序列
-
C语言一个数的所有和数分解的结果全部打印出来
-
C语言程序,求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
-
一个c语言的简单程序
-
[C语言][面试题]使用main函数的参数,实现一个整数计算机,程序可以接受三个参数