二级C语言上机题做法小结_二级c语言上机预测题
二级C语言上机题做法小结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“二级c语言上机预测题”。
二级C语言上机题做法小结
陈忠权 记
一.天空题。
1.如果是填函数的返回值,去看return返回值的类型,就是函数的返回类型。如果return找不到,就看函数的调用。
2.在for语句中,如 for(i=0;i
5.在循环结构中注意两级循环for语句中i与j的关系,从而定位该填什么。
6.如果是赋初值,就看你所赋的值的变量是拿去干什么,如果是用去加就赋0如果是用去乘就赋1.如果是指针的,就去题目中找一个类型相同的具有实值的变量赋给她.7.结构体的调用如b.name和a.sno等。
8如果在题目中看到(*)那么后面一定是填一个数组,如(*)[][M]或(*)[M].9.注意拷贝命令的写法。
10如果在填空题中程序与数的组合有关,哪就会与10有关。是除10,还是与10求余。11.一个字符要变成相应的整形的数,就让这个字符减去字符’0’或是48就可。
12.带头结点的写法如p->next.13.定义文件FILE,文件名filename,打开文件fopen()阅读文件名fread()关闭文件fclose()
14.奇数与2求余成立,偶数与2求余为0 15.插入的写法和删除的写法,删除一个东西就让他等于0就行
二.改错题(在/*********found*********/下一行就是错误点)
1.只要看到(*)++就一定是去括号。
2.注意函数内的变量,如果在题中使用时带有*号,那么变量定义中一定要加上*号。注意函数类型是否正确,看return。
3.看关键字是否写正确,一定要是蓝体的才是正确的。有可能是字母位置错,或是大小写不对。
4.for语句中一定是两个分号,不是逗号。
5.字符串的长度比下标大一,如果要让她等于下标的话要减去1.6.在if语句中大于、小于号一般互换,如果在公式中如果包含n或m就要小于等于n或m。7.等号一般在if语句中出现为==,不是赋值的=.8.在if或while与句中 号一般可互换。9.注意错处得0和O是否混用了。10.注意带头结点的写法。11.%号和/号互换。
12.注意题中大小写的错误。13.注意交换的写法.14.如n=strlen[aa] 这种写法是错的,这是调用,不是定义,应写为n=strlen(aa)
15.注意符号使用的错误。
16.看是否少分号。
17看函数的返回值是否正确,看return。18.sum一般赋初值为0.19.Scanf语句中一定要有&号。
20.函数的定义不能是fun(int x,y,z)这种写法,应是fun(int x,int y,int
z)21.数组的定义一般为s[M]或s[][M]在二维数组的定义中第二个方括号中一定要有一个数M或其他。
22.如果程序是把小写变成大写就减去32就行。
三.程序编写题。
如果遇到的是void无返回值类型的函数,就在里面填int czq=1;就行。填好之后就编译,运行。程序完整运行之后,去打开考生文件夹(用记事本打开,如果记事本不能用,就用vc++6.0软件打开),参照in文件(如果没有in文件,哪么数据就可能在程序中,或运行中显示出来)修改out文件或写out文件。保存就可。
如果是有返回值类型的函数,就在里面填return 1;就行,同样运行,修改或写out文件就行。
下面举两个例子;
1,。如第10题:
#include void fun(char *a, int n){ int czq=1;
}
main(){ char s[81];int n;
printf(“Enter a string:n”);gets(s);
printf(“Enter n : ”);scanf(“%d”,&n);
fun(s,n);
printf(“The string after deleted:n”);puts(s);
NONO();} NONO(){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *in, *out;
int i, n;char s[81];
in = fopen(“D:k0124010001in.dat”,“r”);
out = fopen(“D:k0124010001out.dat”,“w”);
for(i = 0;i
fscanf(in, “%s”, s);
fscanf(in, “%d”, &n);
fun(s,n);
fprintf(out, “%sn”, s);
}
fclose(in);
fclose(out);考试就在fun函数中填int czq=1;然后运行结束后打开考生文件夹,in为 *******A*BC*DEF*G**** 4 *******A*BC*DEF*G**** 8 **********LKJFHG****KHJ***SDFGH****KJKJ*J*K*K*J***** 4 ******OGH*GKLJ*LKJ*LKJ*KLKJHG*DQ*LJ*KJ***** 5 ********HJJKD***JHHKJH*DGH*TDFHG*TYRYTRIU*JGJ********** 3 *****HKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ*** 2 ******JHGDFXGGJH****JFHGFK**HKH**KJHKL***KLH*** 3 ************UYKJDFARTQYW*****HFGUJ**KJHKJ**KJHK*** 4 ********JKHILUHIUGCLKLKJGH*******HJGHG**KJH**JY*JH*M*HJH**** 3 *****JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK***** 2 打开out文件为;
*******A*BC*DEF*G**** *******A*BC*DEF*G**** **********LKJFHG****KHJ***SDFGH****KJKJ*J*K*K*J***** ******OGH*GKLJ*LKJ*LKJ*KLKJHG*DQ*LJ*KJ***** ********HJJKD***JHHKJH*DGH*TDFHG*TYRYTRIU*JGJ**********
*****HKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ*** ******JHGDFXGGJH****JFHGFK**HKH**KJHKL***KLH*** ************UYKJDFARTQYW*****HFGUJ**KJHKJ**KJHK***
********JKHILUHIUGCLKLKJGH*******HJGHG**KJH**JY*JH*M*HJH**** *****JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK*****
然后参照题目要求,是使字符串的前导*号不能多于n个,多于的就删掉,少的就不用管。哪么in文件中不是有数字如4、8、4、5、3等这就是n的值。如第一行就是前导*号不能多于4个,多的就删掉。第一行该为: ****A*BC*DEF*G**** 同样的我们把所有的改完为; ****A*BC*DEF*G****
*******A*BC*DEF*G**** ****LKJFHG****KHJ***SDFGH****KJKJ*J*K*K*J***** *****OGH*GKLJ*LKJ*LKJ*KLKJHG*DQ*LJ*KJ***** ***HJJKD***JHHKJH*DGH*TDFHG*TYRYTRIU*JGJ********** **HKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ*** ***JHGDFXGGJH****JFHGFK**HKH**KJHKL***KLH*** ****UYKJDFARTQYW*****HFGUJ**KJHKJ**KJHK*** ***JKHILUHIUGCLKLKJGH*******HJGHG**KJH**JY*JH*M*HJH**** **JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK***** 这样改完以后,保存就行了,40分就拿到手了。
2.如第2题;
#include #define
Ntypedef struct { char
num[10];
int
s;} STREC;int fun(STREC *a,STREC *b,int l, int h){ return 1;
}
main(){ STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},{“GA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA015”,85},{“GA013”,94},{“GA012”,64},{“GA014”,91},{“GA011”,90},{“GA017”,64},{“GA018”,64},{“GA016”,72}};
STREC h[N],tt;FILE *out;
int
i,j,n,low,heigh,t;
printf(“Enter 2 integer number low & heigh : ”);
scanf(“%d%d”, &low,&heigh);
if(heigh
n=fun(s,h,low,heigh);
printf(“The student's data between %d--%d :n”,low,heigh);
for(i=0;i
printf(“%s %4dn”,h[i].num,h[i].s);
printf(“n”);
out = fopen(“D:k0124010001out.dat”,“w”);
n=fun(s,h,80,98);
fprintf(out,“%dn”,n);
for(i=0;i
for(j=i+1;j
if(h[i].s>h[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}
for(i=0;i
fprintf(out,“%4dn”,h[i].s);
fprintf(out,“n”);
fclose(out);} 由于是有返回值的就在程序中填return 1;就同样运行,打开考生文件夹为; 发现没有in文件,只有out文件为; 1-858993460 很显然数据在程序中为:
STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},{“GA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA015”,85},{“GA013”,94},{“GA012”,64},{“GA014”,91},{“GA011”,90},{“GA017”,64},{“GA018”,64},{“GA016”,72}};在看看题目是要我们找一个分数段的人数返回,和输出在这个分数段的分数,按从小到大的输出。那么我们可以在程序中看出为:
n=fun(s,h,80,98);看出是找80到98这个分数段的人数及分数。
哪么从小到大的输出在这个分数段的分数从什么看出了?看一下语句:
if(h[i].s>h[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}看到了,如果大于就交换,哪么是不是把小的放在前面了?
在看看发printf语句为:
fprintf(out,“%dn”,n)一般我们要看输出格式,如(”%4d”)格式就得注意空格换行等,那么我们可以在out文件中删除所有东西后写入如下: 8 85 85 85 87 90 91 94 96 我们可以看出8是这分数段的人数,其他为在这分数段的分数排序写法。做到这里点击记事本,文件、保存就行。