C code

Visual Studio 2019

C 基本知识

#include<stdio.h>
#define APPLE 100				//宏定义   变量名全大写   一旦定义不可改变
int main()
{
	int ASCII_CHARACTER = 97;		//character字符	letter字母
	const int DULL = 99;			//定义不可改变的常量
	printf("HelloWorld!\n");
	printf("苹果的数量是 %d\n", APPLE);
	printf("DULL = %d\n", DULL);
	printf("对应的字符为 %c\n", ASCII_CHARACTER);

	//return 0; 前面加	getchar();或 system("pause");	让运行界面暂停  
	//在换至Release(发行版)就可以将运行界面发送出去       .exe
	return 0;
}

判断素数

#include<stdio.h>
int main()
{
	int flat;
	int number_sushu;
	int num;
	for (number_sushu = 100; number_sushu < 200; number_sushu++)    //100-200之间的素数   number_sushu不能为2
	{
		for (num = 2; num < number_sushu; num++)
		{
			flat = 1;
			if (number_sushu % num == 0)
			{
				flat = 0;
				break;      //break 不可省略
			}
		}
		if (flat == 1)
		{
			printf("%4d\n", number_sushu);
		}
	}
	return 0;
}

累加求和

eg:5!=5+4+3+2+1=15

#include<stdio.h>
#define NUMBER 5
int main()
{
	int i = 1;
	int sum = 0;
	while (i <= NUMBER)
	{
		sum += i;
		i++;
	}
	printf("i = %d\tsum = %d",i,sum);		//   \t 表示几个空格
	return 0;
}

运算符 或(并)与(串)非 || && !

LOL未成年人防沉迷,年龄必须大于18岁,再加上要么英语成绩大于90 要么智商大于120

#include<stdio.h>
int main()
{
	int age;
	int English_Score;
	int IQ;
	printf("请输入年龄:\n");
	scanf_s("%d", &age);

	printf("\n");

	printf("请输入你的英语成绩:\n");
	scanf_s("%d", &English_Score);

	printf("\n");

	printf("请输入你的智商:\n");
	scanf_s("%d", &IQ);

	// && 就是串联		|| 就是并联
	if ((age >= 18) && (English_Score >= 90 || IQ >= 120))		//程序的可读性  带括号  否则有问题
	{
		printf("\nHave a good night!\n");
	}
	else
	{
		printf("\n未满十八岁或者英语成绩不合格(IQ不合格)!\n");
	}
	return 0;
}

三目运算符

#include<stdio.h>
int main()
{
	int apple =9 ;
	(apple == 5) ? printf("没毛病!\n") : printf("有问题!\n");
	return 0;
}

switch(开关、转换、改变)语句

#include<stdio.h>
int main()
{
	int age;
	printf("Please input you age:\n");
	scanf_s("%3d",&age);
	printf("\n");
	switch (age)
	{
	case 40:
			printf("恭喜中奖了!40岁大礼包,赠送房子!\n");
			break;
	case 50:
		printf("恭喜中奖了!50岁大礼包,赠送苹果!\n");
			break;
	case 70:
		printf("恭喜,退休!\n");
		break;
	default:			//默认  违约
		printf("滚蛋!\n");
		break;
	}
	return 0;
}

char 字符串

strcpy(s1, s2)复制字符串 s2 到字符串 s1
strcat(s1, s2)连接字符串 s2 到字符串 s1 的末尾
strlen(s1)返回字符串 s1 的长度
strcmp(s1, s2)如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0
strchr(s1, ch)返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstr(s1, s2)返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置
#include <stdio.h>
#include <string.h>		//使用字符串的函数的时候需要添加此头文件
 
int main ()
{
   char str1[14] = "runoob";
   char str2[14] = "google";
   char str3[14];
   int  len ;
 
   /* 复制 str1 到 str3 */
   strcpy(str3, str1);
   printf("strcpy( str3, str1) :  %s\n", str3 );
 
   /* 连接 str1 和 str2 */
   strcat( str1, str2);
   printf("strcat( str1, str2):   %s\n", str1 );
 
   /* 连接后,str1 的总长度 */
   len = strlen(str1);
   printf("strlen(str1) :  %d\n", len );
 
   return 0;
}
#include<stdio.h>
int main()
{
	char character = 'a';				//单引号
	char character_2 = 'A';				
	char character_3 = ' ';				
	char str[] = "abcd";				//双引号

	//%s 输出一个字符串		%c 输出一个字符
	printf("character = %c\n", character);
	printf("str = %s\n", str);
	printf("代码为 %d\n", character);
	printf("代码为 %d\n", character_2);
	printf("space代码为 %d\n", character_3);
	return 0;
}

