c primer plus编程练习第十一章(纯手打欢迎指错)

来源:互联网 发布:一入淘宝深似海下一句 编辑:程序博客网 时间:2024/05/18 08:36

11.1

#include<stdio.h>char *input(char*);int main(void){char test[100];input(test);puts(test);}char *input(char *ptr){char ch;while((ch=getchar())!=EOF)*ptr++=ch;}

11.2

#include<stdio.h>#define LIMIT 7char *input(char*);int main(void){char test[100];input(test);puts(test);}char *input(char *ptr){char ch;int count=0;while(((ch=getchar())!=EOF)&&(ch!=' '&&ch!='\t'&&ch!='\n'&&count<LIMIT))   //遇到 空字符,空格,制表格,换行符,并且小于LIMIT时停止输入 {*ptr++=ch;count++;    }    *ptr='\0';}

11.3

#include<stdio.h>void input(char*);void output(char*);int main(void){char test[100];input(test);puts(test);puts(" ");output(test);}void input(char *ptr){char ch;while((ch=getchar())!=EOF)  *ptr++=ch;}void output(char*ptr){while(*ptr){if(*ptr==' '||*ptr=='\n'||*ptr=='\t')break;elseputchar(*ptr);ptr++;}}
11.4

#include<stdio.h>char*strchr_n(char*,char);int main(void){char test[100]="I have an apple ,do you like it ?";char ch;char*target;puts("Please enter a line");gets(test);puts("Enter a letter or punctution.");while((ch=getchar())!=EOF){target=strchr_n(test,ch);printf("%c 's address is %p\nand I will show you something:",ch,target);puts(target);while(getchar()!='\n')continue;}}char*strchr_n(char*ptr,char pts){while(*ptr){if(*ptr==pts)return ptr;elseptr++;}return NULL;}

11.5

#include<stdio.h>int is_within(char,char*);int main(void){char ch;char test[100];int result;puts("Please enter a line.");gets(test);puts("Enter what you want to search.");while((ch=getchar())!=EOF){result=is_within(ch,test);printf("result=%d\n",result);while((getchar())!='\n')continue;}}int is_within(char n,char*target){int count=0;while(*target){if(*target==n){count++;target++;}elsetarget++;}return count;}

11.6

#include<stdio.h>  //不知道这题有没有偏离题意 int strncpy_n(char*,char*,int); int main(void){char source[100];char target[100];puts("Enter a line.");while(gets(source)){strncpy_n(target,source,5);puts(target);puts("Enter a line.");}}int strncpy_n(char*s1,char*s2,int n){int count;for(count=0;count<n;count++){if(s2[count]=='\0'){s1[count]=s2[count];return s1;}elses1[count]=s2[count];}}

11.8

#include<stdio.h>#include<string.h>char *back(char*);int main(void){char test[100];while(printf("Please enter a line:")&&gets(test))   puts(back(test));} char *back(char*s1){char s2[100];int i,j;for(i=strlen(s1)-1,j=0;i>=0,j<strlen(s1);i--,j++)  {  s2[j]=s1[i];  }  s2[strlen(s1)]='\0';  return s2;}
11.9

#include<stdio.h>#define N 100// 这题参照了官方答案,基本一样啦void d_space(char*);int main(void){char test[N];while(printf("Please enter 9 mark:")&&gets(test)&&test[0]!='\0'){d_space(test);puts(test);}}void d_space(char*s1){int i=0;char *s2;while(*s1){if(*s1==' '){s2=s1;do{*s2=*(s2+1);s2++;}while(*s2);}elses1++;}}
10.10

