本博文参考题目的地址看右边----》C技能树
我跟你说!!!!!c语言有bool类型!!!!!你是不是百度跟你说没有只有c++才有? 是有的!!!!!! 这就是为啥我们要做扩展练习!!!!
// #include <stdbool.h> 引入这个文件 c语言就有bool 数据类型了; bool only_child=true;
// #include <ctype.h>//大小写处理 系统便准库 isalpha 该函数检查所传的字符是否是字母。 isupper判断大写返回1 ,islower(int c) 判断是不是小写
// #include <stdarg.h> va_list valist;定义变量 va_start 初始化va_start(valist, num); va_arg(valist, int);读字 va_end(valist);
// itoa():将整型值转换为字符串。
// ltoa():将长整型值转换为字符串。
// ultoa():将无符号长整型值转换为字符串。
// gcvt():将浮点型数转换为字符串,取四舍五入。
// ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
// fcvt():指定位数为转换精度,其余同ecvt()。
// 获取char字符串长度strlen(str)
// extern 申明变量在别的文件
// #include <windows.h> SetConsoleOutputCP(65001); 打印中文
// srand((unsigned) time(NULL)); 随机数种子(rand())
// %d 十进制有符号整数
// %u 十进制无符号整数
// %f 浮点数
// %s 字符串
// %c 单个字符
// %p 指针的值
// %e 指数形式的浮点数
// %x, %X 无符号以十六进制表示的整数
// %o 无符号以八进制表示的整数
// %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
// %p 输出地址符
// %lu 32位无符号整数
// %llu 64位无符号整数
// %% 输出百分号字符本身。
// %ld的L是long的意思,%ld表示按longint格式(有符号长整型数格式)输出。
打印二维数组char
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define ROW 7
#define COL 50
void print(char arr[ROW][COL]){
char str;
for(int i=0;i<ROW;i++){
printf("%s\n",arr[i]);
}
}
int main(int argc, char** argv)
{
SetConsoleOutputCP(65001);
char feature[ROW][COL] = {
"1. 语言简洁,使用方便灵活",
"2. 可移植性好",
"3. 表达能力强",
"4. 表达方式灵活",
"5. 可进行结构化程序设计",
"6. 可以直接操作计算机硬件",
"7. 生成的目标代码质量高"
};
printf("********** C语言特点 **********\n");
print(feature);
printf("*******************************\n");
return 0;
}
计算圆的面积
#include <stdio.h>
#include <windows.h>
// #define PI 314e-2
#define PI 3.14
// const float PI=3.14;
// const float PI;// 错误const 定义产量 要赋值
// PI=3.14; // 错误
int main(int argc, char** argv)
{
SetConsoleOutputCP(65001);
float radius = 2.0;
float area = PI * radius * radius;
printf("半径为%.2f的圆,面积是%.2f", radius, area);
return 0;
}
打印学生基本信息
bool类型其实是有的!!!!! !我才知道!!!
#include <stdbool.h>
#include <stdio.h>
#include <windows.h>
int main(int argc, char **argv)
{
SetConsoleOutputCP(65001);
int student_id=1001;
char name[]="陈晓明";
char sex[]="男";
int age=19;
double height=164.50;
double weight=70.50;
bool only_child=true; //这个bool是c++的,所以题目出的多少有问题。因为c里面也可以跑c++,而c本身没有bool类型
printf("学号:\t%d\n", student_id);
printf("姓名:\t%s\n", name);
printf("性别:\t%s\n", sex);
printf("年龄:\t%d\n", age);
printf("身高:\t%.2f\n", height);
printf("体重:\t%.2f\n", weight);
printf("是否独生子女:\t%s\n", only_child ? "是" : "否");
return 0;
}
英文字母判断
#include <stdio.h>
#include <windows.h>
#include <ctype.h>
int main(int argc, char** argv)
{
SetConsoleOutputCP(65001);
char ch;
printf("请输入一个字符:");
scanf("%c", &ch);
if ('A'<=ch &&ch<='Z'||'a'<=ch &&ch<='z')//引入 #include <ctype.h> 用isalpha(ch)可以直接判断
printf("字符 \'%c\' 是一个英文字母", ch);
else
printf("字符 \'%c\' 不是一个英文字母", ch);
return 0;
}
while i++和++i 都会跳过i=0这个值
#include <stdio.h>
#include <windows.h>
#include <ctype.h>
#define UPPER 10
int main(int argc, char** argv){
SetConsoleOutputCP(65001);
int i = 1;
while(i++<UPPER){ //先对比i<UPPER 才会执行i++; 如果是++i只会输出到9
// if(i%10==0){
printf("%d\n",i);
// }
}
return 0;
}
区间重叠判断
#include <stdio.h>
#include <windows.h>
#define MAX(a,b) ((a > b) ? a : b)
#define MIN(a,b) ((a < b) ? a : b)
int main(int argc, char** argv){
SetConsoleOutputCP(65001);
int start_1, end_1;
int start_2, end_2;
printf("请输入第1个闭区间(逗号分隔):");
scanf("%d,%d", &start_1, &end_1);
printf("请输入第2个闭区间(逗号分隔):");
scanf("%d,%d", &start_2, &end_2);
if(!(MAX(start_1,start_2)==start_2 &&MIN(start_1,end_2)==start_1)||(MAX(end_1,start_2)==start_2 &&MIN(end_1,end_2)==end_1))
printf("两个区间不重叠!");
else
printf("两个区间重叠!");
return 0;
}
int 组数的数组长度
#include <stdio.h>
#include <windows.h>
int main ()
{
SetConsoleOutputCP(65001);
int arr[] = {1,2,3,4,5};
//注意前提,是arr[] 如果arr[10]长度就变成10了,所以一下定义是在arr[]形式下 可行
int len=sizeof arr/sizeof(int);//sizeof(arr)/sizeof int;是不行的
// int len=sizeof(arr)/sizeof(*arr);//
// int len=sizeof(arr)/sizeof(arr[0]);//
printf("%d",len);
return 0;
}
字符串 数组长度
#include <stdio.h>
#include <windows.h>
int main ()
{
SetConsoleOutputCP(65001);
char a[]={'h','e','l','l','o','\0'};
int aSize=sizeof(a)/sizeof(*a);
// int aSize=strlen(a);写法2 这种写法的前提是要求 a[]
//的尾巴一定要有 '\0' 直到空结束字符,但不包括空结束字符
printf("%d",aSize);
return 0;
}
如果strlen如果自定的a[]尾巴没有‘\0’查出来会变成如下图
但是对于用户输入的 scanf 这种就不用管他'\0'了因为用户输入完一般是要回车的!
这也就是我扩展练习的时候才发现,之前以为一个strlen就搞定了,之前也觉得要引入<string.h>,现在发现不引入也没事
c语言,逗号运算符
他是这样,括号里面 取最后的一个值给z, 是由顺序决定的!跟大小无关!
#include <stdio.h>
#include <windows.h>
int main ()
{
SetConsoleOutputCP(65001);
int x, y, z;
x = y = 1;
z=(1,2);
//要让结果输出 2 3 1
printf("%d\n", z);
return 0;
}
如果你换一种写法
z=1,2;
看懂了吗,这玩意教程里面也没教。博主只能靠换值去试。
运算符优先级与求值顺序
自己做了一遍还是感觉以后会忘记,有必要记录下现在的思路
#include <stdio.h>
#include <windows.h>
int main ()
{
SetConsoleOutputCP(65001);
int x, y, z;
x = y = 1;
z=(++x,y++),y++;
// 输出结果要是 2,3,1。
printf("%d,%d,%d\n", x, y, z);
return 0;
}
1、首先尾巴的y++跟z没关系,不懂的去看上面那个案例c语言,逗号运算符博主有举例
2、z只跟(a,b)里面的b的取值有关,跟a无关
3、因为题目要求z=1;所以要先赋值在运算,而++y会变成先 y+1;然后z才等于y,所以不行
4、因为x要输出2 ,括号里面是x++还是++x;都跟z没关系!所以随便写
5、因为结果y要输出3,前面y已经是2了,所以尾巴是y++还是++y;都没关系。
值互换函数传参
#include <stdio.h>
#include <windows.h>
void huan(int *x,int *y){
int z=*y;
*y=*x;
*x=z;
}
int main ()
{
SetConsoleOutputCP(65001);
int a;
int b;
printf("请输入2个数字用逗号隔开:");
scanf("%d,%d",&a,&b);
huan(&a,&b);
printf("%d,%d",a,b);
return 0;
}
我竟然做错了。。。。
切记要改变量值,要传&, 有& 就有*指针。一对。
goto语句:求10以内的数之和
第一次看到这种循环体
他是这样你写一个if(){},然后再if前面加一个自定义变量 a:if(){},然后再if里面 i++;去goto去跑a,就跟while很像,只不过while没有goto。
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleOutputCP(65001);
int sum = 0;
int i = 0;
a:if(++i<=10){
sum+=i;
goto a;
}
printf("10以内的正整数之和为:%d", sum);
return 0;
}
函数申明和定义几种写法
1、先申明、后面在定义
int型
#include <stdio.h>
#include <windows.h>
void print_skill_tree(int,int);
int main()
{
SetConsoleOutputCP(65001);
int tree_name = 1;
int tree_link = 2;
print_skill_tree(tree_name, tree_link);
return 0;
}
void print_skill_tree(int a,int b){
printf("%d,%d",a,b);
}
char型
#include <stdio.h>
#include <windows.h>
void print_skill_tree(char [],char []);
int main()
{
SetConsoleOutputCP(65001);
char tree_name[] = "微信搜";
char tree_link[] = "程序员实用资源";
print_skill_tree(tree_name, tree_link);
return 0;
}
2、直接定义和申明
void print_skill_tree(char arr[],char arr1[]){
printf("%s,%s",arr,arr1);
}
int main()
{
SetConsoleOutputCP(65001);
char tree_name[] = "微信搜";
char tree_link[] = "程序员实用资源";
print_skill_tree(tree_name, tree_link);
return 0;
}
函数返回字符串 函数指针
#include <stdio.h>
#include <windows.h>
char* a(){
return "湖南";
};
int main()
{
SetConsoleOutputCP(65001);
printf("%s",a());
}
模拟循环那题 答案是错的~!!!!!!!!
我模拟了下,如下
#include <stdio.h>
#include <windows.h>
void a(int i){
if(i<10){
a(++i);
printf("%d\n",i);
}
}
int main()
{
SetConsoleOutputCP(65001);
a(1);
}
这个结果是
所以正确的写法应该是
#include <stdio.h>
#include <windows.h>
void a(int i){
if(i<10){
printf("%d\n",i);
a(++i);
}
}
int main()
{
SetConsoleOutputCP(65001);
a(1);
}