关于c语言问题,求解答,大家看一下

img

img

关于c语言问题,求解答,大家看一下,这两题的解题思路是什么,我不会算

第一题:2与6 因无空格等符号所以打印在了一起即26
考的静态变量,记住static 那一句对x的初始化只运行一次即可(无论incre()函数运行多少次)。
另外考运算符优先级,+高于 * = ,所以子函数内相当于 x = x * (x+1) ,所以第一次是 x=1*2=2;第二次是x=2 * 3=6

~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二题8与4即:
8
4
考了运算符优先级,++ 高于 +=
还考了全局变量、局部变量的作用范围。这个子函数内是使用的局部变量d,main内用的全局变量d
最后考后自增,将d+=p++ 改写成下面三句即可:
tmp=p;
d += tmp;
p=p+1;
同理main中的d+=a++ 这句也类似替换。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7742755
  • 这篇博客也不错, 你可以看下【C语言】文件的存放、读取、利用文件创建链表、链表排序以及将其写入文件
  • 除此之外, 这篇博客: 从键盘上输入字符,分别统计其中字母,数字,其他字符的个数,并以柱状图的形式打印。C实现中的 6.从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<cstdio>
    #include<string>
    #include<iostream>
    using namespace std;
    
    int numAlp=0,numNum=0,numOth=0; 
    
    void getNum(string str){
    	//统计字母,数字,其它字符的数量 
    	int len=str.length();
    	for(int i=0;i<len;i++){
    		if(str[i]>'a'&&str[i]<'z'||str[i]>'A'&&str[i]<'Z')
    			numAlp++;
    		else if(str[i]>'0'&&str[i]<'9')
    				numNum++;
    			else
    				numOth++;
    	}
    }
    //打印柱状图
    void print(int height,int numAlp,int numNum,int numOth){
    	for(int i=height+1;i>=1;i--){
    		//第一个柱体第i行
    		if(i>numAlp+1)
    			printf("     ");
    	    else if(i==(numAlp+1))
    				printf("  %d  ",numAlp);
    			 else
    			 	printf("*****");
    		printf("  ");
    		//第二个柱体第i行
    		if(i>numNum+1)
    			printf("     ");
    		else if(i==(numNum+1))
    				printf("  %d  ",numNum);
    			 else
    			 	printf("*****");
    		printf(" "); 
    		//第三个柱体第i行
    		if(i>numOth+1)
    			printf("     ");
    		else if(i==(numOth+1))
    				printf("  %d  ",numOth);
    			 else
    			 	printf("*****");
    	printf("\n"); 	//下一行
    	}
    	printf(" Alp    Num    Oth");	//最后一行
    }
    int main(){
    	string str;
    	getline(cin,str);	////统计字母,数字,其它字符的数量
    	getNum(str);
    	//获得图表高度 
    	int height=max(numAlp,numNum);
    	height=max(height,numOth);
    	//打印柱状图表 
    	print(++height,numAlp,numNum,numOth);
    	return 0;
    } 
    
    
  • 以下回答来自chatgpt:
    1. 解决任意重复元素问题的关键在于如何判断数组中是否存在重复元素,因此可以考虑使用哈希表来解决。具体方法如下: 先创建一个空哈希表,遍历整个数组,对于每一个元素,判断它是否已经在哈希表中出现过。如果出现过,则说明存在重复元素,直接返回 true;否则将该元素添加进哈希表中。如果遍历完整个数组,都没有发现重复元素,则返回 false。具体代码如下:
    #include <stdbool.h>
    #include <stdlib.h>
    
    #define MAX_SIZE 10000  // 哈希表的最大容量
    
    struct ListNode {
        int key;
        struct ListNode *next;
    };
    
    struct HashTable {
        struct ListNode *arr[MAX_SIZE];
    };
    
    // 初始化哈希表
    void initHashTable(struct HashTable *ht) {
        for (int i = 0; i < MAX_SIZE; i++) {
            ht->arr[i] = NULL;
        }
    }
    
    // 在哈希表中查找某个元素
    bool find(struct HashTable *ht, int key) {
        int index = abs(key) % MAX_SIZE;
        struct ListNode *p = ht->arr[index];
        while (p) {
            if (p->key == key) {
                return true;
            }
            p = p->next;
        }
        return false;
    }
    
    // 在哈希表中添加某个元素
    void add(struct HashTable *ht, int key) {
        int index = abs(key) % MAX_SIZE;
        struct ListNode *node = malloc(sizeof(struct ListNode));
        node->key = key;
        node->next = ht->arr[index];
        ht->arr[index] = node;
    }
    
    bool containsDuplicate(int* nums, int numsSize){
        struct HashTable ht;
        initHashTable(&ht);
        for (int i = 0; i < numsSize; i++) {
            if (find(&ht, nums[i])) {
                return true;
            }
            add(&ht, nums[i]);
        }
        return false;
    }
    
    1. 将字符串中的空格替换为 %20 的方法比较简单,可以先遍历字符串,统计空格的个数,然后计算出替换后的字符串长度。接下来从字符串的末尾开始倒序遍历,将原字符串中的字符依次复制到新字符串的末尾,遇到空格就替换成 %20。具体代码如下:
    #include <string.h>
    
    void replaceSpace(char* s, int length){
        int spaceCount = 0;
        for (int i = 0; i < length; i++) {
            if (s[i] == ' ') {
                spaceCount++;
            }
        }
        int newLen = length + 2 * spaceCount;
        for (int i = length - 1, j = newLen - 1; i >= 0; i--, j--) {
            if (s[i] == ' ') {
                s[j--] = '0';
                s[j--] = '2';
                s[j] = '%';
            } else {
                s[j] = s[i];
            }
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^