当前位置:文档之家› 四川省计算机二级C语言历年考题之程序填空

四川省计算机二级C语言历年考题之程序填空

三、程序填空(每空2分,共30分)1.下列程序实现将一个整数字符串转换为一个整数。

# include <string.h># include <stdio.h>int Fun(char *str){ int num,digital,len;①num=0 ;len=strlen(str);while(*str!=NULL){digital=*str-'0';for(int i=0;②i < len-1 ;i++)digital*=10;len--;③str++ ;num+=digital;}return num;}void main(){ char n[80];int number;gets(n);number=Fun(n);printf("%d\n",number);}11~999之间的数m,它满足m,m2,m3均为回文数(所谓回文数是指其各位数字左右对称的整数)。

# include <iostream.h>void main(){ int symm(long n);long m;for(m=11;m<1000;m++)if(①symm(m)&&symm(m*m)&&symm(m*m*m))cout<<"m="<<m<<"m*m="<<m*m<<"m*m*m="<<m*m*m<<endl;}int symm(long n){ long i,m;i=n; m=0;while(②i!=0 ){ ③m=m*10+i%10 ;i=i/10;}return (m==n);}3.已知head指向一个单向链表,如下图:主程序中调用add函数能求出链表中所有结点数据域的和sum并返回。

struct link{ int data;struct link *next;}int add(struct link *heak){ struct link *p;int s=0;p=①head ;while(p){ s+=②p->data ;p=③p->next ;}return (s);}void main(){ struct link *head;……/* 表示省掉的程序段,创建链表*/sum=add(head);printf("%d\n",sum);}4.下面程序功能是统计文本data.txt中各种大写字母的个数,将统计结果存放在数组count 中,(字母'A'的个数存入count[0]中,字母'B'的个数存入count[1]……依此类推),输出统计结果,一行输出5个。

请填空。

# include <stdio.h># include <stdlib.h>void main(){ FILE *fp;static int count[26]={0};int i;char ch;if(①(fp=fopen("data.txt", "r"))==NULL ){ printf("Cannot open the file!\n");exit(0);}while(! feof(fp)){ ②ch=fgetc(fp) ;if(ch>='A'&&ch<='Z') count[③ch-'A' ]++;}for(i=0;i<26;i++){if(i%5==0) printf("\n");printf("count[%d]=%-5d",count[i]);}fclose(fp);}5.下面程序的功能是输入两个字符串a和b和一个标志flag,当flag=0时,将b连在a 后;当flag=1时,将a连在b后;否则返回空指针。

请填空。

# include <stdio.h># include <string.h>char *stradd(char *s,char *t,int f){ char *p;if(f==0){ p=s;s+=strlen(s);①while(*s++=*t++ ) ;}else if(f==1){ p=t;while(*t++);t--;while(*s)*t++=*s++;②*t='\0' ;}③else p=NULL ;return p;}void main(){ char a[100],b[100],*str;int n;printf("Input string a and b:\n");gets(a);gets(b);printf("Input flag:");scanf("%d",flag);str=stradd(a,b,n);printf("Output: %s\n",str);}三、程序填空( 每空2分,共30分)下面程序是一个求数组元素之和的程序。

主程序中定义并初始化了一个数组,然后计算该数组各元素之和,并输出结果。

函数Sum计算数组元素之和。

请完成下列程序。

# include <iostream.h>int TotalSum(int [],int );void main(){ int a[5]={2,3,6,8,10};int Total;Total=①TotalSum(a,5) ;count<<"Aumof array: "②Total <<endl;}int TotalSum(int array[],int len){ int sum=0;for(int i=0;i<len;i++)③sum+=array[i] ;return sum;}输入一个8位二进制数,将其转换为十进制数输出。

# include "iostream.h"double power(double x,int n);void main(void){ int i;int value=0;char ch;cout<<"Enter an 8 bit binary number ";for(i=7;i>=0;i--){ cin>>ch;if(①ch=='1' )value+=②power(2,i) ;}cout<<"decimal value is "<<value<<endl;}double power(double x,int n){ double val=1.0;while(n--)③val=val*x ;return(val);}3. 以下程序是判断输入的字符串是否是“回文”(顺读和倒读都一样的字符串叫回文,如level),请填空。

# include "stdio.h"# include "string.h"void main(){char s[81],*p1,*p2;int n;gets(s);n=strlen(s);p1=s;p2=①s+n-1 ;while(②*p1!= '\0' ){ if(*p1!=*p2) break;else { p1++; ③p2-- ; }}if(p1<p2) printf("No\n");else printf("Yes\n");}4. 下面程序功能是检查一个4阶矩阵是否对称(即对所有的i,j,都有num[i][j]=num[j][i]),请填空。

# include <stdio.h>void main(){int num[4][4];int i,j,flag=0;printf("Input array num:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",①&num[i][j] );for(i=0;i<4;i++)for(j=0;j<4;j++)if(②num[i][j]!=num[j][i] ){ flag=1; break; }if(③flag==1 ) printf("No\n");else printf("Yes\n");}5. 下面程序的功能是从键盘输入一字符串,将该字符串与一文本文件进行比较,打印出也之相同的行的行号和内容。

void comp( )用于文件的比较,文件名用命令行参数提供。

请填空。

# include "stdio.h"# include "string.h"# include "stdlib.h"FILE *fp;void comp(char *string){ int line=0;char str[100];①while(!feof(fp) ){ fgets(str,100,fp);str[strlen(str)-1]='\0';line++;②if(strcmp(str,string)==0)printf("%d:%s\n",line,str);}}void main(int argc,char **argv){char string[100];if(argc!=2){ printf("Error \n");exit(0);}if(fp=③fopen(argv[1],"r") )==NULL){ printf("Can't open file %s!\n",argv[1]);exit(0);}printf("Please input the string:\n");gets(string);comp(string);fclose(fp);}1.以下程序能创建一张包含有4名学生信息的单向链表并输出。

# include <stdio.h># include <malloc.h># define LEN sizeof(struct student)struct student{ int data;①struct student *next ;};int num=1;struct student *creat(){ struct student *head,*p1,*p2;head=p1=p2=(struct student *)malloc(LEN);scanf("%d",&p1->data);while(num<4){ p1=(struct student *)malloc(LEN);scanf("%d",&p1->data);②p2->next=p1 ;p2=p1;num++;}p2->next=NULL;return(head);}main(){ struct student *head,*p;head=creat();p=head;if(head!=NULL)do{ printf("%d ", p->data);③p=p->next;}while(p!=NULL);}2.下面程序功能是在一个字符串中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如:cbyab 变成ycbab。

相关主题