大型视频网站建设方案,wordpress 怎么上传到空间,备案网站公共查询系统,推荐网站制作公司PTA上C语言程序设计练习题#xff0c;包含查找书籍、字符串排序。主要用到字符串输入scanf/gets 字符串赋值、比大小等知识。
1.查找书籍
习题9-4 查找书籍 (20 分) 给定n本书的名称和定价#xff0c;本题要求编写程序#xff0c;查找并输出其中定价最高和最低的书的名称和…PTA上C语言程序设计练习题包含查找书籍、字符串排序。主要用到字符串输入scanf/gets 字符串赋值、比大小等知识。
1.查找书籍
习题9-4 查找书籍 (20 分) 给定n本书的名称和定价本题要求编写程序查找并输出其中定价最高和最低的书的名称和定价。
输入格式: 输入第一行给出正整数n10随后给出n本书的信息。每本书在一行中给出书名即长度不超过30的字符串随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式: 在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例: 3 Programming in C 21.5 Programming in VB 18.5 Programming in Delphi 25.0 结尾无空行 输出样例: 25.00, Programming in Delphi 18.50, Programming in VB 结尾无空行
1.1分析与代码
首先我们读入的东西都会被丢进缓冲区等待接收比如abc\n如果你使用scanf读入的话它在读入到\n的时候就会提取它需要的东西了但是它会给你留一个\n。
那么如果现在你突然想用gets读一行字符串问题就来了。
你的\n会被当做gets的终止读入然后你就读不了了。
解决方法是 getchar()把这个\n给清掉。
#includestdio.h
#includestring.h
struct book{char a[31];double p;
};int main(){int n,i;scanf(%d,n);struct book b,max,min;for(i0;in;i){getchar();//清掉换行 gets(b.a);scanf(%lf,b.p);if(i0){maxb;//可以直接赋值 minb;}else{if(max.pb.p){maxb;}if(min.pb.p){minb;}}}printf(%.2lf, %s\n,max.p,max.a);printf(%.2lf, %s,min.p,min.a);
}2.字符串排序
习题8-7 字符串排序 (20 分) 本题要求编写程序读入5个字符串按由小到大的顺序输出。
输入格式 输入为由空格分隔的5个非空字符串每个字符串不包括空格、制表符、换行符等空白字符长度小于80。
输出格式 按照以下格式输出排序后的结果
After sorted: 每行一个字符串 输入样例 red yellow blue green white 结尾无空行 输出样例 After sorted: blue green red white yellow 结尾无空行
2.1分析与解答
1.字符串之间想要把b字符串赋值给a字符串此时不能直接用等号。需要用strcpy(ab). 2.字符串比较大小可以用strcmp函数 strcmp(str1,str2)若str1str2则返回零若str1str2则返回负数若str1str2则返回正数
#includestdio.h
#includestring.h
int panduan_small(char * a,char *b){//ab return1int mstrlen(a);int nstrlen(b);int i,j,num;if(mn) numn;else numm;for(i0;inum;i){if(a[i]b[i]){return 1;}else if(a[i]b[i])return 0;}if(mn) return 1;else return 0;
}int main(void)
{char str[5][81];for (int i 0; i 5; i) // 5个字符串{scanf(%s, str[i]);}for (int i 0; i 4; i) // 选用选择排序法对5个字符串进行排序比较4次可出结果{for (int j i 1; j 5; j) // 从剩下的5-i个字符串中进行比较{if (panduan_small(str[i],str[j])0) // 如果当前字符串大于后续字符串则交换它们的值{char temp[81];strcpy(temp, str[i]);strcpy(str[i], str[j]);strcpy(str[j], temp);}}}printf(After sorted:\n); // 输出排序后的字符串for (int i 0; i 5; i){printf(%s\n, str[i]);}return 0;
}