//返回第一题 /* 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; }