循环

1.判断条件————满足条件或不满足条件
什么时候才会执行循环语句
2.可能会有自增衡量变量,可能会有界限,当突破界限的时候,
(上述判断条件满足或不满足),它可能会退出整个循环,结束程序。
3.可能会存在初始化的量

死循环

eg: while(1) 表示while循环的条件为“1”,循环体将无限循环执行

体育老师要求跑完1000米

#include<stdio.h>
#define ONE_KILOMETER 1000								//宏定义
int main()
{
	int run_meter = 0;
	while (run_meter < ONE_KILOMETER)		//此循环0~999  共1000次
	{
		printf("running...%d\n",run_meter);
		run_meter += 1;
	}
	printf("我tm终于跑完了!\n");
	return 0;
}

rush gold 淘金热

淘1000次金,第五百次挖到铁矿

#include<stdio.h>
#define GOLD 1000
int main()
{
	int rush = 1;
	while (rush <= GOLD)
	{
		if (rush == 500)
		{
			printf("挖到铁矿了!!!扔掉不要!\n");
			rush++;
			//满足一定要求的时候,如果使用continue语句,就代表
			//我不要满足条件中的内容但是我还是要继续干
			//还是要继续执行循环,但是要注意
			//一定要在continue之前 rush++ (注意不要遗漏自增变量)
			continue;
		}
		printf("rush = %d\n", rush);
		rush++;
	}
	printf("挖完了!\n");
	return 0;
}

break 只能结束最近的while循环

#include<stdio.h>
#define GOLD 1000
int main()
{
	int rush = 1;
	while (1)
	{
		while (rush <= GOLD)
		{
			if (rush == 500)
			{
				printf("挖到铁矿了!!!扔掉不要!\n");
				break;
			}
			printf("rush = %d\n", rush);
			rush++;
		}
	}
	printf("挖完了!\n");
	return 0;
}

continue语句和break语句的区别
continue语句只是结束本次循环,而不是终止整个循环
break语句是结束整个循环过程,不再判断执行循环的条件是否成立
除此之外 continue 不能在任何语句中使用
break 只能在循环或switch(开关)中使用

do…while()

do
{

}
while(条件);

做某件事,先干活(循环),后判断,判断结果如果是ture,
那么再继续执行do中的代码块
注意结尾,有分号

for

#include<stdio.h>
#define GOLD 1000
int main()
{
	int rush;
	//C Primer Plus 定义变量不赋值,这叫什么?  声明

	//1.初始化的变量
	//2.判断条件(满足或不满足)
	//3.自增衡量变量

	//需注意,不是必选,但是如果没有,可能会出问题,除非是业务要求
	//比如说死循环...可能就没有上述三点,但是一个常用的循环,
	//都应该具备上述三个要素,除非是特殊情况
	for (rush = 1; rush <= GOLD; rush++)
	{
		printf("rush = %d\n",rush);
	}
	printf("挖完了!\n");
	return 0;
}

找BUG

单击左键 打断点(出现红色的断点)
开始调试(F5)
逐语句(F11) 按F11就会执行箭头所指向的这一行,箭头移动到下一行

#include<stdio.h>
int main()
{
	int index;
	int sum = 0;
	for (index = 0; index < 10; index++)
	{
		sum += index;
		//输出也是一个不错的“调试工具”
		printf("index = %d sum = %d\n",index,sum);
	}
	return 0;
}

函数

#include<stdio.h>

//main 主函数 整个程序入口点在这儿

//声明函数
void sum(double number_1,int number_2);

//函数名:sum
//函数的返回类型为:void
//函数的参数:有两个参数,参数的类型是int类型
//参数名

int main()
{
	//int number_1, number_2;
	//printf("Please input your numbers,(type int,space):\n");
	//scanf_s("%d %d", &number_1, &number_2);
	//printf("sum = %d\n", number_1 + number_2);

	sum(98, 45);
	sum(100.99, 100);
	return 0;
}

