啦啦!记录学校C语言作业

一级目录

二级目录

三级目录

第四章

第五章 数组

1.使用for循环输入10个整数存入一维数组a中,统计奇数和偶数的个数。
#include<stdio.h>

int main()
{
	int i;
	int a[10];
	int count1 = 0,count2 = 0;
	//count1表示记录偶数个数
	for (i = 0; i < 10; i++)
	{
		scanf("%d",&a[i]);
		if (a[i] % 2 == 0)
		{
//当然你也可以在这个for循环外面再用一个for进行统计
//奇数和偶数的个数
			count1++;
		}
		else
			count2++;
	}
	
	//输出
	printf("奇数有%d个\n偶数有%d个",count2,count1);
	return 0;
}
2.使用for循环输入10个整数存入一维数组a中,找出其中的最大数及其下标位置、最小数及其下标位置。若存在相同的则报告首次出现的最大数或最小数。
#include<stdio.h>

int main()
{
	int a[10];
	int i;
	int max,min,maxr,minc;//定义变量
	for (i = 0; i < 10; i++)
	{
		scanf("%d",&a[i]);
	}
	
	max = a[0];
	min = a[0];
	maxr = 0;
	minc = 0;//当然你也可以连等于max = min = a[0]; maxr = minc = 0;
	for (i = 0; i < 10; i++)
	{
		if (max < a[i])//最大值不是我们假设的数字
		{
			max = a[i];
			maxr = i;
		}
		if (min > a[i])//这边同理
		{
			min = a[i];
			minc = i;
		}
	}

	//输出数据
	printf("最大数=%d 下标=%d\n最小数=%d 下标=%d",max,maxr,min,minc);
	return 0;

}
4.使用for循环输入10个整数存入一维数组a中,查找指定数是否存在(输出“存在”或“不存在”)。
#include<stdio.h>

int main()
{
	int i;
	int a[10];
	int n;
	for (i = 0; i < 10; i++)
	{
		scanf("%d",&a[i]);
	}//先录入数组中的元素
	scanf("%d",&n);//这边录入n值

	for (i = 0; i < 10; i++)//
	{
		if (n == a[i])
		{
			printf("存在");
			return 0;//结束函数
		}
			
	}
	//如果上面的for循环找不到n那么这边直接打印不存在
	//此时i = 10
	printf("不存在");
	return 0;
}
5.使用for循环实现: 将裴波那契数列的前12项存入一维数组a中并以4个一行的形式输出,每个数据占4个位置且右对齐。
#include<stdio.h>
int main()
{
	int a[12] = { 1,1,2,3,5,8,13,21,34,55,89,144};
	int i;
	int count = 0;//计数
	for (i = 0 ; i < 12; i++)
	{
		printf("%4d",a[i]);
		count++;
		if (count % 4 == 0)//能被四整除就换行
			printf("\n");
	}
	return 0;
}


