class-notes/2207/C语言同步练习答案.md
2025-02-28 08:51:47 +08:00

10 KiB

选择结构

选择结构-1

image-20250220225958223

#include <stdio.h>

/*
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

#include <stdio.h> 

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>


/*
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

/*
暴力求解+枚举每一个台阶
for(i=0;i<1000;i++){
		
}
i=0;
while(i<1000){
	
	i++;
}
&& || !
表达式1&&表达式2
左右都为真才为真
短路运算 表达式1为假 表达式2直接不运算 直接为假 
*/

#include <stdio.h>

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

#include <stdio.h>
/*
大马: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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>

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

#include <stdio.h>
#include <string.h>

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

数组-5

image-20250220231704799


函数

函数-1

image-20250227231121624

函数-2

image-20250227231147113

函数-3

image-20250227231154429

指针

指针-1

image-20250227231209008

指针-2

image-20250227231216409

指针-3

image-20250227231232971

指针-4

image-20250227231243197

编译预处理

预处理-1

image-20250227231302316

预处理-2

image-20250227231314793

预处理-3

image-20250227231325297

结构体

结构体-1

image-20250227231339018

结构体-2

image-20250227231421233

结构体-3

image-20250227231434183

文件

文件-1

image-20250227231459946

文件-2

image-20250227231509693

文件-3

image-20250227231516025