下面是小编为大家收集的c语言试题及答案(共含9篇),仅供参考,欢迎大家阅读,希望可以帮助到有需要的朋友。同时,但愿您也能像本文投稿人“追赶光的蜗牛”一样,积极向本站投稿分享好文章。
《C语言试题及答案》简介开始:C语言部分一、选择题(每小题2分,共10分)(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。1、若定义:inta[2][3]{0,2,4,6,8,10};以下描述正确的有(A,C,D,E)A、*(a+1)为元素6的地址这里a+1a[1]的地址;*(a+1)的。。此内容文章属于《考试资料》栏目,以上内容为《C语言试题及答案-6-6 19:22:09》简单介绍,正文正式开始
C语言部分
一、选择题(每小题2分,共10分)
(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。
1、若定义:int a[2][3]{0,2,4,6,8,10};以下描述正确的有( A,C,D,E )
A、*(a+1)为元素6的地址
这里a+1=a[1]的地址;*(a+1)的值是6,故A正确。
B、*(a[1]+1)的值为2
为8,故B不正确
C、**(a+1)+2的值为8
这里a+1是一个指针,指向的是a[1]. *(a+1)为a[1],a[1]指向的是a[1][0]. **(a+1)为6,加2得8,故C正确;
D、a[0]与a相同
因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故D正确。
E、a[1][2]的值为10
它是指第二行的第三个元素,为10,正确
2、对函数的正确使用方法描述( A,C,D )。
A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组
B、实参数组元素和形参数组元素类型可以不一致
C、形参数组长度可以不指定 D、形参数组长度可以大于实参数组长度
E、数组名做参数属于值传递
3、对静态变量的正确描述( A,B,D,E )
A、静态局部变量在静态存储区内分配单元( )
B、静态外部变量可以赋初值,也可以不赋初值
C、静态外部变量的作用与外部变量相同
D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。
E、静态局部变量只赋一次初值
4、下列描述正确的是( A ,C)。
A、由main 函数及其参数argc和* argv[]可以实现命令行方式
B、使用fclose关闭文件时,先释放文件指针,再写缓冲区数据到文件中
//先写缓冲区数据到文件中,再释放文件指针
C、字符数组并不要求它的最后一个字符是‘’
//是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字符数组中,不用,一样可以知道到哪里是字符数组的结尾。
D、‘A’和“A”都是字符串常量
E、若char*S=“ a17bc”;则指针变量S指向的字符串所占的字节数是7
5、在缓冲文件系统中用于读写的函数有( A,B,D )
A、putchar B、fread() C、rewind () D、purw() E、fseek()
二、程序阅读,并给出运行结果(共10分,每题5分)。
(1)main()
{ unsigned a,b,x
int n;
a=0x763 输出结果:
n=6;
b=a<<(12n);
x=(a>>n2)^b; //+,,的优先级比<<,>>高。
printf(“ b=%x, x=%x”,b,x);
}
在用2个字节表示整数的系统中
结果为
d8c0
d8b6
在用4个字节表示整数的系统中
结果为
1d8c0
1d8b6
故以上两种结果都正确。
(2) #include 〈stdin.h〉
struct m {int x;
int *y;
} *p;
int a [4]={12,33,40,100};
struct m b [4]={10,&a[2],9,&a[3],8,&a[0],7,&a[1]}'
main()
{
p=b; 输出结果:
printf(“%d ”,++p>x); //>的优先级高于++,因此等于是++(p>x),为11
printf(“%d ”,(++p)>x); //p后移一个元素,其x值为9;
printf(“%d ”,++(*p>y));
//>的优先级高于*, 此时p已指向b[1],故*(p>y)为a[3]为100.自加后为101;
}
故输出结果为:
11
9
101
三、程序设计(共10分)
设在文件a.txt和文件b.txt中分别存有两个字符串,设计一个程序将这两个字符串按依序交叉的方式合并为一个字符串(例如“aaaaa”与“bbb”的合并结果为“abababaa”,而“bbb”与“aaaaa”的合作结果为“ bababaa”,)并将结果存入文件a.txt中。
【答案】
写程序时,可以分别读取a.txt文件和b.txt文件,注意(1),无论a文件先读完还是b文件先读完,程序都能作出适应性的判断。注意(2)把a和b合并的结果,写到一个临时文件c中,最后把c的文件覆盖到a文件中,达到题意的要求。
#include
main()
{
FILE *fp,*fq,*fr;
char ch;
if((fp=fopen(“a.txt”,“r+”))==NULL)
{ printf(“cannot open file a.txt”);
exit(0);
}
if((fq=fopen(“b.txt”,“r”))==NULL)
{ printf(“cannot open file b.txt”);
exit(0);
}
fr=fopen(“c.txt”,“w+”);
while(!feof(fp))
{
ch=fgetc(fp);
fputc(ch,fr);
if(!feof(fq))
{
ch=fgetc(fq);
fputc(ch,fr);
}
}
while(!feof(fq))
{
ch=fgetc(fq);
fputc(ch,fr);
}
rewind(fp); rewind(fr);
while(!feof(fr))
{
ch=fgetc(fr);
fputc(ch,fp);
}
fclose(fp); fclose(fq); fclose(fr);
}
1.2 四川大学攻读硕士学位研究生入学考试试题 及 答案
1.2.1第20DDC语言程序设计 题目
一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码写在答题纸上。请注意注明题号。每小题1分,共计6分)
1、‘ ’表示什么?
①字符串常数 ②标识符 ③变量 ④字符常量
答案:④
2、对宏定义不正确的描述是哪一个?
①在进行宏定义时,可以引用已经定义的宏名,可以层层置换
//可以引用已经定义了的宏名,可以层层置换
②宏名的有效范围包括本文件的任何位置
//宏名的有效范围定义命令之后到本源文件结束,可以用#define终止宏定义的作用域
③宠定义不是语句,不必在行末加分号
//是预处理定义语句
④对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换
3、若定义static char s[20]=”computer”;则执行语句x = strlen(s);之后,x的值为多少?
①20 ②9 ③8 ④19
//strlen函数计算char*型字符串的长度的时候,并不包含末尾的;
4、以下哪一个表达式取值是正确的?
①6>5结果为6 ②6&&5结果为7
③6||5结果为7 ④6<5结果为0
5、如定义
enum weekday {one, two, thr, fou, fiv};
enum weekday working;
以下哪个是不正确的枚举变量的使用?
①working = thr; ②working =2;
③working = (enum weekday)2;
④working = (enum weekday) (53);
//不能对其赋值
6、下列说法中正确的是哪一个?
①sizeof (char) 是结果为整型的表达式
②sizeof (char) 是一个不合法的表示形式
③sizeof (char) 是一种函数调用
④sizeof (char) 是结果为实型的表达式
二、阅读程序,并回答问题(共12分)
1、下列程序的输出是什么?(3分)
# include
void main ()
x
char * aplha [6] = x“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”y;
char **p;
int i;
p = aplha;
for (i = 0; i<4; i++)
printf (“%s”, p[i]);
printf (“ ”);
y
//输出结果
ABCDEFGHIJKL
刚好是字符串数组里面的前四个元素的内容连接起来
2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出?应该如何修改?(6分)
# include
void swap (int x, int y)
x
int t = x;
x = y;
y = t;
y
void main ()
x
int a, b, c;
scanf (“%d, %d, %d”, &a, &b, &c);
if (a>b) swap (a, b);
if (a>c) swap (a, c);
if (b>c) swap (b, c);
printf (“%d, %d, %d”, a, b, c);
y
//函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参。将值传递改成指针传递就可以了。
C函数参数采用值传递方式,虽然swap函数将形式参数x和y的值进行了调换,但是影响不到相应的实在参数。所以在主函数中,通过调用sawp函数调换a和b(或a或c,或b和c)的值是根本达不到目的的。
修改:
(1)(2分)
void swap (int *x, int*y)
x
int t = *x;
*x = *y;
*y = t;
y
(2)(2分)主函数
if(a>b) swap(&a,&b);
if(a>c) swap(&a,&c);
if(b>c) swap(&b,&c);
3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。下列程序完成的功能是什么?(3分)
# include
union
x
int n;
char ch [2];
yu;
void main ()
x
int m;
scanf (“%d”,&m);
u.n = m;
printf (“ %u, %u”,u.ch[0], u.ch[1]);
y
//该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。
三、程序设计题(12分)
假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。源文件名和目标文件名通过命令行参数获取。
分数分配:
变量定义 2分
命令行参数处理 1分
文件打开 1分
文件读 2分
排序 3分
文件写 2分
文件关闭 1分
# include
void main(int argc, char *argv[])
x
FILE *fin, *fout;
Int a [100], i, j, t;
if(argc!=3)
x
printf (“ You forgot to enter a filename ”);
return;
y
fin = fopen (argv[1], “r”);
fout = fopen (argv[2], “w”);
for (i = 0; i<100; i++)
fscanf (fin, “%d”, &a[i]);
for (i = 0; i<99; i++)
for (i = 0; i<99-i; i++)
if (a[j]>a[j+1])
xt = a[j]; a[j] = a[j+1]; a[j+1]=t;y
for (i = 0; i<100; i++)
x
if (i%10 = 0)
fprintf (fout, “%s”, “ ”);
fprintf (fout, “%d”, a[i]);
y
fclose (fin);
fclose (fout);
y
1.3 四川大学攻读硕士学位研究生入学考试试题 及 答案
1.3.1 第20DDC语言题目
C语言程序设计(共30分)
一、单项选择题(在每小题的四个备选答案中,选出一个正确答案。每小题1分,共6分)
1、如果I为整型变量,f为float型变量,c表达式'a'+I*f的类型为 。
A、字符型 B、整型 C、单精度型 D、双精度型
//即使是两个float型的数据相加,都化成double型 float型的数据在运算时一律转化成双精度型,提高其运算精度
2、关于c表达式5||(a=b+c)==3的值,正确的说法为 。
A、值为1 B、值为5 C、值为0
D、仅这一个表达式,不能确定值,必须知道a,b,c的值后才能计算。
//等号==的优先级高于||所以先计算(a=b+c)==3但是不论它为真或假,在与5进行或运算时,按照或运算的法则,只要一方为真,表达式的结果为真。
3、若整型变量a的值为50,则c表达式a>>2的值为 。
A、50 B、25 C、12.5 D、12
//每右移一位除以2,且由于a为整型,结果为整型
4、若c,c1,c2均为字符型变量,下列语句执行后。
c='a';
c1=++c;
c2=c++;
c1,c2的值分别为 。
A、c1='b',c2='c' B、c1='a', c2='c' C、c1='b',c2='b' D、c1='a',c2='b'
//前加加,先加1后使用值,后加加是先使用其值在加加,所以c加加后的值赋予c1,c1得值b,c2先使用值,再加加,c2得值b
5、以下c 语句执行后,
int i, s=0;
for (i=0;i<10;i++)s+=i;
printf ('%d ', i);
输出的内容为 。
A、0 B、9 C、10 D、11
//i值在循环外定义,所以其值循环结束仍有意义,得值10
6、以下c语句执行后,
char s1[100] =″I like C 1anguage″,s2[100];
strcpy(s2, s1);
strcat (s1, s2);
puts (s2);
输出的内容为 。
A、I B、I like C language C、I like C language I like C language
D、I like C language I like C language I like C language
//连接后的串存在s1里,对s2没有影响
二、阅读程序,写出该程序的执行结果。(4分)
# include 〈stdio.h〉
void main ( )
{ char a [3] [10]={“Beijing ”,“Shanghai”, “Chengdu”};
char p1, (*p2)[10];
p1=a[0];
p2=a;
printf(“%c ”,*(a[1]+1));
// a[1]代表是第一行字符串Shanghai,加1后得值第一个字符h的地址,*取出其地址里的值h
printf(“%c ”,*(*(a+1)+2));
// *(a+i)=a[i] 代表是第一行字符串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值
printf(“%c ”,*(p1+1));
//p1是一字符指针,加一指向第零行第1个字符e的位置,*取出其地址里的值
printf(“%c ”,*(*(p2+1)+2));
//p2为一指向数组的指针,p2是与数组名等价的指针,它指向2维数组的首行,p2+1指针指向了第一行字串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值
printf(“%s ”,*(p1+1));
//打印的从第一个字符开始的第零行余下的字符串eijing
printf(“%s ”,*(p2[2]);
//p2[2]指的是第二行,打印第二行字符串Chengdu
printf(“%s ”,*(p2+1));
//p2+1指向的是第一行字符串shanghai
三、按要求编写函数。(8分)
在一程序中定义了如下结构类型用于处理单向链表:
struct linkage {
int value;
struct linkage *pNext;
};
现已经编写出按节点的成员a值从小到大建立初始链表的函数
create ( ),如下所示:
struct linkage * create (void )
{
struct linkage * pHead;
int a[4]={2,1,3,5};
pHead=NULL;
for (i=0;i<4;i++)
pHead=addItem(pHead,a[i]);
return pHead;
}
在该函数的for循环前,pHead为NULL;在执行整个for循环后,创建的链表如下所示:
即在被调函数addItem( )中,需要动态分配内存,生成新节点,将传入的第二参数的值赋给该节点的成员value:并通过第一个参数链表首节点确定适当位置放置该新节点。
请完成函数:
struct linkage * addItem (struct linkage *pHead, int value );
返回值指向单向链表头节点。
你可能用到下面的动态内存分配函数。
void* malloc (unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。返回值为指向分配域起始地址的指针。
1、在空链表中加第一个节点2分;
2、加到当前链表头节点前2分;
3、加到当前链表头节之后适当位置,可分为两步。2分;
4、其它部分2分,包括整体结构,变量定义,返回值。
struct linkage *addItem (struct linkgae *pHead ,int value)
{ struct linkage *p ,*q,*r,*s;
p=pHead;
if (!p)
{ r=(struct linkage *) malloc (sizeof (struct linkage));
r>a=value;
r>pNext =NULL;
pHead=r;
}
else if (value <=p>a)
{ r=(struct linkage *) malloc (sizeof (struct linkage));
r>a=value;
r>pNext =p;
pHead=r;
else
{ q=p>pNext;
while (q)
if (value<=q>a)
break;
else
{ p=q;
q=p>pNext;
}
r=(struct linkage *)malloc (sizeof (struct linkage));
r>a=value;
r>pNext=q;
p>pNext=r;
}
return pHead;
}
四、程序设计。(12分)
单位HTML文件由标签,标题和正文主体等部分组成。如下所示:
〈HTML〉
〈HEAD〉
〈TITLE〉HTML标题部分
〈/HEAD〉
这里是HTML文件的主体部分。
换新行。
〈/HTML〉
符号“<与”>“及其之间的内容是标签,如〈HTML〉,等。其它部分是标题和主体。请按以下说明和要求完成程序,将简单的HTML文件转换为TXT文件:
1. 序将简单HTML文件的有标签和换行符( )(去掉。标题部分结束(遇到标签)后加上一个换行符( )。每一个
标签换成一个换行符( )。其余部分原样保留。如上面的简单HTML文件处理为(L表示换行):
HTML标题部分L
这里是HTML文件的主体部分。L
换新行。
2.简单HTML文件的标签内没有嵌套情况,即在”<和“>”这间不会再出现“<或”>“。
3.标签内的内容大小写无关。如
,
,
等价。
4.示签的”<和“>”与标签内容间无空格。即不会出现
或< BR>等情况。
5.标题和正文中不会出现“<和”>“字符,它们通过转义字符实现,这时尤需考虑。
6.程序需要处理命令行参数。第一个参数指要处理的HTML文件名,第二个参数指定处理后要存放的文件名。这两个文件都是文本文件。
7.程序必须进行必要的出错处理,如无法打开文件等。
8.程序不需要包含头文件。
1、main()函数形参处理:2分。
2、变量定义1分。
3、打开关闭文件2分;
4、读源文件1分;
5、能从标签中找出内容〈BR〉〈/TITLE〉换为' '部分2分;
6、区分开标签和其它部分,并按要求写入目标文件2分;
7、整体结构正确2分;
void main (int argc, char *argv[])
{ char C,tag[7];
int status ,len ;
FILE*fin,*fout;
if (argc!=3)
{ printf(”参数个数不对!“)
exit (1)
}
if ((fin=fopen (argv [1],”r“)))==NULL)
{
printf(“打不开源文件”);
exit(1);
}
if ((fout=fopen (argv [2],”w“)))==NULL)
{
printf(”无法写入文件!“);
fclose (fin);
exit (1);
}
status =0;
while ((c=fgetc (fin)))!=EOF)
switch (C)
{
case '<':
status=1;
len=0;
break;
case ‘>’:
status=0;
if(len<=6)
tag[len]=0;
if(!strcmp(tag,”/title”)||!strcmp(tag,”br”))
fputc(‘ ’,fout);
break;
case ' ':break;
default:
if (! status)
fputc (c,fout);
else
{ len++;
if (len<=6);
tag[len1]=c;
}
}
fclose (fin);
fclose (fout);
}
1.4 四川大学攻读硕士学位研究生入学考试试题及 答案
1.4.1 第20DDC语言题目
C语言程序设计(40分)
一、分析下面的 程序,写出程序执行结果。(每小题4分,共2分)
1、
#include 〈stdio.h〉
void swap (int **p1,int **p2)
{ int *t;
t=*p1;
p1=p2;
*p2=t;
}
void main( )
{ int a=1、b=3、*p=&a、*q=&b;
swap(&p、&q);
printf('%d、5d、%d、%d ”、a、b、*p、*q;
}
//因为在swap函数里交换的是两个参数的地址,所以参数使用的是两级指针,表示交换的是指针的地址,最终使p指向了b,q指向了a。
1,3,3,1
2.
# include
void merge (char *d、char sl、char、S2)
{ while (*sl!='' && *S2!='')
if (*sl<*s2)
d++=*sl++;
else
d++=*s2++;
while (*sl!=') *d++=sl++;
while (*s2!='') *d++=s2++;
*d='',
}
void main( )
{ char sl=“acdgh”,s2=“bcfhi”,s3[20];
merge(s3,s1,s2);
puts(s3)
}
//将两个字符串合为一个按照字母顺序排列的串
abccdfghhi
二、按要求完成C函数。(每小题10分,共20分)
1.int maxsameChar(char *s);
该函数计算字符串 s中最大连续相同的字符个数。例如,若s 为“aaabbbb”,则返回值为4;若s为“abcde”,则返回值为1。
int maxSameChar (char *s)
{ int temp=1, max=0;
char c='';
while (*s)
{ if (c==*s)
tmpe++;
else
{ c=*s;
temp=1;
}
if (max
max=temp;
s++;
}
return max;
}
2. struct mode *reverse(struct mode *pHead);
其中,struct node 定义如下:
struct node
{ int key ;
struct node *pNext;
};
此函数传入的pHead指向要处理的单向链表头,该链表以NULL指针结束。函数实现链表链接方向(包括pHead 指向的原头节点)的反转,如图1所示。并将新链表头指针作为函数值返回。在完成此函数时,你只能利用原有链表节点,不能申请新节点空间。
struct node* reverse (struct node* pHead)
{ struct nodt *p,*q,*t;
if (pHead==NULL)
return NULL;
p=pHead;
q=p>pNext;
while (q! NULL)
{ t =q>pNext;
q>pNext=p;
p=q;
q=t;
}
pHead>pNext=NULL;
pHead=p;
return pHead;
}
三、按要求完成简单的客车车次查询程序。(12分)
某车站需要一个简单的客车车次查询程序。说明如下:
1. 客车车次数据文件checi.txt放在c:data目录下,格式为:
T8 成都 北京西 09:30
1364 成都 北京西 14:20
K118 攀枝花 北京西 22:00
… … …
其中每行为一次车的信息,分为4个数据项:车次,始发站,终点站和离开本站时间。前三个数据项留的宽度为8字符,最后一项结束后即换行。数据项间一定有空格隔开,每一数据项内无空格。
2.你的程序对用户通过命令行参数指一的车次,在客车车次数据文件中查找相应车次信息并输出该次车的始发站,终点站和离开本站时间,如果未找到,则输出“找不到该次车信息!”。
3.你的程序可以使用标准的C库函数,可以不引用文件。程序中应给出必要的注释。
int main (int argc, char *argv [ ])
{ char info [4] [20];
FILE * fp;
int I,found=0;
if (argc!=2)
{ printf(“参数个数不正确! ”);
return 1;
}
fp=fopen (“c:checi. txt ”,“r”);
if (fp==NULL)
{ printf (“无法打开数据文件! ”);
return 1;
}
while (! feof (fp))
{ for (I=0;i<4; i++)
fscanf (fp,“%s”,info[i]);
if (!stricmp (info[0],argv[1]))
{ found=1;
printf(“始发站:%s ”,info [1]);
printf(“始发站:%s ”,info [2]);
printf(“离本站时间:%s ”,info [3]);
break;
}
}
if (! found )
printf(“找不到该次车信息! ”);
return 0;
}
1.5 四川大学攻读硕士学位研究生入学考试试题及 答案
1.5.1 第20DDC语言题目
C语言程序设计(40分)
一、写出下列表达运算后a的值,设a,b 均为 int ,每个表达式运算到a=2,b=3。(5分)
(1) a+=b*5
//a=a+b*5,为17
(2) a=b++
//a=3
(3) a%=(a%=b)
//结果为0
(4) a=a>b&&b>a||a
//>的优先级高于&&和||原式理解为(a>b)&&(b>a)||a
&&运算符高于||,原式理解为((a>b)&&(b>a))||a,因为a值为2,结果为1真。或运算是有一为1
(5) a=!b
//!的运算符最高,<其次,&&最小原式理解为((!b)
二、下面的程序构造一个有向图,请画出其示意图。(10分)
include 〈stdio.h〉
struct node /*有向图的节点类型*/
{ int key;
struct node *left,*right,*up,*down;
};
int main (int argc ,char * argv [])
{ int i;
struct node nodes[5];
for( i=0;i<5;i++)
{ nodes [i].key=i;
nodes [i].left=NULL;
nodes [i].right=NULL;
nodes [i].up=NULL;
nodes [i].down=NULL;
}
nodes [0].left=nodes+1;
nodes [1].left=nodes;
nodes [1].up=nodes+2;
nodes [2].down=nodes+3;
nodes [3].right=nodes+4;
nodes [4].up=nodes;
nodes [4].down=nodes+1;
return 0;
}
三、按要求完成函数。(10分)
int sameChar sAT SamePos (char *s1,char *s2);
两个字符串的字符进行同位置比较,返回相同的字符数(串结束符‘’不比较)。
例如,若s1=“abc”,s2=“Abc”,则返回值为2。
int sameCharAtSame Pos (char *s1,char *s2)
{
int counter =0;
while (*sl && *s2)
{
if (*s1 == *s2)
counter ++;
s1++;
s2++;
}
return counter;
}
四、按要求编写程序对一种特殊字符串解码。(15分)
要处理的特殊字符串由A,C,G,U四个字符组成,如下所示:
ACUGCCCAUGAAAAACUUUUGACAC
其有效信息子串从第一次出现“AUG”后开始,遇到“UGA”结束(不包括“AUG”和“UGA”。)如上面的编码串需解码的有效子串为:
AAAAACUUU
有效子串中每3个字符(如“AAA”,“CGA”)作为一个密码子(可以保证,有效子串的长度一定为3的整数倍。)可能的密码子(62种)及相应码值以如下形式放在编码文件code.txt中(按密码子字典序排列);
AAA K
AAC N
…………
UUU F
请编写C程序对存放在文件中的特殊字符串解码,在屏幕输出解码串。如:KNF
KNE
要求:
1、编码文件code.txt放在c盘根目录下;
2、要解码的特殊字符串以文件形式存放,其串长不超过1024字符;
3、你编写的程序应能处理命令参数,指定要解码的字符串文件;
4、程序中可以使用C语言的标准库函数,不需要写出头文件;
5、程序中应有必有的注释。
#include 〈stdio.h〉
#include 〈string.h〉
struct
{
char name[4];
char code;
} table [62];
int main (int argc,char *argv [ ])
{
FILE *code? file=NULL, *string file =NULL;
char string [1024+2],buffer[4],*p,*end ;
int I;
/* 检查命令行参数*/
if (argc<=1)
}
/*打开编码文件以及待解码文件*/
code? file=fopen (“c:code. txt”,“r”);
string file =fopen (argv[1],“r”);
if (code_file= = NULL | | string_file = =NULL)
return 1;
/* 读编码文件,将结果记入表中 */
for (i=0; i<62; i++)
{
fscanf(code_file, “%s %c ”, tabie[i], name, &table[i].code);
}
/*读待解码文件内容到string中 */
fgets (string, sizeof (string), string_file);
/* 扫描有效子串头 */
p= strstr(string, “AUG”);
end = strstr (p + 3 , “UGA”);
/*读有效子串,查表输出解码字符,直到子串尾 */
for (p+=3; p
{
for (i=0; i<3; i++)
{
buffer [i] = p [i];
}
buffer [i] ='';
for (i=0; i<62; i++)
{
if (strcmp (buffer, table [i].name)) = = 0)
{
printf(“%c”, table[i]. code);
break;
}
}
}
/* 关闭编码文件以及待解码文件 */
fclose (code_file);
fclose (string_file);
return 0;
}
1.6 四川大学攻读硕士学位研究生入学考试试题及 答案
1.6.1 第20DDC语言题目
C语言程序设计(50分)
一、 读程序,写执行结果(8分)
1、
#include
int main( )
{ int a=4,b=3,c=1,x;
x=a>b;
printf(“%d ”,x);
//结果为1
x=a+b++;
printf(”%d ”,x);
//结果为6
x=a>b;
printf(”%d ”,x);
//结果为假,0
x=c&&b==c;
printf(”%d ”,x);
//==的运算级高于&&, c&&(b==c)结果为假0
return0;
}
2.
#include
int main( )
{ inti,j;
for(I=0;I=8;I+=2)
{ for(j=0;j<(8I)/2;j++
printf(”+”);
for(j=0;j<=I;j++)
printf(”*”);
printf( ”);
}
return0;
}
++++*
+++***
++*****
+*******
二.按要求完成函数。(28分)
1. 一种最简单的字符串加密方法是将字符串的每一字符加上一个偏移量offset(不考虑溢出)。请编写木相应的编解码函
数,其原型分别为:
char*encode(char*s,int offset);
char *decode(char *s,offset);
char *encode(char *s,int offset)
{
char *p=s;
while (*p)
{
*p +=offset;
}
renturn s;
}
char *decode(char *sm int iffset)
{
char *p= s;
while(*p)
{
*p=offset;
}
return s;
}
2编写函数将两个节点值递增的单向链表归并为一个。要求利用原节点空间。链表节点定义为:
struct node
{ int value;
struct node *pNext;
};
函数原型为:
struct node *merge(struct node *a, struct node *b);
其中a,b为要归并的两个单向链表头节点指针,函数返回值为归并后的单向链表头节点指针。
struct node
{
int value
struct node *pNext;
}
struct node *merge(struct node *a, struct node *b)
{
struct node *p;
struct node *q
struct node *t;
if (a>value <=b>vaLue)
{
p=a;
q=b
}
else
{
p=b
q=a;
}
t=p;
while (q)
{
if (p>pNext ==NULL)
{
P>Pnext=q
break;
}
if (q>value
pNext>value)
{
struct node.*k=q>pNext;
q>pNxt=p>pNext;
p>pNext=q;
q=k;
continue;
}
p=p>pNext;
}
return t;
}
三.编写程序模拟数字LED显示。(14分)
编写程序完成如下功能:用户键盘输入最多四位的整数,在屏幕上以类似LED方式显示。如用户输入为:
8234
则输出
其中每个数字字模均为7行×4列。09+个数字的字模顺序地以文本形式存放在方件C:font.txt中。
要求:
1、 输出的各数字间有1个空格;
2、 你的程序可以使用C语言标准库函数,不需要写出头文件;
3、 程序中应有必有的注释。
char font[10][7][5];
94 int n;
95 int digit[4];
96 int length=0;
97
98/ * 装载字体文件 */
99 void load fontsO
100 {
101 int I, j, k;
102 FILE *file;
103
104 file = fopen(”c:font”,”r”);
105 if (file==NULL)
106 {
107 printf(” 打开字体文件 font. Txt 错误|n”);
108 exit(1);
109 }
110
111 for (k = 0; k<10;k++)
112 {
113 for (I=0; I<7; I++)
114 {
115 char line[10];
116 fgets(line, 5, file);
117 for (j=0; j<4;j++)
118 {
119 font[k][I][j]=line[j];
120 }
121 font[k][I][4]=0;
122 }
123 }
124
125 fclose(file);
126 }
127
128/* 将输入的整数解码为单个的数字*/
129 void decode()
130 {
131 int I;
132 int m=n;
133 for (I=0; I <4;I++)
134 {
135 digit[I]=m % 10;
136 m =m/10;
137
138 if (m==0)
139 break;
140 }
141
142 length = I + 1;
143 if (length >=4)
144 length=4;
145 }
146
147 /* 显示LED */
148 void disnlav()
149 {
150 int I,j;
151 for (I=0; I<7;I++)
152 {
153 for (j = lengthI; j>=0;j__)
154 {
155 printf(”%s”, font[j][I]);
156 printf(” ”);
157 }
158 printf(” ”);
159 }
160 }
161
162 int main()
163 {
164
165 load fonts();
166
167 scanf(”%d”, &n);
168 decode();
169 display();
170 }
C语言试题及答案的延伸阅读――c语言学习体会
记得上次开班会的时候我吹牛说要和你们一起学习c语言,不知不觉已经快半个月拉。我得对自己的话负责。今天我把借来的教材看了看,以前真的是不了解,今天才知道它是贝尔实验室的设计师Dennis在1972年设计的。c语言是其他计算机语言的基础,其他的计算机语言都是在它的基础上研发。所以学好c语言对于以后要在自动化专业有所发展的同学是非常有好处的,尤其是将来的plc编程、电子产品设计等等,都需要用到c语言。
今天我学习了一个最最简单的程序,感觉十分有收获,明白了它的最基本的道理――它也是一门语言,和我们的汉语是一样的,它也有自己的语法、逻辑结构,只要是能真正的去理解它,还是很容易学会的。
今天学习的程序如下:
#include
#include
main()
{
double x,s;
printf(“input number: ”);
scanf(“%lf”,&x);
s=sin(x);
printf(“sine of %lf is %lf ”,x,s);
}
这个的功能
c语言试题及答案
c语言试题
一 选择题(7分,每小题0.5分)
1.C语言源程序的基本单位是( )。
A 过程 B 函数 C 子程序 D 标识符
2.下列程序的输出结果是( )。
main( )
{ int a=7,b=5;
printf(“%d”,b=b/a);
}
A 5 B 1 C 0 D不确定值
3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。
A 7 B 8 C 9 D 2
4.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534; a=(int)125.521%4; a=5<<2;
A 125,31,1 B 125,1,20 C 125,31,20 D 125.534,2,20
5.设有如下程序段,下面描述中正确的是 ( )。
int k=10; while(k=0) k=k-1;
A 循环执行一次 B循环是无限循环 C循环体语句一次也不执行 D循环体语句执行一次
6.以下程序的输出结果为( )。
int i;
void prt( )
{ for(i=5;i<8;i++) printf(“%c”,'*');
printf(“ ”);
}
main( )
{ for(i=5;i<=8;i++) prt( );
}
A *** B *** *** *** *** C *** *** D * * *
7.在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套
B函数的定义不可以嵌套,但函数的调用可以嵌套
C函数的定义和函数的调用都不可以嵌套
D函数的定义和函数的调用都可以嵌套
8.以下函数调用语句中含有( )个实参。
func((e1,e2),(e3,e4,e5));
A 2 B 3 C 5 D 语法错误
9.以下程序的输出结果为( )。
#define ADD(x) x*x
main( )
{ int a=4,b=6,c=7,d=ADD(a+b)*c;
printf(“d=%d”,d);
}
A d=70 B d=80 C d=140 D d=700
10.已知职工记录描述如下,在Turbo C中,系统为变量w分配( )字节的空间。
struct worker
{ int no;
char name[20];
char sex;
union
{ int day; int month; int year;}birth;
} w;
A 29 B 20 C 25 D 6
11.设有以下定义,值为5的枚举常量是( )。
enum week{sun,mon=4,tue,wed,thu,fri,sat} w;
A tue B sat C fri D thu
12.下面选项中正确的赋值语句是(设 char a[5],*p=a;)( )。
A p=“abcd”; B a=“abcd”; C *p=“abcd”; D *a=“abcd”;
13.设有以下程序段,则值为6的表达式是( )。
struct st { int n; struct st *next;};
static struct st a[3]={5,&a[1],7,&a[2],9,0 },*p;
p=&a[0];
A p++->n B ++p->n C p->n++ D (*p).n++
14.C语言中的文件类型只有( )。
A 索引文件和文本文件两种 B 文本文件一种
C 二进制文件一种 D ASCII码文件和二进制文件两种
二 判断对错,对的划“√”,错的划“×”(5分,每小题0.5分)
1.在Turbo C中,整型数据在内存中占2个字节。( )
2.int i=20;switch(i/10){case 2:printf(“A”);case 1:printf(“B”);}的输出结果为A。( )
3.break语句用在循环体中,可结束本层循环,continue语句用在循环体中,可结束本次循环。( )
4.函数的递归调用不过是一个函数直接或间接地调用它自身。( )
5.函数strlen(“ASDFG”)的值是7。( )
6.通过return语句,函数可以带回一个或一个以上的返回值。( )
7.结构体类型只有一种。 ( )
8.char *p=“girl”;的含义是定义字符型指针变量p,p的值是字符串“girl”。( )
9.若有定义:char *p(char a[10]);则p是函数名。( )
10.用fopen(“file”,“r+”);打开的文件“file”可以进行修改。 ( )
三 写出下列程序的运行结果(10分,每小题2分)
1.float average (float array[10])
{ int i;
float aver,sum=array[0];
for (i=1;i<10;i++)
sum=sum+array[i];
aver=sum/10;
return(aver);
}
main( )
{ float score[10]={89,67.5,78,91,56,82.5,65,70,79,88},aver;
int i;
aver=average (score);
printf (“average score is %5.2f”,aver);
}
2.main( )
{ char a[5]={‘A’,‘B’,‘C’,‘D’,‘E’},*p=a,**pa;
for(p=0;p
printf(“%2c”,*p);
printf(“”);
printf(“%2c”,**(pa=&p));
}
3.main( )
{ int a,b,s=0;
for(a=1,b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3==1)
{ b+=3; continue; }
b-=5;
}
printf(“a=%d b=%d”,a,b);
}
4.main()
{ printf(“main( ) :%d”,fact(5));
fact(-5);
}
fact(int value)
{ int f;
if(value<0)
{ printf(“Arg error“);
return(-1);
}
else if(value==1||value==0) f=1;
else f=value*fact(value-1)+1;
printf(“This called value=%d”,f);
return f;
}
5.main( )
{ int a=012,b=0x12,k=12;
char c=‘102’,d=‘’;
printf(“a=%d b=%d k=%d”,a,b,k);
printf(“c=%c,d=%c%o”,c,d,a);
a=‘A’; c=49;
printf(“a=%d c=%c”,a,c);
}
四 阅读下列程序,在 处填入适当内容,使程序完整(8分,每个空1分)
1.有一个3*4矩阵,求其中的最大元素。
max_value( (1) )
{ int i,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max=array[i][j];
(2) ;
}
main( )
{ int a[3][4], i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
(3) ;
printf(“max value is %d”,max_value(a));
}
2.输入x、y两个整数,按先大后小的顺序输出x、y。
#include “stdio.h”
main( )
{ int x,y, *px,*py, (4) ;
scanf(“%d%d”,&x,&y);
(5) ; (6) ;
if(x
{ p=px; px=py; py=p; }
printf(“x=%d,y=%d”,x,y);
printf(“MAX=%d,MIN=%d”,*px,*py);
}
3.用选择排序法对任意10个整数按照由小到大排序。
main()
{ int a[11],i,j,k,t;
printf(”Please input 10 numbers:“);
for(i=1;i<11;i++) scanf(”%d“,&a[i]);
printf(”“);
for(i=1;i<=9;i++)
{ (7) ;
for(j=i+1; (8) ;j++)
if(a[j]>a[k]) k=j;
if(k!=i)
{ t=a[k]; a[k]=a[i]; a[i]=t;}
}
printf(”The sorted numbers:“);
for(i=1;i<11;i++) printf(”%d “,a[i]);
}
答案
一 选择题(7分,每小题0.5分)
1. B 2. C 3. B 4. B 5. C
6. A 7. B 8. A 9. A 10. C
11. A 12. A 13. B 14. D
二 判断对错,对的划“√”,错的划“×”(5分,每小题0.5分)
1.× 2.× 3.√ 4.√ 5.×
6.× 7.× 8.× 9.√ 10.√
三 写出下列程序的运行结果(10分,每小题2分)
1. 2. 3.
4. 5.
四 阅读下列程序,在 处填入适当内容,使程序完整(8分,每个空1分)
1.(1)int array[3][4](int array[][4]) (2)return(max) (3)scanf(“%d”,&a[i][j])
2.(4)*p (5)px=&x(py=&y) (6)py=&y(px=&x)
3.(7) (8)
C语言试题3
一 选择题(24分,每小题2分)
1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是( )。
A 存放读入数据项的存储区 B 存放读入数据的地址或指向此地址的指针
C 一个指向所读文件的文件指针 D 一个整形变量,代表要读入的数据项总数
2.以下程序的输出结果为( )。
main( )
{ int i=010,j=10;
printf(”%d,%d“,i++,j--);
}
A 11,9 B 9,10 C 8,10 D 9,9
3.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。a=125.534;a=20.0/3;a=(int)125.521%4;a=5<<2;
A 125,6,31,1 B 125,6,1,20 C 125,6.666666,31,20 D 125.534,6.666666,2,20
4.设i和k都是int类型,则for循环语句( )。
for(i=0,k=-1;k=1;i++,k++) printf(”****“);
A 循环结束的条件不合法 B 循环体一次也不执行 C 循环体只执行一次 D 是无限循环
5.以下程序的输出结果为( )。
main( )
{ char c;
int i;
for(i=65;i<68;i++)
{ c=i+32;
switch(c)
{ case 'a':case 'b':case 'c':printf(”%c,“,c);break; default:printf(”end“);}
}
}
A a,b,c,end B a,a,a,end C a,a,a, D a,b,c,
6.函数调用语句:fseek(fp,-10L,2);的含义是( )。
A 将文件位置指针从文件末尾处向文件头的方向移动10个字节
B 将文件位置指针从当前位置向文件头的方向移动10个字节
C 将文件位置指针从当前位置向文件末尾方向移动10个字节
D 将文件位置指针移到距离文件头10个字节处
7.以下程序的输出结果为( )。
main( )
{ char s1[40]=”country“,s2[20]=”side“;
int i=0,j=0;
while(s1[i]!=' ') i++;
while(s2[j]!=' ') s1[i++]=s2[j++];
s1[i]=0;
printf(”%s“,s1);
}
A side B country C sidetry D countryside
8.下列说法不正确的是( )。
A 主函数main中定义的变量在整个文件或程序中有效
B 不同函数中,可以使用相同名字的变量
C 形式参数是局部变量
D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
9.在下列程序段中,枚举变量 c1的.值是( )。
enum color { red,yellow,blue=4,green,white}c1; c1=yellow; c1=white;
A 1 B 3 C 5 D 6
10.设有说明 int (*ptr)();其中标识符ptr是( )。
A 是一个指向整形变量的指针 B 是一个指针,它指向一个函数值是int的函数
C 是一个函数名 D定义不合法
11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为( )。
A int p; B int (*p)[n]; C int *p[n]; D int (*p)( );
12.具有相同类型的指针类型变量p与数组a,不能进行的操作是( )。
A p=a; B *p=a[0]; C p=&a[0]; D p=&a;
二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)
1.参加位运算的数据可以是任何类型的数据。( )
2.若有定义和语句:int a;char c;float f;scanf(”%d,%c,%f“,&a,&c,&f);若通过键盘输入:10,A,12.5,则a=10,c=‘A’,f=12.5。( )
3.C语言把文件看作是一个字符(字节)的序列。( )
4.若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的。( )
5.在Turbo C中,下面的定义和语句是合法的:file *fp;fp=fopen(”a.txt“,”r“);( )
6.若有定义:char s[ ]=”china“;则Turbo C系统为数组s开辟6个字节的内存单元。( )
7.若有定义和语句:int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;for(i=0;i<3;i++) sum+=a[i][2-i];则sum=21。( )
8.若有定义和语句:struct student { int num; char name[10]; float score;} s[5]={{1,”lili“,98.5},{9,”xiaohua“,66}},*p=s;printf(”%d“,*p++);输出结果是1。( )
9.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。( )
10.在Turbo C中,此定义和语句是合法的:enum aa{ a=5,b,c}bb;bb=(enum aa)5;( )
三 写出下列程序的运行结果(36分,每小题6分)
1.main( )
{ int i=29,j=6,k=2,s;
s=i+i/j%k-9;
printf(“s=%d”,s);
}
2.main( )
{ int x=31,y=2,s=0;
do
{ s-=x*y;
x+=2;
y-=3;} while( x%3==0);
printf(“x=%d y=%d s=%d”,x,y,s);
}
3.main( )
{ int a[6]={10,20,30,40,50,60},i;
invert(a,0,5);
for(i=0;i<6;i++) printf(“%d,”,a[i]);
printf(“”);
}
invert(int s[ ],int i,int j)
{ int t;
if(i
{ invert(s,i+1j-1);
t=s[i];s[i]=s[j];s[j]=t;
}
}
4.#include
main()
{ char str[ ]=“The C program”,c;
int i;
for(i=2;(c=str[i])!=‘ ’;i++)
{ switch(c)
{ case ‘g’: ++i; break;
case ‘o’: continue;
default: printf(“%c”,c); continue;
}
printf(“*”);
}
printf(“”);
}
5.struct w
{ char low;
char high;
};
union u
{ struct w byte;
short word;
}uw;
main( )
{ int result;
uw.word=0x1234;
printf(“word value:%04x”,uw.word);
printf(“high byte:%02x”,uw.byte.high);
printf(“low byte:%02x”,uw.byte.low);
uw.byte.low=0x74;
printf(“word value:%04x”,uw.word);
result=uw.word+0x2a34;
printf(“the result:%04x”,result);
}
6.main()
{ char *s2=“I love China!”,**s1=&s2;
char *s3,c,*s4=“w”;
s3=&c;
*s3=‘H’;
s2=s2+2;
printf(“%s %c %s %c”,s2,*s3,s4,**s1);
}
四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)
1. 百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main( )
{ int hb,hm,hl,n=0;
for(hb=0;hb<=100;hb+= (1) )
for(hm=0;hm<=100-hb;hm+= (2) )
{ hl=100-hb- (3) ;
if(hb/3+hm/2+2* (3) ==100)
{ n++;
printf(”hb=%d,hm=%d,hl=%d“,hb/3,hm/2,2*hl);
}
}
printf(”n=%d“,n);
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#define N 10
char str[N];
main()
{ int i,flag;
for(flag=1;flag==1;)
{ scanf(”%s“,str);
flag=0;
printf(”“);
}
sort(___(4)___);
for(i=0;i
printf(”%c“,str[i]);
printf(”“);
}
sort(char str[N])
{ int i,j;
char t;
for(j=1;j
for(i=0;(i