实验11.1 指针数组、指针与函数
1 调试示例error11_1.cpp
2 编程题
3 编程题
4 计算最长的字符串长度
5 字符串的连接
6 指定位置输出字符串
7 藏尾诗
8 改错题error11_2.cpp
1 调试示例error11_1.cpp
/*---程序填空,不要改变与输入输出有关的语句。输入若干有关颜色的英文单词,以#作为输入结束标志,
对这些单词升序排列后输出。其中颜色的英文单词数数小于20个,颜色的英文单词长度均不超过10个字符。
输入:
Red blue yellow green purple # 输出:blue green purple red yellow
------*/
丞相何故发笑#include <stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int i,j, n = 0,index;
char *color[20], str[10], *temp;
scanf("%s", str);
while(str[0] != '#') {
color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1));
strcpy(color[n], str);
n++;
scanf("%s", str);
}
for(i=0;i<n;i++){
index=i;
for(j=i+1;j<n;j++)
if(strcmp(color[j],color[index])<0) index=j;
temp=color[index];
color[index]=color[i];
color[i]=temp;
}
for(i = 0; i < n; i++)
printf("%s ", color[i]);
printf("\n");
}
2 编程题
/*---程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。若输入月份错误,输出提示信息。输入输出示例:括号内为说明
输入:
3 (repeat=3)
5
9
14
输出:
May
September
Wrong input!
------*/
#include<stdio.h>
void main()
{
int ri,repeat;
int month;
Char*month_name[]={"","January","February","March","April","May","June","July","August","September","October","November","December"};
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
似的多音字scanf("%d",&month);
if(month>=1&&month<=12)
printf("%s\n",month_name[month]);
el
printf("Wrong input!\n");
}
}
3 编程题
/*----程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:定义一个指针数组将下表的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。(表格详见实验教材P99)
输入:
3 (repeat=3)
Tuesday
Wednesday
year
输出:3 4 -1 ----*/
#include<stdio.h>
#include<string.h>
void main()
{
int i,ri,repeat,count;
char *date[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
char str[80];
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
scanf("%s",str);
count=0;
for(i=0;i<7;i++){
if(strcmp(str,date[i])==0){
printf("%d\n",i+1);无原因
break;
}
count++;
}
if(count==7)
printf("-
1\n");
}
}
4 计算最长的字符串长度
/*---程序填空,不要改变与输入输出有关的语句。编写一个函数int max_len(char *s[ ], int n),用于计算有n(n<10)个元素的指针数组s中最长的字符串的长度,并编写主程序验证。例:(括号内为说明)
输入
4 (n=4)
blue
yellow
red
green
输出
length=6
------*/
#include <stdio.h>
摩羯座星座#include <string.h>
int max_len(char *s[],int n);
void main()
{
int i,n;
char s[10][80],*p[10];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",s[i]);
p[i]=s[i];
}
printf("length=%d\n",max_len(p,n));
}
/*---------*/
int max_len(char *s[],int n)
{
int max,i;
max=strlen(s[0]);
for(i=1;i<n;i++)
if(max<strlen(s[i]))
max=strlen(s[i]);
return max;
}
5 字符串的连接
/*---程序填空,不要改变与输入输出有关的语句。
用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。
例:(括号内为说明)
输入
abc
def
输出
abcdef
------*/
#include <stdio.h>
#include <string.h>
char *str_cat(char *s,char *t);
void main()
回到初相恋{
char s[80],t[80];
gets(s);
gets(t);
puts(str_cat(s,t));
}
char *str_cat(char *s,char *t)
{
char *p;
p=s;
while (*s!='\0')
s++;
while (*t!='\0'){
*s =*t;
s++;
t++;
}
*s='\0';
精神抖擞什么意思return p;
}
6 指定位置输出字符串
/*----程序填空,不要改变与输入输出有关的语句。编写一个程序,输入一个字符串后再输入2个字符,输出此字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。用返回字符指针的函数实现。
输入
program
r
g
输出
rog
-----*/
#include <stdio.h>
char newstr[80];
void main()
{
char str[80],c_begin,c_end;
char *fun(char *p,char c_begin,char c_end);
scanf("%s",str);
getchar();
c_begin=getchar();
getchar();
c_end=getchar();
puts(fun(str,c_begin,c_end));
}
char *fun(char *p,char c_begin,char c_end)
{
int i=0;
char *t;
t=newstr;
while(p[i]!=c_begin)
i++;
while(p[i]!=c_end){
*t=p[i];
t++;
笔尖流出的故事作文i++;
}
*t=p[i];
t++;
*t='\0';
return newstr;
电脑关机没反应}
7 藏尾诗
/*----程序填空,不要改变与输入输出有关的语句。编写一个解密藏尾诗的程序。输入一首藏尾诗(假设只有4句),输出其藏尾的真实含义。用返回字符指针的函数实现。
输入:
悠悠田园风
然而心难平
兰花轻涌浪
兰香愈幽静
输出:
风平浪静
-----*/
#include <stdio.h>
#include <string.h>
char p[16];
void main()
{
char *change(char s[4][20]);
char s[4][20];
int i;
for(i=0;i<4;i++)
scanf("%s",s[i]);
puts(change(s));
}
char *change(char s[4][20])
{
int i,len;
len=strlen(s[0]);
for(i=0;i<4;i++){
p[2*i]=s[i][len-2
]; /*strlen的长度包括有杠0的*/
p[2*i+1]=s[i][len-1];
}
p[2*i]='\0';
return p;
}
8 改错题error11_2.cpp
/*---程序填空,不要改变与输入输出有关的语句。从键盘上输入一个3×3的矩阵,求矩阵的主对角线和副对角线之和,要求定义和调用函数float matrix(float *a[3], int n),提示,函数的形参是指针数组。
输入:
8 6 12
5 9 10
7 11 5
输出:
sum=41.00
------*/
#include <stdio.h>
float matrix(float *a[3], int n);
void main()
{
int i,j;
float a[3][3],*p[3];
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++){
scanf("%f",&a[i][j]);
p[i]=a[i]; /*p[0]->a[0],p[1]*->a[1],p[2]*->a[2]*/
}
printf("sum=%0.2f\n", matrix(p,3));
}
float matrix(float *a[3], int n) /*指针a[0]->p[0],a[1]->p[1],a[2]->p[2]*/
{
int i,j;
float sum;
sum=0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++){
if(i==j)
sum=sum+*(*(a+i)+j); /*-- *(*(a+i)+j)等价于a[i][j]-- */
if(i+j==(n-1) && i!=j )
sum=sum+*(*(a+i)+ n- 1-i);
}
return sum;
}