江苏省C语言二级备考(8/20)

本文介绍了现代信息技术的基础、核心和支柱,包括电子技术、数字计算机和通信技术。讨论了Power处理器在高性能计算中的应用,并讲解了8位二进制表示的整数范围。接着,探讨了do-while语句的执行特性以及strcat函数在字符串合并中的作用。在代码部分,展示了如何识别和修正编程中常见错误,以及如何实现约瑟夫环问题的算法,该问题涉及数组操作和循环控制。
摘要由CSDN通过智能技术生成

目录

理论题

1.现代信息技术

2.Power处理器:用于超级计算机、服务器、工作站

3.  8位二进制表示的整数范围

非理论题

1.do-while语句的循环体至少会被执行一次

2.strcat函数(s1,s2)的作用是合并两个char 字符s1+s2

代码题

1.改错题:几个经典错点(简单却易错)

2.自己写:模拟约瑟夫环问题


理论题

1.现代信息技术

电子技术,尤其是微电子技术为基础
数字技术(计算机)为核心
通信技术支柱

  我国正在大力推动新型工业化、信息化、城镇化、农业现代化同步发展


2.Power处理器:用于超级计算机、服务器、工作站

CPU系列产品

Power处理器

Intel处理器
ARM处理器
AMD处理器

3.  8位二进制表示的整数范围

有符号

-128  ,127

无符号0  ,255

非理论题

1.do-while语句的循环体至少会被执行一次

因为它是先执行循环体,再判断条件

关于循环体的一些判断
do-while语句的循环体至少会被执行一次
while语句的循环体至少会被执行一次×
for语句的循环体至少会被执行一次×
只能用do、do-while 或 for 语句实现×

2.strcat函数(s1,s2)的作用是合并两个char 字符s1+s2


代码题

1.改错题:几个经典错点(简单却易错)

【程序功能】
将一个仅由数字及小写字母组成的字符串中的字符从左向右按下列规则重新排列:小写字母从字符串的左端开始向右摆放,数字从字符串的右端开始向左摆放。
【测试数据与运行结果】
测试数据:"g1bc3d24fa
输出: gbcdfa4231

#include <string.h>
#include <stdio.h>
#include<conio.h>
void adjust(char *str)
{
    int i,j,k,len;
    char c;
    len=strlen(str);
    i=0; j=0;
    for(i<len-j)       
    {
        c=str[i];
        if('a'<=c<='z')        
            i++;
        else
        {
            for(k=i+1;k<len-j; k++)  //放号了j个,就不用管j个
                str[k-1]=str[k];
            str[len-1]=c;        //达到数字逆序排列的效果
            j++;
        }
    }
}
int main()
{
    char str[20]="g1bc3d24fa";
    adjust(str[20]);   
    puts(str);
    getch();
    return 0;
}

这些问题很经典。(简单却易错)

【1】:for(;i<len-j;)循环前后写了i=0和i++,故表达式1和表达式3可以隐去,但表达式2是绝对不能省略的

也可以改成while(i<len-j)

【2】:‘a' <= c && c <= 'z'

为了满足条件,这中间的代码是想  把字符元素往前面提 ,把数字元素往往后移动一位。来完成题目要的功能

j是统计数字元素的个数,

【3】:str[len-(j+1)] = c  

【4】:str 通过调用的函数看出来str是数组了,那么adjust那里就不需要中括号和数字了。毕竟要的不是元素


2.自己写:模拟约瑟夫环问题

【编程要求】

  • 编写 void joseph(int a[],int b[],int n,int m)函数。

a指向的数组前n个元素中存储了n个人的编号(1,2…,n)。n个人围坐成一圈,从编号为1的人开始报数(从1报到m),凡报到m的人出列。将每次出列人的编号依次保存在b指向的数组中,直到最后一个人出列为止

  • 编写main函数。

声明2个一维数组并用{1,2,3,4,5,6,7,8,9,10}初始化其中1个数组。声明2个变量n、m并用测试数据初始化。用2个数组和2个变量作实参调用 joseph函数。将函数处理后得到的n个出列人的编号输出到显示器屏幕及文件myf2out中。最后将考生本人准考证号输出到文件2,out中

 

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

void joseph(int a[],int b[],int n,int m)
{
	int i ,j,k = 0;//i:数组a的下标;j:统计1-m的人数 ; k:数组b的下标 
	
	for(i = 0;i < n ;)
	{
		if( i == 0 && a[0] != -1 ) 
		{
			for(j = 0;j < m-1;j++)
			{
				i++;
				 if(i == n) i = 0;
				 if(a[i] == -1)  j--;//让其多循环一次
			}
		}	
		else
		{
			for(j = 0;j < m;j++)
			{
				i++;
			 	if(i == n) i = 0;
			 	if(a[i] == -1)  j--;//让其多循环一次 
			}
		}
		//出局的人放到数组b中
		b[k++]=a[i];
		a[i] = -1;
		if (k == n)break; 
	}
 } 
 
 int main()
 {
 	int n = 10,m = 3;
 	int s1[] = {1,2,3,4,5,6,7,8,9,10},s2[10];
 	joseph(s1,s2,n,m); 
 	
 	int i;
 	for(i = 0;i < 10;i++)
 	{
 		printf("%d ",s2[i]);
	 }
	 printf("\n");
	
	char testid[20];
	printf("请输入准考证号:");
	gets(testid);

	FILE *fp;
	fp = fopen("myf2.out","w");
	
	for(i = 0;i < 10;i++)
 	{
 		fprintf(fp,"%d",s2[i]);
	 }
 	
 	for(i = 0;testid[i] != '\0';i++)
 	{
 		fprintf(fp,"%d",testid);
	 }
 	return 0;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值