实验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]);
else
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.00c语言指针实验总结
------*/
#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;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论