首页 » 软件优化 » C编程快速精通(函数文件字符串变量指针)

C编程快速精通(函数文件字符串变量指针)

admin 2024-11-14 05:36:38 0

扫一扫用手机浏览

文章目录 [+]

基础知识:C由Dennis Ritchie于1972年在AT&T Bells实验室开发
C是中级语言,以二进制语言确定数据。

在C中准备的基本主题。
1.变量、常量、关键词、C的字符集。
2.数据类型,输入/输出3.说明和操作员4.有条件声明5.循环控制语句6.函数和递归7.指针和数组8.字符串9.结构10。
文件处理或文件I/O11.动态内存分配

C编程快速精通(函数文件字符串变量指针) 软件优化
(图片来自网络侵删)
1.变量、常量、关键词、C的字符集。

变量—变量是存储一些数据的内存位置的名称。
没有变量,我们就无法传输数据。
示例——int a、char star、float number等。

识别变量的规则:a.变量区分大小写。
b.第1个字符是字母表或'_'(下划线)。
c.没有逗号或空白空间d.除了'_',没有其他符号e.长度<=8。

===================================================常量—不变的值或值是固定的。
类型—主要(整数,实,字符),次要(指针,数组,字符串,结构)

整数常数—无小数点,有效范围(-32768至+32768)可能是+ve或-ve示例 — 0,1,2,3,-1,-2,-3...

实常数—有效范围(-3.410³8至+3.410³8),小数点,可能是+ve或-ve示例-1.0,2.0,3.3,4.6...

字符常数——单个字符用一对''(单床)包围。
ASCII范围0到255,可能是字符或数字,示例——'0','a','A',...

===============================================================

C 字符集 —

字母A-Z,a-z,数字0到9,特殊字符 — !,@,#, ...计算机中有256个字符,每个字符都有独特的代码,称为ASCII(美国交换信息标准代码)。
A到Z — 65到90a到z — 97到1220到9-48到57否则特殊符号。

关键词——每种编程语言中的特殊含义单词/对编译器具有特殊意义的保留单词。
C中有32个关键字。
示例 — int, float,double,if,....总是用小写字母我们不能作为变量或函数名

C中的关键词

2.数据类型,输入/输出

数据类型-

程序结构—一组指令,称为程序。
语法:

#include <stdio.h> //(Header file /prepossesser directive)int main()//(每个程序都从这个开始的主函数){ printf("Hello World"); //; 是语句终止器}

在上述示例中,“stdio.h”是一个头文件,在程序员计算机的系统区域中可用。
角括号“<和>”告诉编译器在系统区域中搜索文件“stdio.h”。

如果我们将上述示例指定为#include“stdio.h”,则编译器将在当前目录中搜索文件“stdio.h”。

#include<stdio.h>#include<conio.h>主(){clrscr(); printf(“HelloWorld!
”);getch();}//定义部分 //本节用于定义符号常量。
可以使用#define指令声明符号常量。
#define PI 3.142

main()函数在每个C程序中都是必不可少的,因为它指定了程序中执行的起点。
从{到}开始的一切都被称为主函数的主体。

clrscr()函数用于清除输出屏幕(控制台)。
printf()函数用于将字符输出到控制台。
getch()函数暂停程序的执行,并等待用户的单个字符输入。

printf()的声明在stdio.h(标准输入输出)头文件中可用,clrscr()和getch()的声明在inconio.h(控制台输入输出)头文件中可用。

评论—

单行//

多行 — / 语句/

编译器-编程软件将人类语言转换为机器语言。
这个过程被称为编译。

C 输入 — 获取用户输入,我们使用 scanf 函数

scanf(“格式说明符”,&变量名);

scanf("%d",&a);

C输出—为了获取用户输出,我们使用打印功能。

printf("hello world");printf("hello world\n"); //用于新行//案例//整数printf("年龄是%d",年龄);//真实printf("年龄是%f",age);//字符printf("age is %c",age);

