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.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出
来。该程序识别和实现下面的命令行参数:
-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,完结~(●’◡’●) 看到这里 点个赞叭 (●’◡’●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split&#xff08;mat&#xff09;将图像的通道进行分割。 merge&#xff08;(ch1&#xff0c;ch2&#xff0c;ch3)&#xff09;将多个通道进行融合。 示例代码如下&#xff1a; import cv2 import numpy as npimg np.zeros((480, 640, 3),…

uni-app App.vue生命周期全局样式全局存储globalData

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

Docker之网络配置

目录 1.网络概念 网络相关的有ip,子网掩码,网关,DNS,端口号 1.1 ip是什么? ip是唯一定位一台网上计算机 Ip地址的分类: IPV4: 4字节32位整数&#xff0c;并分成4段8位的二进制数&#xff0c;每8位之间用圆点隔开&#xff0c;每8位整数可以转换为一个0~255的十进制整数 【例…

windows server 2022 启用SYN攻击保护

2023.12.28 SYN攻击是什么&#xff1a; SYN攻击是黑客攻击的常用手段&#xff0c;也是最容易被利用的一种攻击手法&#xff0c;属于DDoS攻击的一种。它利用TCP协议缺陷&#xff0c;通过发送大量的半连接请求&#xff0c;耗费CPU和内存资源。 SYN攻击包括大量TCP连接的第一个包&…

Leetcode 第 378 场双周赛 Problem D 回文串重新排列查询(Java + 区间相交关系 + 前缀和)

文章目录 题目思路Java 区间相交关系 前缀和:第 1 步&#xff1a;第 2 步&#xff1a;第 3 步&#xff1a;第 4 步&#xff1a; 复杂度Code 题目 100129. 回文串重新排列查询给你一个长度为 偶数 n &#xff0c;下标从 0 开始的字符串 s 。同时给你一个下标从 0 开始的二维整…

算法题Python常用内置函数、方法、技巧汇总(其五:堆/优先队列)

文章目录 优先队列相关操作堆化入堆出堆获取堆顶元素小根堆与大根堆 华为OD算法/大厂面试高频题算法练习冲刺训练 优先队列相关操作 注意&#xff0c;优先队列&#xff08;priority queue&#xff09;也叫做堆&#xff08;heap&#xff09;。谈到优先队列时&#xff0c;一般强调…

Nginx屏蔽垃圾邮件骚扰IP的方法

原文地址&#xff1a;Nginx屏蔽垃圾邮件骚扰IP的方法 本文介绍了如何下载并引入deny-ips.conf配置文件&#xff0c;以及如何定制403页面&#xff0c;避免误杀合法访问者。 最近&#xff0c;很多人都遭受到垃圾邮件的骚扰&#xff0c;让我们无法正常地观看和回复重要信息。在这种…

Python面向对象-三大特性

一 三大特性-封装 面向对象思想有三大特性&#xff1a;封装、继承、多态。 封装&#xff1a;将属性和方法放到一起做为一个整体&#xff0c;然后通过实例化对象来处理&#xff0c;这样隐藏内部实现细节&#xff0c;只需要和对象及其属性和方法交互就可以了。 为了更好的封装…

HTML5+CSS3②——图像、超链接、音频、视频

目录 图像 超链接 音频 视频 图像 作用&#xff1a;在网页中插入图片 单标签&#xff1a; 标签名&#xff1a;<img src"图片的URL"> <img src"图片的URL" alt"替换文本" title"提示文本"> 属性写在尖括号里面&#xff0c;…

【Redis-02】Redis数据结构与对象原理 -上篇

Redis本质上是一个数据结构服务器&#xff0c;使用C语言编写&#xff0c;是基于内存的一种数据结构存储系统&#xff0c;它可以用作数据库、缓存或者消息中间件。 我们经常使用的redis的数据结构有5种&#xff0c;分别是&#xff1a;string(字符串)、list(列表)、hash(哈希)、s…

多环境及SpringBoot项目部署

1、多环境 2、项目部署上线 原始前端 / 后端项目宝塔Linux容器容器平台 3、前后端联调 4、项目扩展和规划 多环境 程序员鱼皮-参考文章 本地开发&#xff1a;localhost&#xff08;127.0.0.1&#xff09; 多环境&#xff1a;指同一套项目代码在把不同的阶段需要根据实际…

将数据“0x0f“写入AT24C02再读出送P1口显示

#include <reg51.h> // 包含51单片机寄存器定义的头文件 #include <intrins.h> //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写入…

win10系统gpu本地部署chatglm3-6b,从0开始安装

开源地址&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 前言&#xff1a;ChatGLM2与ChatGLM3区别 ChatGLM2与ChatGLM3模型架构是完全一致的&#xff0c;ChatGLM与后继者结构不同。可见ChatGLM3相对于ChatGLM2没…

杨辉三角型打印

注&#xff1a; 利用杨辉三角形可以快速的列出牛顿二项式分解。 如&#xff1a;杨辉三角第6行值是 1 6 15 20 15 6 1 对应的二项式分解就是 ( m n ) 6 m 6 6 m 5 n 15 m 4 n 2 20 m 3 n 3 15 m 2 n 4 6 m n 5 n 6 (mn)^6m^66m^5n15m^4n^220m^3n^315m^2n^46mn^5n^6 (m…

NLP项目之语种识别

目录 1. 代码及解读2. 知识点n-grams仅保留最常见的1000个n-grams。意思是n1000 ? 1. 代码及解读 in_f open(data.csv) lines in_f.readlines() in_f.close() dataset [(line.strip()[:-3], line.strip()[-2:]) for line in lines] print(dataset[:5])[(1 december wereld…

付费进群系统源码带定位完整独立版(12月30日)再次修复首发

搭建教程 nginx1.2 php5.6–7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;shujuku.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账号&…

2023年度个人总结

现在是北京时间2023年12月31日 下午17:13&#xff0c;再有不到7个小时就要迈入2024年。回望2023年真的是一言难尽&#xff0c;苦不堪言&#xff0c;不管是工作上还是生活中都经历了重重困难&#xff0c;肉体和精神上都备受折磨&#xff0c;特别痛苦。2023年是特别的艰辛、痛苦、…

ArkUI中自定义组件的生命周期

文章概叙 本文主要是介绍下在作为page以及component的时候的生命周期&#xff0c;以及调用API等应该在哪个生命周期使用。 书接上回 之前的博客已经结束了对底部栏的操作&#xff0c;现在开始需要关注到具体内容的对接了。 而开发的第一步&#xff0c;我们对页面的生命周期…

探索抖音详情API:塑造未来的媒体交互

一、引言 随着数字媒体的迅猛发展&#xff0c;抖音作为全球领先的短视频平台&#xff0c;其API接口为开发者提供了无尽的创新机会。了解抖音详情API的请求格式与参数&#xff0c;是每位有远见的开发者和媒体策划者的必修课。本文将深入剖析API的内在逻辑与潜力&#xff0c;为您…

Windows 产品历史

Windows 1.0&#xff5e;3.0概述 Windows 3.1及以前版本均为16位系统&#xff0c;因而不能充分利用硬件迅速发展的强大功能。同时,它们只能在MS-DOS上运行&#xff0c;必须与MS-DOS共同管理系统资源,故它们还不是独立的、完整的操作系统。1995年推出的Windows 95已摆脱MS-DOS的…