练习题1
/*有个数组,找出第二大的数,并且打印出来(使用*操作数组元素个数,不要使用[])
int a[] = {5,100,32,45,21,67,32,68,41,99,13,71};*/
#include <stdio.h>
int main(){
int a[] = {5,100,32,45,21,67,32,68,41,99,13,71};
// 最大值, 老二 老三
int *qian = a, *zhong = a, *hou = a;
int len = sizeof(a)/sizeof(*a);
while (len--){
// printf("i = %d \n", i);
if(*qian < *hou){
qian = hou; //
} else if (*zhong < *hou){
zhong = hou;
}
hou++;
printf("*qian = %d \n", *qian);
printf("*zhong = %d \n", *zhong);
printf("*hou = %d \n", *hou);
printf("------------------ \n");
}
printf("老2 = %d \n", *zhong);
return 0;
}
/*
for (i = 0; i < 13; ++i) {
if (Max<=a[i])
Max = a[i];
}
for (i = 0; i < 13; ++i) {
if (SecMax<=a[i] & a[i] <Max)
SecMax = a[i];
}
printf("SecMax = %d\n",SecMax);
printf("Max = %d",Max);
return 0;
*/
练习题2
//不使用库函数,实现字符串拷贝功能
//char src[100] = “hello”;
//char dst[100]; //把src的内容拷贝给dst
#include <stdio.h>
int main() {
char src[100] = "hello";
char dst[100]; //把src的内容拷贝给dst
char *p1 =src;
char *p2 =dst;
// *p2=*p1;
// *p2++=*p1++;
// *p2++=*p1++;
// *p2++=*p1++;
// *p2++=*p1++;
// *p2++=*p1++;
while (*p2++=*p1++);
printf("%s \n", dst);
return 0;
}
前置自增和后置自增的区别
#include <stdio.h>
int main() {
// 前置 ++ 是先自增 后参与运算
// 后置 ++ 是先参与运算 后自增
// 共同点就是 最终都会增加一次
int a = -6;
a++;
printf("a = %d\n", a); // 101
++a;
printf("a = %d\n", a);// 102
int b = a++ + 10;
printf("b = %d\n", b);// 112
printf("a = %d\n", a);// 103
int c = ++a * 10;
printf("c = %d\n", c);// 1040
printf("a = %d\n", a);// 104
printf("a = %d\n", a++);// 104
printf("a = %d\n", ++a);// 106
return 0;
}
复合类型(自定义类型)
结构体
数组:描述一组具有相同类型数据的有序集合,用于处理大量相同类型的数据运算。
有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
C语言中给出了另一种构造类型——结构体。
一个变量定义法
char s1[] = "110011 faye 18 1 london";
char s2[] = "110012 eric 18 0 china";
结构体变量的定义和初始化
定义结构体变量的方式:
- 先声明结构体类型再定义变量名
- 在声明类型的同时定义变量
- 直接定义结构体类型变量(无类型名)
结构体类型和结构体变量关系: - 结构体类型:指定了一个结构体类型,它相当于一个模型,但其中并无具体数据,系统对之也不分配实际内存单元。
- 结构体变量:系统根据结构体类型(内部成员状况)为之分配空间
#include <stdio.h>
int main() {
// 结构体的定义
struct teacher{
char name[50];
int sal;
};
struct stu{
char name[50];
int age;
};
// 1 先声明结构体类型再定义变量名 并且进行初始化 常用
struct stu s1 = {"faye", 18};
struct stu s2 = {"eric", 20};
// 2 在声明类型的同时定义变量
struct stu2{
char name[50];
int age;
} s3= {"Bob", 33};
// 3 直接定义结构体类型变量(无类型名)
struct {
char name[50];
int age;
} s4 = {"Jordan", 17};
// 使用
// 如果是普通变量, 通过点 运算操作符操作结构体成员
printf("s1.name = %s, s1.age = %d \n", s1.name, s1.age);
printf("s2.name = %s, s2.age = %d \n", s2.name, s2.age);
printf("s3.name = %s, s3.age = %d \n", s3.name, s3.age);
printf("s4.name = %s, s4.age = %d \n", s4.name, s4.age);
return 0;
}
//如果是指针变量,通过->操作结构体成员
#include <stdio.h>
#include <string.h>
int main() {
struct stu{
char name[50];
int age;
};
struct stu s1 ;
struct stu s2;
struct stu *p1 = &s1;
strcpy(p1->name, "eric");
p1->age = 46;
strcpy((&s2)->name, "faye");
(&s2)->age = 16;
printf("s1.name = %s, s1.age = %d \n", p1->name, p1->age);
printf("(&s2)->name = %s, (&s2)->age = %d \n", (&s2)->name, (&s2)->age);
return 0;
}
结构体数组
#include <stdio.h>
// 统计全班成绩 avg
struct stu{
int num;
char name[50];
char sex;
float score;
};
int main() {
int a = 7, b = 8, c= 9;
struct stu s1 = {111, "Bob", 'M', 100.0};
struct stu s2 = {112, "Eric", 'F', 100};
struct stu s3 = {113, "Jordan", 'M', 100.0};
struct stu s4 = {114, "Smith", 'F', 50.0};
struct stu s5 = {115, "Hanmeimei", 'M', 50.0};
// 普通数组
int arr[3] = {a, b, c};
// 结构体数组 myclass
struct stu myClass[5] = {s1, s2, s3, s4, s5};
float total = 0;
for (int i = 0; i < 5; i++) {
total += myClass[i].score;
}
printf("total = %f\n", total);
printf("avg = %f\n", total/5);
return 0;
}