基础知识:C由Dennis Ritchie于1972年在AT&T Bells实验室开发。C是中级语言,以二进制语言确定数据。
在C中准备的基本主题。1.变量、常量、关键词、C的字符集。2.数据类型,输入/输出3.说明和操作员4.有条件声明5.循环控制语句6.函数和递归7.指针和数组8.字符串9.结构10。文件处理或文件I/O11.动态内存分配

变量—变量是存储一些数据的内存位置的名称。没有变量,我们就无法传输数据。示例——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);
说明-程序中的声明。
类型—类型声明指令,算术指令,控制指令。
类型声明说明—在使用前声明变量。
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);}}注意-您只能使用休息并在循环内继续
它需要一些参数并返回结果。它包含由{}附包的一组指令,这些指令执行特定任务。使用函数在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); }
指针运算符-&(地址运算符),(地址运算符值),->(结构到指针)
语法-数据_类型变量_名称;
示例 — 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++;}}
字符数组被称为字符串。字符串以空字符'\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++;} }
结构(也称为结构)是将几个相关变量分组到一个地方的一种方式。结构中的每个变量都被称为结构的成员。
结构可以包含不同的数据类型集合。
您可以使用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; //但它不会反映到主函数中//因为结构是由值传递的}
您可以通过声明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;}
这是一种在...期间将内存分配给数据结构的方法运行时。我们需要一些功能来分配& 动态释放内存。
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语言
快速阅读