void sum(double number_1, int number_2)
{
	printf("sum = %.3f\n", number_1 + number_2);
}

#include<stdio.h>
int sum(int number_1, int number_2);
int sun_flower = 100;		//全局变量
int main()
{
	sun_flower = 99;		//局部变量
	printf("main_sun_flower = %d\n",sun_flower);
	sum(1, 1);
	//int a = sum(1,1);
	//printf("score_sum = %d",a);
	return 0;
}
int sum(int number_1, int number_2)
{
	int score_sum = number_1 + number_2;
	printf("sun_sum_flower = %d\n",sun_flower);
	return score_sum;
}

判断闰平年

(leap year 闰年 // ordinary year 平年)

现行公历中每400年有97个闰年,每四百年中要减少三个闰年
公历规定:年份是整百数时,必须是400的倍数才是闰年
不是400的倍数的世纪年,即使是4的倍数也不是闰年

普通年判断方法:能被4整除且不能被100整除的为闰年(如2004年就是闰年,1999年不是闰年)
世纪年判断方法:能被400整除的是闰年(如2000年是闰年,1900年不是闰年)

#include<stdio.h>
int main()
{
	unsigned int year;		//无符号整数类型
	int a;
	printf("Please input year:\n");
	scanf_s("%u",&year);
	//if (year % 400 == 0)
	//{
	//	a = 1;
	//}
	//else {
	//	if (year % 4 == 0 && year % 100 != 0)
	//	{
	//		a = 1;
	//	}
	//	else {
	//		a = 0;
	//	}
	//}
	//if (a == 1)
	//{
	//	printf("%u 此年是闰年!\n",year);
	//}
	//else {
	//	printf("%u 此年是平年!\n",year);
	//}

	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))		//括号不能用中文输入法
	{
		printf("%u 此年是闰年!\n", year);
	}
	else
	{
		printf("%u 此年是平年!\n", year);
	}
	return 0;
}

数组

#include<stdio.h>
int main()
{
	unsigned plants[5] = {1,2,3,4,5};	//无符号整数类型

	//数组的元素下标从0开始, 下标 N-1   N代表第几个元素

	//遍历数组
	for (int i = 0; i < 5; i++)
	{
		printf("plant---%u\n",plants[i]);
	}
	return 0;
}

计算某一年的某一个月份有多少天(加表驱动法)

#include<stdio.h>
#include<stdbool.h>

//bool类型只有两个值,true=1,false=0
//只要引用头文件#include<stdbool.h>,就能在C语言里面正常使用bool类型

int days_of_month(int month, int year);
bool is_leap(int year);
int main()
{
	//表驱动法
	printf("总共%d天!\n", days_of_month(2, 2020));
	return 0;
}

//返回每个月的天数,依赖于is_leap()函数
int days_of_month(int month, int year)
{
	int day_array[12] = { 31,is_leap(year) ? 29 : 28,31,30,31,30,31,31,30,31,30,31 };
	return day_array[month - 1];
}

//计算该年份是不是闰年或平年
//@params year 传入一个年份,整形数据
//@return bool 如果为真,那么返回true,则为闰年,否则false平年
bool is_leap(int year)
{
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
		return true;
	else
		return false;
}

枚举

#include<stdio.h>
int main()
{
	//定义枚举
	enum DAY
	{
		MON=1,TUE=100,WEN,THU,FRI,SAT,SUN
	};

	//使用枚举
	enum DAY d = FRI;
	printf("%d\n",d);
	return 0;
}

指针

通过LOL理解指针,LOL有真实路径,有桌面快捷方式,桌面快捷方式就是一个指针,指向LOL可执行文件(.exe)

#include<stdio.h>
int main()
{
	int a = 1;
	int b = 3;
	int* q = &a;					//类型是int*类型(整形指针类型)		变量名是q,不是*q
	int* p = &b;					//为b创建了一个(桌面)快捷方式

	printf("%d %d\n", *q, *p);		//通过指针(快捷方式)拿到a、b的值-----真实运行LOL

	printf("%p %p\n",&a,&b);		//a是LOL,&a就是取LOL的地址(客户端入口的地址)

	printf("%p\n", q);				//q也就是LOL的地址(客户端入口的地址)

	printf("%p\n",&q);				//q是LOL桌面快捷方式,&q取LOL桌面快捷方式的地址

	return 0;
}

