20201022

阅读: 评论:0

20201022

20201022

文章目录

  • 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] = {''};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=%dn", 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;}}
}

本文发布于:2024-01-28 22:53:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645361610873.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23