3.说明和操作员

说明-程序中的声明。

类型—类型声明指令,算术指令,控制指令。

类型声明说明—在使用前声明变量。

int a;a=20;

算术指令 — +,-,/,%

a=pow(2,5)使用<math.h>头文件。

模块化运算符—返回余数,使用整数或字符而不是浮点数

SizeOf运算符—以字节为单位返回变量、常量或数据类型的内存大小。

运营商:

运营商的顺序-

类型转换规则

类型转换—用于将一个数据类型修改为另一个数据类型。
新数据类型应在变量名或括号中的vale之前表示,这将是类型转换

铸造有两种类型:隐式铸造和显式铸造

//类型铸造示例int main(){ 浮动x;x=(float)7/5;//7/5通过类型转换生成整数值,它产生浮动值printf("%f",x);}//输出=1.400

控制指令—控制指令执行的顺序。

类型:序列、决策、循环、案例。

序列控制指令-默认控制指令

决策控制说明——用于决策声明.ex——if-else

循环控制说明-用于重复执行。
ex-对于循环,做

外壳控制说明-用于特定外壳。
前开关外壳。

4.有条件声明

有两种类型的条件语句1.if-else,2.switch

if-else -语法 —

工作-

如果条件是true语句,如果执行,语句返回false语句。

//检查给定的没有是偶数或奇数#include<stdio.h>int main(){ 数字; printf(“输入任何数字”); scanf("%d",&number); 如果(数字%2==0){ printf(“数字是偶数”);}否则{ printf(“数字是奇数”);}}//注:{}不是if-else块中单个语句的经典,但对于多个语句,它是必需的。
//else块也是可选的
嵌套如果-其他-

顺序如果-

三元-

用于在单个if-else中减少多行

语法-

条件?真实部分执行:虚假部分执行;

//甚至奇数编号%2==0?printf("even"):printf("odd);开关-

如果您正在检查if-else中单个变量的值,那么最好使用开关大小写。
cases可以是任何顺序。
允许嵌套开关。
用于解决多个选项类型问题,如菜单程序,其中一个值与每个选项相关联。

5.循环控制语句

用于重复程序的某些部分。

有3种类型的循环:

循环,while循环,do-while循环

增量/减少运算符-

#include <stdio.h>int main(){ int i;i=1; //增量运算符i++/++i printf("预增量\n"); printf("%d\n", i++); //use , then increment printf("%d\n", i); int j = 1; printf("后增量\n"); printf("%d\n", ++j); // 增量,然后使用 printf("%d\n", j); //减少运算符i--/--i printf("pre-decrement\n"); printf("%d\n", i--); //use , then decrement printf("%d\n", i); // int j = 1; printf("post-decrement\n"); printf("%d\n", --j); // 递减,然后使用 printf("%d\n", j);}循环 —

循环时-

做时循环-

中断语句—用于退出循环。

继续语句—使用跳到下一个迭代。

休息和继续-

#include <stdio.h>int main(){ printf("使用继续\n"); for(int i = 1; i <=10;i++){ 如果(i==5){ 继续;//跳过5 } printf("%d\n",i);} printf("使用break\n"); for(int i = 1; i <=10;i++){ 如果(i==5){ break;//退出循环 when i==5} printf("%d\n",i);}}注意-您只能使用休息并在循环内继续

6.函数和递归:功能:执行特定任务的代码块。

它需要一些参数并返回结果。
它包含由{}附包的一组指令,这些指令执行特定任务。
使用函数在c中可以实现代码重用性。

主要有两种类型的功能,

库函数 — printf(),scanf(),exit()..用户定义函数- bombat(),square(),lite()...

注意—main()是用户定义函数,因为主函数的定义是由用户定义的。

规则-1。
任何c程序的执行总是从主函数开始。

2.程序中的函数名称必须是唯一的。

3.函数直接或间接从主调用。

4.一个程序中可以有多种功能。

