## 选择结构 ### 选择结构-1 ![image-20250220225958223](https://yp.smallkun.cn/markdown/image-20250220225958223.png!compress) ```c #include /* if(条件){ 复合语句(条件为真时执行) }else{ 复合语句(条件为假时执行) } */ int main(void){ int x, y, z, t;//定义三个整型变量 //数据类型 变量名1, 变量名2; scanf("%d%d%d", &x, &y, &z); if(x > y){ t = x; x = y; y = t; }//实现x和y比较 大数放y位置 if(y > z){ t = y; y = z; z = t; }//实现y和z比较 大数放z位置 z为三个数字中最大数 if(x > y){ t = x; x = y; y = t; } printf("%d %d %d\n", x, y, z); return 0; } ``` ### 选择结构-2 ![image-20250220230052521](https://yp.smallkun.cn/markdown/image-20250220230052521.png!compress) ```c #include int main(void){ int a; scanf("%d", &a); printf("该数的位数为%d\n", (a/10==0?1:(a/100==0?2:(a/1000==0?3:(a/10000==0?4:5))))); printf("%d", a%10); if(a%100/10 != 0){ printf("%d", a%100/10); } if(a%1000/100 != 0){ printf("%d", a%1000/100); } if(a%10000/1000 != 0){ printf("%d", a%10000/1000); } if(a/10000 != 0){ printf("%d", a/10000); } printf("\n"); return 0; } ``` ### 选择结构-3 ![image-20250220230133563](https://yp.smallkun.cn/markdown/image-20250220230133563.png!compress) ```c #include int main(void){ float a, b, result; int flag; printf("请输入两个数字:"); scanf("%f %f", &a, &b); printf("请输入您要进行的操作(1.做加法 2.做乘法 3.做除法):"); scanf("%d", &flag); switch(flag){ case 1:result = a+b;break; case 2:result = a*b;break; case 3:result = a/b;break; } printf("结果为%f\n", result); return 0; } ``` ### 选择结构-4 ![image-20250220230626411](https://yp.smallkun.cn/markdown/image-20250220230626411.png!compress) ```c #include int main(void){ int year, month, day, days=0; scanf("%d-%d-%d", &year, &month, &day); days+=day; //1 3 5 7 8 10 12 //从前一个月开始依次 switch(month-1){ case 11:days+=30; case 10:days+=31; case 9:days+=30; case 8:days+=31; case 7:days+=31; case 6:days+=30; case 5:days+=31; case 4:days+=30; case 3:days+=31; case 2:days+=28; case 1:days+=31; } if(month>3 && (year%4==0&&year%100!=0 || year%400==0)){ days++; } printf("%d\n", days); return 0; } ``` --- ## 循环结构 ### 循环结构-1 ![image-20250220230645828](https://yp.smallkun.cn/markdown/image-20250220230645828.png!compress) ```c #include /* 1.解决字符的循环输入 while((ch=getchar())!='\n') 2.判断字符类型 ASCALL码范围 */ int main(){ char ch; int l, d, o;//l字母的个数 d为数字个数 o为其他字符个数 l=d=o=0; while((ch=getchar()) != '\n'){ if(ch >= 'a' && ch<='z' || ch >= 'A' && ch<='Z' ){ l++; }else if(ch >= '0' && ch <= '9'){ d++; }else{ o++; } } printf("字母个数:%d 数字个数:%d 其他个数%d\n", l, d, o); return 0; } ``` ### 循环结构-2 ![image-20250220230945704](https://yp.smallkun.cn/markdown/image-20250220230945704.png!compress) ```c /* 暴力求解+枚举每一个台阶 for(i=0;i<1000;i++){ } i=0; while(i<1000){ i++; } && || ! 表达式1&&表达式2 左右都为真才为真 短路运算 表达式1为假 表达式2直接不运算 直接为假 */ #include int main(){ int i; for(i=0;i<1000;i++){ if(i%2==1 && i%3==2 && i%5==4 && i%6==5 && i%7==0){ printf("台阶数为%d\n", i); break; } } return 0; } ``` ### 循环结构-3 ![image-20250220230952843](https://yp.smallkun.cn/markdown/image-20250220230952843.png!compress) ```c #include /* 大马:i 中马:j 小马:k */ int main(){ int i, j , k; for(i=0;i<=33;i++){ for(j=0;j<=50;j++){ for(k=0;k<=200;k+=2){ if(i+j+k==100 && i*3 + j*2 + k/2 == 100){ printf("大马:%-2d 中马:%-2d 小马:%-2d\n", i, j, k); } } } } return 0; } ``` ### 循环结构-4 ![image-20250220231000056](https://yp.smallkun.cn/markdown/image-20250220231000056.png!compress) ```c #include int main(){ int i, s, t;//i用来遍历所有数, s用来存储数的位数,t是截取掉最高位之后的数 for(i=1;i<9999;i++){ t = i; while(t > 0){ s = (t/10==0?1:(t/100==0?2:(t/1000==0?3:4)));//求出这个数字位数 t = i%(int)pow(10, s-1);//使用模除去掉最高位 if(t*t == i){ printf("%d:%d\n", t, i); } } } return 0; } ``` ### 循环结构-5 ![image-20250220231006104](https://yp.smallkun.cn/markdown/image-20250220231006104.png!compress) ```c #include int main(){ /* int x, n, t=1;//t为2当前需要加入的位置 scanf("%d", &x); n = x;//处理之后数 while(t < x){//判断位置是否超过的数的范围 n+=t*2; //根据当前输入位置判断前一位是否溢出如果溢出则减一 if(n/(t*10) != x/(t*10)){ n-=(t*10); } t*=10;//继续处理下一位 } printf("%d:%d\n", x, n); */ int x, s = 0; scanf("%d", &x); while(x){ s*=10; s += (x%10+2)%10; x /= 10; } for(;s;s/=10){ printf("%d", s%10); } return 0; } ``` ### 循环结构-6 ![image-20250220231012110](https://yp.smallkun.cn/markdown/image-20250220231012110.png!compress) ```c #include int main(){ int i; for(i=5;i<=100;i++){ if(i%5==0 || i%7==0){ printf("%d ", i); } } return 0; } ``` ### 循环结构-7 ![image-20250220231022607](https://yp.smallkun.cn/markdown/image-20250220231022607.png!compress) ```c #include int main(){ int month, total = 2, i; scanf("%d", &month); for(i=1;i<=month;i++){ if(i%3==0){ total *= 2; } printf("%d月:%d个数\n", i, total); } return 0; } ``` ### 循环结构-8 ![image-20250220231027969](https://yp.smallkun.cn/markdown/image-20250220231027969.png!compress) ```c #include int main(){ int i, j, k; for(i=0;i<=3;i++){ for(j=1;j<=5;j++){ for(k=0;k<=6;k++){ if(i+j+k==8){ printf("红:%d 白:%d 黑:%d\n", i, j, k); } } } } return 0; } ``` ### 循环结构-9 ![image-20250220231034218](https://yp.smallkun.cn/markdown/image-20250220231034218.png!compress) ```c #include int main(){ int num, n=2, first = 1; scanf("%d", &num); printf("%d=",num); while(num > 1){ if(num%n==0){ first?printf("%d", n):printf("*%d", n); first=0; num/=n; }else{ n++; } } return 0; } ``` ### 循环结构-10 ![image-20250220231039716](https://yp.smallkun.cn/markdown/image-20250220231039716.png!compress) ```c #include int main(){ int x; while(1){ scanf("%d", &x); if(x == 0){ break; } printf("%d:%s\n", x, (x%5==0&&x%7==0?"Yes":"No")); } return 0; } ``` --- ## 数组 ### 数组-1 ![image-20250220231426147](https://yp.smallkun.cn/markdown/image-20250220231426147.png!compress) ```c #include int main(){ int num[30], i, j; float result[6]; for(i=0;i<30;i++){ num[i] = 2+2*i; } for(i=0;i<30;i+=5){ result[i/5] = (num[i]+ num[i+1] + num[i+2] + num[i+3] + num[i+4])/5.0; } for(i=0;i<6;i++){ printf("%.2f ", result[i]); } printf("\n"); return 0; } ``` ### 数组-2 ![image-20250220231434409](https://yp.smallkun.cn/markdown/image-20250220231434409.png!compress) ```c #include int fib(int n){ if(n== 0 || n==1){ return 1; } return fib(n-1) + fib(n-2); } int main(){ int num[15], i; for(i=0;i<15;i++){ num[i] = fib(i); } for(i=0;i<15;i++){ printf("%d ", num[i]); } printf("\n"); return 0; } /* int main(){ int num[15] = {1, 1}, i; for(i=2;i<15;i++){ num[i] = num[i-1] + num[i-2]; } for(i=0;i<15;i++){ printf("%d ", num[i]); } printf("\n"); return 0; } */ ``` ### 数组-3 ![image-20250220231441384](https://yp.smallkun.cn/markdown/image-20250220231441384.png!compress) ```c #include #include int main(){ char a[200], b[200];//定义两个字符数组用来读取字符串a和b char *p, *q;//定义两个指针 分别存储字符串a和字符串b的首地址 gets(a); gets(b);//从控制台获取输入 if(strlen(b) > 5){ b[5] = '\0'; }//判定字符串是否大于5 如果大于5 则将第六个元素改成结束符 p = a;//p指向a的首地址 q = b;//q指向b的首地址 while(*p != '\0'){//找到a结束符位置的地址 p++; } //从b的第一个元素开始赋值到a中 while(*q != '\0'){ *p++ = *q++; } *p = '\0';//标记结束符 printf("a=%s\n", a); printf("b=%s\n", b); return 0; } ``` ### 数组-4 ![image-20250220231447834](https://yp.smallkun.cn/markdown/image-20250220231447834.png!compress) ```c #include #include #include int main(){ int num[10], i; srand((unsigned)time(NULL)); for(i=0;i<10;i++){ num[i] = rand()%101; printf("%d ", num[i]); } printf("\n"); return 0; } ``` ### 数组-5 ![image-20250220231704799](https://yp.smallkun.cn/markdown/image-20250220231704799.png!compress) ```c #include #include #include #include //里面定义了基本数据类型的最大值和最小值 int main(){ int num[3][4], i, j, min=INT_MAX, i_index, j_index; srand((unsigned)time(NULL)); for(i=0;i<3;i++){ for(j=0;j<4;j++){ num[i][j] = rand()%101; printf("%2d ", num[i][j]); if(num[i][j] < min){ min = num[i][j]; i_index = i; j_index = j; } } printf("\n"); } printf("min=%d i=%d j=%d\n", min, i_index, j_index); return 0; } ``` --- ## 函数 ### 函数-1 ![image-20250227231121624](https://yp.smallkun.cn/markdown/image-20250227231121624.png!compress) ```c #include #include #include /* 1 2 3 |6 4 5 6 |15 7 8 9 |24 ------------- 12 15 18 */ void getSum(int array[100][100], int n, int m){ int i, j, sum; for(i=0;i void change(char *p){ //alex apple *p++ -= 32;//a-> -32 ->A while(*p != '#'){ if(*(p-1) == ' '){ *p -= 32; } p++; } *p = '\0'; } int main(){ char str[1024]; gets(str);//读取一行字符串 回车判定结束 change(str); puts(str); return 0; } ``` ### 函数-3 ![image-20250227231154429](https://yp.smallkun.cn/markdown/image-20250227231154429.png!compress) ```c #include //幂次方 int power(int n){ int s = 1, i; for(i=1;i<=n;i++){ s *= 2; } return s; } //阶乘 int factorial(int n){ int s = 1, i; for(i=1;i<=n;i++){//1~n s*=i; } return s; } int main(){ int n, i, s = 0; scanf("%d", &n); for(i=1;i<=n;i++){ s += power(i) * factorial(i); } printf("%d\n", s); return 0; } ``` ## 指针 ### 指针-1 ![image-20250227231209008](https://yp.smallkun.cn/markdown/image-20250227231209008.png!compress) ```c #include int main(){ int a[10], b[10]; int i; int *p, *q; for(i=0, p=a;i<10;i++){ scanf("%d", p++); } for(i=0, p=a, q=b;i<10;i++){ if(*p%2==0){ *q++=*p; } p++; } for(i=0, p=b;i /* 1 2 3 4 5 6 7 8 9 10 1 3 4 5 6 7 8 9 10 */ int main(){ int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int n = 10; int i; int *p, *q; p = a+1; q = a+2; for(i=0;i<8;i++){//用来控制循环的次数 *p++ = *q++; } n--; for(i=0;i