6.使用for循环实现: 输入10个整数存入一维数组a中,将数组中的数据循环左移一个位置后输出,每个数据后跟一个空格。
#include<stdio.h>
int main()
{
	int a[10];
	int i;
	int tmp;
	//录入数据
	for (i = 0; i < 10; i++)
	{
			scanf("%d",&a[i]);
	}
	tmp = a[0];//记录数组第一个元素
	for (i = 1; i < 10; i++)
	{
		a[i - 1] = a[i];
	}
	a[9] = tmp;//改变最后一个元素的值
	for (i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}


7.使用for循环实现: 输入10个整数存入一维数组a中,将数组中的数据循环右移一个位置后输出(每个数据后跟一个空格)。
#include<stdio.h>
int main()
{
	int a[10];
	int i;
	int tmp;
	//录入数据
	for (i = 0; i < 10; i++)
	{
			scanf("%d",&a[i]);
	}
	tmp = a[9];//记录数组最后一个元素
	for (i = 9; i > 0; i--)
	{
		a[i] = a[i - 1];
	}
	a[0] = tmp;//改变第一个元素的值
	for (i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}


8.使用for循环实现: 输入10个成绩模拟10位选手的最后得分,输出各选手的名次(每个数据后跟一个空格)。
#include<stdio.h>
int main()
{
	int a[10];
	int b[10] = { 1,1,1,1,1,1,1,1,1,1};//建立一个数组,用空间换取时间
	int i,j;
	//录入数据
	for (i = 0; i < 10; i++)
	{
			scanf("%d",&a[i]);
	}
	
	for (i = 0; i < 10; i++)
	{
		
		for (j = 0; j < 10; j++)
		{
			if (a[i] < a[j])
				b[i]++;//名次改变
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ",b[i]);
	}
	return 0;
}


9.使用for循环实现: 输入10个整数存入一维数组a中,将数组中的元素升序排序后输出(每个数据后跟一个空格)
//法一:冒泡排序
#include<stdio.h>
int main()
{
	int a[10];
	int i,j;
	int tmp;
	//录入数据
	for (i = 0; i < 10; i++)
	{
			scanf("%d",&a[i]);
	}
	
	for (i = 0; i < 9; i++)//趟数
	{
		
		for (j = 0; j < 9 - i; j++)//交换对数
		{
			if ( a[j] > a[j + 1])
			{
				//交换
				tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
```c

```c
//法二:通过试错改正思路
#include<stdio.h>

int main()
{
	int i,j;
	int a[10];
	for (i = 0 ; i < 10; i++)
	{
		scanf("%d",&a[i]);
	}//录入数据
	for(i = 0; i < 10; i++)//2
	{
		for (j = 0; j < 9; j++)
		{
			if (a[j] > a[j + 1])//
			{
				int tmp = a[j + 1];
				a[j + 1] = a[j];
				a[j] = tmp;
			}
		}
	}
	
	//输出数据
	for(i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
10.使用for循环实现: 输入16个整数组成4*4的矩阵,输出矩阵的所有元素之和。
#include<stdio.h>

int main()
{
	int a[4][4];
	int sum = 0;
	//第一个中括号代表的为行数,第二个代表的为列数,其中第一个括号中的内容可以省略
	int i,j;
	for (i = 0 ;i < 4; i++)//控制行
	{
		for (j = 0; j < 4; j++)//控制列
		{
			scanf("%d",&a[i][j]);
		}
	}
	//求和部分
	for (i = 0 ;i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			sum += a[i][j];//等价于sum = sum + a[i][j];
		}
	}
	//输出结果部分
	printf("%d",sum);
	return 0;

}
15.相信看了16题你应该就有思路了
16.使用for循环实现: 输入16个整数组成4*4的矩阵,输出最小值及其所在位置。若有多个最小值则报告首次出现的位置。
#include<stdio.h>

int main()
{
	int a[4][4];
	int i,j;
	int min,row,col;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	min = a[0][0];
	row = col = 0;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (min > a[i][j])//我们假设的不是最小值,那改变最小值
			{
				min = a[i][j];
				row = i;
				col = j;
			}
		}
	} 
	//输出
	printf("第%d行第%d列\n%d",row,col,min);
	return 0;

}
21.使用函数scanf("%s",字符地址)输入三个字符串分别存入s1、s2和s3中,然后使用strcat函数将三个字符串拼接在一起存入s4中并使用printf("%s",字符地址)输出。
#include<stdio.h>
#include<string.h>

int main()
{
	char s1[20];
	char s2[20];
	char s3[20];
	char s4[60] = "";//这边要变为空字符串
	//输入字符串
	scanf("%s",s1);//s1是数组名字,数组名表示的是首元素的地址,所以就不用&了
	scanf("%s",s2);
	scanf("%s",s3);

	//追加字符串
	strcat(s4,s1);//strcat函数的使用为将源字符串s1追加到目的地字符串s4上去
	strcat(s4,s2);
	strcat(s4,s3);
	printf("%s",s4);
	return 0;
}
22.使用函数scanf("%s",字符地址)输入一个长度小于100的字符串,将所有的大写字母转换为小写字母,小写字母转换为大写字母,其他字符不变,最后使用printf("%s",字符地址)输出。
#include<stdio.h>
#include<string.h>

int main()
{
	char s[100];//创建字符串数组,满足题干所说的条件,字符串数组的长度小于100
	int i;
	scanf("%s",s);
	//strlen函数求的是字符串s的长度,字符串长度结束的表示是'\0'
	//使用需要引头文件string.h
	for (i = 0 ; i < strlen(s); i++)
	{
		//大写字母转换为小写字母
		if ('A' <= s[i] && s[i] <= 'Z')
			s[i] += 32;//根据ASCII码表我们知道,对于一个大小写之间的转换其实是满足 大写字母 + 32 = 小写字母
		//小写字母转换为大写字母
		else if('a' <= s[i] && s[i] <= 'z')
			s[i] -= 32;//小写字母转为大写字母满足关系
		
		//对于其他字符我们就不管他了
	}
	printf("%s",s);
	return 0;
}
23.使用函数scanf("%s",字符地址)输入一个长度小于100的字符串,统计其中大写字母、小写字母、数字以及其他字符的个数。
#include<stdio.h>
#include<string.h>

int main()
{
	char s[100];//创建字符串数组,满足题干所说的条件,字符串数组的长度<100
	int count_C = 0;//计数大写
	int count_L = 0;//计数小写
	int count_N = 0;//计数数字
	int count_O = 0;//计数其他字符
	int i;
	scanf("%s",s);
	//strlen函数求的是字符串s的长度,字符串长度结束的表示是'\0'
	//使用需要引头文件string.h
	for (i = 0 ; i < strlen(s); i++)
	{
		//大写字母转换为小写字母
		if ('A' <= s[i] && s[i] <= 'Z')
			count_C++;														
		//小写字母转换为大写字母
		else if('a' <= s[i] && s[i] <= 'z')
			count_L++;
		else if ('0' <= s[i] && s[i] <= '9')
			count_N++;
		else
			count_O++;	
	}
	printf("大写%d个\n",count_C);
	printf("小写%d个\n",count_L);
	printf("数字%d个\n",count_N);
	printf("其他%d个",count_O);
	return 0;
}
24.使用函数gets输入一个长度小于100的字符串,统计其中英文字母、数字以及其他字符的个数。
#include<stdio.h>
#include<string.h>

int main()
{
	char s[100];//创建字符串数组,满足题干所说的条件,字符串数组的长度<100
	int count_A = 0;//计数字母
	int count_N = 0;//计数数字
	int count_O = 0;//计数其他字符
	int i;
	gets(s);
	//strlen函数求的是字符串s的长度,字符串长度结束的表示是'\0'
	//使用需要引头文件string.h
	for (i = 0 ; i < strlen(s); i++)
	{
		//满足字母的条件
		if (('A' <= s[i] && s[i] <= 'Z') || ('a' <= s[i] && s[i] <= 'z'))
			count_A++;														
		//满足数字的条件
		else if ('0' <= s[i] && s[i] <= '9')
			count_N++;
		else
			count_O++;	
	}
	printf("字母%d个\n",count_A);
	printf("数字%d个\n",count_N);
	printf("其他%d个",count_O);
	return 0;
}
25.使用函数gets输入一个长度小于100的字符串,将所有的大写字母转换为小写字母,小写字母转换为大写字母,其他字符不变,最后使用puts输出字符串。
#include<stdio.h>
#include<string.h>

int main()
{
	char s[100];//创建字符串数组,满足题干所说的条件,字符串数组的长度小于100
	int i;
	gets(s);
	//strlen函数求的是字符串s的长度,字符串长度结束的表示是'\0'
	//使用需要引头文件string.h
	for (i = 0 ; i < strlen(s); i++)
	{
		//大写字母转换为小写字母
		if ('A' <= s[i] && s[i] <= 'Z')
			s[i] += 32;//根据ASCII码表我们知道,对于一个大小写之间的转换其实是满足 大写字母 + 32 = 小写字母
		//小写字母转换为大写字母
		else if('a' <= s[i] && s[i] <= 'z')
			s[i] -= 32;//小写字母转为大写字母满足关系
		
		//对于其他字符我们就不管他了
	}
	puts(s);//puts输出字符串的函数,其参数是一个指向字符串的指针p
	return 0;
}
26.使用函数gets输入一个长度小于100的字符串,统计其中每个字母(不区分大小写)出现的次数。
#include<stdio.h>
#include<string.h>
int main()
{
	int a[26] = { 0 };
	char s[100];
	int i = 0;
	int j = 0;
	gets(s);//AaCB
	
	for (j = 0; j < strlen(s); j++)
	{
		if (s[j] >= 'a' && s[j] <= 'z')
			s[j] -= 32;//因为有大小写,所以我们先全部转为大写
		//当然我们可以使用strcpy来拷贝一份字符串,这样就可以避免改变原字符串了
		a[s[j] - 65]++;
	}
	//打印数据
	for (i = 0; i < 26; i++)
	{
			if(a[i] > 0)
				printf("%c:%d\n",i + 65,a[i]);
	}
	return 0;
}
27.使用函数gets输入一个长度小于100的字符串,统计其中每个数字出现的次数。
#include<stdio.h>
#include<string.h>
int main()
{
	char s[100];
	int a[10] = { 0 };
	int i;
	gets(s);//1345
	for (i = 0; i < strlen(s); i++)
	{
		a[s[i] - '0']++;//'9' - '0' = 9
		//数字9和字符9有很大区别
	}
	/*for (i = 0; i < strlen(s); i++)
	{
		printf("%d:%d\n",s[i] - '0',a[s[i] - '0']);
	}*/
	//上面的这种方法是依靠字符串s的长度来打印数据
	//会有重复的,所以我们换思路

	for (i = 0; i < 10; i++)
	{
		if (a[i] > 0)
			printf("%d:%d\n",i,a[i]);
	}
	return 0;

}

第六章 其他数据类型

1.定义一个结构体类型STUDENT,包含5个成员:学号、姓名、数学、英语和计算机(学号和姓名定义为字符数组类型,三门成绩定义为整型)。
定义一个结构体类型变量存放一位学生的信息,输入学生的学号、姓名、数学、英语和计算机成绩,输出其平均分(保留两位小数)。
#include<stdio.h>
struct STUDENT
{
	char num[20];
	char name[20];
	int Mat;
	int Eng;
	int Com;
};

int main()
{
	struct STUDENT st;//定义结构体数组
	float ave = 0;
	scanf("%s%s%d%d%d",st.num,st.name,&st.Mat,&st.Eng,&st.Com);
	ave = (st.Mat + st.Eng + st.Com) / 3.0;
	printf("%s%s的平均分是%.2f",st.num,st.name,ave);
	
	return 0;
}
2.定义一个结构体类型STUDENT,包含5个成员:学号、姓名、数学、英语和计算机(学号和姓名定义为字符数组类型,三门成绩定义为整型)。
定义一个结构体类型数组存放3位学生的信息,依次输入他们的学号、姓名、数学、英语和计算机成绩,以列表形式输出3位学生的学号、姓名、数学、英语、计算机、平均成绩(保留两位小数)。
#include<stdio.h>
struct STUDENT
{
	char num[20];
	char name[20];
	int Mat;
	int Eng;
	int Com;
};

int main()
{
	struct STUDENT st[3];//定义结构体数组
	int i;
	float ave = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%s%s%d%d%d",st[i].num,st[i].name,&st[i].Mat,&st[i].Eng,&st[i].Com);
	}
	for (i = 0; i < 3; i++)
	{
		ave = (st[i].Mat + st[i].Eng + st[i].Com) / 3.0;
		printf("%s\t%s\t%d\t%d\t%d\t%.2f\n",st[i].num,st[i].name,st[i].Mat,st[i].Eng,st[i].Com,ave);
	}
	
	return 0;
}
3.定义一个枚举类型WEEKDAY,用0~6代表Sunday(星期日)~Saturday(星期六)。编写程序,从键盘输入0~6的任意一个整数,输出对应的星期几。
#include<stdio.h>
enum WEEKDAY//定义枚举类型 WEEKDAY
{
	Sunday,
	Monday,
	Tuesday,
	Wednesday,
	Thurday,
	Friday,
	Saturday
};
int main()
{
	int input;
	scanf("%d",&input);
	switch(input)
	{
		case Sunday:
		{
			printf("Sunday");
			break;
		}
		case Monday:
		{
			printf("Monday");
			break;
		}
		case Tuesday:
		{
			printf("Tuesday");
			break;
		}
		case Wednesday:
		{
			printf("Wednesday");
			break;
		}
		case Thurday:
		{
			printf("Thurday");
			break;
		}
		case Friday:
		{
			printf("Friday");
			break;
		}
		case Saturday:
		{
			printf("Saturday");
			break;
		}
	}
	return 0;
}

第七章 函数

1.
(1)编写函数Add,返回整数x与y的和。
(2)编写函数Sub,返回整数x与y的差。
(3)编写函数main,输入整数a和b的值,输出它们的和与差。
#include<stdio.h>

int Add(int x,int y)
{
	return x + y;
}
int Sub(int x,int y)
{
	return x - y;
}
int main()
{
	int x,y;
	scanf("%d%d",&x,&y);
	printf("%d+%d=%d\n",x,y,Add(x,y));
	printf("%d-%d=%d",x,y,Sub(x,y)); 
	return 0;
}
2.
(1)编写函数Max,返回整数x和y中较大值。
(2)编写函数Min,返回整数x和y中较小值。
(3)编写函数main,输入整数a和b的值,输出它们的最大值和最小值。
#include<stdio.h>

int Max(int x,int y)
{
	return x > y ? x : y;//三木操作符实现比较大小
}
int Min(int x,int y)
{
	return x < y ? x : y;
}
int main()
{
	int x,y;
	scanf("%d%d",&x,&y);
	printf("最大值=%d\n",Max(x,y));
	printf("最小值=%d",Min(x,y)); 
	return 0;
}
3.
(1)编写函数Flower,判断整数N是否为水仙花数。若是水仙花数则返回1,否则返回0。
(2)编写函数main,找出100至999之间的水仙花数(一个一行)。
#include<stdio.h>

int Flower(int n)
{
	int a,b,c,tmp;
	tmp = n;
	a = n % 10;
	n /= 10;
	b = n % 10;
	n /= 10;
	c = n % 10;
	//上面分别找出个位十位百位数字
	if (tmp == a * a * a + b * b * b + c * c * c)
		return 1;
	return 0;

}
int main()
{
	int i;
	for (i = 100; i < 1000; i++)
	{
		if (Flower(i) == 1)
			printf("%d\n",i);
	}
	return 0;
}
4.
(1)编写函数Reverse,判断整数N是否为回文数。若是回文数则返回1,否则返回0。
(2)编写函数main,输出10~999之间的回文数,每个数据后跟一个空格且5个一行。
#include<stdio.h>

int Reverse (int n)
{
	int sum = 0;
	int tmp = n;
	while(tmp)
	{
		sum = sum * 10 + tmp % 10;//逆序数字
		tmp /= 10;
	}
	if (sum == n)
		return 1;
	return 0;
}
int main()
{
	int i;
	int count = 0;
	for (i = 10; i < 1000; i++)
	{
		if (Reverse(i) == 1 )
		{
			count++;
			printf("%d ",i);
			if (count % 5 == 0)//判断5个一行,一定要放在第一个if里面,不然会出错
				printf("\n");
		}
	}
	return 0;
}
5.
(1)编写函数Perfect,判断整数N是否为完全数。若是完全数则返回‘Y’,否则返回‘N’。
(2)编写函数main,找出100以内的完全数,输出时每个数据后跟一个空格。
#include<stdio.h>

char Perfect(int n)//这边注意返回值类型是char类型
{
	int sum = 0;
	int i;
	for (i = n - 1; i >= 1; --i)
	{
		if (n % i == 0)//找出每个n中(除自身以外)的因数
			sum += i;
	}
	if (sum == n)
		return 'Y';
	return 'N';//没找到
}
int main()
{
	int i;
	for (i = 1; i <= 100; i++)
	{
		if (Perfect(i) == 'Y')
		{
			printf("%d ",i);
		}
	}
	return 0;
}
6.
(1)编写函数Fact,求n的阶乘。
(2)编写函数main,输入两个整数a和b,输出它们的阶乘差,即a!-b!。
#include<stdio.h>

//法一:循环
int Fact(int n)
{
	int i;
	int mul = 1;
	for (i = 2; i <= n; i++)
	{
		mul *= i;//实现阶乘
	}
	return mul;
}
//法二:递归实现

int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d",Fact(a) - Fact(b));
	return 0;
}
7.1)编写函数Fact,求n的阶乘。
(2)编写函数Comb,求组合数C(m,n)。
(3)编写函数main,输入m和n,输出组合数C(m,n)的值。
#include<stdio.h>


int Fact(int n)
{
	int i,mul = 1;
	for (i = 2; i <= n; i++)
	{
		mul *= i;
	}
	return mul;
}

int Comb(int a,int b,int c)
{
	return a / (b * c);//组合数运算法则

}

int main()
{
	int m,n;
	scanf("%d%d",&n,&m);
	printf("%d",Comb(Fact(n),Fact(m),Fact(n - m)));
	return 0;
}
8.1)编写函数Fun,返回下图公式的值(其中m为整数)。
(2)编写函数main,输入整数m,输出下图公式的值(保留两位小数)。
#include<stdio.h>


float Fun(int a)
{
	int i;
	int flag = -1;
	float sum = 1.0;//注意sum的类型
	for (i = 2; i <= a; i++)
	{
		sum +=  flag * (1.0 / (i * i));
	}
	return sum;
}

int main()
{
	int m,n;
	scanf("%d",&m);
	printf("%.2f",Fun(m));//注意保留几位 小数
	return 0;
}
9.1)编写函数Fun,返回1+2+3+...+n 的值(其中n为整数)
(2)编写函数main,输出下图公式的值(保留两位小数)。
#include<stdio.h>

int Fun(int a)
{
	int i;
	int sum = 1;//注意sum的类型
	for (i = 2; i <= a; i++)
	{
		sum += i;
	}
	return sum;
}

int main()
{
	int m;
	float sum = 1.0;
	int i;
	for (i = 2; i <= 100; i++)
	{
		sum += 1.0 / Fun(i);
	}
	printf("%.2f",sum);//注意保留几位 小数
	return 0;
}
10.1)根据图中递归定义形式,编写递归函数Fun,求n的阶乘。
(2)编写main函数实现:输入n,输出n的阶乘n!
#include<stdio.h>