5.函数可以按任何顺序定义。

6.任何函数都可以调用其他函数。

语法:

#include<stdio.h>void calculate(float x, float y); //函数原型int main(){ 浮动x,y; printf(“输入2个数字来计算两个数字的总和,子,div,mul,模数:”); scanf("%f%f",&x,&y);计算(x,y);//函数调用}void calculate(float x, float y)//function definition //x and y are parameters in function calculate{ 浮动和,sub,div,mul; printf("sum = %f,sub=%f, div = %f, mul = %f",x+y,x-y,x/y,xy);}递归:

当函数调用自己时,它被称为递归。

属性:任何可以通过迭代完成的事情,都可以通过递归完成,反之亦然。
它给出了简单的解决方案。
停止递归的基本情况条件。
迭代有无限循环,递归有堆栈溢出。

//打印n个自然数的总和#include <stdio.h>int sum(int n);int main() { int n,s; printf("输入自然数来计算总和:"); scanf("%d", &n);s=总和(n); printf("%d自然数之和:%d\n",n,s);}int sum(int n){ if(n==1)//基本情况{ 返回1;} int sumNm1=sum(n-1);//sum of 1 to n//recursion int sumN=sumNm1+n;}传递值/传递参数:

函数接受参数并返回结果。

void printnumber(int a);

参数-在函数调用中传递的值。
它用于发送价值。
它也被称为实际参数。

参数-函数声明和函数定义中的值。
用来接收价值。
也称为正式参数。

函数一次只能返回一个值。
函数中参数的变化不会改变调用函数中的值。

#include<stdio.h>#include<math.h>int power(int n,int p);//返回intint main(){ int n,p,pow; printf(“输入数字和功率”); scanf("%d%d",&n,&p); pow= power(n,p);//实际参数//参数 printf("%d到%d的幂是%d",n,p,pow);}int power(int n,int p) {//用户定义的函数//正式参数 返回 pow(n,p); //内置函数}//函数一次只返回一个值

不返回值的函数:

//打印数字的平方根#include <stdio.h>#include<math.h> void square_root(int n); int main(){ 数字; printf("输入数字以找到平方根:"); scanf("%d",&number);square_root(数字); } void square_root(int n){ int s=sqrt(n); printf("%d\n",s); }

7.指针和数组-指针—指针是c中的特殊类型变量,用于存储另一个变量的地址。

指针运算符-&(地址运算符),(地址运算符值),->(结构到指针)

语法-数据_类型变量_名称;

示例 — int a; char ptr; float ptr ;

格式说明符 — printf(“%p”,&age);

指针到指针—存储另一个变量地址的变量。

语法- Data_Type 变量名;

example-int pptr;

#include <stdio.h>void task(int a,int b,int sum,int avg);//用于传递变量的值int main(){ int a,b,sum,avg; printf("输入数字以计算总和和平均值"); scanf("%d%d",&a,&b);task(a,b,&sum,&avg);//&传递变量的地址 printf("sum = %d avg=%d\n",sum,avg);}无效任务(int a,int b,int sum,int avg){sum=a+b;avg=(a+b)/2;}函数调用中的指针-按值调用—传递变量的值作为参数。
通过引用调用-将变量的地址作为参数传递。

指针算术—法律指针术运算符是+,_,++,__,+=,-=。

//使用指针交换两个数字的程序#include<stdio.h>void swap(int x,int y);void _swap(int x,int y);int main(){ int x,y; printf("输入要交换的号码:"); scanf("%d%d",&x,&y);交换(x,y); printf("x= %d y=%d\n",x,y);//实际值在调用中不会改变_swap(&x,&y); printf("x= %d y=%d\n",x,y);//引用调用中的实际值变化}//按值调用void swap(int x, int y){ int temp = x;x=y;y=temp; printf("交换x= %d y=%d\n",x,y);}//通过引用调用void _swap(int x, int y){ int temp = x;x=y;y=temp; printf("交换x= %d y=%d\n",x,y);}阵列

