C语言学习 杂记(一)

C语言学习 杂记(一)

说明:仅仅是个人学习时遇到的问题总结学习记录,如有错误,烦请指出,定当虚心接受!!!请大家多多指点。

(1)三目运算

int main() {
	int num;
	printf("输入一个数字:");
	scanf("%d", &num);
	(num % 2 == 0) ? printf("偶数") : printf("奇数");
}

(2)随机函数

int main() {
	int a;
	srand((unsigned)time(NULL));//重新播种,如果不加这行,数不会变
	a = rand();
	printf("%d\n", a);
}

(3)输出格式化(对齐)

int main()
{
	int a1 = 20, a2 = 345, a3 = 700, a4 = 22;
	int b1 = 56720, b2 = 9999, b3 = 20098, b4 = 2;
	int c1 = 233, c2 = 205, c3 = 1, c4 = 6666;
	int d1 = 34, d2 = 0, d3 = 23, d4 = 23006783;
	printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4); //-为向左对齐
	printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);
	printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);
	printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);
	return 0;
}

(4)输出格式化

int main() {
	int m = 192, n = -943;
	float f = 84.342;
	printf("m=%10d, m=%-10d\n", m, m);  //演示 - 的用法: - 表示左对齐
	printf("m=%+d, n=%+d\n", m, n);  //演示 + 的用法: + 用于整数或者小数,表示输出的正负号
	printf("m=% d, n=% d\n", m, n);  //演示空格的用法:输出值为正冠以空格,为负冠以负号
	printf("f=%.0f, f=%#.0f\n", f, f);  //演示#的用法:# 表示在输出时添加前缀
	return 0;
}

(5)关于getche()

int main() {
	char c = _getche();//没有缓冲区,输入一个字符立即显示,不用回车控制
	printf("\nc:%c\n", c);
	char b = getchar();
	printf("b:%c\n", b);
}

(5)字符数组

初始化

char str[] = "abdjjaoodhiohiohao"; //字符数组表示字符串

printf("%s\n", string); //通过字符串名字输出字符串
char*str = "abd";

注意:
1、字符数组只能一次性定义,后面想要更改只能逐个添加
2、第二种方式,如果报错,需要改动 项目==> 属性==> C++/C语言 ==> 符合模式,改为否
3、第二种方式的含义是:先新建一个字符串,内容为abd,然后str是一个头指针,指向这个串,但是这个新建串是作为const存在的,不是一个可改的变量,一旦更改其中的值,程序会挂掉

(6)宏定义

使用尖括号< >和双引号" “的区别在于头文件的搜索路径不同:
使用尖括号< >,编译器会到系统路径下查找头文件;
而使用双引号” ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。

#define PI 3.1415926

宏定义是简单的字符串替换,在预编译进行处理

#undef PI //终止作用域,也即是PI的使用在此之上,之下不可用

(7)sizeof 和 strlen

int main() {
	int a  = 0;
	printf("%d", a);
	char ch[] = { "abcdefg" };//用sizeof长度为8,因为字符串以\0结束;用strlen长度为7,因为\0作为判断依据,
							//strlen一般只能是char* 作为参数
	char ch2[] = { 'a','b','c','d','e','f' };//字符串没有\0结束
	int num1 = sizeof(ch);
	int num2 = sizeof(ch2);
	printf("len(num1);%d\t len(num2):%d\t", num1, num2);
	printf("\nlen(num1);%d\t len(num2):%d\t", strlen(ch), strlen(ch2));
	printf("%d\n", sizeof(int));

}

(8)指针数组

int main() {
	int a = 10, b = 900, c = 190;
	int* arr[3] = { &a,&b,&c };
	int** parr = arr;
	printf("%d\t%d\t%d\t", *arr[0], *arr[1], *arr[2]); // 10 900 190
	printf("%d\t%d\t%d\t", **parr, **(parr + 1), **(parr + 2)); // 10 900 190

指针数组:一个数组中的所有元素保存的都是指针

(9)结构体

struct stu {
	int age;
	char* name;
	int num;
	char group;
	float score;
}stu1,stu2;

int main() {
	stu1.name = "LiHua";
	stu1.age = 18;
	stu1.group = 'A';
	stu1.num = 8000;
	stu1.score = 90;
	printf(" %s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name,stu1.num, stu1.age, stu1.group, stu1.score);

}

结构体数组

struct{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}class[] = {  //class[5];
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
int main(){
    int i, num_140 = 0;
    float sum = 0;
    for(i=0; i<5; i++){
        sum += class[i].score;
        if(class[i].score < 140) num_140++;
    }
    printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
    return 0;
}

结构体指针

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//结构体指针
struct stu *pstu = &stu1;
int main(){
	printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
}
>获取结构体成员的两种方式
>1. (*p).memberName
>2. p->memberName

> 结构体指针作为函数参数
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
}stus[] = {
    {"Li ping", 5, 18, 'C', 145.0},
    {"Zhang ping", 4, 19, 'A', 130.5},
    {"He fang", 1, 18, 'A', 148.5},
    {"Cheng ling", 2, 17, 'F', 139.0},
    {"Wang ming", 3, 17, 'B', 144.5}
};
void average(struct stu *ps, int len);
int main(){
    int len = sizeof(stus) / sizeof(struct stu);
    average(stus, len);
    return 0;
}
void average(struct stu *ps, int len){
    int i, num_140 = 0;
    float average, sum = 0;
    for(i=0; i<len; i++){
        sum += (ps + i) -> score;
        if((ps + i)->score < 140) num_140++;
    }
    printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
}

(10)枚举

默认从0开始,往后递增1

enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };

也可以指定值

enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };

定义枚举变量

enum week{
	 Mon = 1, 
	 Tues,
	 Wed,
	 Thurs,
	 Fri, 
	 Sat,
	 Sun } a, b, c;
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;

同一个程序中不能定义同名的枚举类型,不同的枚举类型也不能存在同盟的命名变量
枚举类型的变量赋值

#include<stdio.h>

/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

void main()
{
    /* 使用基本数据类型声明变量,然后对变量赋值 */
    int x, y, z;
    
    x = 10;
    y = 20;
    z = 30;
    
    /* 使用枚举类型声明变量,再对枚举型变量赋值 */
    enum DAY yesterday, today, tomorrow;
    
    yesterday = MON;
    today     = TUE;
    tomorrow  = WED;

    printf("%d %d %d \n", yesterday, today, tomorrow);
}

(10) typedef

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值