(新手向)中国大学mooc高级语言程序设计相关OJ解答(四)

这篇博客主要针对中国大学MOOC的高级语言程序设计课程中的指针和数组进阶部分进行讲解,包括统计指定单词出现次数、矩阵元素平均值计算、单词个数统计等编程题目,旨在帮助新手巩固指针使用和易错点的理解。同时,介绍了字符串长度计算和字符串交换的指针实现方法,并提供了相关学习资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要期中考了,感觉自己指针没掌握多好,就先把指针部分写了,顺便复习并且加强一下一些易错点的印象。
中国大学mooc高级语言程序设计地址:https://www.icourse163.org/course/JLU-62001

第七讲:数组进阶 & 指针初步–编程题

1统计指定单词出现的次数(10分)

题目内容:输入6个单词,查找第6个单词在前5个单词中出现的次数。

输入:6个单词

输出:一个整数(第6个单词在前5个单词中出现的次数)

样例:输入:Mary Olivia Donald Olivia Linda Olivia 输出:2

#include<stdio.h>
#include<string.h>
int main(){
	int i,t,r=0;
	char a[100],*p,*ini,*q;
    gets(a);
    p=a+strlen(a)-1;//strlen函数记录的是字符串长度,而p指向位置从a[0]开始。所以这里要-1让p指向最后一个字符
    ini=p;//记录条件单词位置
    while(*(p--)!=' ');//消去条件单词
    q=p;//记录文本位置
    for(i=0;i<=4;i++){
    	p=ini;//初始化
    	t=0;//初始化
    	while(*p!=' ')
    	{
        if(*(q--)!=*(p--))
        {
        t=1;
        break;
        }
        }//一旦有字母不相同就给标识符命1
    	if(t==0)r++;//相同就给计数器加1
    	while(*(q--)!=' ');//保证下次检测从字符开始
    	
	}
      printf("%d",r);
      return 0;
}

2求矩阵所有元素平均值(10分)

题目内容:编写程序,用指针形式访问整型数组元素,计算并输出该矩阵所有元素的算数平均值(计算结果保留2位小数)。

输入:输入矩阵的行数和列数(假定行数和列数均大于0,小于等于4),以及所有元素值。

输出:输出矩阵所有元素的算数平均值及矩阵所有元素(相邻2个数据之间空一个空格)。

样例:

输入:1 1 9(1,1为行数和列数,9为矩阵元素)

输出:9.00 9(平均值为9.00,9为矩阵元素)

#include<stdio.h>
int main(){
	int a[16]={0};//对矩阵数组初始化
	int x,y,*p,i;
	float sum=0.00;//注意平均值是浮点型
	scanf("%d%d",&x,&y);//输入行与列
	for(i=0;i<x*y;i++)//从左到右,从上到下嵌入元素
	scanf("%d",&a[i]);
	p=a;//让p指向a首地址
	for(i=0;i<x*y;i++) {
	sum+=*p;
	p++;
}
sum=sum/x/y;
printf("%.2f ",sum);
p=a;//初始化
     for(i=0;i<x*y-1;i++)//同理上面for循环
     {
     	printf("%d ",*p);
     	p++;
	 }
	printf("%d",*p);//最后一位数后面不需要空格,单独列出输出
	return 0;
    
	
}

3统计一行文本的单词个数(10分)

题目内容:编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入:输入一行字符。(假定字符串长度最大不超过99)

输出:输出单词个数。

样例:输入:C Traps and Pitfalls 输出:4

#include<stdio.h>
#include<string.h>
int main(){
	int i,t;
	char *p,a[100];
	gets(a);
	p=a;//让p指向a首地址
	while(*p!='\0')//大前提条件,\0为整条字符串结束标识
	{
		while(*p==' ')//小前提条件,一个空代表一个单词检查完毕
		{
		if(*(p-1)!=' ')t++;//必须空格前字符不是空格才给计数器加1,这里是为了防止有多个空格的情况
		p++;
		}
		p++;
	} 
	printf("%d",t+1);//最后一个单词由于结尾是\0没有计入,所以单词数量应是t+1
	return 0;
	
}

第八讲:指针应用 & 结构体–编程题

1字符串长度(10分)

问题描述:编写程序求任意给定字符串长度。

输入:从键盘随机输入一个字符串。

输出:字符串的长度。

提示:string.h文件中的gets函数可以读入中间带有空格的字符串。

样例: 输入234 输出3

#include<stdio.h>
#include<string.h>
int main(){
	char x[50];
	gets(x);
	printf("%d",strlen(x));
	return 0;
}

用string.h里的strlen函数可以直接偷懒,当然用指针再命条件也是可以的。(注意字符数组结尾是\0)

char *p=x;
int t=0;
while(*(p++)!='\0')t++;
printf("%d",t);

2交换两个字符串值(10分)

问题描述:编写程序,利用指针传递参数,实现两个字符串值的交换。

输入:从键盘随机输入两个字符串值,第一行是第一个字符串值,第二行是第二个字符串值。

输出:交换后两个字符串的值。

样例:输入 1234567

abcdefghijk

输出abcdefghijk

1234567

#include<stdio.h>
void swap(char **p,char **q){
	char *t=*p;
	*p=*q;
	*q=t;
	
}//通过对二维指针地址交换间接引用主函数里p和q来达到交换字符串目的
int main(){
	char a[50],b[50];
	gets(a);
	gets(b);
	char *p=a,*q=b;
	swap(&p,&q);//把指针p和q的地址传入函数
	puts(p);
	puts(q);
	
}

如果有对函数传入和二维指针两个概念不熟悉的朋友,可以参看以下网址。(csdn自己里面也挺多这种解析的,百度一下你就知道)
C语言函数参数的传递详解 http://c.biancheng.net/cpp/html/494.html
C语言二级指针(指向指针的指针)详解 http://c.biancheng.net/view/2016.html

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值