int Fun(int a)
{
	if (a < 2)
		return 1;
	else
		return a * Fun(a - 1);
}

int main()
{
	int m;
	scanf("%d",&m);
	printf("%d",Fun(m));
	return 0;
}
11.
1)根据图中递归定义形式,编写递归函数Fun,求1+2+3+...+n 的和。
(2)编写main函数实现:输入n,输出1+2+3+...+n的和。
#include<stdio.h>


int Fun(int a)
{
	if (a == 1)
		return 1;
	else
		return a + Fun(a - 1);
}

int main()
{
	int m;
	scanf("%d",&m);
	printf("%d",Fun(m));
	return 0;
}
12.1)编写函数IsPrime,判断整数N是否为素数;
(2)编写函数IsAsc,判断一个两位整数N是否为升序数。
(3)编写函数main,输出1050之间的素数、孪生素数、升序素数。孪生素数是指相差为2的两个素数,如3557
#include<stdio.h>


int IsPrime(int a)
{
	int i;
	for (i = 2; i < a; i++)
	{
		if (a % i == 0)
			return 0;
	}
	return 1;
}

int IsAsc(int a)
{
	int x = a / 10;
	int y = a % 10;
	return x < y ? 1 : 0;
}

int main()
{
	int i;
	printf("素数:");
	for (i = 10; i <= 50; i++)
	{
		if (IsPrime(i))
			printf("%d ",i);
	}
	printf("\n孪生素数:");

	for (i = 10; i <= 50; i++)
	{
		if (IsPrime(i) && IsPrime(i + 2))
			printf("%d和%d ",i,i + 2);
	}
	printf("\n升序素数:");
	for (i = 10; i <= 50; i++)
	{
		if (IsPrime(i)&& IsAsc(i))
			printf("%d ",i);
	}
	return 0;
}
13.
练习一维数组作为函数参数:
(1)编写函数Input,实现输入n个整数存入一维数组a;
(2)编写函数Output,实现输出一维数组a的n个元素;
(3)编写函数GetMax,找出一维数组a的n个元素中的最大值;
(4)编写函数GetMin,找出一维数组a的n个元素中的最小值;
(5)编写函数Sort,实现对一维数组a的n个元素升序排列;
(6)编写主函数main(内容如下)调用上述函数,实现输入10个整数,输出其中的最大值和最小值,并将10个数升序排列输出。
int main( )
{
   int b[N];
   Input(b);
   printf("排序前:");
   Output(b);
   printf("最大=%d\n",GetMax(b));
   printf("最小=%d\n",GetMin(b));
   Sort(b);
   printf("排序后:");
   Output(b);
}

