//返回
第一题
/* 1、从键盘上输入一个五位数,对该数的五个数字进行从大到小排序,形成一个新的五位数输出。例如输入:35287,输出87523
提示:对输入的五位数分解出每一位,放在一个数组中,然后按降序排序,排好后,再组合成一个5位数输出。
*/
/*****************************************************************/
#include <stdio.h>
int main()
{
int num; //输入的五位数
int digits[5]; //存储每个数字
int i, j, temp; //循环变量和临时变量
printf("请输入一个五位数:\n");
scanf_s("%d", &num);
//将每个数字存入数组
for (i = 0; i < 5; i++)
{
digits[i] = num % 10;
num /= 10;
}
//对数组进行冒泡排序,从大到小
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (digits[j] < digits[j + 1])
{
temp = digits[j];
digits[j] = digits[j + 1];
digits[j + 1] = temp;
}
}
}
//将排序后的数组重新组合成一个数
num = 0;
for (i = 0; i < 5; i++)
{
num = num * 10 + digits[i];
}
//输出结果
printf("排序后的五位数是:%d\n", num);
return 0;
}
第二题
/*2、将一个2×3的矩阵进行转置,并输出一个3×2的矩阵。
提示:int a[2][3]={1,2,3,4,5,6};
Int b[3][2];
对于a数组中一个元数a[i][j], 赋值给b[j][i]
*/
/*****************************************************************/
#include <stdio.h>
int main()
{
int a[2][3] = { 1, 2, 3, 4, 5, 6 }; //原始矩阵
int b[3][2]; //转置后的矩阵
int i, j; //循环变量
//对于a数组中的每个元素,赋值给b数组中对应的位置
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
b[j][i] = a[i][j];
}
}
//输出转置后的矩阵
printf("转置后的矩阵是:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
return 0;
}
第三题
/*3、输入一字符串,统计出其数字字符的个数。*/
/*****************************************************************/
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]; //输入的字符串
int len; //字符串的长度
int i; //循环变量
int count = 0; //数字字符的个数
printf("请输入一个字符串:\n");
scanf("%s", str);
//获取字符串的长度
len = strlen(str);
//遍历字符串中的每个字符,判断是否是数字字符
for (i = 0; i < len; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
count++; //如果是数字字符,计数器加一
}
}
//输出结果
printf("字符串中的数字字符个数是:%d\n", count);
return 0;
}
第四题
/*4、输入一英文句子,分解出每一个单词。例如:I am a studengt,分解出4个单词并输出
提示:char str[100],danc[20];gets(str);i=j=0;
While(str[i]!=’ ‘&&str[i]!=’\0’){danc[j++]=str[i];i++}
Danc[j]=’\0’;puts(danc);j=0;
*/
/*****************************************************************/
#include <stdio.h>
#include <ctype.h>
//判断是否是分隔符
int isdelimeter(char ch) {
return ispunct(ch) || isspace(ch); //使用ispunct和isspace函数
}
//提取单词
char* get_token(char* buf, char* token) { //使用指针参数和返回值
while (*buf != '\0' && isdelimeter(*buf)) buf++; //跳过分隔符
while (*buf != '\0' && !isdelimeter(*buf)) { //提取单词
*token = *buf;
buf++;
token++;
}
*token = '\0'; //添加结束符
return buf; //返回下一个位置
}
int main() {
char str[100]; //存储输入的句子
char token[80]; //存储单词
char* p; //指向句子中的位置
int count = 0; //记录单词个数
printf("请输入一个英文句子:\n");
fgets(str, 100, stdin); //使用fgets函数读入句子,直到遇到换行符或者达到最大长度
p = str; //初始化p指向句子开头
while (*p != '\0') { //循环提取单词
p = get_token(p, token); //调用提取单词函数,返回下一个位置
if (*token != '\0') { //如果单词不为空,输出并计数
printf("%s\n", token);
count++;
}
}
printf("单词个数 = %d\n", count); //输出单词个数
return 0;
}
第五题
/*5、编写一个求N!的函数:int fact(int n){....},主函数通过调用这个函数求8 之内的偶数阶乘之和。*/
/*****************************************************************/
#include <stdio.h>
//定义一个求n的阶乘的函数,使用递归的方法
int fact(int n) {
if (n == 1) return 1; //递归的基准情况
else return n * fact(n - 1); //递归的一般情况
}
//定义主函数
int main() {
int n; //输入的n值
int sum = 0; //阶乘之和
printf("请输入一个正整数:\n");
scanf("%d", &n); //读入n
if (n > 8) n = 8; //如果n大于8,就取8
for (int i = 2; i <= n; i += 2) { //从2开始,每次增加2,直到n或者8为止
sum += fact(i); //调用fact函数,将返回值加到sum上
}
printf("8之内的偶数阶乘之和为:%d\n", sum); //输出sum
return 0;
}