本文主要是介绍20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises18,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises18
- P137
- P219
- P220
- P221
- P222
20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises18
P137
/*编写一程序P137.C实现以下功能通过键盘输入两个姓名(约定均为汉字且最多4个汉字),判断并输出二者是否同姓。编程可用素材:printf("请输入姓名1: ");printf("请输入姓名2: ");printf("\n“…”与“…”同姓。\n"…);printf("\n“…”与“…”不同姓。\n"…);程序的运行效果应类似地如图1和图2所示,图1和图2中的红色部分是从键盘输入的内容。请输入姓名1: 张李秀吉
请输入姓名2: 张三“张李秀吉”与“张三”同姓。
图1 程序运行效果示例请输入姓名1: 李四菊
请输入姓名2: 张三丰“李四菊”与“张三丰”不同姓。
图2 程序运行效果示例
*/#include <stdio.h>
#include <string.h>#define N 9void test01(char n1[],char n2[]);
void test02(char n1[], char n2[]);int main(void)
{char name1[N];char name2[N];printf("请输入姓名1: ");scanf("%s", name1);printf("请输入姓名2: ");scanf("%s", name2);/* printf("%d", strlen(name1)); // 张李秀吉 === 8printf("%d", strlen(name2)); // 张三 === 4putchar('\n');for (int i = 0; i < strlen(name1);i++){printf("%c ", name1[i]);}for (int i = 0; i < strlen(name2);i++){printf("%c ", name2[i]);} */// /* // 这里,取第一个字符来比较,它是取出来的第一个字符吗?// 第一个字符是汉字字符,是一样的吗?// */// if (name1[0] == name2[0])// {// printf("\n“%s”与“%s”同姓。\n", name1, name2);// }// else// {// printf("\n“%s”与“%s”不同姓。\n", name1, name2);// }// test01(name1, name2); // 这个判断是有问题的test02(name1, name2);return 0;
}/* 应该判断第一个完整的汉字,两个字节"张"的区位码:D5C5"章"的区位码:D5C2取测试数据:“张三” “章三”如果使用方法一test01(),则同姓如果使用方法二test02(),则不同姓*/// 只判断了一个字节,不足一个汉字,但汉字有可能刚好第一个字节一样
void test01(char n1[],char n2[])
{// 只判断了一个字符【半个中文,没有这样的表示方式,只是为了方便理解,暂时这样表述】if (n1[0] == n2[0]){printf("\n“%s”与“%s”同姓。\n", n1, n2);}else{printf("\n“%s”与“%s”不同姓。\n", n1, n2);}
}// 判断了两个字节,足够一个汉字,一定可以区别每一个汉字
void test02(char n1[],char n2[])
{// 判断了一个中文if (n1[0] == n2[0] && n1[1] == n2[1]){printf("\n“%s”与“%s”同姓。\n", n1, n2);}else{printf("\n“%s”与“%s”不同姓。\n", n1, n2);}
}
P219
/*编写一程序P219.C实现以下功能从键盘读入一行字符(约定:字符数≤127字节),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。编程可用素材:printf("Please input string: ");printf("\nshu zi ge shu wei: …);printf("\nshu zi wei: …);程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwafl faf32535as3bf0是从键盘输入的内容。Please input string: gfaskl45623cvsac,53dwafl faf32535as3bf0shu zi ge shu wei: 14
shu zi wei: 45623533253530
图1 程序运行效果示例
*/#include <stdio.h>
#include <string.h>
#define N 127int main(void)
{char str[N];char strData[N] = {'\0'};int i, j = 0;printf("Please input string: ");gets(str);for (i = 0; i < (int)strlen(str); i++) // 注意,这样的写法,效率很差,因为strlen是跑一个循环后给结果{if (str[i] >= '0' && str[i] <= '9'){strData[j++] = str[i];}}printf("\nshu zi ge shu wei: %d", (int)strlen(strData));printf("\nshu zi wei: %s", strData);return 0;
}
P220
/*编写一程序P220.C实现以下功能从键盘读入一行字符(约定:字符数≤127字节),统计及输出其中的字母、数字、空格和其他符号的个数。编程可用素材:printf("Please input string: ");printf("\nzimu=…,shuzi=…,kongge=…,qita=…\n"…);程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。Please input string: gfAskl45623cvsac,53Dwafl faf32535zimu=19,shuzi=12,kongge=1,qita=1
图1 程序运行效果示例
*/#include <stdio.h>#include <stdio.h>
#include <string.h>
#define N 127int main(void)
{char str[N];int i;int zimu = 0, shuzi = 0, kongge = 0, qita = 0;printf("Please input string: ");gets(str);// 统计及输出其中的字母、数字、空格和其他符号的个数for (i = 0; i < (int)strlen(str); i++){if (str[i] >= '0' && str[i] <= '9'){shuzi++;} else if ( (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){zimu++;} else if (str[i] == ' '){kongge++;}else{qita++;}}printf("\nzimu=%d,shuzi=%d,kongge=%d,qita=%d\n", zimu, shuzi, kongge, qita);return 0;
}
P221
/*编写一程序P221.C实现以下功能从键盘读入一个字符串(约定:字符数≤127字节),检查该字符串是否是回文。所谓回文即正向与反向的拼写都一样,例如:adgda。编程可用素材:printf("Please input string: ");printf("\n… shi hui wen.");printf("\n… bu shi hui wen.");程序的运行效果应类似地如图1和图2所示,图1中的asdfghjhgfdsa和图2中的asdfghjhgfdsaa是从键盘输入的内容。Please input string: asdfghjhgfdsaasdfghjhgfdsa shi hui wen.
图1 程序运行效果示例(回文)Please input string: asdfghjhgfdsaaasdfghjhgfdsaa bu shi hui wen.
图2 程序运行效果示例(非回文)
*/#include <stdio.h>
#include <string.h>
#define N 127int main(void)
{char str[N];int i;int flag = 1; // 假设是回文int length;printf("Please input string: ");gets(str);length = (int)strlen(str); //这是一种遍历得结果的函数,外置,只做一次,效率更高// 业务判断for (i = 0; i < length / 2; i++){/* 这里用的算法:1. 从串首开始,i正向增长2. 从串尾开始,length - 1 - i负向增长3. 回文则必然相同,若不同,则不是回文注意:串最后一个字符,索引值是“长度减1” */if (str[i] != str[length - 1 - i]) {flag = 0; // 不是回文标记break;}}// 业务输出if (flag){printf("\n%s shi hui wen.", str);}else{printf("\n%s bu shi hui wen.", str);}return 0;
}
P222
/*编写一程序P222.C实现以下功能从键盘上读入一行字符(约定:字符数≤127字节),按以下方法将其加密变换:A->Z a->zB->Y b->yC->X c->x…… ……Z->A z->a即字母A变成Z、字母B变成Y、…,非字母字符不变。最后在屏幕上先显示这一行字符的长度,再显示生成的密文。编程可用素材:printf("Please input string: ");printf("\nzi fu chuan chang du: …);printf("\nmi wen: …);程序的运行效果应类似地如图1所示,图1中的sfasfk,lmw4tywerysfcvasgewr xfasftg是从键盘输入的内容。Please input string: sfasfk,lmw4tywerysfcvasgewr xfasftgzi fu chuan chang du: 35
mi wen: huzhup,ond4gbdvibhuxezhtvdi cuzhugt
图1 程序运行效果示例友情提示:注意引入函数的顺序【1】函数声明【2】函数实现【3】函数调用
*/#include <stdio.h>
#include <string.h>#define N 127void alphaEncipher(char s[],int len); // 【1】函数声明int main(void)
{char str[N];int length;// 输入printf("Please input string: ");gets(str);// 求长度length = (int)strlen(str);printf("\nzi fu chuan chang du: %d", length);// 调用功能函数,实现加密alphaEncipher(str, length); // 【3】函数调用// 输出密文printf("\nmi wen: ");puts(str);return 0;
}/* 逐个字母加密功能 【2】函数实现*/
void alphaEncipher(char s[],int len)
{char cl[26], sl[26]; // 密码表int i, j, k;// 初始化密码表for (i=0, j='A', k='a'; i<26; cl[i]=j++, sl[i]=k++, i++);/* 上面的代码,也可以写成如下形式:for (i=0, j='A', k='a'; i<26; i++){cl[i]=j++;sl[i]=k++;}读解:1. 最上面的代码是一种简洁形式,但不易读2. i控制循环次数3. j,k在自增过程中完成码表赋值*/// 逐个字符变换for (i=0; i<len; i++) // 外层循环,遍历每一个字符// 对每一个字母【 A-Z or a-z 】进行转换,非字母字符不变。for (j=0; j<26; j++){ // 内层循环,查密码表,进行字符转换【A-->Z,B-->Y,...,Z-->A,小写亦然如斯】if (s[i]==cl[j]){ // 大写字母表s[i]=cl[25-j]; break;}if (s[i]==sl[j]){ // 小写字母表s[i]=sl[25-j]; break;}}
}
这篇关于20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises18的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!