收集在连续内存位置保存固定数量值的类似数据类型。

语法—数据类型变量名[数组大小];

声明-int标记[4];

初始化-int标记[2] = {100,99};

限制和规则

声明后,大小和类型不能更改。
数组元素的访问规则。
数组元素从零开始有特定的索引计数。
当元素在{}中初始化时,数组的大小是可选的。
存储在内存中的数组元素位于顺序内存位置。
当元素在{}中初始化时,数组中的行大小是可选的。

数组类型-

一维数组 — 数据类型 var[大小]二维数组-数据类型var[row_size][col_size]

#include<stdio.h>int main(){ int arr[10]={1,2,3,4,5,6,7,8,9,10}; printf("元素在索引 1 - "); printf("%d\n",arr[1]);//打印perticular元素 // 打印所有元素 printf("数组元素\n"); 对于(int i=0; i<10; i++){ printf("%d\n",arr[i]);}}

函数中的数组:

//函数中的数组#include<stdio.h>void table(int arr[][10], int n,int m ,int number);//函数原型{int main(){ int表[1][10] ; printf("2的表格\n");table(tables,0,10,2);//函数调用 for( int i=0;i<10;i++ ){ printf("%d\n",tables[0][i]);} }void table(int arr[][10], int n,int m,int number)//函数声明 for(int i=0;i<m;i++){arr[n][i]=number(i+1);}}//数组作为指针#include<stdio.h>int main(){ int a[5]={1,2,3,4,5}; int ptr=a;//a=&a[5] for(int i;i<5;i++){ printf(" %d\n",ptr);ptr++;}}

8.字符串-

字符数组被称为字符串。
字符串以空字符'\0'终止。

例如- char a[5]=“你好”;(数据类型变量[大小])

initilization- char name={'g','i','r','i','s','h'};

char name=”girish”;

formate 说明符 — %s

记忆表示-

注意—

scanf()无法导入多个单词字符串。
对多个单词字符串使用gets()和puts()。
fgets()用于在更新版本中无法工作的情况。
fgets(str,n,file)fgets()的语法。

#include <stdio.h>#include <string.h>int main(){ //打印整个字符串使用gets()或fgets() char str1[100]; printf("输入字符串");gets(str1);//to输入字符串 printf(“您的字符串使用获取”); puts(str1);//to输出字符串 //你不能在get中给出任何消息}

标准库功能

要使用库函数,我们必须声明<string.h>头文件。

#include<stdio.h>#include<string.h>int main(){ //字符串的库函数 char string1[100]="Hello world"; char string2[]="Hello India"; printf("Your String1 is: %s\n", string1); printf("Your String2 is: %s\n", string2); int length=strlen(string1);//给出字符串的长度 printf("字符串长度=%d\n",长度); strcpy(string1,string2);//在string1中复制string2 printf("string1中string2的副本 =%s\n",string1); char string[]="Hello learners"; printf("你的3个字符串是%s\n",string); strcat(string1,string);//在string1中连接字符串 printf("concatenate string2 in string1 =%s\n",string1); //比较字符串 printf("compare string1,string= %d\n",strcmp(string1,string1)); //如果输出为正数,第一>秒 //如果负数第一<秒 //如果零等于字符串 //大写字符串 printf("大写字符串= %s\n",strupr(string1)); //小写字符串 printf("小写字符串= %s\n",strlwr(string1)); //反向字符串 printf("Reverse string= %s\n",strrev(string1));}使用函数和指针的字符串。

char str =”hello”;

将字符串存储在内存中,分配的地址存储在字符指针“str”中。

char str =”hello”; 字符串中的指针可以重新初始化。

char str[]=”hello”; 字符串中的数组无法重新初始化。

