第一题:简单排序
输入
输入数据有多组,第一行是测试数据的组数T,接下的T行中,每行表示一组测试数据,每组测试数据的第一个数字为N(1<=N<=1000),接下来是N个整数。本题中,所有的整数都在32位之内。
输出
输出每组测试数据排序后的结果。每组测试数据占一行。
#include <stdio.h>
void swap(int a, int b, int arr[]) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void sel(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
swap(i, min, arr);
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int N;
scanf("%d", &N);
int arr[N];
for (int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
sel(arr, N);
for (int i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
return 0;
}
首先在主函数前定义了两个函数,第一个是swap函数用于交换两个变量的值,其中用到了一个临时变量充当交换的桥梁。第二个函数是sel函数,用于找出数组中的最小值,在这个函数中应用到了两层for循环的嵌套,外层循环用于遍历数组找出最小值,内层循环遍历数组剩下的数找出最小,再用if语句判断两层循环所找出来的最小值的大小关系再调用swap函数进行值的互换以便于按大小顺序输出。最后是主函数首先定义一个变量T,再通过一个while循环(T自减)来达到第一行的数决定后面有几行数组,后面再通过定义一个变量N来表示后面数组的长度,再循环输入,通过调用sel函数来排序,最后再循环输出得到结果
第二题:I still Love You Very Much !
输入
输入一个可能带空格的字符串s,1<=strlen(s)<=1000
输出
将该字符串中的每个字符换成二进制,每个二进制占一行。
#include <stdio.h>
#include <string.h>
void charT(char c)
{
int i;
for (i = 7; i >= 0; i--)
{
printf("%d", (c >> i) & 1);
}
printf("\n");
}
int main()
{
char s[1001];
fgets(s, sizeof(s), stdin);
int len = strlen(s);
for (int i = 0; i < len; i++)
{
charT(s[i]);
}
return 0;
}
首先,代码包含了一个名为charT
的函数,该函数用于将一个字符转换为二进制表示并打印出来。函数使用了一个循环,从最高位开始,逐位打印字符的二进制表示。
接下来,在main
函数中,代码声明了一个字符数组s
,并使用fgets
函数从标准输入中读取字符串并存储在s
中。然后,代码使用strlen
函数获取字符串的长度。
接着,代码使用一个循环遍历字符串中的每个字符,并调用charT
函数将每个字符转换为二进制表示并打印出来。
最后,代码返回0,表示程序正常结束。
第三题:判断升序
输入
第一行输入一个数 n 表示这个数组有n个数 1<=n<=20
接下来n行 每行一个数。表示数组的各个数。
输出
如果已经排序输出YES
如果没有排序输出NO
#include <stdio.h>
int main() {
int n, a;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for (int i = 0; i < n - 1; i++) {
if (arr[i] > arr[i + 1]) {
printf("NO");
return 0;
}
}
printf("YES");
return 0;
}
首先通过scanf函数输入已定义变量n的值来控制后面数据组的长度,接下来用一个for循环来循环输入数组内的数值,然后再用一个for循环遍历数组,通过if语句判断数组是否已经升序,是的话输出“YES”,否则输出“NO"。
第四题:简单的求和函数
题目描述
定义一个函数add(a,b)=a+b,请输出该函数的的值。
输入
输入数据有多组。
首先输入n,接下来输入n组add(a,b);保证a<10&&b<10.
每组数据以回车键结束。
输出
输出函数对应顺序的值,每组数据占一行。
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
char str[10];
scanf("%s", str);
int a, b;
sscanf(str, "add(%d,%d)", &a, &b);
int result = add(a, b);
printf("%d\n", result);
}
return 0;
}
首先,在main函数中定义了一个整数变量n
,并使用scanf
函数输入一个整数,并将其赋值给n
。
接下来,代码使用一个循环,从0
到n-1
遍历。在每次循环中,代码声明了一个字符数组str
,并使用scanf
函数输入一个字符串,并将其存储在str
中。
然后定义了两个整数变量a
和b
,并使用sscanf
函数从字符串str
中解析出两个整数,并将其赋值给a
和b
。
接着调用了一个名为add
的函数,将a
和b
作为参数传递给该函数,并将函数的返回值赋值给result
变量。
最后,代码使用printf
函数将result
的值打印出来,并带上一个换行符得到结果。