#include<stdio.h>
#define N 10

void Input(int* b)
{
	int i;
	for (i = 0; i < N; i++)
	{
		scanf("%d",&b[i]);
	}
}

void Output(int* b)
{

	int i;
	for (i = 0; i < N; i++)
		printf("%d ",b[i]);
	printf("\n");
}

int GetMax(int* b)
{
	int Max = b[0];
	int i;
	for (i = 1; i < N; i++)
	{
		if(Max < b[i])
			Max = b[i];
	}
	return Max;
}

int GetMin(int* b)
{
	int Min = b[0];
	int i;
	for (i = 1; i < N; i++)
	{
		if(Min > b[i])
			Min = b[i];
	}
	return Min;
}

void Sort(int* b)
{
	int i,j;
	for (i = 0; i < N - 1; i++)
	{
		for (j = 0; j < N - 1 - i; j++)
		{
			if (b[j] > b[j + 1])
			{
				int tmp = b[j];
				b[j] = b[j + 1];
				b[j + 1] = tmp;
			}

		}
	}
}

int main( )
{
   int b[N];
   Input(b);
   printf("排序前:");
   Output(b);
   printf("最大=%d\n",GetMax(b));
   printf("最小=%d\n",GetMin(b));
   Sort(b);
   printf("排序后:");
   Output(b);
   return 0;
}

