大学院生の1部の試験問題のいくつかの問題の節選

5483 ワード

まず、友达の大学院受験の成功を祈って、勇往邁進して、私は大学院を受けないので、完全に能力を高めて、使用することを主として、細部を気にしません.友达は私に答案用紙を見せてくれたので、いくつかの問題を切り取った.
c私は本当にその言叶に応えて、入门から放弃まで、文字列がなくて、APIがなくて、良いクラスライブラリがありません...
1.0次の文は、文字列の割り当てを正しく行うことができます(D)
A char *s = "good";  *s = "good";       B   char s1[10]; s1 = "good";
C char s3[10]; *s3 = "good";              D   char *s = "good";

c言語には文字列タイプがなく、配列、またはポインタでしか文字列を実現できません.配列名は文字列の先頭アドレスであり、文字列は2つの形式をコピーします.char *ch="sddf";//針.char ch[]="dfffg";//配列の初期化.
2.0次の関数の機能は()です.
int f(char *a, char *b)
{
    while (*a++ == *b++)
    {

    }
    return 0;
}

コンパイラはちょっと走って、実は戻り値intによって内容を推測することができます
#include
int f(char *, char *b);
int main()
{

    char *p1="abc", *p2 = "def";
    int num1=f(p1, p2);
    int num2 = f(p2, p1);
    printf("%s
", p2); printf("num1=%d
", num1); printf("num2=%d
", num2); return 0; } int f(char *a, char *b) { while (*a++ == *b++) { } return 0; }
def
num1=0
num2=0
       . . .

だからこれ、何もしてないみたい
3.0 char*aa="123456"を定義します.文printf("%c"、*aa++);その後、正しい出力は次のとおりです.
printf("%c",*aa++); *の優先度は++より高いので、配列aaのヘッダ要素です(配列名はヘッダ要素アドレスです).
#include 

int main() {
char *aa="123456";
    printf("%c
",*aa++); return 0; }

コンパイラに走ってもらうと、このような問題が好きではないことがわかります.優先度を試験したり、printf関数の知識点を試験したりします.
D:\untitled2\cmake-build-debug\untitled2.exe
1

Process finished with exit code 0


4.0 2つのディスクファイルAとBがあり、それぞれ1行のアルファベットを格納し、c言語ツールを使用してこの2つのファイルの情報を統合(アルファベット順に並べ替え)し、新しいファイルCに出力する必要がある.
構想は2つのファイルの文字列を読み取って、それらを文字の配列の中に入れて、並べ替えて、ファイルに書きます
テーマの構想は難しくありませんが、細部が多すぎて、私はcが入門してから放棄するまで、cの中の多くの関数に対して熟知していないで、cのファイルの操作に対してもあまり熟知していないで、資料を調べながら、書きます.その中で主なFILEのポインタは、移動します.関連操作を行うときは、必ずrewind()関数を使って、ファイルの位置ポインタを先頭に戻す必要があります.私はここで多くの時間を費やしました.ステルスですが、一歩一歩テストすれば、問題がここにあることに気づきます.
#include 
#include 
#include 

int longFife(FILE *fp);
void sort(char ch[] ,int n);
void arry(FILE *fp1,FILE *fp2,char *ch);
void display(FILE *fp);
void pr(char *ch ,int n);
void sort(char *ch ,int n);
int main() {
    FILE *fp,*fp1,*fp2;
    int len;
    char *p;

    if((fp1=fopen("d:\\a.txt","r+"))==NULL)
    {
        printf("open file a error");
        exit(0);
    }

    if((fp2=fopen("d:\\b.txt","r+"))==NULL)
    {
        printf("open file b error");
        exit(0);
    }

len=longFife(fp1)+longFife(fp2);

  printf("file1:");
    rewind(fp1);
    display(fp1);
    printf("
"); printf("file2:"); rewind(fp2); display(fp2); printf("
"); printf("the arry length=%d
",len); p=(char *)malloc(sizeof(char)*(len+1)); if(p!=NULL) printf("malloc arry is succeed
"); arry(fp1,fp2,p); printf("
"); printf("before sort array:p=%s",p); printf("
"); if((fp=fopen("d:\\d.txt","w+"))==NULL) { printf("open file c error"); exit(0); } sort(p,len); printf("after sort arry:p=%s",p); printf("
"); if(fputs(p,fp)!=EOF) printf("write file is succeed"); printf("read this file:"); rewind(fp); display(fp); free(p); fclose(fp1); fclose(fp2); fflush(fp); fclose(fp); free(p); return 0; } void arry(FILE *fp1,FILE *fp2,char *ch) { rewind(fp1); rewind(fp2); int n1=longFife(fp1); int n2=longFife(fp2)+n1; int i,j; rewind(fp1); for(i=0; i

結果:
D:\Clion\cmake-build-debug\Clion.exe
file1:awouyt
file2:rrtyyopmn
the arry length=15
malloc arry  is succeed
char array is succeed
before sort array:p=awouytrrtyyopmn
after sort arry:p=amnooprrttuwyyy
write file is succeedread this file:amnooprrttuwyyy
Process finished with exit code 0


c私は入門から放棄まで、結局それを使います.
関連知識点
FILEはファイル構造体であり、ファイルポインタを定義してファイルの操作を実現します.
fopen関数はファイルフォーマットfopen(ファイル名、ファイル使用方法)を開きます.エラーが発生した場合、fopen関数はNULLに戻ります.
fclose(ファイルポインタ)ファイルは閉じます.ファイルを読み書きした後、閉じなければなりません.
fputc(char ch,FILE*fp)、chは出力する文字であり、1つの文字ファイルをディスクファイルfpに出力する役割を果たし、出力に失敗した場合はファイル終了子EOF(値は-1)に戻る.
fgetc(fp);指定したファイルから文字を読み込み、ファイルの終端に遭遇した場合はEOFを返します(値は-1).
バイナリファイルを処理する場合、1バイトのバイナリデータが-1である可能性がある場合、これはEOFの値であり、このバグを解決するためにfeof(FILE*fp)で解決され、ファイルの最後のfeof(fp)値が0である場合に遭遇する.
int fseek(FILE *stream, long offset, int whence); fseekは現在の読み書きポイントをoffsetに設定し、whenceはSEEK_SET,SEEK_CUR,SEEK_ENDこれらの値は、ファイルヘッダ、現在のポイント、およびファイルの最後からオフセットoffsetを計算することを決定する.ファイルポインタFILE*fpを定義できます.ファイルを開くと、ファイルポインタが先頭を指します.オフセット量を制御すればいいです.たとえば、現在の位置に対して1バイト後ろに移動します.fseek(fp,1,SEEK_CUR);中間の値がオフセット量です.1バイト前に移動する場合は、直接負の値に変更すればいいです.fseek(fp,-1,SEEK_CUR).
喉が炎症を起こして、まだよくなくて、17年は本当に順調ではありませんて、すべてがすべてよくなることを望みます.
本文参考:C言語における文字列付与処理方式C++抽象クラスファイル操作は、2つのバイナリファイルを1つのバイナリファイルにマージする.Cファイル読み書きC言語で2つのファイルのマージを実現