#一、設計題目,設計思路,實現方法
##設計題目
15-10 找最長的字符串,14-5 指定位置輸出字符串,13-6 數組循環右移,12-5 查找指定字符,11-5 打印楊輝三角。
##設計思路
15-10:通過strlen()函數比較字符串長度。
14-5:通過數組遍歷找到指定位置。
13-6 :定義兩個數組,進行賦值,進而改變數組的下標。
12-5 :數組遍歷,找到指定字符。
11-5:定義一個二維數組,先對特殊部分處理(即楊輝三角外圍的一)。
##實現方法
15-10:與數組比較大小的代碼相似,但其運用了strcpy()函數,操作步驟上也有細微差別。
14-5:運用指針,通過返回指針地址實現最終目的
13-6 :通過index = (j+m)%n語句將數組向右移,並通過for循環進行循環。
12-5 :通過for循環遍歷
11-5:雙重for循環,規律為一個數為其肩上兩個數之和。
————————————————————————————
#二、源程序
##15-10 找最長的字符串
本題要求編寫程序,針對輸入的N個字符串,輸出其中最長的字符串。
輸入格式:
輸入第一行給出正整數N;隨后N行,每行給出一個長度小於80的非空字符串,其中不會出現換行符,空格,制表符。
輸出格式:
在一行中用以下格式輸出最長的字符串:
The longest is: 最長的字符串
如果字符串的長度相同,則輸出先輸入的字符串。
輸入樣例:
5
li
wang
zhang
jin
xiang
輸出樣例:
The longest is: zhang
#include<stdio.h>
#include<string.h>
int main()
{
int n,i;
scanf("%d\n",&n);
char s[80],max[80];
scanf("%s",s);
strcpy(max,s);
for(i=0;i<n;i++)
{
scanf("%s",s);
if(strlen(s)>strlen(max))
{
strcpy(max,s);
}
}
printf("The longest is: %s\n",max);
return 0;
}
##14-5 指定位置輸出字符串(20 分)
本題要求實現一個函數,對給定的一個字符串和兩個字符,打印出給定字符串中從與第一個字符匹配的位置開始到與第二個字符匹配的位置之間的所有字符。
函數接口定義:
char *match( char *s, char ch1, char ch2 );
函數match應打印s中從ch1到ch2之間的所有字符,並且返回ch1的地址。
裁判測試程序樣例:
#include <stdio.h>
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例1:
program
r g
輸出樣例1:
rog
rogram
輸入樣例2:
program
z o
輸出樣例2:
(空行)
(空行)
輸入樣例3:
program
g z
輸出樣例3:
gram
gram
char *match( char *s, char ch1, char ch2 ){
int i,j;
char *p=NULL;
for(i=0;s[i]!='\0';i++){
if(s[i]==ch1){
p=&s[i];
for(j=i;s[j]!='\0';j++){
if(s[j]!=ch2){
printf("%c", s[j]);
}
if(s[j]==ch2){
printf("%c\n", s[j]);
return p;
}
}
printf("\n");
return p;
}
}
s[i-1]='\n';
p=&s[i-1];
return p;
}
##13-6 數組循環右移(20 分)
本題要求實現一個對數組進行循環右移的簡單函數:一個數組a中存有n(>0)個整數,將每個整數循環向右移m(≥0)個位置,即將a中的數據由(a
0
a
1
⋯a
n−1
)變換為(a
n−m
⋯a
n−1
a
0
a
1
⋯a
n−m−1
)(最后m個數循環移至最前面的m個位置)。
函數接口定義:
int ArrayShift( int a[], int n, int m );
其中a[]是用戶傳入的數組;n是數組的大小;m是右移的位數。函數ArrayShift須將循環右移后的數組仍然存在a[]中。
裁判測試程序樣例:
#include <stdio.h>
#define MAXN 10
int ArrayShift( int a[], int n, int m );
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
6 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
int ArrayShift( int a[], int n, int m )
{
int i,index,j,b[100];
for(j=0;j<n;j++)
{
index = (j+m)%n;
b[index]=a[j];
}
for(i=0,j=0;i<n;i++,j++)
{
a[i]=b[j];
}
return a;
}
##12-5 查找指定字符(15 分)
本題要求編寫程序,從給定字符串中查找某指定的字符。
輸入格式:
輸入的第一行是一個待查找的字符。第二行是一個以回車結束的非空字符串(不超過80個字符)。
輸出格式:
如果找到,在一行內按照格式“index = 下標”輸出該字符在字符串中所對應的最大下標(下標從0開始);否則輸出"Not Found"。
輸入樣例1:
m
programming
輸出樣例1:
index = 7
輸入樣例2:
a
1234
輸出樣例2:
Not Found
#include<stdio.h>
int main(void)
{
int i,flag,index;
char s[80],ch;
scanf("%c",&ch);
s[0]=getchar();
i=0;
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
flag=0;
for(i=0;s[i]!='\0';i++){
if(s[i]==ch){
index=i;
flag=1;
}
}
if(flag==0)
printf("Not Found");
else
printf("index = %d",index);
return 0;
}
提交返回
編程題
1234567
##11-5 打印楊輝三角(20 分)
本題要求按照規定格式打印前N行楊輝三角。
輸入格式:
輸入在一行中給出N(1≤N≤10)。
輸出格式:
以正三角形的格式輸出前N行楊輝三角。每個數字占固定4位。
輸入樣例:
6
輸出樣例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
作者: 徐鏡春
單位: 浙江大學
時間限制: 400ms
內存限制: 64MB
代碼長度限制: 16KB
for( i=0;i<10;i++)
{
a[i][i]=1;
a[i][0]=1;
}
scanf("%d",&n);
if(n>2){
for( i=1;i<n;i++)
{
for ( j=1;j<i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
}
for( i=0;i<n;i++)
{
for(k=n-i-1;k>0;k--)printf(" ");
for( j=0;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
————————————————————————————
#三、遇到的問題,心得及體會。
##問題:
1.審題不清:在15-10 找最長的字符串中誤以為找的是最大字符串
2.對數組的界限不清:導致運行結果出現亂碼
##心得與體會:
1,審清題意是關鍵,一定要認真看題
2.多做多練是重點:熟能生巧