? ?
? 6-1?函數(shù)實(shí)現(xiàn)字符串逆序?(15?分) 本題要求實(shí)現(xiàn)一個(gè)字符串逆序的簡(jiǎn)單函數(shù)。 函數(shù)接口定義: void f( char *p ); 函數(shù)f對(duì)p指向的字符串進(jìn)行逆序操作。要求函數(shù)f中不能定義任何數(shù)組,不能調(diào)用任何字符串處理函數(shù)。 裁判測(cè)試程序樣例: #include <stdio.h> #define MAXS 20 void f( char *p ); void ReadString( char *s ); /* 由裁判實(shí)現(xiàn),略去不表 */ int main() { char s[MAXS]; ReadString(s); f(s); printf("%s\n", s); return 0; } /* 你的代碼將被嵌在這里 */ 輸入樣例: Hello World! 輸出樣例: !dlroW olleH 作者: 張泳 單位: 浙江大學(xué)城市學(xué)院 時(shí)間限制: 400 ms 內(nèi)存限制: 64 MB 代碼 void f(char *p) { int n=strlen(p); int i; char temp; for(i=0;i<n/2;i ) { temp=p[i]; p[i]=p[n-i-1]; p[n-i-1]=temp; } return ; } ? 思路圖 ? ? 錯(cuò)誤截圖 問題 無 結(jié)果截圖 ? 6-3?字符串的連接?(15?分) 本題要求實(shí)現(xiàn)一個(gè)函數(shù),將兩個(gè)字符串連接起來。 函數(shù)接口定義: char *str_cat( char *s, char *t ); 函數(shù)str_cat應(yīng)將字符串t復(fù)制到字符串s的末端,并且返回字符串s的首地址。 裁判測(cè)試程序樣例: #include <stdio.h> #include <string.h> #define MAXS 10 char *str_cat( char *s, char *t ); int main() { char *p; char str1[MAXS MAXS] = {'\0'}, str2[MAXS] = {'\0'}; scanf("%s%s", str1, str2); p = str_cat(str1, str2); printf("%s\n%s\n", p, str1); return 0; } /* 你的代碼將被嵌在這里 */ 輸入樣例: abc def 輸出樣例: abcdef abcdef 代碼 char *str_cat(char *s,char *t) { return strcat(s,t); } ? 思路圖 ? ? 問題 在輸出時(shí),總是發(fā)現(xiàn)輸出語(yǔ)句中前一句總是出錯(cuò),而后一句是對(duì)的 解決方法,return s; 結(jié)果截圖 ? 7-1?輸出學(xué)生成績(jī)?(20?分) 本題要求編寫程序,根據(jù)輸入學(xué)生的成績(jī),統(tǒng)計(jì)并輸出學(xué)生的平均成績(jī)、最高成績(jī)和最低成績(jī)。建議使用動(dòng)態(tài)內(nèi)存分配來實(shí)現(xiàn)。 輸入格式: 輸入第一行首先給出一個(gè)正整數(shù)N,表示學(xué)生的個(gè)數(shù)。接下來一行給出N個(gè)學(xué)生的成績(jī),數(shù)字間以空格分隔。 輸出格式: 按照以下格式輸出: average = 平均成績(jī) max = 最高成績(jī) min = 最低成績(jī) 結(jié)果均保留兩位小數(shù)。 輸入樣例: 3 85 90 95 輸出樣例: average = 90.00 max = 95.00 min = 85.00 代碼 #include<stdio.h> #include<stdlib.h> int main() { int n,i,*p; double max,min,average,sum=0; scanf("%d",&n); if ((p=(int * )calloc(n,sizeof(int))) == NULL){ printf ("Not able to allocate memory.\n"); exit(1); } for (i=0;i<n;i ){ scanf("%d",p i); } for (i=0;i<n;i ){ sum=sum *(p i); } printf("average = %.2f\n",sum/n); max=*p; min=*p; for(i=1;i<n;i ){ if( max <*(p i)){ max = *(p i); } if(min >*(p i)){ min = *(p i); } } printf ("max = %.2f\nmin = %.2f",max,min); free(p); return 0; } 思路圖 錯(cuò)誤截圖 ? ? ? 問題 輸出結(jié)果不對(duì) 結(jié)果截圖 7-4?字符串排序?(20?分) 本題要求編寫程序,讀入5個(gè)字符串,按由小到大的順序輸出。 輸入格式: 輸入為由空格分隔的5個(gè)非空字符串,每個(gè)字符串不包括空格、制表符、換行符等空白字符,長(zhǎng)度小于80。 輸出格式: 按照以下格式輸出排序后的結(jié)果: After sorted: 每行一個(gè)字符串 輸入樣例: red yellow blue green white 輸出樣例: After sorted: blue green red white yellow 代碼 #include<stdio.h> #include<string.h> int main() { int i, j; char a[5][80],b[80]; for(i = 0;i < 5;i ) { scanf("%s", &a[i]); } for(i = 1;i < 5;i ) { for(j = 0;j < 5-i;j ) { if(strcmp(a[j],a[j 1])>0) { strcpy(b,a[j]); strcpy(a[j],a[j 1]); strcpy(a[j 1],b); } } } printf("After sorted:\n"); for(i = 0;i < 5;i ) { printf("%s\n", a[i]); } return 0; } 思路圖 ? ? 錯(cuò)誤截圖 ? ? 問題 怎樣定義數(shù)組可以使程序運(yùn)行成功 解決方法,定義二維數(shù)組 結(jié)果截圖 ? ? 7-3?計(jì)算平均成績(jī)?(15?分) 給定N個(gè)學(xué)生的基本信息,包括學(xué)號(hào)(由5個(gè)數(shù)字組成的字符串)、姓名(長(zhǎng)度小于10的不包含空白字符的非空字符串)和成績(jī)([0,100]區(qū)間內(nèi)的整數(shù)),要求計(jì)算他們的平均成績(jī),并順序輸出平均線以下的學(xué)生名單。 輸入格式: 輸入在一行中給出正整數(shù)N(≤10)。隨后N行,每行給出一位學(xué)生的信息,格式為“學(xué)號(hào) 姓名 成績(jī)”,中間以空格分隔。 輸出格式: 首先在一行中輸出平均成績(jī),保留2位小數(shù)。然后按照輸入順序,每行輸出一位平均線以下的學(xué)生的姓名和學(xué)號(hào),間隔一個(gè)空格。 輸入樣例: 5 00001 zhang 70 00002 wang 80 00003 qian 90 10001 li 100 21987 chen 60 輸出樣例: 80.00 zhang 00001 chen 21987 代碼 #include<stdio.h> struct student{ int num[100]; char name[100][100]; int mark[100]; }; int main (void) { int i,n; struct student s1,min; int sum=0; double average; scanf("%d",&n); for(i=0;i<n;i ){ scanf("%d %s %d",&s1.num[i],&s1.name[i],&s1.mark[i]); sum=sum s1.mark[i]; } average=sum/n; printf("%.2lf\n",average); for(i=0;i<n;i ){ if(s1.mark[i]<average) printf("%s d\n",s1.name[i],s1.num[i]); } return 0; } 思路圖 ? ? 錯(cuò)誤截圖 ? ? 問題 如何定義存儲(chǔ)名字的數(shù)組 解決方法,要定義二維數(shù)組,不然答案錯(cuò)誤; 結(jié)果截圖 ? ? 學(xué)習(xí)進(jìn)度條
? ? ? 來源:http://www./content-4-167451.html |
|