14.1)编写函数PrintStar,输出高为n的等腰三角形。
(2)编写main函数实现:调用PrintStar函数,输入n,输出高为n的等腰三角形。
#include<stdio.h>
void PrintStar(int n)
{
	int i,j;
	for (i = 0; i < n; i++)
	{
		//打印空格
		for (j = 0; j < n - 1 - i; j++)
			printf(" ");
		//打印*
		for (j = 0; j < 2 * i + 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
}

int main()
	
{
	int n;
	scanf("%d",&n);
	PrintStar(n);

	return 0;
}
15.1)根据图1递归定义形式,编写递归函数Fun,求x的n次方。
(2)编写main函数实现:输出图2表达式的值。
#include<stdio.h>

int Fun(int x, int n)

{
	if (n == 0)
		return 1;
	else 
		return x * Fun(x,n - 1);
}

int main()
	
{
	int i;
	int sum = 0;
	for (i = 1; i <= 5; i++)
	{
		sum += Fun(i,i + 1);
	}
	printf("%d",sum);
	return 0;
}
16.1)编写函数IsPrime,判断整数n是否为素数;
(2)验证“歌德巴郝猜想:任意一个大于等于4的偶数可写成两个素数之和”。
#include<stdio.h>

int IsPrime(int a)
{
	int i;
	for (i = 2; i < a; i++)
	{
		if (a % i == 0)
			return 0;
	}
	return 1;
}