#include<stdio.h>
int main()
{
	//我们定义指针,通常就直接把它所指向的值也给了
	//即使给NULL也不能不给,否则就成野指针了
	int* ptr = NULL;				//空指针
	printf("ptr = %p",ptr);

	int* p;			//野指针		这会直接报错		???咋没报错
	//程序这时会随机分配,防止空指针的产生异常
	//没有意义的指向
	return 0;
}

#include<stdio.h>
int main()
{
	//int var[] = {10,100,1000};
	//int* ptr = NULL;
	//ptr = var;
	//printf("var 的地址:%p\n",&var);
	//printf("var 的地址:%p\n",var);
	//printf("var[0] 的地址:%p\n",&var[0]);
	//printf("ptr = %p\n",ptr);
	//数组的地址就是第一个元素的地址
	//对于数组来说,用不用&(取地址符)都一样

	//对变量来说就不行
	int number = 100;
	int* p ;
	p = &number;
	printf("number的地址:%p\n",&number);
	printf("number的地址:%p\n",number);
	//一旦要用快捷方式(指针),加上*,就代表要用这个指针
	printf("*p = %d\n",*p);
	return 0;
}

#include<stdio.h>
int main()
{
	//多级指针(指向指针的指针)
	//快捷方式的快捷方式

	int number = 100;
	int* p_one = &number;
	int** p_two = &p_one;

	printf("%d\n",number);
	printf("%d\n",*p_one);
	printf("%d\n",**p_two);
	return 0;
}

使用指针变量遍历整个数组,并计算出数组元素的平均值

#include<stdio.h>
int main()
{
	int scores[] = {98,78,68,58,48,38,28,18};
	int* p;
	p = scores;//scores数组名本身就是一个地址,数组名其实就是数组首元素的地址;
	int sum=0;
	for (int i = 0; i < 8; i++)
	{
		printf("scores[%d] is %d\n",i,*(p+i));
		sum += *(p + i);
	}
	printf("the average score is %d\n",sum/8);
	return 0;
}
#include<stdio.h>
struct ListNode
{
	int val;//数据域
	struct ListNode* next;//连接下一个节点的指针
};
int main() {
	//创建5个链表节点a,b,c,d,e
	struct ListNode a, b, c, d, e;
	//将它们赋值为1,2,3,4,5
	a.val = 1;
	b.val = 2;
	c.val = 3;
	d.val = 4;
	e.val = 5;
	//通过next指针,将它们依次相连
	a.next = &b;
	b.next = &c;
	c.next = &d;
	d.next = &e;
	e.next = NULL;

	struct ListNode* head = &a;//指针head指向节点a
	while (head) {
		//通过循环打印链表中节点的值、节点的地址和节点的next指针
		printf("val = [%d] address = [%p] next = [%p]\n",head->val, head, head->next);
		head = head->next;
	}
	return 0;
}

typedef

type define(类型定义)

#include<stdio.h>
int main()
{
	typedef char BYTE;
	BYTE letter = 'a';		//'a'的ASCII值为97
	BYTE space = ' ';			//' '的ASCII值为32

	typedef int SUM;
	SUM number_1, number_2;
	number_1 = 50;
	number_2 = 100;

	printf("%c\n", letter);
	printf("%d\n", space);
	printf("%d\n", letter);
	printf("number_1 + number_2 = %d\n", number_1 + number_2);
	return 0;
}

对结构体使用 typedef 来定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量

#include <stdio.h>
#include <string.h>		//使用字符串的函数的时候需要添加此头文件
#pragma warning(disable:4996)

typedef struct Books
{
	char  title[50];
	char  author[50];
	char  subject[100];
	int   book_id;
} Book;

int main()
{
	Book book;

	strcpy(book.title, "C 教程");
	strcpy(book.author, "Runoob");
	strcpy(book.subject, "编程语言");
	book.book_id = 12345;

	printf("书标题 : %s\n", book.title);
	printf("书作者 : %s\n", book.author);
	printf("书类目 : %s\n", book.subject);
	printf("书 ID : %d\n", book.book_id);

	return 0;
}

后面要看灰灰考研C语言程序设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值