三、編程題
1.用指針的方法編寫一函數,交換從鍵盤讀入的兩個整型數a,b。
提示:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;*p1=*p2;*p2=temp;
}
2.編寫一函數void invert(char str[ ])將一個字符串的內容顛倒過來。
提示:
定義兩個字符指針,測試字符串的長度,一個指針p1指向字符串的首地址,另一個指針p2指向字符串最後一個字符,當while(p2>p1)滿足時交換兩個指針所指的內容。
3.編寫一函數int index(char *s,char *t)檢查字符串s中是否包含字符串t,若包含則返回t在s中的開始位置(下標值),否則返回-1。
提示:先計算t的長度n
for(i=0 ; s[i] ; i++)
for(j=0;s[i+j]==t[j];j++)
if(j+1==n)
return i ;
4.編寫函數,判斷一字符串是否回文。若是回文,函數返回值為1;否則返回值為0。(回文是按順序讀和倒讀都一樣的字符串)。
提示:設字符指針p1、p2分別指向字符串的第1個字符與最後一個字符,考慮下列程序段:
while(p2>p1)
if(*p1==*p2)
{
p1++;
p2--;
}
else
return 0;
if(p1>p2)
return 1;
文件題
1.下述程序從終端讀入文本(用$作為文本結束標志)復制到一個名為out.dat的新文件中,請補全程序。
#include <stdio.h>
int main()
{
FILE *fp;
char cx;
if((fp=fopen( (1) ))==NULL)
return 0;
while((cx=getchar( ))!='$')
fputc(cx,fp);
(2) ;
return 1;
}
提示:第1個空格是打開文件讀,第2個空格是關閉文件。
2.下面的程序用來統計文件中字符的個數,請補全程序。
#include<stdio.h>
int main( )
{ FILE *fp;
long num=0;
if((fp=fopen("fname.dat","r"))==NULL)
{
printf("Can't open file!\n");
exit(0);
}
while( (1) )
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
return 1;
}
提示:第1個空格表示文件沒有結束,循環將持續。
3. 以下程序由終端鍵盤輸入一個文件名,然後把從終端鍵盤輸入的字符,依次存放到該文件中,用#作為結束輸入的標志,請補全程序。
#include<stdio.h>
void main( )
{
FILE *fp;
char ch,fname[10];
printf("Input the name of file\n");
gets(fname);
if((fp= )==NULL)
{
printf("Cannot open\n");
exit(0);
}
printf("Enter data\n");
while((ch=getchar( ))!='#')
fputc( ,fp);
fclose(fp);
}
提示:文件名是從鍵盤讀入的,因而文件名是用變量表示的,文件是打開寫。
4.下述程序從一個二進制文件中讀入結構體數據,並把讀出的數據顯示在屏幕上。請補全程序。
#include <stdio.h>
struct rec
{ int a;
float b;};
void recout(FILE *fp)
{struct rec r;
do
{fread( (1) ,sizeof(struct rec), (2) ,fp);
if( (3) )
(4) ;
printf("%d,%f",r.a,r.b);
}while(1);
}
void main()
{ FILE *fp;
fp=fopen("file.dat","rb");
recout(fp);
fclose(fp);
}
提示:在fread語句中,(1)中為存放所讀出結構數據的內存地址,當然此數據是賦給變量r,(2)中是讀出結構體變量數據的個數,(3)是與循環中止有關的判斷,(4)為中止循環。
5.從鍵盤輸入一個字符串,並逐個將字符串的每個字符傳送到磁盤文件"l1.txt"中,字符串的結束標記為"#"。
6.有一文本文件l1.txt,請編寫一個程序將文件中的英文字母及數字字符顯示在屏幕上。
提示:
7.把文本文件l1.txt中的數字字符復制到文本文件l2.txt中。
8.x從0到360度的sin(x)值寫入到文件l6.txt中,並將大於0的值顯示在屏幕上。
1、
#include <stdio.h>
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;*p1=*p2;*p2=temp;
}
void main()
{
int x,y;
scanf("%d %d", &x,&y);
swap(x,y);
printf("%d %d\n", x, y);
}
2、
#include <stdio.h>
#include <string.h>
void swap(char *p1,char *p2)
{
char temp;
temp=*p1;*p1=*p2;*p2=temp;
}
void invert(char str[ ])
{
char *p1=str;
char *p2=str+strlen(str)-1;
while(p2>p1)
{
swap(p1,p2);
p1++;
p2--;
}
}
void main()
{
char str1[100]="ghfjh";
invert(str1);
printf("%s\n",str1);
}
3、
#include <stdio.h>
#include <string.h>
int index(char *s,char *t)
{
int i,j;
for(i=0 ; s[i] ; i++)
for(j=0;s[i+j]==t[j];j++)
if((j+1)==strlen(t)) return i ;
return -1;
}
void main()
{
int x=index("fdjkfjkd","fj");
printf("%d",x);
}
4、
#include <stdio.h>
#include <string.h>
int back(char str[ ])
{
char *p1=str;
char *p2=str+strlen(str)-1;
while(p2>p1)
{
if(*p1==*p2)
{
p1++;
p2--;
}
else
return 0;
}
if(p1>p2)
return 1;
return 0;
}
void main()
{
char x[20]="abbac";
back(x)==1? printf("是回文"):printf("不是回文");
}