int main()
{
	int n,i,j;
	scanf("%d",&n);
	for (i = 2; i <= n / 2; i++)
//	这边j最大值为 n / 2
	{
		for (j = i; j <= n; j++)
		if (IsPrime(i) && IsPrime(j) && i + j == n &&  n >= 4 && n % 2 == 0)
			printf("%d+%d=%d\n",i,j,n);
	}
	return 0;
}
17.1)编写函数IsPrime,判断整数n是否为素数;
(2)验证“歌德巴郝猜想:任意一个大于等于7的奇数可写成三个素数之和”。
#include<stdio.h>

int IsPrime(int a)
{
	int i;
	for (i = 2; i < a; i++)
	{
		if (a % i == 0)
			return 0;
	}
	return 1;
}

int main()
{
	int n,i,j,k;
	scanf("%d",&n);
	for (i = 2; i <= n / 3; i++)//注意这边i最大值为 n / 3
	{
		for (j = i; j <= n; j++)//这边j最大值为 n / 3
		{
			for (k = j; k <= n ; k++) 
			if (IsPrime(i) && IsPrime(j) && IsPrime(k) && n >= 7 && n % 2 == 1 && i + j + k == n)
			printf("%d+%d+%d=%d\n",i,j,k,n);
		}
		
	}
	return 0;
}
18.
练习二维数组作为函数参数:
(1)编写函数Input,实现输入N*N个整数存入二维数组a;
(2)编写函数Output,实现以矩阵形式输出二维数组a;
(3)编写函数Change,实现对二维数组a的转置;
(4)编写主函数main(内容如下),调用上述函数,输入9个整数存入3*3矩阵,输出该矩阵的转置。
int main()
{
	int a[N][N];
	Input(a);
	printf("转置前:\n");
	Output(a);
	Change(a);
	printf("转置后:\n");
	Output(a);
}
#define  N 3
#include<stdio.h>

