本文主要是介绍C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~)
🌴 C Primer Plus第11章编程练习~ 加油加油!🍭
🍭感觉这一章,比较吃力~ 很迟没有更新了,也有自己的原因 ~
2023的最后一天啦~ 🌈期待新的一年 2024! 一起闪闪发光~⭐️
☘️欢迎大家讨论 批评指正~
文章目录
- C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~)
- 第1题
- 第2题
- 第3题
- 第4题
- 第5题
- 第6题
- 第7题
- 第8题
- 第9题
- 第10题
- 第11题
- 第12题
- 第13题
- 第14题
- 第15题
- 第16题
第1题
🍎1.设计并测试一个函数,从输入中获取下n个字符(包括空白、制表
符、换行符),把结果储存在一个数组里,它的地址被传递作为一个参数。
#include<stdio.h>
#include<string.h>
#define N 20
void get(int n,char *data);
int main(void){char data[N];printf("please enter:");get(N,data);return 0;
}
void get(int n,char *data){fgets(data,n,stdin);fputs(data,stdout);
}
第2题
🍐修改并编程练习1的函数,在n个字符后停止,或在读到第1个空白、制表符或换行符时停止,哪个先遇到哪个停止。不能只使用scanf()。
/** @Description: 修改并编程练习1的函数,在n个字符后停止,或在读到第1个空白、
制表符或换行符时停止,哪个先遇到哪个停止。不能只使用scanf()。* @Author: ~光~~* @Date: 2023-12-21 16:43:40* @LastEditTime: 2023-12-28 18:56:33* @LastEditors: */#include<stdio.h>
#define N 10
void get(char data[],int n);
void get1(char data[],int n);
int main(void){char data[N];get(data,N);return 0;
}
void get(char data[],int n){int i;fgets(data,n,stdin);printf("the orginal data are:");fputs(data,stdout);while(*data!='\n'&& *data!='\0'){if(*data=='\t' || *data=='\t' || *data==' ') *data='\0';data=data+1;}printf("\nafter the function the data are:");fputs(data-2,stdout);
}//关于指针的都不太会void get1(char data[],int n){int i=0;fgets(data,n,stdin);printf("the orginal data are:");fputs(data,stdout);while(data[i]!='\n'&& data[i]!='\0'){if(data[i]=='\t' || data[i]=='\t' || data[i]==' ') data[i]='\0';i++;}printf("\nafter the function the data are:");fputs(data,stdout);
}
第3题
🍌设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并
丢弃输入行中的其余字符。该函数应该跳过第1个非空白字符前面的所有空
白。将一个单词定义为没有空白、制表符或换行符的字符序列。
/** @Description: 设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并
丢弃输入行中的其余字符。该函数应该跳过第1个非空白字符前面的所有空
白。将一个单词定义为没有空白、制表符或换行符的字符序列。* @Author: ~光~~* @Date: 2023-12-21 17:15:53* @LastEditTime: 2023-12-28 20:56:27* @LastEditors: */
#include<stdio.h>
#include<ctype.h>
void readWord(char *word, int maxLength);int main() {char word[100]; // 假设最大单词长度为100printf("请输入一行文本: ");readWord(word, sizeof(word));printf("读取的单词是: %s\n", word);return 0;
}
void readWord(char *word, int maxLength) {int c;int i = 0;// 跳过第1个非空白字符前的空白字符while ((c = getchar()) != EOF && isspace(c)) {continue;}// 读取单词直到遇到空白字符或达到数组最大长度while (c != EOF && !isspace(c) && i < maxLength - 1) {word[i] = c;i++;c = getchar();}// 添加字符串结束符word[i] = '\0';fflush(stdin);
}
第4题
🍑4. 设计并测试一个函数,它类似编程练习3的描述,只不过它接受第2个
参数指明可读取的最大字符数。
/** @Description: .设计并测试一个函数,它类似编程练习3的描述,只不过它接受第2个
参数指明可读取的最大字符数。* @Author: ~光~~* @Date: 2023-12-28 20:55:59* @LastEditTime: 2023-12-28 20:56:07* @LastEditors: */
#include<stdio.h>
#include<ctype.h>
void readWord(char *word, int maxLength);int main() {char word[100]; // 假设最大单词长度为100printf("请输入一行文本: ");readWord(word, sizeof(word));printf("读取的单词是: %s\n", word);return 0;
}
void readWord(char *word, int maxLength) {int c;int i = 0;// 跳过第1个非空白字符前的空白字符while ((c = getchar()) != EOF && isspace(c)) {continue;}// 读取单词直到遇到空白字符或达到数组最大长度while (c != EOF && !isspace(c) && i < maxLength - 1) {word[i] = c;i++;c = getchar();}// 添加字符串结束符word[i] = '\0';fflush(stdin);
}
第5题
🌿设计并测试一个函数,搜索第1个函数形参指定的字符串,在其中查找第2个函数形参指定的字符首次出现的位置。
如果成功,该函数返指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针(该函数的功
能与 strchr()函数相同)
/** @Description: .设计并测试一个函数,搜索第1个函数形参指定的字符串,在其中查
找第2个函数形参指定的字符首次出现的位置。
如果成功,该函数返指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针(该函数的功
能与 strchr()函数相同)。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。* @Author: ~光~~* @Date: 2023-12-28 20:57:42* @LastEditTime: 2023-12-29 11:25:47* @LastEditors: */
#include<stdio.h>
#include<string.h>
char *find(char *s,char *f);
int main(void){char *s="o";char *f="nihaohhss";char *x;printf("outer\n");x=find(s,f);if (x != NULL) {printf("the character is :");printf("%c", *x);} else {printf("Character not found\n");}return 0;
}char *find(char *s, char *f){int i=0;for(i=0;f[i]!='\0';i++){if(f[i]==s[0]) return &f[i];//此时直接返回相应的地址就可以了}return NULL;
}
第6题
🌺6.编写一个名为is_within()的函数,
1️⃣接受一个字符和一个指向字符串的指针作为两个函数形参。
2️⃣ 如果指定字符在字符串中,该函数返回一个非零值(即为真)。否则,返回0(即为假)。
在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/** @Description: 编写一个名为is_within()的函数,接受一个字符和一个指向字符串的指针作为两个函数形参。如果指定字符在字符串中,该函数返回一个非零值
(即为真)。否则,返回0(即为假)。
在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。* @Author: ~光~~* @Date: 2023-12-28 21:55:44* @LastEditTime: 2023-12-29 11:29:51* @LastEditors: */
#include<stdio.h>
#include<string.h>
int is_within(char c,char *p);
int main(void){char c='A';char *p="nihaoA";int t;t=is_within(c,p);if(t) printf("Specify characters are in the string\n");else printf("Specify characters are not in the string\n");return 0;
}
int is_within(char c,char *p){
// 如果指定字符在字符串中,该函数返回一个非零值
// (即为真)。否则,返回0(即为假)。int i=0;while(*p!='\0'){if(c==*p) return 1;p++;}return 0;
}
第7题
🚀strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必要的话在末尾添加空字符。如果s2的长度是n或多于n,目标字符串不能以空字符结尾。该函数返回s1。自己编写一个这样的函数,名为mystrncpy()。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/** @Description: strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必
要的话在末尾添加空字符。如果s2的长度是n或多于n,目标字符串不能以空
字符结尾。该函数返回s1。自己编写一个这样的函数,名为mystrncpy()。在
一个完整的程序中测试该函数,使用一个循环给函数提供输入值。* @Author: ~光~~* @Date: 2023-12-29 11:33:14* @LastEditTime: 2023-12-29 12:02:46* @LastEditors: strncpy() 函数在复制时,会尽可能复制源字符串的前 n 个字符到目标字符串中。具体处理方式如下:
如果源字符串的长度大于等于 n,则 strncpy() 只会复制源字符串的前 n 个字符到目标字符串中。
目标字符串的剩余部分(如果有的话)不会被改变。如果源字符串的长度小于 n,则 strncpy()
会先复制源字符串的所有字符,然后用空字符 ('\0') 填充目标字符串的剩余部分,直到达到 n 个字符为止。如果 dest 原来已经有内容,那么会根据上述规则进行覆盖或追加。如果 dest 原来的内容长度大于等于 n,
则只会覆盖 dest 的前 n 个字符;如果 dest 原来的内容长度小于 n,则会覆盖整个原内容,并在剩余的位置
用空字符 ('\0') 填充。*/
#include<stdio.h>
#include<string.h>
char *mystrncpy(char *s1,char *s2,int n);
int main(void){char s1[10]="nihaoya";char s2[10]="hello";int n=3;char *consolidation;consolidation=strncpy(s1,s2,n);printf("%s\n",consolidation);return 0;
}char *mystrncpy(char *s1,char *s2,int n){int len=0;len=strlen(s2);if(len>=n) {strncpy(s1, s2, n);s1[n]='\0';}else strncpy(s1, s2, n);return s1;
}
第8题
🐬 8.编写一个名为string_in()的函数,接受两个指向字符串的指针作为参数。如果第2个字符串中包含第1个字符串,该函数将返回第1个字符串开始的地址。例如,string_in(“hats”, “at”)将返回hats中a的地址。否则,该函数返回空指针。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
/** @Description: 编写一个名为string_in()的函数,接受两个指向字符串的指针作为参
数。如果第2个字符串中包含第1个字符串,该函数将返回第1个字符串开始的地址。
例如,string_in("hats", "at")将返回hats中a的地址。否则,该函数返
回空指针。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。* @Author: ~光~~* @Date: 2023-12-29 12:05:39* @LastEditTime: 2023-12-29 16:12:03* @LastEditors: strcmp()函数比较字符串中的字符,直到发现不同的字符为止,这一过
程可能会持续到字符串的末尾。而strncmp()函数在比较两个字符串时,可以
比较到字符不同的地方,也可以只比较第3个参数指定的字符数。*/
#include<stdio.h>
#include<string.h>
char *string_in(char *s1,char *s2);
int main(void){char *p;char *s1="nihaoss";char *s2="os";p=string_in(s1,s2);if(p!=NULL){printf("s2 is in s1\n");printf("the letter address is %p\n",p);}else printf("s2 is not in s1\n");return 0;
}
char *string_in(char *s1,char *s2){int t,i=0;for(i=0;i<strlen(s1);i++){if(strncmp(s1+i,s2,strlen(s2))==0) return s1+i;}return NULL;
}
第9题
🐋9.编写一个函数,把字符串中的内容用其反序字符串代替。在一个完整
的程序中测试该函数,使用一个循环给函数提供输入值。
/** @Description: 编写一个函数,把字符串中的内容用其反序字符串代替。在一个完整
的程序中测试该函数,使用一个循环给函数提供输入值。* @Author: ~光~~* @Date: 2023-12-29 15:26:06* @LastEditTime: 2023-12-29 16:33:29* @LastEditors: */
#include<stdio.h>
#include<string.h>
char *reverse(char *s,char *real);
int main(void){char *s="nihao";char *real;printf("before s is %s\n",s);real=reverse(s,real);printf("after s is %s\n",real);return 0;
}
char *reverse(char *s,char *real){int i;for(i=0;i<strlen(s);i++){real[i]=s[strlen(s)-i-1];}real[i]='\0';return real;
}
第10题
🌞10.编写一个函数接受一个字符串作为参数,并删除字符串中的空格。在一个程序中测试该函数,使用循环读取输入行,直到用户输入一行空行。该程序应该应用该函数只每个输入的字符串,并显示处理后的字符串。
#include<stdio.h>
void removeSpaces(char *str);
int main() {char inputLine[100]; // 假设输入行的最大长度为 100// 循环读取输入行,直到用户输入一行空行printf("请输入字符串(输入空行结束):\n");while (fgets(inputLine, sizeof(inputLine), stdin) != NULL && inputLine[0] != '\n') {// 调用函数删除字符串中的空格removeSpaces(inputLine);// 显示处理后的字符串printf("处理后的字符串: %s\n", inputLine);}printf("程序结束。\n");return 0;
}
// 函数:删除字符串中的空格
void removeSpaces(char *str) {int i, j = 0;for (i = 0; str[i] != '\0'; i++) {if (str[i] != ' ') {str[j++] = str[i];}}str[j] = '\0'; // 在新字符串的末尾添加 null 字符
}
第11题
🌈11.编写一个函数,读入 10个字符串 或者读到EOF时停止。该程序为用户提供一个有5个选项的菜单:打印源字符串列表、以ASCII中的顺序打印字符串、按长度递增顺序打印字符串、按字符串中第1个单词的长度打印字符串、退出。菜单可以循环显示,除非用户选择退出选项。当然,该程序要能
真正完成菜单中各选项的功能
/** @Description: 编写一个函数,读入 10个字符串 或者读到EOF时停止。该程序为用
户提供一个有5个选项的菜单:打印源字符串列表、以ASCII中的顺序打印字
符串、按长度递增顺序打印字符串、按字符串中第1个单词的长度打印字符
串、退出。菜单可以循环显示,除非用户选择退出选项。当然,该程序要能
真正完成菜单中各选项的功能* @Author: ~光~~* @Date: 2023-12-29 18:54:50* @LastEditTime: 2023-12-31 11:43:19* @LastEditors: */
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 4
#define ROOM 10
void show(void);
void enter(char s[SIZE][ROOM]);
void print1(char s[SIZE][ROOM]);
void print2(char s[SIZE][ROOM]);
void print3(char s[SIZE][ROOM]);
void print4(char s[SIZE][ROOM]);
int check_words(char s[]);//计算字符串的第一个单词的长度int main(void){int i=0,flag=1;int choice;char s[SIZE][ROOM];//从键盘输入printf("Input up to %d lines\n", SIZE);enter(s);while(flag){show();printf("please enter your choice:");while(scanf("%d",&choice)!=1){printf("incorrect type ! please try again!");show();printf("please enter your choice:");fflush(stdin);}switch(choice){case 1:{printf("the function 1\n");print1(s);break;}case 2:{printf("the function 2\n");printf("the original characters:\n");print1(s);print2(s);break;}case 3:{printf("the function 2\n");printf("the original characters:\n");print1(s);print3(s);break;}case 4:{printf("the function 2\n");printf("the original characters:\n");print1(s);print4(s);break;}default:{printf("bye!\n");flag=0;break;}}}return 0;
}void show(void){printf("-----------------------------------------------------\n");printf("(1)打印源字符串列表\t\t(2)以ASCII中的顺序打印字符串\n");printf("(3)按长度递增顺序打印字符串\t(4)按字符串中第1个单词的长度打印\n");printf("(5)退出\n");printf("-----------------------------------------------------\n");
}
void enter(char s[][ROOM]){char c;int i,j=0;for(i=0;i<SIZE;i++){printf("plese enter the %dth character:",i+1);fflush(stdin);while((c=getchar())!=EOF && (c!='\n')){s[i][j]=c;j++;if(j==ROOM-2){printf("====the room is full====\n");printf("====I will break=====\n");break;}}s[i][j]='\0';j=0;}
}
void print1(char s[SIZE][ROOM]){int i=0;for(i=0;i<SIZE;i++){printf("the %dth are %s\n",i+1,s[i]);}
}void print2(char s[SIZE][ROOM]){
// 以ASCII中的顺序打印字符串
//采用选择排序法int k,i,j,p;int max_index;char max=s[0][0];char tmp;for(i=0;i<SIZE;i++){//一共SIZE个数组for(k=0;s[i][k]!='\0';k++){//轮次max=s[i][k];max_index=k;//如果第一个就是最大的话 一定记得要给上一轮循环的max再次覆盖 从头开始for(j=k+1;s[i][j]!='\0';j++){//遍历次数if(s[i][j]-max>=0){max=s[i][j];//记下最大值的位置max_index=j;}}tmp=s[i][max_index];s[i][max_index]=s[i][k];s[i][k]=tmp;} }printf("按ascii顺序打印字符串:\n");for(i=0;i<SIZE;i++){printf("%s\n",s[i]);}}void print3(char s[SIZE][ROOM]){// 按长度递增顺序打印字符串int i,j=0,k;int len[SIZE];int min,min_index;int index[SIZE];int tmp;int list[SIZE][2];//建立一个类似于python 中的列表的东西 第一个装的是顺序,第二个装的是对应的长度for(i=0;i<SIZE;i++){len[i]=strlen(s[i]);}for(i=0;i<SIZE;i++){list[i][0]=i;list[i][1]=len[i];}//list[i][0] 第i个 0 里面装的是顺序 1里面装的是长度for(i=0;i<SIZE;i++){min_index=list[i][0];min=list[i][1];for(j=i+1;j<SIZE;j++){if(min>=list[j][1]){min_index=list[i][0];min=list[j][1];}}for(k=0;k<2;k++){tmp=list[i][k];list[i][k]=list[min_index][k];list[min_index][k]=tmp;}}// 打印listprintf("按顺序的打印字符串:\n");for(i=0;i<SIZE;i++){printf("%s\n",s[list[i][0]]);}}int check_words(char s[]){
//计算开始的单词的长度int i,j;int flag=0;int test=0;for(i=0;i<ROOM;i++){if(isalpha(s[i])){flag+=1;}else{if(flag>=1&&test==0) {return flag;}if(isalnum(s[i])) test=1; //如果数字和字母混在一起 也不算是一个单词else test=0;flag=0;} }return 0;}void print4(char s[SIZE][ROOM]){
//按字符串中第1个单词的长度打印字符串int i,j=0,k=0,z=0;int len[SIZE];int min,min_index;int list[SIZE][2];//建立一个类似于python 中的列表的东西 第一个装的是顺序,第二个装的是对应的长度int tmp;for(i=0;i<SIZE;i++){len[i]=check_words(s[i]); //得到每一个SIZE的第一个 单词的长度// printf("len[%d] is %d\n",i,len[i]);}for(i=0;i<SIZE;i++){list[i][0]=i;list[i][1]=len[i];}//list[i][0] 第i个 0 里面装的是顺序 1里面装的是长度//开始对list进行排序 list【【0,3】,【1,2】】for(i=0;i<SIZE;i++){// printf("enter loop\n");min_index=list[i][0];min=list[i][1];// for(j=i+1;j<SIZE;j++){ 注意 会越界 如果加一的话 导致排序不正常 for(j=i;j<SIZE;j++){if(min>=list[j][1]){min_index=j;min=list[min_index][1];}}for(k=0;k<2;k++){tmp=list[i][k];list[i][k]=list[min_index][k];list[min_index][k]=tmp;} }// 打印listprintf("按第一个单词的长度打印字符串:\n");for(i=0;i<SIZE;i++){printf("%s\n",s[list[i][0]]);}}
第12题
🍋12. 编写一个程序,读取输入,直至读到 EOF,报告读入的单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的函数。
/** @Description: 编写一个程序,读取输入,直至读到 EOF,报告读入的单词数、大
写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的
函数。* @Author: ~光~~* @Date: 2023-12-29 19:36:42* @LastEditTime: 2023-12-29 20:09:23* @LastEditors: */
#include<stdio.h>
#include<ctype.h>
int main(void){char c;int flag=0,test=0,num=0;int words=0,capital_letter=0,lowercase_letter=0,punctuation_mark=0,numeric_character=0;printf("please enter:\n");while((c=getchar())!=EOF){if(isalpha(c)){if(num){//如果这个字母的前面一个输入的是数字的话 flag=0;num=0;}else{ flag+=1;test=0;}if(islower(c)) lowercase_letter+=1;else capital_letter+=1;}else if(isspace(c)){test=1;punctuation_mark+=1;}else if(isdigit(c)) {numeric_character+=1;num=1;if(flag>0) flag=0;//如果这个数字前面一个输入的是字母的话}else continue;if(flag>1 && test){words+=1;flag=0;test=0;}}printf("**************************\n");printf("the words are %d\n",words);printf("the lowercase_letter are %d\n",lowercase_letter);printf("the capital_letter are %d\n",capital_letter);printf("the punctuation_mark are %d\n",punctuation_mark);printf("the numeric_character are %d\n",numeric_character);printf("**************************\n");return 0;
}
第13题
🚁编写一个程序,反序显示命令行参数的单词。例如,命令行参数是see you later,该程序应打印later you see
/** @Description: 编写一个程序,反序显示命令行参数的单词。例如,命令行参数是
see you later,该程序应打印later you see。* @Author: ~光~~* @Date: 2023-12-29 20:14:24* @LastEditTime: 2023-12-31 12:58:21* @LastEditors: */
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 20
#define ROOM 10
int check_words(char s[]); //检查得到的值是不是一个单词int main(int argc, char *argv [])
{int i,j=0;char *s[SIZE];char word[ROOM];for(i=0;i<argc;i++){if(check_words(argv[i])) {*(s+j)=argv[i];j+=1;}}printf("the orignal character are:");for(i=0;i<argc;i++){printf("%s ",argv[i]);}printf("\nthe word character are:");for(i=0;i<j;i++){printf("%s ",s[i]);}printf("\nthe reverse character are:");for(i=j-1;i>=0;i--){printf("%s ",s[i]);}return 0;
}
int check_words(char s[]){int i=0;for(i=0;s[i]!='\0';i++){if(!isalpha(s[i])) return 0;}return 1;
}
第14题
⚙️14.编写一个通过命令行运行的程序计算幂。第1个命令行参数是double
类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。
/** @Description: 编写一个通过命令行运行的程序计算幂。第1个命令行参数是double
类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。* @Author: ~光~~* @Date: 2023-12-31 12:59:14* @LastEditTime: 2023-12-31 15:21:39* @LastEditors: */#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main(int argc, char *argv []){if (argc != 3) {printf("Usage: %s <base> <exponent>\n", argv[0]);return 1;}double base = atof(argv[1]);int exponent = atoi(argv[2]);double result = pow(base, exponent);printf("%.2lf ^ %d = %.2lf\n", base, exponent, result);return 0;
}
第15题
🐋15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,
该函数返回0。
/** @Description: 15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,
该函数返回0。* @Author: ~光~~* @Date: 2023-12-31 15:24:55* @LastEditTime: 2023-12-31 16:18:27* @LastEditors: */
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int atoi_pick(char s[]);//如果是数字就返回数字 不是就返回0 和atoi一样针对整数
int main(int argc, char *argv []){int i,t;char s[]="1a23";printf("the result are:");for(i=1;i<argc;i++){t=atoi_pick(argv[i]);printf("%d ",t);}return 0;
}int atoi_pick(char s[]){int i,result=0,poww=1;int sign=1,flag=0;int num;//处理符号位if(s[0]=='+') sign=1;if(s[0]=='-') sign=-1;// printf("sign is %d\n",sign);//判断是不是数字for(i=1;s[i]!='\0';i++){if(!(isdigit(s[i]))) return 0;}//开始对数字处理if(s[0]=='+'||s[0]=='-'){for(i=strlen(s)-1;i>0;i++){num=s[i]-'0';result+=num*poww;poww*=10;}if(sign==1) return result;else return (-1)*result;}if(isalnum(s[0])){for(i=strlen(s)-1;i>=0;i--){num=s[i]-'0';result+=num*poww;poww*=10;}return result;}}
第16题
🐋16.16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出
来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行。
/** @Description: 16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出
来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行。* @Author: ~光~~* @Date: 2023-12-31 16:19:36* @LastEditTime: 2023-12-31 16:31:03* @LastEditors: */
#include<stdio.h>
#include<ctype.h>
#define SIZE 100
void function(char s[]);
int main(void){char c;int i=0;char s[SIZE];printf("please enter:\n");while((c=getchar())!=EOF){s[i]=c;i++;}s[i]='\0';printf("-p 按原样打印\n");printf("-u 把输入全部转换成大写\n");printf("-l 把输入全部转换成小写\n");printf("then you can enter :");function(s);return 0;
}
void function(char s[]){char c;int i;if(getchar()=='-'){c=getchar();switch(c){case 'p':{for(i=0;s[i]!='\0';i++){printf("%c",s[i]);}break;}case 'u':{for(i=0;s[i]!='\0';i++){if(isalpha(s[i])) s[i]=toupper(s[i]);printf("%c",s[i]);}break;}case 'l':{for(i=0;s[i]!='\0';i++){if(isalpha(s[i])) s[i]=tolower(s[i]);printf("%c",s[i]);}break;}default:{printf("bye!\n");break;}}}else printf("bye!\n");
}
⛵️完成啦~
☘️如果有其他解法~ 欢迎大家讨论 批评指正~
🌈 此编程练习参考答案为本人所写,如有错误欢迎大家批评指正~~ 如转载请说明来源~
🌈ok,完结~(●’◡’●) 看到这里 点个赞叭 (●’◡’●)
这篇关于C Primer Plus (中文版)第11章编程练习 参考答案(仅供参考~)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!