日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PTA上C語言程序設計練習題,包含查找書籍、字符串排序。主要用到字符串輸入scanf/gets 字符串賦值、比大小等知識。

1.查找書籍

習題9-4 查找書籍 (20 分)
給定n本書的名稱和定價,本題要求編寫程序,查找并輸出其中定價最高和最低的書的名稱和定價。

輸入格式:
輸入第一行給出正整數n(<10),隨后給出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給清掉。

#include<stdio.h> #include<string.h> struct book{char a[31];double p; };int main(){int n,i;scanf("%d",&n);struct book b,max,min;for(i=0;i<n;++i){getchar();//清掉換行 gets(b.a);scanf("%lf",&b.p);if(i==0){max=b;//可以直接賦值 min=b;}else{if(max.p<b.p){max=b;}if(min.p>b.p){min=b;}}}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(a,b).
2.字符串比較大小,可以用strcmp函數
strcmp(str1,str2),若str1=str2,則返回零;若str1<str2,則返回負數;若str1>str2,則返回正數

#include<stdio.h> #include<string.h> int panduan_small(char * a,char *b){//a<=b return1int m=strlen(a);int n=strlen(b);int i,j,num;if(m>=n) num=n;else num=m;for(i=0;i<num;++i){if(a[i]<b[i]){return 1;}else if(a[i]>b[i])return 0;}if(m<=n) 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; }

總結

以上是生活随笔為你收集整理的c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。