0
点赞
收藏
分享

微信扫一扫

C语言二级考试未来教育大题参考

c语言二级考试呢,采用的编译器是VC++6.0,如果会简单的运行以及调式,那就太妙了,本次博客记录真题中大题

一、程序填空

题目:

代码:

#include  <stdio.h>
#define    N    5
typedef struct  student {
  long  sno;
  char  name[10];
  float  score[3];
} STU;
void fun(char  *filename, STU  n)
{ FILE  *fp;
/**********found**********/
  fp = fopen(filename, "rb+");
/**********found**********/
  fseek(fp, -(long)sizeof(STU), SEEK_END);
/**********found**********/
  fwrite(&n, sizeof(STU), 1, fp);
  fclose(fp);
}
main()
{ STU  t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
             {10003,"LiSi", 85, 70, 78},    {10004,"FangFang", 90, 82, 87},
             {10005,"ZhangSan", 95, 80, 88}};
  STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
  int  i,j;      FILE  *fp;
  fp = fopen("student.dat", "wb");
  fwrite(t, sizeof(STU), N, fp);
  fclose(fp);
  fp = fopen("student.dat", "rb");
  fread(ss, sizeof(STU), N, fp);
  fclose(fp);
  printf("\nThe original data :\n\n");
  for (j=0; j<N; j++)
  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
     for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
     printf("\n");
  }
  fun("student.dat", n);
  printf("\nThe data after modifing :\n\n");
  fp = fopen("student.dat", "rb");
  fread(ss, sizeof(STU), N, fp);
  fclose(fp);
  for (j=0; j<N; j++)
  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
     for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
     printf("\n");
  }
}

 代码修改位置:

 运行结果:

 

二、程序修改:

题目:

代码: 

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  NODE  *h=NULL, *p, *s;
   int  i;
/**********found***********/
   p=(NODE* )malloc(sizeof(NODE));
   h=p;
   p->next=NULL;
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));
      s->data=rand()%m;      s->next=p->next;
      p->next=s;             p=p->next;
   }
/**********found***********/
   return  h;
}
outlink(NODE  *h)
{  NODE  *p;
   p=h->next;
   printf("\n\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  printf("->%d ",p->data);
      p=p->next;
   }
   printf("\n");
}
main()
{  NODE  *head;
   head=Creatlink(8,22);
   outlink(head);
}

代码及其修改位置:

报错情况:

这种程序修改题估计都是语法错误,逻辑错误应该很少后期遇到在解释。百度的说法是因为这是在VC++6.0的编译器,不会默认从void *(空指针)转换成普通指针,所以需要在强制类型转换哪里修改成NODE *,改了之后,还有一个逻辑错误没改,返回的值,因为后面的主函数打印,所以要返回头指针。

 运行结果:

(缺失逻辑错误)

正常的运行: 

 

 三、程序设计:

题目:

 代码(未修改):

#include<string.h>
#include<stdio.h>
#define N 80
int fun(char *s)
{
  
}
void main()
{ 
  FILE *wf;
  char line[N]; 
  int num=0;
  printf("Enter a string:\n "); 
  gets(line);
  num=fun(line);
  printf("The number of word is:%d\n\n ",num);
/******************************/
  wf=fopen("out.dat","w");
  fprintf(wf,"%d",fun("a big car"));
  fclose(wf);
/*****************************/
}

已修改:

#include<string.h>
#include<stdio.h>
#define N 80
int fun(char *s)
{
//字符串输入gets函数每个单词间有空格,字符串数组最后有一个标志\0
//循环结束条件就是\0
//判断条件:字符不等于空字符,且下一个字符是空字符或者\0
  int i=0;
  int count = 0;
  /*
  for(i=0;s[i]!='\0';i++)
  {
	if(s[i]!=' ' && (s[i+1] == '\0' || s[i+1]== ' '))
		count++;
  }
  return count;
  */
  //int n = strlen(s);

  //while(i<n)
  while(*(s+i)!='\0')
  {
	if(*(s+i) != ' ' && (*(s+i+1) == ' '|| *(s+i+1)== '\0'))
		count++;
	i++;
  }
  return count;
}
void main()
{ 
  FILE *wf;
  char line[N]; 
  int num=0;
  printf("Enter a string:\n "); 
  gets(line);
  num=fun(line);
  printf("The number of word is:%d\n\n ",num);
/******************************/
  wf=fopen("out.dat","w");
  fprintf(wf,"%d",fun("a big car"));
  fclose(wf);
/*****************************/
}

代码运行结果:

 注意:

理清题目,这个题目虽然简单,但还是有坑,比如判断一个单词,如果以空格作为一个单词的判断条件,则会漏掉最后一个单词(\0),这里的判断条件是判断字符,双引号是字符串,c语言确实严谨,python就可以用双引号表示(估计在编译的时候,会自己判断),结束条件(遍历每个字符,在不知道字符数量的情况下\0,也可以调用strlen函数).

这只是第一套真题的大题,选择题可以背,但大题要跑出来才行。

举报

相关推荐

0 条评论