//使用指针在函数中传递字符串char show(char ptr);//函数原型#include<stdio.h>int main(){ char s[100];获取;show(s);//函数调用}char show(char ptr)//function defination{ 而(ptr!
='\0'){ printf("%c",ptr);ptr++;} }

9.结构

结构(也称为结构)是将几个相关变量分组到一个地方的一种方式。
结构中的每个变量都被称为结构的成员。

结构可以包含不同的数据类型集合。

您可以使用struct关键字创建一个结构,并在大括号内声明其每个成员:

struct MyStructure { // 结构声明 int myNum; // 成员(int变量) char myLetter; // 成员(char变量)}; // 用分号结束结构//为了使用结构,我们必须在main()中声明结构变量int main() { struct myStructure s1; // 为s1的成员分配值s1.myNum = 13;s1.myLetter = 'B'; // 打印值 printf("我的号码: %d\n", s1.myNum); printf("我的信: %c\n", s1.myLetter); 返回0;}

您可以使用strcpy()在字符串中进行复制。
请记住,C中的字符串实际上是一个字符数组,不幸的是,您不能为这样的数组赋值:s1.myString =“一些文本”。

使用结构插入一些值:

struct myStructure s1 = {13, 'B', "Some text"};printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);修改值:s1.myNum = 30;s1.myLetter = 'C';strcpy(s1.myString, "其他东西");

您还可以将一个结构分配给另一个结构:

struct myStructure s1 = {13, 'B', "Some text"};struct myStructure s2;s2 = s1;typedef 关键字

用于为数据类型创建别名

coe学生1;

#包括<stdio.h># 包括 <string.h>结构学生{字符名称[100];int 卷;浮动cgpa;};typedef struct 计算机工程学生{int 卷;浮动cgpa;字符名称[100];} coe;void printInfo(struct student s1);int main() {结构学生s1;// s1.name = "rakesh"; // 不是可修改的值strcpy(s1.name,"rakesh");s1.roll = 64;s1.cgpa = 9.2;printf("学生信息 : \n");printf("name = %s\n", s1.name);printf("roll no = %d\n", s1.roll);printf("cgpa = %f\n", s1.cgpa);//结构数组结构学生IT[60];结构学生COE[60];结构学生ECE[60];//声明struct student s2 = {"Rajat", 1552, 8.6};struct student s3 = {0};printf("roll no of s2 = %d\n", s2.roll);printf("roll no of s3 = %d\n", s3.roll);//指向结构的指针结构学生 ptr = &s1;printf("student.name = %s\n", (ptr).name);printf("student.roll = %d\n", (ptr).roll);printf("student.cgpa = %f\n", (ptr).cgpa);//箭头运算符printf("student->name = %s\n", ptr->name);printf("student->roll = %d\n", ptr->roll);printf("student->cgpa = %f\n", ptr->cgpa);//将结构传递给功能printInfo(s1);//typedef关键字coe学生1;student1.roll = 1664;student1.cgpa = 6.7;strcpy(student1.name,“sudhir”);返回0;}void printInfo(struct student s1) {printf("学生信息 : \n");printf("name = %s\n", s1.name);printf("roll no = %d\n", s1.roll);printf("cgpa = %f\n", s1.cgpa);//改变s1.roll = 1660; //但它不会反映到主函数中//因为结构是由值传递的}

10。
文件处理

您可以通过声明typeFILE的指针来创建、打开、读取和写入文件,并使用fopen()函数,FILE基本上是一个数据类型,我们需要创建一个指针变量来使用它(fptr)。

文件fptrfptr = fopen(文件名,模式);

要实际打开文件,请使用fopen()函数,该函数需要两个参数

文件名—您要打开(或创建)的实际文件的名称,例如filename.txt

单个字符,表示您想对文件做什么(读取、写入或附加):

w- 写入文件a-将新数据附加到文件中r- 从文件中读取

创建一个文件

要创建文件,您可以在fopen()函数中使用w模式。

w模式用于写入文件。
但是,如果文件不存在,它将为您创建一个:

