飞道的博客

【NEFU大一下C语言阶段一考试】参考代码(带注释)

299人阅读  评论(0)

【NEFU大一下C语言阶段一考试】参考代码

挺水的,貌似比模拟考简单亿点点。
考试过程稍有不顺,万恶的360浏览器加载慢的一批,打完一题才发现那题有代码框架(大雾),devc标准没开for内部定义,又重写了一波
考试题目样例有一点点纰漏不过还好,影响不大。

大概实际花费25分钟左右?光速溜出回去洗澡干饭。

题目

随缘开的题目顺序随意啦

A.电子屏数字显示

题意
显示器
因为只有0和1,发现1的里面有20个0,那么5*5地依次统计01的个数即可。虽然看起来很长但是实际上都是复制粘贴,写起来很快。
代码

#include <stdio.h>
#include <stdlib.h>
   char zero[5][6] = {
    "11111",
                       "10001",
                       "10001",
                       "10001",
                       "11111" };
    char one[5][6]  = {
   "00001",
                       "00001",
                       "00001",
                       "00001",
                       "00001" };
void getres(char (*disp)[26],  char res[])
{
    //start
	int i=0,j=0,cnt=0,len=0;
	for(i=0;i<5;i++)
		for(j=0;j<5;j++)
			if(disp[i][j]=='0')cnt++;//统计0的个数
	if(cnt==20)res[len++]='1';//20个0就是1
	else res[len++]='0';
	cnt=0;//重置
	
	for(i=0;i<5;i++)
		for(j=5;j<10;j++)
			if(disp[i][j]=='0')cnt++;
	if(cnt==20)res[len++]='1';
	else res[len++]='0';
	cnt=0;
	
	for(i=0;i<5;i++)
		for(j=10;j<15;j++)
			if(disp[i][j]=='0')cnt++;
	if(cnt==20)res[len++]='1';
	else res[len++]='0';
	cnt=0;
	
	for(i=0;i<5;i++)
		for(j=15;j<20;j++)
			if(disp[i][j]=='0')cnt++;
	if(cnt==20)res[len++]='1';
	else res[len++]='0';
	cnt=0;
	
	for(i=0;i<5;i++)
		for(j=20;j<25;j++)
			if(disp[i][j]=='0')cnt++;
	if(cnt==20)res[len++]='1';
	else res[len++]='0';
	cnt=0;
 //end
}
int main()
{
   
    char disp[5][26];
    char res[6] = {
   0};
    int i ;
    for(i = 0; i < 5;i++)
       scanf("%s",disp[i]);
    getres(disp,  res);
    printf("%s",res);
    return 0;
}

B.停车场计数

题意
停车场停车
二维数组一维输入,输入n*m然后统计1的个数即可
代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   
	int m,n;
	while(~scanf("%d%d",&m,&n))
	{
   
		int i,cnt=0;
		for(i=0;i<m*n;i++),
		{
   
			int x;scanf("%d",&x);
			if(x==1)cnt++;
		}
		printf("%d %d %d\n",n*m,cnt,n*m-cnt);
	}
	return 0;
}

C.候选人排序

题意
经典字符串排序,甚至不用动态开辟,懒得讲了。唯一需要注意的地方是给的参数是
样例有误,表现为asf变成sf了

void candInput(char (*p)[20],int n)

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void candInput(char (*p)[20],int n)
{
   
    int i;
    for(i=0;i<n;i++)
    {
   
        gets(p[i]);
    }
}
void candSort(char (*p)[20],int n)
{
   
  //start
  char tmp[105];
  int i,j;
  for(i=0;i<n;i++)
  	for(j=i;j<n;j++)
  		if(strcmp(p[i],p[j])>0)
  		{
   
  			strcpy(tmp,p[i]);	
  			strcpy(p[i],p[j]);
  			strcpy(p[j],tmp);
		}
  //end
}
void candOutput(char (*p)[20],int n)
{
   
    int i;
   for(i=0;i<n;i++)
        printf("%s\n",p[i]);
}
int main()
{
   
    int n;
    scanf("%d ",&n);
    char cand[100][20];
     candInput(cand,n);
    candSort(cand,n);
    candOutput(cand,n);
    return 0;
}

D.计算表达式的值

题意
给字符串然后做加减法,刚开始以为要来个表达式求值+高精度,心想这波完蛋了,仔细一看是水题,1000以内,不是1000位以内!
代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
   
    char str[11] = {
   0};
    char *val[2];
    char op ;
    int res = 0,i=0 ;
    scanf("%s",str);
    //start
    int a=0,b=0;
    for(i=0;str[i];i++)
    {
   
    	if(str[i]>='0'&&str[i]<='9')a=a*10+str[i]-'0';//记录第一个数
    	else if(str[i]=='+'||str[i]=='-')//读到运算符记录并跳出
    	{
   
    		op=str[i];
    		break;
		}
	}
	i++;//i移动到运算符后1位
	for(;str[i];i++)b=b*10+str[i]-'0'; //接着读取第2个数
	if(op=='+')res=a+b;
	else res=a-b; 
    //end
    printf("%d\n",res);
    return 0;
}

E.标识符的辨别

题意
标识符
给了一堆没用的玩意,考函数调用,只要isChar就行了,怀疑数据太水hh
代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isChar(char ch)
{
   
    return ch>='a'&& ch<='z'||ch>='A'&& ch<='Z';
}
int isChar_Digit(char ch)
{
   
    return ch>='a'&& ch<='z'|| ch>='A'&& ch<='Z'|| ch>='0'&& ch<='9';
}
int isId(char *s)
{
   
   //start
   if(isChar(s[0]))return 1;
   else return 0;
   //end
}
int main()
{
   
    char s[100];
    while(scanf("%s",s)!=EOF)
    {
   
      if(isId(s))
        printf("%s is ID!\n",s);
      else
        printf("%s is not ID!\n",s);
    }
    return 0;
}

转载:https://blog.csdn.net/qq_39354847/article/details/116492577
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场