#include<stdio.h>  //代码有点难看,有点长。不足请指出#include<string.h>void output_r(char *[],int);void output_l(char*s1[],int n);void first_word(char*s1[],int n);int main(void){char input[10][100];char *target[10];int count=0;while(count<10&&gets(input[count])!=NULL&&input[count][0]!='\0'){target[count]=input[count];      count++;}puts("Please enter a num of list.");puts("1.ԭʼÊä³ö¡£ 2.ASCII˳ÐòÊä³ö¡£ 3.³¤¶ÈµÝÔöÊä³ö¡£ 4.µÚÒ»¸öµ¥´Ê³¤¶ÈÊä³ö¡£ 5.Í˳ö¡£");int ch,i;while(ch=getchar()){switch(ch){case '1':for(i=0;i<count;i++)puts(input[i]);break;case '2':output_r(target,count);for(i=0;i<count;i++)puts(target[i]);break;case '3':output_l(target,count);for(i=0;i<count;i++)puts(target[i]);break;case '4':first_word(target,count);for(i=0;i<count;i++)puts(target[i]);break;case '5':break;default :break;    }     if(ch=='5')    break;    if(ch<'1'||ch>'5')    break;    while(getchar()!='\n')    continue;}puts("Bye!");return 0;} void output_r(char*s1[],int n){int i,j;char *temp;for(i=0;i<n-1;i++)   for(j=i+1;j<n;j++)if(strcmp(s1[i],s1[j])>0){temp=s1[i];s1[i]=s1[j];s1[j]=temp;}}void output_l(char*s1[],int n){int i,j;char *temp;for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(strlen(s1[i])>strlen(s1[j])){temp=s1[i];s1[i]=s1[j];s1[j]=temp;}}}void first_word(char*s1[],int n){int i,j;char *temp;for(i=0;i<n;i++){temp=strchr(s1[i],' ');if(temp)*temp='\0';}for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(strlen(s1[i])>strlen(s1[j])){temp=s1[i];s1[i]=s1[j];s1[j]=temp;}for(i=0;i<n;i++){temp=strchr(s1[i],'\0');if(temp)*temp=' ';}}
11.11

#include<stdio.h>#include<stdbool.h>#include<ctype.h>int main(void){bool result=false;char ch;char*temp;int word=0,upper=0,lower=0,punct=0,digit=0;puts("Please enter a line.(EOF to quit)");while((ch=getchar())!=EOF){temp=ch;temp++;if(isupper(ch))upper++;else if(islower(ch))lower++;else if(ispunct(ch))punct++;else if(isdigit(ch))digit++;if(isalnum(ch)&&result==false){word++;result=true;}if(isspace(ch)&&result==true)    result=false;}printf("word=%d,upper=%d,lower=%d,punct=%d,digit=%d",word,upper,lower,punct,digit);}
11.12

#include<stdio.h>int main(int argc,char *argv[]){int i;char *s1;for(i=argc-1;i>0;i--)printf("%s ",argv[i]);}

11.13

#include<stdio.h>#include<stdlib.h>int main(int argc,char *argv[]){double x=1;int i;for(i=0;i<atoi(argv[2]);i++)  x*=atof(argv[1]);printf("%f \n",x);}

11.14

#include<stdio.h>//这题也参考了别人的答案然后自己写的。#include<ctype.h>int atoi_n(char*);int main(void){char test[100];puts("Please enter digit");gets(test);puts(" 你所输入的字符串将转换为数字整形。"); printf("%d \n",atoi_n(test));} int atoi_n(char*s){char ch;ch=*s++;int num;int sign_mark;{if(ch=='-')sign_mark=1;else if(isdigit(ch)){sign_mark=0;num=ch-'0';}}while(1){ch=*s++;if(isdigit(ch))num=num*10+ch-'0';else break;}if(sign_mark==1)num=-num;return num;}



11.15

#include<stdio.h>#include<string.h>#include<ctype.h>void ToUpper(char*);void ToLower(char*);int main(int argc,char *argv[]){char test[100];char ch;int i=0;puts("Please enter a line.");while((ch=getchar())!=EOF){test[i]=ch;i++;}     if(strcmp("-p",argv[1])==0)     puts(test);else if(strcmp("-u",argv[1])==0){ToUpper(test);puts(test);    }else if(strcmp("-l",argv[1])==0){ToLower(test);puts(test);}return 0;}void ToUpper(char*s){while(*s){*s=toupper(*s);s++;}}void ToLower(char*s){while(*s){*s=tolower(*s);s++;}}







0 0
原创粉丝点击