程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> c語言題目求教

c語言題目求教

編輯:C語言問答

c語言題目求教

15 指針題

三、編程題 

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("不是回文");
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved