1、阅读程序

阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法

(1)

#include<stdio.h>
int main()
{
int i;
for(i='A'; i<'I'; i++,i++)
printf("%c",i+32);
printf("\n");
return 0;
}

你认为运行结果为:_________________


实际运行的结果为:_________________

(2)

#include<stdio.h>
int main()
{
char ch;
scanf("%c", &ch);
while(ch!='\n')
{
printf("%c", ch-6);
scanf("%c", &ch);
}
return 0;
}

你认为程序的功能为:_____________,实际运行程序进行体验。



(3)

#include<stdio.h>
#include<string.h>
int main()
{
char *p1,*p2,str[50]="ABCDEFG";
p1="abcd";
p2="efgh";
strcpy(str+1,p2+1);
strcpy(str+3,p1+3);
printf("%s",str);
return 0;
}

你认为运行结果为:_________________


实际运行的结果为:_________________



(4)

#include <stdio.h>
int main( )
{
char s[]="abcdefg";
char *p;
p=s;
printf("ch=%c\n",*(p+5));
return 0;
}

你认为运行结果为:_________________


实际运行的结果为:_________________




2、字符串加密程序

背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。

(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加密为其后的第4个字符。例,输入I love u,输出M$pszi$y。

参考解答:

#include<stdio.h>
int main()
{
char s[80], t[80];
int i;
gets(s);
for(i=0; s[i]!='\0'; i++)
{
t[i] = s[i]+4;
}
t[i] = '\0'; //此时i为?
printf("%s\n", t);
return 0;
}


(2)小丽请你写一个程序,在看小明的情书时,让程序帮着“解密”。因为有同学知道了他们俩人的“加密”手段,决定纸条由人传,加密数字(1-9)用两人约好的手势传,所以解密时,需要将加密数字作为程序输入。例,输入M$pszi$y(回车)4,输出I love u


参考解答:


#include<stdio.h>
int main()
{
char s[80], t[80];
int i, n;
printf("输入待解密句子:");
gets(s);
printf("输入加密数字:");
scanf("%d", &n);
char *pt = t;
for(i=0; *(s+i)!='\0'; i++,pt++)
{
*pt = s[i]-n;
}
*pt = '\0';
printf("%s\n", t);
return 0;
}


(3)小刚常帮着传纸条,想知道俩人的秘密,但不知道加密数字,于是写了一个程序,可以列出所有可能的情况。例,输入M$pszi$y,多行输出中必然有一行是I love u。你就是小刚,写出这个程序来吧。


参考解答:


#include<stdio.h>
int main()
{
char s[80], t[80], *pt;
int i, n;
printf("输入待解密句子:");
gets(s);
for(n=1; n<9; n++)
{
pt = t;
for(i=0; *(s+i)!='\0'; i++,pt++)
{
*pt = s[i]-n;
}
*pt = '\0';
printf("%s\n", t);
}
return 0;
}


3、字符统计:分别统计字符串中大写、小写字母和数字字符的个数。

#include<stdio.h>
#include<string.h>
int main()
{
char str[256], *ps;
int upper=0, lower=0, digit = 0;
gets(str);
for ( ps = str; *ps != '\0'; ps++ )
{
if ( *ps >= 'A' && *ps <= 'Z' )
upper++;
else if ( *ps >= 'a' && *ps <= 'z' )
lower++;
else if ( *ps >= '0' && *ps <= '9' )
digit++;
}
printf("字符串: %s\n", str);
printf("大写字母: %d\n", upper);
printf("小写字母: %d\n", lower);
printf("数字字符: %d\n", digit);
return 0;
}



4、编程序。将动态数组中的元素进行排序


  编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。在下面代码基础上完成


#include<stdio.h>
#include<malloc.h>
int main()
{
int count, i,j;
float *pf;
scanf("%d", &count); //输入班级人数
//分配空间,用动态数组存储全班同学成绩

//输入同学们的成绩

//排序


//输出排序后的成绩


free(pf);
return 0;
}

参考解答:


#include<stdio.h>
#include<malloc.h>
int main()
{
int count, i,j,r;
float *pf, tmp;
scanf("%d", &count); //输入班级人数
//分配空间,用动态数组存储全班同学成绩
pf = (float*) malloc( sizeof(float) * count );
//输入同学们的成绩
for ( i = 0; i < count; i++ )
{
scanf("%f", pf+i);
}
//排序
for(j=count-1; j>0; j--) //冒泡法
{
for(r=0; r<j; r++)
{
if(*(pf+r)>*(pf+r+1)) //或pf[r]>pf[r+1],下面*(pf+r)类似
{
tmp = *(pf+r);
*(pf+r) = *(pf+r+1);
*(pf+r+1) = tmp;
}
}
}
//输出排序后的成绩
for ( i = 0; i < count; i++ )
{
printf("%f\n", *(pf+i));
}
free(pf);
return 0;
}