大家好,这里是永恒,怎么可能。
最近总结了一些c的知识,欢迎大家一起探讨一起学习!
目录
一、strlen和sizeof的区别是什么?
一、strlen与sizeof的区别:
1、strlen只计算字符串的具体长度,不包括字符串结束符(\0)
2、sizeof计算声明后(extern)所占的字节大小,包含‘\0’。
3、sizeof是取字节运算符,strlen是函数。
#include<stdio.h>
int main()
{
//strlen是函数
//strlen计算的是数组中字符串的具体长度,遇到空字符\0为止,
//如果数组中没有写入\0,则一直到遇到\0为止(这种时候输出为不固定随机值)
// stelen只计算字符串长度
// sizeof是运算符
//sizeof计算的是声明后数组的字节大小,包含‘\0’。
//sizeof不局限于计算数组
char arr[] = { 1,2,3,4,5,6,7,8,9 ,};
char brr[] = { 1,2,3,4,5,6,7,8,9 ,10,'\0'};
int a = { 1 };
printf("%d\n", strlen (arr));//58,随机值
printf("%d\n", sizeof(arr));//9
printf("%d\n", strlen(brr));//10
printf("%d\n", sizeof(brr));//11
printf("%d\n", a);//1
return 0;
}
二、为什么写代码的时候要加注释
注释为对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释为编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。注释只是为了提高可读性,不会被计算机编译。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>//头文件
int main()//主函数
{
printf("I lost my tellphone/n" );//打印字符及要打印的东西
return 0;//返回符
}
//注释是为了更好的理解代码,提高阅读理解效率。
三、选择语句(if else)
举个例子,小明想坐电梯回家,电梯满载12人,此时电梯前有很多人要做电梯,上一趟2分钟,下一趟2分钟。小明现在数人头,那么请你算算小明坐电梯回家需要多久。
#include<stdio.h>
int main()
{
int a = 0 ;//小明数人头后输入数量
int b = 2;
int c = 2;
scanf("%d", &a);
if (a < 12)//如果满足a<12
{
printf("%d\n", b);//打印b
}
else if (a >12)//如果满足a>12
printf("%d\n", 4 * (a / 12) + c);//打印4 * (a / 12) + c的结果
return 0;
}//if else常跟循环语句一起使用。
选择语句一般在暂未确定要计算的数量时使用,或者说需要计算多种情况下使用。
四、while循环语句
while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出,而不是立即跳出循环。
话不多说,直接敲
#include<stdio.h>
int main()
{
int a = 1;
int r = 6;//确定值
while (a <= 8)//给定条件范围
if (a <= 5)
{
printf("%d\n", a);
a++;//小于等于5就往回加1,直到大于5跳出,转到下一个条件
}
else
{
printf("%d\n", r);//满足则依次打印
a++;//大于5往回加1,直到超出条件范围(a<=8)退出
}
return 0;
}
当执行完条件内的指令后跳出循环
打印结果为1,2,3,4,5,6,6,6
#include<stdio.h>
int main()
{
int a = 1;
int r = 6;//确定值
while (a <= 8)//给定条件范围
if (a <= 5)
{
//break;//当遇到break时循环终止,这里往下的命令都不执行
printf("%d\n", a);
a++;//小于等于5就往回加1,直到大于5跳出,转到下一个条件
}
else
{
continue;//while中出现continue时,a>5后不再自加,陷入死循环
//此时运行代码只输出1,2,3,4,5后一直返回表达式部分,不再输出。
printf("%d\n", r);//满足a>5,则依次打印
a++;//大于5往回加1,直到超出条件范围(a<=8)退出
}
return 0;
}
五、如何用函数实现两数相加
给定两个值a,b.使得随机写入两个数相加得到结果。
再给出一个值装这两个值的和。也可以调用函数实现相加。
#include<stdio.h>
int main()
{
int a = 20;
int b = 18;
int sum = 0;
sum = a + b;//a+b的值汇总到一起
printf("%d\n",sum);//输出38
return 0;
}
#include<stdio.h>
int ADD(int x, int y)
{
int z = 0;
z = x + y;
}
int main()
{
int a = 10;
int b = 20;
int sum = 0;
sum = ADD(a,b);//借用ADD的值,x=a,y=b
printf("%d\n",sum);//此时输出结果为30
return 0;
}
六、数组的使用及下标的概念
数组我们可以理解为一个存放相同元素的集合,例如我们的整数1,2,3。字母a,b,c,d,e。将这些相同的元素存放在一个集合,这个集合就是数组。
下标可以理解为是数组内元素的位置,打印这个下标输出的就是具体的单个元素。
下标是从0开始计算的。
#include<stdio.h>
int main()
{
char arr[6] = { '1','2','3' };
char gft[10] = { 'a','b','c','d','e'};
//下标是从0开始算的,也就是说a的下标是0,b的下标是1
printf("%s\n", arr);//1 2 3
printf("%s\n", gft);//a b c d e
printf("%c\n", arr[2]);//3
printf("%c\n", gft[1]);//b
return 0;
}
//打印数组用%s,%s是打印字符串类型
//打印下标用%c,%c是打印字符类型
七、且&&与或||及逗号表达式
&&是并且的意思,即同时满足两个条件
或是或者的意思,即满足a条件或满足b条件
比如,你可以同时买雪糕和饮料,
你可以买雪糕或者饮料。
逗号表达式,当一条件成立?成立,输出二的文本,不成立,输出三的文本。
a>=1&&a<=5 ? yes : no
a>=1 || a>=5 ? yes : no
int main()
{
int a = 3;
a >= 1 && a <= 5 ? printf("yes\n") : printf("no\n");
a >= 1 || a >= 5 ? printf("yes\n") : printf("no\n");
return 0;
}
输出结果为两个yes
\n是换行符的意思。
八、关键字typedef及static(附上unsigned int概念解释)
typedef,是类型重定义的意思。即把一个类型的名字定义成一个新名字,当需要多次输入一个相同的类型时,typedef提供了很好的便携性。
#include<stdio.h>
typedef unsigned int sf;
int main()
{
unsigned int a = 1;
sf b = 1;//此时sf等于unsigned int
printf("%d\n", a);//1
printf("%d\n", b);//1
return 0;
}
unsigned int,是无符号整型的意思。
unsigned的取值范围在0-2^32。不能表示负数。
每一种整型(int short long longlong)都有无符号(unsigned)和有符号(signed)两种类型,在一般情况下的整型变量都是有符号的,如果需声明无符号的话就会在类型前加上unsigned。
static,可以修饰局部变量,全局变量以及函数。
修饰局部变量时,改变生命周期,不改变作用域。
修饰全局变量时,使变量不可跨文件(源文件)使用,只能在本文件内使用
(一般情况下不加static全局变量加上声明是支持跨文件使用的)
修饰函数时,使函数不可跨文件(源文件)调用和访问,只能在本文件内使用
(一般情况下不加static函数加上声明是支持跨文件使用的)
九、如何用函数实现除法及取余
这两天刷到一道题很有意思,是说随机输入一个数,将它转化成时间(小时,分钟,秒)
比如3661转化成时间就是一小时一分钟一秒。
除号/,取余数用%
%可以理解为余数,比如说1%60即1。
#include<stdio.h>
int main() {
int h, m, s;
scanf("%d", &s);
h = s / 3600;//计算小时,一小时3600秒
m = s / 60 %60 ;//计算分(取余就是去掉转换成小时的分钟数)
s = s % 60;//计算秒数
printf("%d %d %d", h, m, s);
return 0;
}