void Input(int a[][N])//注意函数传参哦
{
	int i,j;
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
			scanf("%d",&a[i][j]);
	}
}

void Output(int a[][N])
{
	int i,j;
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}

void Change(int a[][N])//实现矩阵转置
{
	int i,j;
	for (i = 0; i < N; i++)
	{
		for (j = i + 1; j < N; j++)
		{
			int tmp = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = tmp;
		}
	}
}
int main()
{
	int a[N][N];
	Input(a);
	printf("转置前:\n");
	Output(a);
	Change(a);
	printf("转置后:\n");
	Output(a);
}
19.
使用指针参数编写函数Fun,实现求两个整数的最大公约数和最小公倍数。
编写main实现:输入两个整数,输出它们的最大公约数和最小公倍数。
	#include<stdio.h>
	
	void Fun(int a, int b,int* m, int* n)
	{
		int x = a,y = b;//拷贝a和b的值
		//求最大公约数
		while(*m = a % b)//8 6  *m = 2  a = 6
		{
			a = b;
			b = *m;
		}
		*m = b;//其实跳出循环时,b就是我们要的答案,只不过我们为了能够传回去m,就有了这一步

		//求最小公倍数
		*n = x * y / (*m);

	}
	
	int main()
	{
		int a,b;
		int m,n;//m表示最大公约数,n表示最小公倍数
		scanf("%d%d",&a,&b);
		Fun(a,b,&m,&n);
		printf("最大公约数=%d\n最小公倍数=%d",m,n);
		return 0;
	}
