1、定义一个函数指针变量ptr,指向无参数、无返回值的函数。然后定义一个函数say_hi,它打印出"Hello, World!",使用函数指针调用该函数。
#include <stdio.h>// 定义函数指针变量ptr,指向无参数、无返回值的函数
void (*ptr)();void say_hi()
{printf("Hello,World!\n");
}int main()
{// 将函数指针ptr指向函数say_hiptr = say_hi; // 使用函数指针调用函数say_hiptr();return 0;
}
2、编写一个函数get_res,它接受两个整型参数和一个函数指针opt作为回调函数。get_res函数将调用回调函数对给定的两个整数进行操作,并返回结果。编写两个回调函数max和min,分别返回2个整数的最大值和最小值。在主函数中调用get_res函数来演示这两个回调函数。
#include <stdio.h>int get_res(int a,int b,int (*opt)(int,int))
{int res = opt(a,b);return res;
}int max(int x,int y)
{if(x > y){return x;}else if (x < y){return y;}else{printf("equal\n");return x;// 如果相等,返回任意一个值}
}int min(int x,int y)
{if(x > y){return y;}else if (x < y){return x;}else{printf("equal\n");return x;// 如果相等,返回任意一个值}
}int main()
{int x,y;printf("请输入x:");scanf("%d",&x);printf("请输入y:");scanf("%d",&y);int res1 = get_res(x,y,max);int res2 = get_res(x,y,min);printf("max=%d,min=%d",res1,res2);return 0;
}
3、编写一个程序,要求用户输入5个整数,将它们存储在一个数组中,然后计算并输出这5个整数的平均值。
#include <stdio.h>double avg(int arr[],int len)
{int sum =0;for(int i;i<len;i++){sum += arr[i];}return (double)sum/len;
}int main()
{printf("请输入五个整数:");int arr[5];for(int i=0;i<5;i++){scanf("%d",&arr[i]);}int len = sizeof(arr)/sizeof(arr[0]);double a = avg(arr,len);printf("arg=%.2f",a); return 0;
}
如何将上述题目中指定的数组大小修改为用户自定义大小?
#include <stdio.h>
#include <stdlib.h>double avg(int *arr,int len)
{int sum =0;for(int i;i<len;i++){sum += arr[i];}return (double)sum/len;
}int main()
{int n;printf("请输入数组大小:");scanf("%d",&n);//动态分配数组int *arr = (int *)malloc(n * sizeof(int));if(arr == NULL){printf("内存分配失败\n");return -1;}printf("请输入%d个整数:",n);for(int i=0;i<n;i++){scanf("%d",&arr[i]);}double a = avg(arr,n);printf("arg=%.2f",a); free(arr);return 0;
}
4、编写一个函数find_index,接受一个整型数组、数组的长度和一个整数作为参数,查找并返回该整数在数组中的索引位置。如果该整数不存在于数组中,则返回-1。在主函数中定义一个包含10个元素的数组,并调用find_index函数查找某个整数的索引位置并输出。
#include <stdio.h>int find_index(int *arr,int len,int a)
{for(int i=0;i<len;i++){if(arr[i] == a){return i;}}return -1;
}int main()
{int a;int arr[10] = {1,5,9,7,5,3,8,4,2,6};printf("请输入查找数字:");scanf("%d",&a);int index = find_index(arr,10,a);if(index != -1){printf("%d index = %d",a,index);}else{printf("Not Found\n");}return 0;
}
5、编写一个程序,接受用户输入的一个字符串,然后统计字符串中数字字符的个数并做正序和倒序输出。
#include <stdio.h>
#include <string.h>
#include <ctype.h>// 用于isdigit函数int main()
{ char input[100];int count = 0;// 用于统计数字字符的个数char digits[100];// 用于存储字符串中的数字字符printf("请输入字符串:");fgets(input,sizeof(input),stdin);// 读取用户输入的字符串,包括空格//fgets 函数读取用户输入的字符串,包括空格。fgets 会读取最多 sizeof(input) - 1 个字符,并自动添加字符串结束符 \0for (int i = 0; i < strlen(input); i++) {if (isdigit(input[i])) { // 检查是否是数字字符digits[count++] = input[i];}}// 输出统计结果printf("数字字符的个数: %d\n", count);// 正序输出数字字符printf("正序输出数字字符: ");for (int i = 0; i < count; i++) {printf("%c", digits[i]);}printf("\n");// 倒序输出数字字符printf("倒序输出数字字符: ");for (int i = count - 1; i >= 0; i--) {printf("%c", digits[i]);}printf("\n");return 0;
}
如果输出计算的为字符类型?
#include <stdio.h>
#include <string.h>int main() {char input[100]; // 假设用户输入的字符串长度不超过99个字符int count = 0; // 用于统计字符的个数printf("请输入一个字符串: ");fgets(input, sizeof(input), stdin); // 读取用户输入的字符串,包括空格// 移除换行符(如果存在)input[strcspn(input, "\n")] = '\0';// 统计字符个数count = strlen(input);// 输出统计结果printf("字符的个数: %d\n", count);// 正序输出字符printf("正序输出字符: ");for (int i = 0; i < count; i++) {printf("%c", input[i]);}printf("\n");// 倒序输出字符printf("倒序输出字符: ");for (int i = count - 1; i >= 0; i--) {printf("%c", input[i]);}printf("\n");return 0;
}
6、定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。
#include <stdio.h>struct Person
{char name[20];int age;
};int main()
{struct Person arr[3] = {{"alex",20},{"bob",18},{"cindy",25}};for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){printf("第 %d 个人的信息:", i + 1);printf("姓名-%s 年龄-%d\n", arr[i].name, arr[i].age);}return 0;
}