文件fptr;// 创建一个文件fptr = fopen("filename.txt", "w");/注:如果没有指定其他内容,该文件将与其他C文件创建在同一目录中。

在我们的电脑上,它看起来是这样的:

您需要为文件设置路径:

fptr = fopen("C:\directoryname\filename.txt", "w");关闭文件

// 关闭文件fclose(fptr);在文件中写:

w模式意味着文件被打开以进行写入。
要向其插入内容,您可以使用fprintf()函数并添加指针变量(在我们的示例中为fptr)和一些文本:

文件fptr;// 以写入模式打开文件fptr = fopen("filename.txt", "w");// 向文件写入一些文本fprintf(fptr,“一些文本”);// 关闭文件fclose(fptr);阅读一个文件

在上一章中,我们使用w和fopen()函数中的模式写到一个文件。

要从文件中读取,您可以使用r模式:

文件fptr;// 在读取模式下打开文件fptr = fopen("filename.txt", "r");// 存储文件的内容char myString[100];// 阅读内容并将其存储在myString中fgets(myString,100,fptr);// 打印文件内容printf("%s", myString);// 关闭文件fclose(fptr);//fgetc返回EOF以显示文件已结束#包括<stdio.h>int main() {文件fptr;//阅读文件char ch;fptr = fopen("Test.txt", "r");if(fptr == NULL) {printf(“不存在!
\n");} 否则 {fscanf(fptr, "%c", &ch);printf("文件中的字符是:%c\n",ch);fscanf(fptr, "%c", &ch);printf("文件中的字符是:%c\n",ch);fclose(fptr);}//在文件中写作ch = 'M';fptr = fopen("NewFile.txt", "w");fprintf(fptr, "%cANGO", ch);fclose(fptr);//fgetsfptr = fopen("NewFile.txt", "r");printf("文件中的字符是:%c\n", fgetc(fptr));printf("文件中的字符是:%c\n", fgetc(fptr));printf("文件中的字符是:%c\n", fgetc(fptr));printf("文件中的字符是:%c\n", fgetc(fptr));printf("文件中的字符是:%c\n", fgetc(fptr));fclose(fptr);//fputcfptr = fopen("NewFile.txt", "w");fputc('a',fptr);fputc('p',fptr);fputc('p',fptr);fputc('l',fptr);fputc('e',fptr);fclose(fptr);//阅读完整文件(EOF)fptr = fopen("NewFile.txt", "r");ch = fgetc(fptr);while(ch!
= EOF) {printf("%c", ch);ch = fgetc(fptr);}printf("\n");fclose(fptr);返回0;}

11.动态内存分配

这是一种在...期间将内存分配给数据结构的方法运行时。
我们需要一些功能来分配& 动态释放内存。

malloc( ) — 内存分配

需要分配的字节数&返回一个类型为void的指针

ptr = (int) malloc(5 sizeof(int));calloc( ) — 连续分配

用0初始化。

ptr = (int) calloc(5, sizeof(int));免费()

我们用它来释放分配的内存使用malloc和calloc

免费(ptr);realloc()

重新分配(增加或减少)内存使用相同的指针和大小。

ptr = realloc(ptr,newSize);

#包括<stdio.h># 包括 <stdlib.h>//动态内存分配int main() {//sizeof函数printf("%d\n", sizeof(int));printf("%d\n", sizeof(float));printf("%d\n", sizeof(char));//malloc// int ptr;// ptr = (int ) malloc(5 sizeof(int));// for(int i=0; i<5; i++) {// scanf("%d", &ptr[i]);// }// for(int i=0; i<5; i++) {// printf("number %d = %d\n", i+1, ptr[i]);// }//callocint ptr = (int ) calloc(5, sizeof(int));for(int i=0; i<5; i++) {printf("number %d = %d\n", i+1, ptr[i]);}//免费免费(ptr);返回0;}

C语言

快速阅读

标签:

相关文章