20.
使用指针参数编写函数Fun,实现求1+2+3+...+n和1*2*3*...*n。
编写main实现:输入整数n,输出1+2+3+...+n和1*2*3*...*n。
	#include<stdio.h>
	
	void Fun(int n,int* x,int* y)
	{
		int i;
		*x = 0;//累加的
		*y = 1;//累乘的初始值
		for (i = 1; i <= n; i++)
		{
			*x += i;
		}

		for (i = 2; i <= n; i++)
		{
			*y *= i;
		}

	}
	
	int main()
	{
		int n;
		int x,y;//x表示累加值,y表示累乘值
		scanf("%d",&n);
		Fun(n,&x,&y);
		printf("%d\n%d",x,y);
		return 0;
	}
21.1)编写函数Fact,求n的阶乘。
(2)编写函数main,输入m,输出1!+2!+3!+....+m!的值。
#include<stdio.h>
int Fact(int n)
{
	int i;
	int mul = 1;//累乘的初始值
	for (i = 2; i <= n; i++)
	{
		mul *= i;
	}
	return mul;
}
	
	int main()
	{
		int n,i,sum = 0;
		scanf("%d",&n);
		for (i = 1; i <= n; i++)
		{
			sum += Fact(i);
		}
		printf("%d",sum);
		return 0;
	}
  • 23
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
1. 安装C/C++插件 在VS Code中,我们需要安装C/C++插件来支持C语言的开发。打开VS Code,点击左侧的“扩展”按钮,在搜索框中输入“C/C++”,找到Microsoft官方的C/C++插件并安装。 2. 安装编译器 在配置C语言环境之前,我们需要先安装一个编译器。推荐使用MinGW-w64,它是一个基于GNU编译器集的Windows版本。我们可以从官网下载对应的安装包,安装时选择默认选项即可。 安装完成后,我们需要将MinGW-w64的bin目录添加到环境变量中。具体操作为,在Windows系统中,右键点击“我的电脑”或“此电脑”,选择“属性”->“高级系统设置”->“环境变量”,在系统变量中找到“Path”,点击“编辑”,将MinGW-w64的bin目录添加进去,多个路径之间用分号隔开。 3. 配置tasks.json文件 在VS Code中,我们可以通过配置tasks.json文件来设置编译环境和编译命令。在VS Code中,打开一个C语言源文件,按下“Ctrl+Shift+B”快捷键,选择“Create tasks.json file from template”,然后选择“Others”。 这时会在.vscode目录下自动生成一个tasks.json文件。我们需要修改其中的内容,将编译命令修改为我们安装的编译器的路径和参数。例如,如果我们使用的是MinGW-w64,那么tasks.json文件的内容应该类似于下面的代码: ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "gcc", "args": [ "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true } } ] } ``` 其中,"command": "gcc"表示使用gcc编译器,"-g"表示生成调试信息,"${file}"表示当前打开的文件名,"${fileDirname}"表示当前文件所在目录,"${fileBasenameNoExtension}"表示当前文件名去掉后缀名的部分。 4. 编译和运行程序 接下来,我们就可以使用VS Code进行C语言的开发了。在编辑器中打开一个C语言源文件,按下“Ctrl+Shift+B”键,选择“build”命令,即可编译当前文件并生成可执行文件。生成的可执行文件会被保存在当前文件所在目录下。 要运行程序,我们可以在终端中进入可执行文件所在目录,然后输入可执行文件名,按下回车即可运行程序。也可以在VS Code中按下“F5”键,选择“C++(Windows)”,然后按照提示进行配置,最后按下“F5”键即可运行程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值