1、人不是生下来就能写代码的,是要练习的;
2、自信点,智商是没问题的,题目是不算难, 想不到的原因:是不熟悉,不会把实际问题转化成代码的方式来解决!编程思维(需要练习)
3、计算机都是人发明的,计算机的技术难道学不会?——能学会!
1、找练习题、找答案,看,看懂,分析,别人为什么这么写的?
2.放开被人的代码,按照自己的理解,去尝试写,写出来就好了,如果写不出来,卡在哪里了? 再去看被人的代码;
3、顺一下思路,再去写;(去模仿)
4、重复上述过程。
2023.12.07
1、先将代码分开书写(在创建 头文件.h 与 .c文件选择相对应的类型);
2、图解步骤:
完成上述操作以后就会在文件夹中生成此文件;注意目录
1、在该项目中把 .lib文件与头文件放在该目录下;
2、在 vs中调用该函数就行;
注意:头文件的添加与声明,同时,在调用 .lib 文件时要加 #pragma comment(lib,"lib文件"),文件名一定要相同。
此次文件的封装操作前前后后一共操作了6次,很是不爽翻过来覆过去的查找问题进行修改,但是这将来就是常态,所以要习惯!
2024.01.02
1、在for语句中,循环次数只由变量来控制的.说法是否正确?不正确
还有break也可以控制。
2、一个C语言的执行时是 从本程序的主函数开始,到本程序的主函数结束。
3、1.234e0.4不能作为C语言的合法常量因为:其表示e代表是以10为底的指数;
C语言中整数常量的指数是合法的,而小数指数不是C语言标准所定义的合法常量范围内
4、若二维数组a有m列,则在a[i][j]前的元素个数为 (i*m)+j
因为列与行是从0 0 开始进行计数的
#include <stdio.h>
int main()
{
int m = 3; // 假设有3列
int a[2][3] = { {1, 2, 3}, {4, 5, 6} };
int i = 1; // 第2行
int j = 2; // 第3列
// 计算在a[i][j]前的元素个数
int X = (i * m) + j;
printf("在a[%d][%d]前的元素个数: %d\n", i, j, X);
return 0;
}
5、不合法的C语言用户自定义标识符是什么?
在C语言中,用户自定义的标识符(Identifier)必须遵循一定的命名规则。以下是一些不合法的C语言用户自定义标识符的情况:
1.包含空格的标识符: 标识符不能包含空格,因为空格在C语言中用于分隔各个标记。
2.以数字开头的标识符: 标识符不能以数字开头,它们必须以字母(包括下划线)开头。
3.包含特殊字符的标识符: 标识符只能包含字母、数字和下划线,不能包含其他特殊字符。
4.C语言关键字作为标识符: 不能使用C语言中的关键字(reserved keywords)作为标识符,因为这些关键字具有特殊含义。
5.超过标识符长度限制: 标识符的长度在C语言中是有限制的,不同编译器可能有不同的限制。 // 不合法的标识符(假设长度超过编译器限制) int thisIsAReallyLongIdentifier; // 过长的标识符
总体而言,合法的C语言标识符应该以字母(包括下划线)开头,后面可以跟随字母、数字和下划线的组合,且长度不能超过编译器规定的限制。
6、exce((v1, v2), (v3, v4, v5), v6);这个函数调用语句中实参的个数是 3个
括号表达式表示的是一个值
7、设有指针变量为 double *p,则在32位机器上p+1是将指针p的指向向后移动8个字节。正确
double 不论是在32位还是64位平台下,都是8个字节。指针加一,加的是其所指的类型的大小,所以无论是32位还是64位编译器,都是移动8个字节。并不是其类型空间,其类型空间没有变,只会 根据机器位数而发生变化。
8、预定义的标识符不是c语言的关键字。正确
C语言的字有关键字和标识符两大类,而标识符又分为预定义标识符(如 printf )和用户标识(如 a)。预定义的标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。
9、一个 C 语言程序在一台 32 位机器上运行。程序中定义了三个变量 x 、y 和 z ,其中 x 和 z 为 int 型, y 为 short 型。当 x=127 , y= - 9 时,执行赋值句 z=x+y 后, x 、 y 和 z 的值分别是 x=0000007FH,y=FFF7H,z=00000076H
C 语言中的整型数据为补码形式, int 为 32 位, short 为 16 位,故 x 、 y 转换成十六进制为 0000007FH 、 FFF7H 。执行 z=x+y 时,由于 x 是 int 型, y 为 short 型,需将短字长数据转换成长字长数据,称之为“符号扩展”(整形提升)。由于 y 的符号位为 1 ,故在 y 的前面添加 16 个 1 ,即可将 y 上升为 int 型,其十六进制形式为 FFFFFFF7H 。最后执行加法,即 0000007FH+FFFFFFF7H=00000076H ,其中最高位的进位 1 自然丢弃。
1、关键字的理解:C语言中有一些关键字,它们具有特殊的含义,不能用作标识符(变量名、函数名等)。
以下是C语言中的一些关键字
1.auto: 声明自动变量。 2.break: 用于跳出循环或switch语句。 3.case: 在switch语句中标记不同的情况。 4.char: 声明字符型变量或函数返回值类型。 5.const: 声明只读变量。 6.continue: 结束当前循环的迭代,继续下一次迭代。 7.default: 在switch语句中指定默认情况。 8.do: 开始do-while循环。 9.double: 声明双精度浮点型变量或函数返回值类型。 10.else: 在条件语句中指定一个块,该块在条件为false时执行。 11.enum: 声明枚举类型。 12.extern: 声明一个变量或函数是由外部文件定义的。 13.float: 声明浮点型变量或函数返回值类型。 14.for: 开始for循环。 15.goto: 将控制转移到程序中的标签。 16.if: 条件语句的开始。 17.int: 声明整型变量或函数返回值类型。 18.long: 声明长整型变量或函数返回值类型。 19.register: 声明寄存器变量。 20.return: 从函数中返回值。 21.short: 声明短整型变量或函数返回值类型。 22.signed: 声明有符号类型。 23.sizeof: 返回对象或类型的大小(以字节为单位)。 24.static: 声明静态变量或函数。 25.struct: 定义结构体。 26.switch: 开始switch语句。 27.typedef: 为数据类型定义一个新的名字。 28.union: 声明联合体。 29.unsigned: 声明无符号类型。 30.void: 声明函数无返回值或指针不指向任何类型。 31.volatile: 指示变量可以被意外更改,防止编译器优化。 32.while: 开始while循环。
这些是C语言中的一些关键字,它们在编程中有特殊用途,不能被用作标识符。
2、有关字符的ASCII编码注意的三个点:
A.小写字母的ASCII码值 - 32就能得到对应的大写字母的ASCII码值(小写字母的ASCII码值比对应的大写字母的ASCII码值更大的。)
B.ASCII码值从0~31 这32个字符是非打印控制字符,在界面上不显示任何东西,比如:蜂鸣、回车、换行;
C.48~57为数字,48是0,57是9;
65是大写字母A,90是大写字母Z;
97是小写字母a,122是小写字母z。
参考A概念文章
3、转义字符的使用
#include<stdio.h>
int main()
{
printf("\'");
return 0;
}
参考A概念文章
4、关于if语句说法正确是:( C)
A.if语句后面只能跟一条语句(可以多条用花括号括起来)
B.if语句中0表示假,1表示真(非0表示真)
C.if语句是一种分支语句,可以实现单分支,也可以实现多分支
D.else语句总是和它的对齐的if语句匹配(不一定对齐但是一定要有对应匹配的if)
5、计算表达式
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
}
注意:计算完成后字母的值并不是就不管了而是数值在发生变化,这里是赋值操作并不是等于。
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6 c = 6
b = ++c, c++, ++a, a++;
// 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7
// b=++c 和后边的构成逗号表达式,依次从左向右计算的。
// 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7
b += a++ + c; // a先和c加,结果为16,在加上b的值7,比的结果为23,最后给a加1,a的值为9
printf("a = %d b = %d c = %d\n:", a, b, c); // a:9, b:23, c:8
return 0;
}
6、EOF 指代的是 文件的结尾;
7、vs是一个强大的文本编辑器,不是集成开发环境;
Visual Studio (VS) 既可以指 Visual Studio 编程集成开发环境 (IDE),也可以指 Visual Studio Code 文本编辑器。
8、#pragma once 其作用是防止头文件重复引用;
9、strlen 功能是用来求字符串中字符的个数找,单个字符不包含\0,且个数不包含\0;
10、scanf() 处理数值占位符时,会⾃动过滤空白字符,包括空格、制表符、换行符等。除了 %c 以外,都会自动忽略起首的空⽩字符。如果要强制跳过字符前的空⽩字符,可以写成scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个或多个空⽩字符。
11、ctrl + z 可以终止多次循环输入;
while ( (语句)!= EOF)
{
//语句
}
12、if 语句后只能执行一句语句,想要执行多条就应该用花括号括起来:
1、switch 语句时多分支的选择语句,如果case子项后没有跟 break 语句,则继续往下执行其他语句;
2、两个 字符串是否相等 不能使用 == ,应该使用 strcmp 函数;
3、做在线 oj 输出内容时可以 复制粘贴 严格防止机器判断错误;
4、进制显示前导标识符 八进制 0、十六进制 0x,有两种方式,printf 可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示;
int main()
{
//1、直接在占位符前加相对应的前导标识符
printf("0%o 0X%X\n", 1234, 1234);
//2、在占位符中加#
printf("%#o %#X", 1234, 1234);
return 0;
}
5、逆置数字:利用循环拿出最后一位,并且消掉一位,然后整体输出;
int main()
{
int n = 0;
//输入数据
scanf("%d", &n);
//获取每一位
while (n)
{
printf("%d", n % 10);
n /= 10;//n = n / 10;
}
return 0;
}
6、大小写转换:实现字母的大写转换为小写,多组输入输出;
注意:“ 回车 ”也是字母,所以要 “ 吸收 ” ( getchar ( ) ) 掉该字母。
int main()
{
int ch = 0;
//循环数据输入
while ((ch = getchar()) != EOF)
{
//大写转换为小写
printf("%c\n", (ch + 32));
//处理多余的 \n字符
getchar();
}
return 0;
}
1、多组数据输入的问题:循环 EOF 指代文件结尾;
2、getchar 获取字符函数 要清理缓冲区的问题,所以再次调用吸收掉多余的字符;
3、getchar 返回的是ASCII码值是 int 类型,并且不需要使用输入函数。
8、乘法口诀表
9、整数的最大值
//问题:求10 个整数中最大值
//思路:创建数组、遍历数组、输入整数、比较大小、进行输出
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
//单个%d后不能加空格会存在缓冲区的问题造成多输入一个值
}
int max = arr[0];//假设arr[0]为最大值与其他剩下的进行比较
for (int i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
10、计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
//问题:计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果
//思路:循环分数、进行求和、判断正负
int main()
{
double sum = 0;//注意类型
int flg = 1;
for (int i = 1; i <= 100; i++)
{
sum = sum + ((1.0 / i) * flg);//设计函数
flg = -flg;//改正负
}
printf("%lf ", sum);//注意打印格式
return 0;
}
11、1到 100 的所有整数中出现多少个数字9(有多少个9的整数)
//问题:编写程序数一下 1到 100 的所有整数中出现多少个数字9
//思路:遍历数字、取模判断9、出去一位判断9、计数
int main()
{
int count = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 10 == 9)
{
count++;
}
else//这里的选择表示会出现多少个包含9的整数
{
if (i / 10 == 9)
{
count++;
}
}
}
printf("%d ", count);
return 0;
}
1、最大公约、最小公倍数;
2、数组元素一般都是下标由小到大储存,地址由低到高
3、strlen求的是字符串长度,从首元素开始计算,遇见‘\0’停止,由于数组没有'\0‘,所以数组的strlen 的结果是个随机值,但是个数可以计算为7个元素;
char acY[] = { 'a','b','c','d','e','f','g'};
4、变长数组:就是数组长度只有运行时才能确定,所以变长数组不能初始化程序可以在运行时为数组分配精确的度,因为它的⻓度取决于变量 n 的值,编译器没法事先确定,只有运⾏时才能知道 n 是多少。
5、printf
a. 返回值:输出的字符数(不包括字符串的终止符 \0);
b. %02d 格式控制符:输出数值时指定左面不使用的空位置自动填0;
scnaf
a. 多读取数字;
scanf("%d", &arr[i]);
//单个%d后不能加空格会存在缓冲区的问题造成多输入一个值
7、通过移位运算实现2的n次方计算:<<(左移操作符的使用,左移一位有乘2的效果)
//针对每组输入输出对应的2的n次方的结果
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
printf("%d\n", 1 << n);
}
return 0;
}
1、pow 函数计算次方;
#include<math.h>
int n = (int)pow(2, 6);//2 的 6 次方
2、0的区分:
NULL:本质是0,用于指针的初始化;
\0:\ddd 形式的转义字符,本质是0,一般字符串的末尾会有\0 是字符串结束的标志;
0:数字0;
‘0’ :字符0,本质是48。
3、变量名的组成方式:字母、数字、下划线(注:不能以数字开头)。
4、1.在win中,双击的本质运行程序,将程序加载到内存当中;2.任何程序在被运行之前都必须被加载到内存当中(a.程序没有被加载的时候,在硬盘中;b.为什么要加载在内存:因为快!)
5、储存数据